|
|
@ -4,29 +4,39 @@ public class StaminaManager : MonoBehaviour
|
|
|
|
{
|
|
|
|
{
|
|
|
|
[SerializeField] private float maxStamina = 100f;
|
|
|
|
[SerializeField] private float maxStamina = 100f;
|
|
|
|
[SerializeField] private float staminaRegenRate = 10f;
|
|
|
|
[SerializeField] private float staminaRegenRate = 10f;
|
|
|
|
[SerializeField] private float staminaRegenDelay = 1f;
|
|
|
|
[SerializeField] private float staminaRegenDelay = 2f;
|
|
|
|
|
|
|
|
|
|
|
|
private float currentStamina;
|
|
|
|
private float currentStamina;
|
|
|
|
private float staminaRegenTimer;
|
|
|
|
private float staminaRegenTimer;
|
|
|
|
|
|
|
|
private bool isConsumingStamina;
|
|
|
|
|
|
|
|
|
|
|
|
public float CurrentStamina => currentStamina;
|
|
|
|
public float CurrentStamina => currentStamina;
|
|
|
|
public float MaxStamina => maxStamina;
|
|
|
|
public float MaxStamina => maxStamina;
|
|
|
|
|
|
|
|
public bool IsStaminaDepleted => currentStamina <= 0;
|
|
|
|
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
private void Start()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
currentStamina = maxStamina;
|
|
|
|
currentStamina = maxStamina;
|
|
|
|
|
|
|
|
Debug.Log($"[StaminaManager] Stamina initialized. Max Stamina: {maxStamina}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
private void Update()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (staminaRegenTimer > 0)
|
|
|
|
if (isConsumingStamina)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
staminaRegenTimer -= Time.deltaTime;
|
|
|
|
staminaRegenTimer = staminaRegenDelay; // Reset regen delay if consuming stamina
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (currentStamina < maxStamina)
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
currentStamina += staminaRegenRate * Time.deltaTime;
|
|
|
|
// Start regen countdown after sprinting stops
|
|
|
|
currentStamina = Mathf.Min(currentStamina, maxStamina);
|
|
|
|
if (staminaRegenTimer > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
staminaRegenTimer -= Time.deltaTime;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (currentStamina < maxStamina)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
RegenerateStamina();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -35,9 +45,45 @@ public class StaminaManager : MonoBehaviour
|
|
|
|
if (currentStamina >= amount)
|
|
|
|
if (currentStamina >= amount)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
currentStamina -= amount;
|
|
|
|
currentStamina -= amount;
|
|
|
|
staminaRegenTimer = staminaRegenDelay;
|
|
|
|
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;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Debug.Log("[StaminaManager] Not enough stamina!");
|
|
|
|
return false;
|
|
|
|
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!");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|