117 lines
2.5 KiB
C#
117 lines
2.5 KiB
C#
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
public class PlayerHealth : MonoBehaviour
|
|
{
|
|
public float maxHealth = 200f;
|
|
|
|
public float CurrentHealth { get; private set; }
|
|
public bool IsDead { get; private set; }
|
|
|
|
private HUDController _hud;
|
|
private FPSController _controller;
|
|
private WeaponSwitcher _weaponSwitcher;
|
|
|
|
public void Initialize(HUDController hud, FPSController controller, WeaponSwitcher weaponSwitcher)
|
|
{
|
|
_hud = hud;
|
|
_controller = controller;
|
|
_weaponSwitcher = weaponSwitcher;
|
|
CurrentHealth = maxHealth;
|
|
_hud?.SetHealth(CurrentHealth, maxHealth);
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
CurrentHealth = maxHealth;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (_hud == null)
|
|
{
|
|
_hud = FindObjectOfType<HUDController>();
|
|
}
|
|
|
|
if (_controller == null)
|
|
{
|
|
_controller = GetComponent<FPSController>();
|
|
}
|
|
|
|
if (_weaponSwitcher == null)
|
|
{
|
|
_weaponSwitcher = GetComponent<WeaponSwitcher>();
|
|
}
|
|
|
|
if (CurrentHealth <= 0f)
|
|
{
|
|
CurrentHealth = maxHealth;
|
|
}
|
|
|
|
_hud?.SetHealth(CurrentHealth, maxHealth);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!IsDead)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (Input.GetKeyDown(KeyCode.R))
|
|
{
|
|
Time.timeScale = 1f;
|
|
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
|
|
}
|
|
}
|
|
|
|
public void TakeDamage(float amount)
|
|
{
|
|
if (IsDead)
|
|
{
|
|
return;
|
|
}
|
|
|
|
CurrentHealth = Mathf.Clamp(CurrentHealth - amount, 0f, maxHealth);
|
|
_hud?.SetHealth(CurrentHealth, maxHealth);
|
|
_hud?.ShowDamageFlash();
|
|
|
|
if (CurrentHealth <= 0f)
|
|
{
|
|
Die();
|
|
}
|
|
}
|
|
|
|
public bool Heal(int amount)
|
|
{
|
|
if (IsDead || CurrentHealth >= maxHealth)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
CurrentHealth = Mathf.Clamp(CurrentHealth + amount, 0f, maxHealth);
|
|
_hud?.SetHealth(CurrentHealth, maxHealth);
|
|
return true;
|
|
}
|
|
|
|
private void Die()
|
|
{
|
|
IsDead = true;
|
|
Time.timeScale = 0f;
|
|
|
|
if (_controller != null)
|
|
{
|
|
_controller.SetLookEnabled(false);
|
|
_controller.enabled = false;
|
|
_controller.SetCursorLocked(false);
|
|
}
|
|
|
|
if (_weaponSwitcher != null)
|
|
{
|
|
_weaponSwitcher.enabled = false;
|
|
}
|
|
|
|
_hud?.ShowDeathScreen();
|
|
}
|
|
}
|