OldBlueWater/BlueWater/Assets/02.Scripts/HouseInfo.cs
NTG_Lenovo f7b7eff9f0 IDamageable 인터페이스에 Die함수 추가
+ 기본 프리팹 변경에 맞게 수정
+ 캐릭터들 Die 로직 변경
2023-10-20 15:10:48 +09:00

74 lines
1.8 KiB
C#

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, float attackerShieldPenetrationRate = default, 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
}
}