using System.Collections.Generic; using Cinemachine; using Sirenix.OdinInspector; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { public class IslandInfo : MonoBehaviour { #region Property and variable [field: SerializeField] public string IslandName { get; private set; } [field: SerializeField] public List HouseList { get; private set; } [field: SerializeField] public List TowerList { get; private set; } [field: SerializeField] public List UnitList { get; private set; } [field: SerializeField] public List EnemyList { get; private set; } [field: SerializeField] public List ExceptHouseList { get; private set; } [field: SerializeField] public List TargetAllList { get; private set; } [field: SerializeField] public CinemachineFreeLook IslandCam { get; private set; } #endregion #region Unity built-in Function private void Awake() { InitIslandInfo(); } #endregion #region Custom function [GUIColor(0, 1, 0)] [Button("섬 정보 추출")] private void InitIslandInfo() { HouseList = new List(5); var houses = transform.Find("Houses"); if (houses && houses.gameObject.activeSelf) { foreach (Transform house in houses) { // if (!house.CompareTag("House") || !house.gameObject.activeSelf) continue; // // var houseInfo = house.GetComponent(); // houseInfo.SetIslandInfo(this); // HouseList.Add(houseInfo.transform); } } TowerList = new List(20); var towers = transform.Find("Towers"); if (towers && towers.gameObject.activeSelf) { foreach (Transform tower in towers) { if (!tower.CompareTag("Tower") || !tower.gameObject.activeSelf) continue; var towerAi = tower.GetComponent(); towerAi.SetDefendingIslandInfo(this); TowerList.Add(towerAi.transform); } } UnitList = new List(20); EnemyList = new List(UnitList.Capacity * 16); var units = transform.Find("Units"); if (units && units.gameObject.activeSelf) { foreach (Transform unit in units) { if (!unit.CompareTag("Unit") || !unit.gameObject.activeSelf) continue; UnitList.Add(unit.GetComponent()); } foreach (var unit in UnitList) { foreach (Transform enemy in unit.transform) { if (!enemy.gameObject.activeSelf) continue; var combatAi = enemy.GetComponent(); combatAi.SetDefendingIslandInfo(this); EnemyList.Add(enemy); } } } ExceptHouseList = new List(TowerList.Capacity + EnemyList.Capacity); foreach (var enemy in EnemyList) { ExceptHouseList.Add(enemy); } foreach (var tower in TowerList) { ExceptHouseList.Add(tower); } TargetAllList = new List(HouseList.Capacity + TowerList.Capacity + EnemyList.Capacity); foreach (var enemy in EnemyList) { TargetAllList.Add(enemy); } foreach (var house in HouseList) { TargetAllList.Add(house); } foreach (var tower in TowerList) { TargetAllList.Add(tower); } IslandCam = transform.Find("IslandCam").GetComponent(); } public void RemoveListElement(List list, Transform element) { if (list.Contains(element)) { list.Remove(element); } if (TargetAllList.Contains(element)) { TargetAllList.Remove(element); } } #endregion } }