using Sirenix.OdinInspector; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { [SelectionBase] public class HouseInfo : MonoBehaviour, IDamageable { #region Property and variable [SerializeField] private IslandInfo islandInfo; [SerializeField] private float maxHp = 500f; [DisableIf("@true")] [SerializeField] private float currentHp; #endregion #region Unity built-in function private void Awake() { SetCurrentHp(maxHp); } private void OnDisable() { RemoveIslandInfo(); } #endregion #region Interface property and function public void TakeDamage(float attackerPower, Vector3? attackPos = null) { var changeHp = Mathf.Max(currentHp - attackerPower, 0); SetCurrentHp(changeHp); // 건물 파괴 if (changeHp == 0f) { Die(); return; } } public void Die() { Destroy(gameObject); RemoveIslandInfo(); } #endregion #region Custom function private void RemoveIslandInfo() { if (islandInfo == null) return; islandInfo.RemoveListElement(islandInfo.HouseList, transform); islandInfo.RemoveListElement(islandInfo.TargetAllList, transform); } public float GetCurrentHp() => currentHp; public void SetCurrentHp(float value) => currentHp = value; public void SetIslandInfo(IslandInfo island) => islandInfo = island; #endregion } }