OldBlueWater/BlueWater/Assets/02.Scripts/IslandInfo.cs

144 lines
4.6 KiB
C#
Raw Normal View History

using System.Collections.Generic;
2023-09-19 16:58:52 +00:00
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<Transform> HouseList { get; private set; }
[field: SerializeField] public List<Transform> TowerList { get; private set; }
2023-09-12 14:46:57 +00:00
[field: SerializeField] public List<EnemyUnit> UnitList { get; private set; }
[field: SerializeField] public List<Transform> EnemyList { get; private set; }
[field: SerializeField] public List<Transform> ExceptHouseList { get; private set; }
[field: SerializeField] public List<Transform> TargetAllList { get; private set; }
2023-09-11 07:16:02 +00:00
2023-09-19 16:58:52 +00:00
[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<Transform>(5);
var houses = transform.Find("Houses");
if (houses && houses.gameObject.activeSelf)
{
2023-08-30 05:57:45 +00:00
foreach (Transform house in houses)
{
if (!house.CompareTag("House") || !house.gameObject.activeSelf) continue;
2023-08-30 05:57:45 +00:00
var houseInfo = house.GetComponent<HouseInfo>();
2023-09-04 07:31:04 +00:00
houseInfo.SetIslandInfo(this);
2023-08-30 05:57:45 +00:00
HouseList.Add(houseInfo.transform);
}
}
TowerList = new List<Transform>(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>();
towerAi.SetDefendingIslandInfo(this);
TowerList.Add(towerAi.transform);
}
}
2023-09-12 14:46:57 +00:00
UnitList = new List<EnemyUnit>(20);
EnemyList = new List<Transform>(UnitList.Capacity * 16);
var units = transform.Find("Units");
if (units && units.gameObject.activeSelf)
{
2023-08-30 05:57:45 +00:00
foreach (Transform unit in units)
{
if (!unit.CompareTag("Unit") || !unit.gameObject.activeSelf) continue;
2023-09-12 14:46:57 +00:00
UnitList.Add(unit.GetComponent<EnemyUnit>());
2023-08-30 05:57:45 +00:00
}
foreach (var unit in UnitList)
{
foreach (Transform enemy in unit.transform)
{
if (!enemy.gameObject.activeSelf) continue;
var combatAi = enemy.GetComponent<CombatAi>();
combatAi.SetDefendingIslandInfo(this);
EnemyList.Add(enemy);
}
}
}
ExceptHouseList = new List<Transform>(TowerList.Capacity + EnemyList.Capacity);
foreach (var enemy in EnemyList)
{
ExceptHouseList.Add(enemy);
}
foreach (var tower in TowerList)
{
ExceptHouseList.Add(tower);
}
TargetAllList = new List<Transform>(HouseList.Capacity + TowerList.Capacity + EnemyList.Capacity);
foreach (var enemy in EnemyList)
{
TargetAllList.Add(enemy);
}
foreach (var house in HouseList)
{
TargetAllList.Add(house);
}
2023-09-19 16:58:52 +00:00
foreach (var tower in TowerList)
{
TargetAllList.Add(tower);
}
2023-09-19 16:58:52 +00:00
IslandCam = transform.Find("IslandCam").GetComponent<CinemachineFreeLook>();
}
public void RemoveListElement(List<Transform> list, Transform element)
{
if (list.Contains(element))
{
list.Remove(element);
}
if (TargetAllList.Contains(element))
{
TargetAllList.Remove(element);
}
}
#endregion
}
}