1
0

Stamina.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.ComponentModel;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. public class Stamina : MonoBehaviour
  5. {
  6. public float maxStamina;
  7. private float currentStamina;
  8. bool canSprint = true;
  9. bool isSprinting = false;
  10. public Slider staminaBar;
  11. public Gradient staminaBarGradient;
  12. private Image fillImage;
  13. // Start is called once before the first execution of Update after the MonoBehaviour is created
  14. void Start()
  15. {
  16. if (currentStamina == 0)
  17. {
  18. currentStamina = 1;
  19. }
  20. fillImage = staminaBar.fillRect.GetComponent<Image>();
  21. }
  22. // Update is called once per frame
  23. void Update()
  24. {
  25. if (Input.GetKey(KeyCode.LeftShift) && canSprint) //spend stamina
  26. {
  27. isSprinting = true;
  28. currentStamina = Mathf.Max(0, currentStamina - Time.deltaTime);
  29. }
  30. else //regenerate stamina
  31. {
  32. isSprinting = false;
  33. currentStamina = Mathf.Min(maxStamina, currentStamina + Time.deltaTime / 2f);
  34. }
  35. if (currentStamina == 0) //trigger the cd
  36. {
  37. canSprint = false;
  38. }
  39. if (!canSprint && currentStamina == maxStamina) //stamina regenerated
  40. {
  41. canSprint = true;
  42. }
  43. staminaBar.value = currentStamina/maxStamina;
  44. fillImage.color = staminaBarGradient.Evaluate(staminaBar.value);
  45. }
  46. public float GetCurrentStamina()
  47. {
  48. return currentStamina;
  49. }
  50. public bool GetCanSprint()
  51. {
  52. return canSprint;
  53. }
  54. public bool GetIsSprinting()
  55. {
  56. return isSprinting;
  57. }
  58. public void Reinit(float currentStamina, bool canSprint)
  59. {
  60. this.currentStamina = currentStamina;
  61. this.canSprint = canSprint;
  62. }
  63. }