66 lines
2.1 KiB
C#
66 lines
2.1 KiB
C#
using System.Collections.Generic;
|
|
using Gameplay.Level;
|
|
using Gameplay.Unit;
|
|
using PhxhSDK;
|
|
using UnityEngine;
|
|
using Constants = Framework.Constants;
|
|
namespace Gameplay.Area.AttackArea
|
|
{
|
|
public class AttackAreaManager
|
|
{
|
|
|
|
private Dictionary<int, AttackAreaPoint> _attackAreaPointMap = new Dictionary<int, AttackAreaPoint>();
|
|
|
|
public RaycastHit[] raycastHits = new RaycastHit[10];
|
|
public int hitMask;
|
|
|
|
public GameObject rootObj;
|
|
|
|
public AttackAreaManager()
|
|
{
|
|
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
hitMask = 1 << LayerMask.NameToLayer("BlockAttack");
|
|
rootObj = new GameObject("[BlockAttackArea]");
|
|
var allCell = LevelManager.Instance.CurrentLevel.Map.MapData.BlocksData;
|
|
for (int i = 0; i < allCell.Count; i++)
|
|
{
|
|
var cell = allCell[i];
|
|
if (cell.GetTerrainTypeProperty().banAttack)
|
|
{
|
|
var worldPos = AreaManager.instance.GetCellPosByIndex(i);
|
|
var sampleObj = AssetManager.Instance.GetPreLoadResult<GameObject>(Constants.FIGHT_CELL_COLLIDER_PATH);
|
|
var instanceObj = Object.Instantiate(sampleObj, rootObj.transform);
|
|
instanceObj.transform.position = worldPos;
|
|
}
|
|
}
|
|
Physics.Simulate(0.16f);
|
|
}
|
|
|
|
public AttackAreaData GetAttackArea(int centerCellIndex,
|
|
int attackDistance)
|
|
{
|
|
if (_attackAreaPointMap.TryGetValue(centerCellIndex, out var attackAreaPoint))
|
|
{
|
|
return attackAreaPoint.GetAttackArea(attackDistance);
|
|
}
|
|
var newAttackAreaPoint = new AttackAreaPoint(centerCellIndex);
|
|
_attackAreaPointMap.Add(centerCellIndex, newAttackAreaPoint);
|
|
return newAttackAreaPoint.GetAttackArea(attackDistance);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (rootObj != null)
|
|
{
|
|
Object.Destroy(rootObj);
|
|
rootObj = null;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|