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(); } }