using UnityEngine; using UnityEngine.Events; using System; using Cinemachine; public class HealthComponent : MonoBehaviour { [SerializeField] float startHealth = 100; public float currentHealth { get; private set; } public static event Action OnHealthChangeAtPos; public float StartHealth => startHealth; public UnityEvent OnHealthZero; public UnityEvent OnHealthChange; public UnityEvent OnHealthChange2; public UnityEvent OnHealthChange3; void Awake() { currentHealth = startHealth; } public void TakeDamage(float damage) { OnHealthChange?.Invoke(currentHealth, currentHealth - damage); OnHealthChange2?.Invoke(currentHealth - damage); OnHealthChange3.Invoke(); OnHealthChangeAtPos?.Invoke(transform.position, currentHealth - damage); currentHealth -= damage; currentHealth = (int)Mathf.Clamp(currentHealth, 0f, startHealth); if (currentHealth == 0) OnHealthZero?.Invoke(); } public void SimpleKill() { CameraShake.instance.ShakeCamera(0.5f, 0.2f); var cam = CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.Priority -= 1; CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.VirtualCameraGameObject.GetComponent().m_Offset.z = TowerCam.instance.originalOffset; HideWall.instance.target = null; Destroy(gameObject); } }