50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
namespace Engine.Core;
 | 
						|
 | 
						|
public class StateEnable : IStateEnable
 | 
						|
{
 | 
						|
    public Event<IStateEnable, IStateEnable.EnabledChangedArguments> OnEnabledChanged { get; } = new();
 | 
						|
    public Event<IHasEntity> OnEntityAssigned { get; } = new();
 | 
						|
    public Event<IAssignable>? OnUnassigned { get; } = new();
 | 
						|
 | 
						|
    private bool _enabled = true;
 | 
						|
    private IEntity _entity = null!;
 | 
						|
 | 
						|
    public IEntity Entity => _entity;
 | 
						|
 | 
						|
    public bool Enabled
 | 
						|
    {
 | 
						|
        get => _enabled;
 | 
						|
        set
 | 
						|
        {
 | 
						|
            if (value == _enabled)
 | 
						|
                return;
 | 
						|
 | 
						|
            bool previousState = _enabled;
 | 
						|
            _enabled = value;
 | 
						|
            OnEnabledChanged?.Invoke(this, new(previousState));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    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;
 | 
						|
    }
 | 
						|
}
 |