1
0

Stamina.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. currentStamina = maxStamina;
  17. fillImage = staminaBar.fillRect.GetComponent<Image>();
  18. }
  19. // Update is called once per frame
  20. void Update()
  21. {
  22. if (Input.GetKey(KeyCode.LeftShift) && canSprint) //spend stamina
  23. {
  24. isSprinting = true;
  25. currentStamina = Mathf.Max(0, currentStamina - Time.deltaTime);
  26. }
  27. else //regenerate stamina
  28. {
  29. isSprinting = false;
  30. currentStamina = Mathf.Min(maxStamina, currentStamina + Time.deltaTime / 2f);
  31. }
  32. if (currentStamina == 0) //trigger the cd
  33. {
  34. canSprint = false;
  35. }
  36. if (!canSprint && currentStamina == maxStamina) //stamina regenerated
  37. {
  38. canSprint = true;
  39. }
  40. staminaBar.value = currentStamina/maxStamina;
  41. fillImage.color = staminaBarGradient.Evaluate(staminaBar.value);
  42. }
  43. public float GetCurrentStamina()
  44. {
  45. return currentStamina;
  46. }
  47. public bool GetCanSprint()
  48. {
  49. return canSprint;
  50. }
  51. public bool GetIsSprinting()
  52. {
  53. return isSprinting;
  54. }
  55. public void Reinit(float currentStamina, float maxStamina, bool canSprint)
  56. {
  57. this.currentStamina = currentStamina;
  58. this.maxStamina = maxStamina;
  59. this.canSprint = canSprint;
  60. }
  61. }