50 lines
1.2 KiB
C#
50 lines
1.2 KiB
C#
namespace Syntriax.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;
|
|
}
|
|
}
|