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 (isConsumingStamina)
{
staminaRegenTimer = staminaRegenDelay; // Reset regen delay if consuming stamina
}
else
{
// Start regen countdown after sprinting stops
if (staminaRegenTimer > 0) if (staminaRegenTimer > 0)
{ {
staminaRegenTimer -= Time.deltaTime; staminaRegenTimer -= Time.deltaTime;
} }
else if (currentStamina < maxStamina) else if (currentStamina < maxStamina)
{ {
currentStamina += staminaRegenRate * Time.deltaTime; RegenerateStamina();
currentStamina = Mathf.Min(currentStamina, maxStamina); }
} }
} }
@ -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,7 +545,7 @@ 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))
{ {
@ -555,29 +555,29 @@ namespace Unity.BossRoom.Gameplay.UserInput
} }
} }
else else
{
if (isSprinting)
{ {
StopSprintServerRPC(); StopSprintServerRPC();
staminaManager.StopConsuming(); // Allows regen after delay
} }
} }
} else if (isSprinting) // Sprint key released
else if (isSprinting)
{ {
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);
} }

Loading…
Cancel
Save