using GFramework.Core.Abstractions.events;
using GFramework.Core.extensions;
namespace GFramework.Core.events;
///
/// OrEvent类用于实现事件的或逻辑组合,当任意一个注册的事件触发时,都会触发OrEvent本身
///
public class OrEvent : IUnRegisterList
{
private Action? _mOnEvent = () => { };
///
/// 获取取消注册列表
///
public IList UnregisterList { get; } = new List();
///
/// 将指定的事件与当前OrEvent进行或逻辑组合
///
/// 要组合的事件对象
/// 返回当前OrEvent实例,支持链式调用
public OrEvent Or(IEvent @event)
{
@event.Register(Trigger).AddToUnregisterList(this);
return this;
}
///
/// 注册事件处理函数
///
/// 要注册的事件处理函数
/// 返回一个可取消注册的对象
public IUnRegister Register(Action onEvent)
{
_mOnEvent += onEvent;
return new DefaultUnRegister(() => { UnRegister(onEvent); });
}
///
/// 取消注册指定的事件处理函数
///
/// 要取消注册的事件处理函数
public void UnRegister(Action onEvent)
{
_mOnEvent -= onEvent;
this.UnRegisterAll();
}
///
/// 触发所有已注册的事件处理函数
///
private void Trigger()
{
_mOnEvent?.Invoke();
}
}