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 _attackAreaPointMap = new Dictionary(); 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(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; } } } }