PlayerStats.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using StarterAssets;
  4. public class PlayerStats : MonoBehaviour
  5. {
  6. [Header("Health Settings")]
  7. public float maxHealth = 100f;
  8. public float currentHealth;
  9. public Image healthFillImage;
  10. [Header("Stamina Settings")]
  11. public float maxStamina = 100f;
  12. public float currentStamina;
  13. public float drainRate = 25f;
  14. public float regenRate = 15f;
  15. public Image staminaFillImage;
  16. [Header("Movement Overrides")]
  17. public float walkSpeed = 6f;
  18. public float sprintSpeed = 12f;
  19. public float jumpHeight = 3f;
  20. private ThirdPersonController _controller;
  21. private StarterAssetsInputs _inputs;
  22. void Start()
  23. {
  24. currentHealth = maxHealth;
  25. currentStamina = maxStamina;
  26. _controller = GetComponent<ThirdPersonController>();
  27. _inputs = GetComponent<StarterAssetsInputs>();
  28. if (_controller != null)
  29. {
  30. _controller.MoveSpeed = walkSpeed;
  31. _controller.SprintSpeed = sprintSpeed;
  32. _controller.JumpHeight = jumpHeight;
  33. }
  34. }
  35. void Update()
  36. {
  37. HandleStamina();
  38. UpdateUI();
  39. }
  40. void HandleStamina()
  41. {
  42. bool isMoving = _inputs.move != Vector2.zero;
  43. bool isSprinting = _inputs.sprint && isMoving;
  44. if (isSprinting && currentStamina > 0)
  45. {
  46. currentStamina -= drainRate * Time.deltaTime;
  47. if (currentStamina <= 0)
  48. {
  49. currentStamina = 0;
  50. _controller.MoveSpeed = walkSpeed;
  51. }
  52. }
  53. else
  54. {
  55. if (currentStamina < maxStamina)
  56. currentStamina += regenRate * Time.deltaTime;
  57. if (!isSprinting) _controller.MoveSpeed = walkSpeed;
  58. }
  59. currentStamina = Mathf.Clamp(currentStamina, 0, maxStamina);
  60. }
  61. public void TakeDamage(float amount)
  62. {
  63. currentHealth -= amount;
  64. if (currentHealth <= 0)
  65. {
  66. currentHealth = 0;
  67. GameManager.Instance.GameOver(false); // Trigger loss on death
  68. }
  69. }
  70. void UpdateUI()
  71. {
  72. if (healthFillImage != null) healthFillImage.fillAmount = currentHealth / maxHealth;
  73. if (staminaFillImage != null) staminaFillImage.fillAmount = currentStamina / maxStamina;
  74. }
  75. }