using Axibug.Event; using System; using UnityEngine; namespace Axibug.Runtime { /// /// 事件组件。 /// [DisallowMultipleComponent] [AddComponentMenu("Axibug/Event")] public class EventComponent : GameComponent { private IEventManager m_EventManager = null; /// /// 获取事件处理函数的数量。 /// public int EventHandlerCount { get { return m_EventManager.EventHandlerCount; } } /// /// 获取事件数量。 /// public int EventCount { get { return m_EventManager.EventCount; } } /// /// 游戏框架组件初始化。 /// protected override void Awake() { base.Awake(); m_EventManager = FrameworkEntry.GetModule(); if (m_EventManager == null) { Log.Fatal("Event manager is invalid."); return; } } /// /// 获取事件处理函数的数量。 /// /// 事件类型编号。 /// 事件处理函数的数量。 public int Count(int id) { return m_EventManager.Count(id); } /// /// 检查是否存在事件处理函数。 /// /// 事件类型编号。 /// 要检查的事件处理函数。 /// 是否存在事件处理函数。 public bool Check(int id, EventHandler handler) { return m_EventManager.Check(id, handler); } /// /// 订阅事件处理回调函数。 /// /// 事件类型编号。 /// 要订阅的事件处理回调函数。 public void Subscribe(int id, EventHandler handler) { m_EventManager.Subscribe(id, handler); } /// /// 取消订阅事件处理回调函数。 /// /// 事件类型编号。 /// 要取消订阅的事件处理回调函数。 public void Unsubscribe(int id, EventHandler handler) { m_EventManager.Unsubscribe(id, handler); } /// /// 设置默认事件处理函数。 /// /// 要设置的默认事件处理函数。 public void SetDefaultHandler(EventHandler handler) { m_EventManager.SetDefaultHandler(handler); } /// /// 抛出事件,这个操作是线程安全的,即使不在主线程中抛出,也可保证在主线程中回调事件处理函数,但事件会在抛出后的下一帧分发。 /// /// 事件发送者。 /// 事件内容。 public void Fire(object sender, LogicEventArgs e) { m_EventManager.Fire(sender, e); } /// /// 抛出事件立即模式,这个操作不是线程安全的,事件会立刻分发。 /// /// 事件发送者。 /// 事件内容。 public void FireNow(object sender, LogicEventArgs e) { m_EventManager.FireNow(sender, e); } } }