using AsteroidGame.Interfaces; using UnityEngine; namespace AsteroidGame.Entities { public class EntityBase : MonoBehaviour, IDamageable, ITargetable { [Header("Health")] [SerializeField] protected int _health; [SerializeField] protected int _maxHealth; [SerializeField] protected bool _isInvulnerable; [Header("TargetPositions")] [SerializeField] private Transform _centerPosition; [SerializeField] private Transform _basePosition; [Header("UI")] [SerializeField] protected string _uiFriendlyName; [Space] [SerializeField] private SoEntityBaseRuntimeSet _entityBaseSet; #region Props public bool IsInvulnerable => _isInvulnerable; public string UiFriendlyName => _uiFriendlyName; #endregion protected virtual void OnEnable() { _entityBaseSet.Add(this); } protected virtual void OnDisable() { _entityBaseSet.Remove(this); } #region Methods public void ModifyHealth(int healthChange) { if (!_isInvulnerable) { _health += healthChange; } } #endregion #region Setters public void SetHealth(int newHealth) => _health = newHealth; public void SetMaxHealth(int newHealth) => _maxHealth = newHealth; public void SetInvulnerable(bool newState) => _isInvulnerable = newState; #endregion #region Getters public Vector3 GetCenterPosition() => _centerPosition.transform.position; public Vector3 GetBasePosition() => _basePosition.transform.position; public int GetHealth() => _health; public int GetMaxHealth() => _maxHealth; public float GetHealthFactor() => (float)_health / (float)_maxHealth; #endregion } }