Files
PIM_Laba3/Assets/Scripts/PlayerHealth.cs
T
2026-05-25 23:10:02 +03:00

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();
}
}