StaminaBar.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using UnityEditor;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. [ExecuteInEditMode()]
  5. public class StaminaBar : MonoBehaviour
  6. {
  7. public PlayerController playerController;
  8. public Slider staminaBar;
  9. public float maxStamina = 100f;
  10. public float currentStamina;
  11. public float drainRate = 20f;
  12. public float regenRate = 5f;
  13. public float regenDelay = 20f;
  14. private float lastStaminaUseTime;
  15. private void Start()
  16. {
  17. playerController = GameObject.Find("Player").GetComponent<PlayerController>();
  18. if (playerController == null) Debug.LogError("StaminaBar: Can't find playerController");
  19. currentStamina = maxStamina;
  20. staminaBar.maxValue = maxStamina;
  21. staminaBar.value = currentStamina;
  22. }
  23. private void Update()
  24. {
  25. if (playerController.isRunning && currentStamina > 0)
  26. {
  27. currentStamina -= drainRate * Time.deltaTime;
  28. lastStaminaUseTime = Time.time;
  29. if(currentStamina < 0)
  30. {
  31. currentStamina = 0;
  32. }
  33. }
  34. else if(currentStamina < maxStamina && !playerController.isRunning)
  35. {
  36. if(Time.time >= lastStaminaUseTime + regenDelay)
  37. {
  38. currentStamina += regenRate * Time.deltaTime;
  39. if(currentStamina > maxStamina)
  40. {
  41. currentStamina = maxStamina;
  42. }
  43. }
  44. }
  45. staminaBar.value = currentStamina;
  46. playerController.canRun = currentStamina <= 0 ? false : true;
  47. }
  48. }