using System; using System.Collections; using System.Collections.Generic; using DamageNumbersPro; using Unity.Mathematics; using UnityEngine; public class EntityStats : MonoBehaviour { [Header("Identification")] public string name; public Sprite icon; //only if applicable... public Entity thisEntity; [Header("Health")] public float health; public float maxHealth; public DamageNumber damageNumbers; [Header("Health UI")] public Transform healthBar; [Header("Stats")] public float speed; public float jumpPower; [Header("State")] public bool isStalled; public bool abilitiesDisabled; [Header("Ground Detection")] [SerializeField] private Transform groundCheck; [SerializeField] private LayerMask groundLayer; [Header("Attack Origin")] public Transform attackOriginPoint; public Transform attackOriginCenter; [Header("Abilities")] public List abilities = new(); [Header("Cache")] public Rigidbody2D rb; public SpriteRenderer sprite; public bool isFacingRight; public Color originalColor; //remove later public float damageColorChangeSpeed; private void Start() { originalColor = sprite.color; } public void TakeDamage(float damage) { health -= damage; StartCoroutine(DamageVisual()); if (damageNumbers) { damageNumbers.Spawn(transform.position, damage.ToString()); } if (healthBar) { UpdateHealthBar(); } if (health <= 0) { thisEntity.OnDeath(); } } private IEnumerator DamageVisual() { float currentState = 0; while (currentState < 1) { currentState += Time.deltaTime * damageColorChangeSpeed; sprite.color = Color.Lerp(Color.gray, originalColor, currentState); yield return null; } } public void Heal(float healing) { health += healing; health = Math.Clamp(health, 0, maxHealth); } public bool OnGround() { return Physics2D.OverlapCircle(groundCheck.position, 0.05f, groundLayer); } public void UpdateHealthBar() { healthBar.transform.localScale = new Vector3(math.clamp(health / maxHealth, 0f, 1f), 1f, 1f); } }