Kursach_StealthAction/Assets/Scripts/PlayerHealthUI.cs
2026-10-19 20:14:24 +03:00

74 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.UI;
public class PlayerHealthUI : MonoBehaviour
{
[Header("Ссылки")]
public PlayerHealth playerHealth;
public Slider healthSlider;
public Image healthFillImage;
public Text healthText;
[Header("Настройки визуала")]
public bool smoothTransition = true;
public float smoothSpeed = 5f;
public bool changeColorWithHealth = true;
public Color highHealthColor = new Color(0.2f, 0.85f, 0.3f, 1f); // Зеленый
public Color lowHealthColor = new Color(0.9f, 0.2f, 0.2f, 1f); // Красный
private float currentFill = 1f;
void Start()
{
if (playerHealth == null)
{
playerHealth = FindAnyObjectByType<PlayerHealth>();
}
UpdateHealthUI(true);
}
void Update()
{
UpdateHealthUI(false);
}
private void UpdateHealthUI(bool immediate)
{
if (playerHealth == null) return;
float maxHp = playerHealth.maxHealth;
float currentHp = Mathf.Max(0f, playerHealth.CurrentHealth);
float targetFill = maxHp > 0f ? currentHp / maxHp : 0f;
if (immediate || !smoothTransition)
{
currentFill = targetFill;
}
else
{
currentFill = Mathf.MoveTowards(currentFill, targetFill, smoothSpeed * Time.deltaTime);
}
if (healthSlider != null)
{
healthSlider.value = currentFill;
}
if (healthFillImage != null)
{
healthFillImage.fillAmount = currentFill;
if (changeColorWithHealth)
{
healthFillImage.color = Color.Lerp(lowHealthColor, highHealthColor, currentFill);
}
}
if (healthText != null)
{
healthText.text = $"{Mathf.CeilToInt(currentHp)} / {Mathf.CeilToInt(maxHp)}";
}
}
}