NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Area/AttackArea/AttackAreaManager.cs

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;
}
}
}
}