2026-05-19 hp바 추가
This commit is contained in:
55
Assets/02_Scripts/Combat/Health.cs
Normal file
55
Assets/02_Scripts/Combat/Health.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class Health : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private int _maxHealth = 30;
|
||||
private int _currentHealth;
|
||||
|
||||
public int MaxHealth => _maxHealth;
|
||||
public int CurrentHealth => _currentHealth;
|
||||
public float Ratio => _maxHealth > 0 ? (float)_currentHealth / _maxHealth : 0f;
|
||||
public bool IsDead => _currentHealth <= 0;
|
||||
|
||||
public event Action<int, int> OnHealthChanged;
|
||||
public event Action OnDied;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_currentHealth = _maxHealth;
|
||||
}
|
||||
|
||||
public void TakeDamage(int amount)
|
||||
{
|
||||
if (amount <= 0 || IsDead) return;
|
||||
|
||||
int previous = _currentHealth;
|
||||
_currentHealth = Mathf.Max(_currentHealth - amount, 0);
|
||||
OnHealthChanged?.Invoke(_currentHealth, _maxHealth);
|
||||
|
||||
if (_currentHealth <= 0 && previous > 0)
|
||||
OnDied?.Invoke();
|
||||
}
|
||||
|
||||
public void Heal(int amount)
|
||||
{
|
||||
if (amount <= 0 || IsDead) return;
|
||||
|
||||
_currentHealth = Mathf.Min(_currentHealth + amount, _maxHealth);
|
||||
OnHealthChanged?.Invoke(_currentHealth, _maxHealth);
|
||||
}
|
||||
|
||||
public void ResetHealth()
|
||||
{
|
||||
_currentHealth = _maxHealth;
|
||||
OnHealthChanged?.Invoke(_currentHealth, _maxHealth);
|
||||
}
|
||||
|
||||
public void SetMaxHealth(int newMax, bool fill = true)
|
||||
{
|
||||
_maxHealth = Mathf.Max(newMax, 1);
|
||||
if (fill) _currentHealth = _maxHealth;
|
||||
else _currentHealth = Mathf.Min(_currentHealth, _maxHealth);
|
||||
OnHealthChanged?.Invoke(_currentHealth, _maxHealth);
|
||||
}
|
||||
}
|
||||
2
Assets/02_Scripts/Combat/Health.cs.meta
Normal file
2
Assets/02_Scripts/Combat/Health.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bcfe85aa11323ce47923dabc579cab00
|
||||
Reference in New Issue
Block a user