using UnityEngine; public class StaminaManager : MonoBehaviour { [SerializeField] private float maxStamina = 100f; [SerializeField] private float staminaRegenRate = 10f; [SerializeField] private float staminaRegenDelay = 2f; private float currentStamina; private float staminaRegenTimer; private bool isConsumingStamina; public float CurrentStamina => currentStamina; public float MaxStamina => maxStamina; public bool IsStaminaDepleted => currentStamina <= 0; private void Start() { currentStamina = maxStamina; Debug.Log($"[StaminaManager] Stamina initialized. Max Stamina: {maxStamina}"); } private void Update() { if (isConsumingStamina) { staminaRegenTimer = staminaRegenDelay; // Reset regen delay if consuming stamina } else { // Start regen countdown after sprinting stops if (staminaRegenTimer > 0) { staminaRegenTimer -= Time.deltaTime; } else if (currentStamina < maxStamina) { RegenerateStamina(); } } } public bool TryConsume(float amount) { if (currentStamina >= amount) { currentStamina -= amount; isConsumingStamina = true; Debug.Log($"[StaminaManager] Consumed {amount} stamina. Remaining: {currentStamina}/{maxStamina}"); if (currentStamina <= 0) { currentStamina = 0; Debug.Log("[StaminaManager] Stamina depleted! Stopping consumption."); StopConsuming(); } return true; } Debug.Log("[StaminaManager] Not enough stamina!"); return false; } public void StartConsuming() { isConsumingStamina = true; staminaRegenTimer = staminaRegenDelay; // Reset regen delay when consumption starts } public void StopConsuming() { isConsumingStamina = false; // Stop consuming and allow regen countdown staminaRegenTimer = staminaRegenDelay; // Ensure regen starts after delay Debug.Log("[StaminaManager] Stopped consuming. Regen will start after delay."); } private void RegenerateStamina() { float previousStamina = currentStamina; currentStamina += staminaRegenRate * Time.deltaTime; currentStamina = Mathf.Min(currentStamina, maxStamina); Debug.Log($"[StaminaManager] Regenerating: {previousStamina} → {currentStamina}/{maxStamina}"); if (currentStamina == maxStamina) { Debug.Log("[StaminaManager] Fully recovered!"); } } }