| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using UnityEngine;
- using UnityEngine.UI;
- using StarterAssets;
- public class PlayerStats : MonoBehaviour
- {
- [Header("Health Settings")]
- public float maxHealth = 100f;
- public float currentHealth;
- public Image healthFillImage;
- [Header("Stamina Settings")]
- public float maxStamina = 100f;
- public float currentStamina;
- public float drainRate = 25f;
- public float regenRate = 15f;
- public Image staminaFillImage;
- [Header("Movement Overrides")]
- public float walkSpeed = 6f;
- public float sprintSpeed = 12f;
- public float jumpHeight = 3f;
- private ThirdPersonController _controller;
- private StarterAssetsInputs _inputs;
- void Start()
- {
- currentHealth = maxHealth;
- currentStamina = maxStamina;
- _controller = GetComponent<ThirdPersonController>();
- _inputs = GetComponent<StarterAssetsInputs>();
- if (_controller != null)
- {
- _controller.MoveSpeed = walkSpeed;
- _controller.SprintSpeed = sprintSpeed;
- _controller.JumpHeight = jumpHeight;
- }
- }
- void Update()
- {
- HandleStamina();
- UpdateUI();
- }
- void HandleStamina()
- {
- bool isMoving = _inputs.move != Vector2.zero;
- bool isSprinting = _inputs.sprint && isMoving;
- if (isSprinting && currentStamina > 0)
- {
- currentStamina -= drainRate * Time.deltaTime;
- if (currentStamina <= 0)
- {
- currentStamina = 0;
- _controller.MoveSpeed = walkSpeed;
- }
- }
- else
- {
- if (currentStamina < maxStamina)
- currentStamina += regenRate * Time.deltaTime;
- if (!isSprinting) _controller.MoveSpeed = walkSpeed;
- }
- currentStamina = Mathf.Clamp(currentStamina, 0, maxStamina);
- }
- public void TakeDamage(float amount)
- {
- currentHealth -= amount;
- if (currentHealth <= 0)
- {
- currentHealth = 0;
- GameManager.Instance.GameOver(false); // Trigger loss on death
- }
- }
- void UpdateUI()
- {
- if (healthFillImage != null) healthFillImage.fillAmount = currentHealth / maxHealth;
- if (staminaFillImage != null) staminaFillImage.fillAmount = currentStamina / maxStamina;
- }
- }
|