using AsteroidGame.ScriptableObjects; using GameDev.CoreSystems; using UnityEngine; namespace AsteroidGame.Entities { public class EntityBase : MonoBehaviour { [field: Header("Damageable")] [field: SerializeField] public Damageable Damageable { get; set; } [field: Header("Targetable")] [field: SerializeField] public Targetable Targetable { get; set; } [Header("UI")] [SerializeField] protected string _uiFriendlyName; [Space] [SerializeField] private SoEntityBaseRuntimeSet _entityBaseSet; #region Props public string UiFriendlyName => _uiFriendlyName; #endregion protected virtual void OnEnable() { _entityBaseSet.Add(this); InitializeDamageable(); InitializeTargetable(); } protected virtual void OnDisable() { _entityBaseSet.Remove(this); } private void InitializeTargetable() { Targetable = gameObject.AddComponent(); } private void InitializeDamageable() { Damageable = gameObject.AddComponent(); } } }