Fixed stamina bug

dev-hazim
Hazim Bin Ijaz 3 days ago
parent 6e26a340c8
commit d527a8236d

@ -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!");
}
}
} }

@ -545,8 +545,8 @@ namespace Unity.BossRoom.Gameplay.UserInput
{ {
if (Input.GetKey(KeyCode.LeftShift)) if (Input.GetKey(KeyCode.LeftShift))
{ {
float staminaCost = 50 * Time.deltaTime; float staminaCost = 50f * Time.deltaTime;
if (staminaManager.TryConsume(staminaCost)) if (staminaManager.TryConsume(staminaCost))
{ {
if (!isSprinting) if (!isSprinting)
@ -556,31 +556,31 @@ namespace Unity.BossRoom.Gameplay.UserInput
} }
else else
{ {
if (isSprinting) StopSprintServerRPC();
{ staminaManager.StopConsuming(); // Allows regen after delay
StopSprintServerRPC();
}
} }
} }
else if (isSprinting) else if (isSprinting) // Sprint key released
{ {
StopSprintServerRPC(); StopSprintServerRPC();
staminaManager.StopConsuming(); // Allows regen after delay
} }
} }
[ServerRpc] [ServerRpc]
private void StartSprintServerRPC() private void StartSprintServerRPC()
{ {
isSprinting = true;
m_ServerCharacter.Movement.SetSpeedModifier(2.5f); m_ServerCharacter.Movement.SetSpeedModifier(2.5f);
} }
[ServerRpc] [ServerRpc]
private void StopSprintServerRPC() private void StopSprintServerRPC()
{ {
isSprinting = false;
m_ServerCharacter.Movement.SetSpeedModifier(1f); m_ServerCharacter.Movement.SetSpeedModifier(1f);
} }
private void ActivateAbilityIfAllowed(string abilityKey, string errorMessage = null) private void ActivateAbilityIfAllowed(string abilityKey, string errorMessage = null)
{ {

Loading…
Cancel
Save