namespace Engine.Core; public class StateEnable : IStateEnable { public Event OnEnabledChanged { get; } = new(); public Event OnEntityAssigned { get; } = new(); public Event? OnUnassigned { get; } = new(); public IEntity Entity { get; private set; } = null!; public bool Enabled { get; set { if (value == field) return; bool previousState = field; field = value; OnEnabledChanged?.Invoke(this, new(previousState)); } } = true; protected virtual void OnAssign(IEntity entity) { } public bool Assign(IEntity entity) { if (Entity is not null && Entity.IsInitialized) return false; Entity = entity; OnAssign(entity); OnEntityAssigned?.Invoke(this); return true; } public bool Unassign() { if (Entity is null) return false; Entity = null!; OnUnassigned?.Invoke(this); return true; } }