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 staminaRegenRate = 10f;
[SerializeField] private float staminaRegenDelay = 1f;
[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 (staminaRegenTimer > 0)
if (isConsumingStamina)
{
staminaRegenTimer -= Time.deltaTime;
staminaRegenTimer = staminaRegenDelay; // Reset regen delay if consuming stamina
}
else if (currentStamina < maxStamina)
else
{
currentStamina += staminaRegenRate * Time.deltaTime;
currentStamina = Mathf.Min(currentStamina, maxStamina);
// Start regen countdown after sprinting stops
if (staminaRegenTimer > 0)
{
staminaRegenTimer -= Time.deltaTime;
}
else if (currentStamina < maxStamina)
{
RegenerateStamina();
}
}
}
@ -35,9 +45,45 @@ public class StaminaManager : MonoBehaviour
if (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;
}
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!");
}
}
}

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

Loading…
Cancel
Save