Beispiel #1
0
 // ------ 分发事件入口
 public void dispatchEnqueue(MBaseEvent e)
 {
     lock (dispatchQueue)
     {
         dispatchQueue.Enqueue(e);
     }
 }
Beispiel #2
0
 // ------ 每一帧都进行分发
 void Update()
 {
     if (isDispatching)
     {
         MBaseEvent dispatchEvent = dispatchDequeue();
         if (dispatchEvent != null)
         {     // 队列为空时不分发
             if (dispatchEvent.isBroadcast)
             { // 广播事件不需要考虑目标
                 foreach (List <BaseEventObject> dispatch in dispatchTable.Values)
                 {
                     foreach (BaseEventObject obj in dispatch)
                     {
                         if (obj.gameObject.activeSelf)
                         {
                             obj.EnqueueEvent(dispatchEvent);
                         }
                     }
                 }
             }
             else
             { // 非广播事件需要取到目标对象表
                 //List<BaseEventObject> dispatch = dispatchTable.TryGetValue(dispatchEvent.dispatchTarget, out );
                 List <BaseEventObject> dispatch = dispatchTable[dispatchEvent.dispatchTarget];
                 if (dispatch != null)
                 {
                     foreach (BaseEventObject obj in dispatch)
                     {
                         obj.EnqueueEvent(dispatchEvent);
                     }
                 }
             }
         }
     }
 }
Beispiel #3
0
    protected EventCenter eventCenter;                                  // 事件分发中心引用

    // ------ 事件进入缓冲队列
    public void EnqueueEvent(MBaseEvent e)
    {
        lock (eventQueue)
        {
            eventQueue.Enqueue(e);
            if (e.needWakeUp && !gameObject.activeSelf)
            {
                setActive(true);
            }
        }
    }
Beispiel #4
0
    // ------ 从缓冲队列中取事件
    protected MBaseEvent DequeueEvent()
    {
        MBaseEvent result = null;

        lock (eventQueue)
        {
            if (eventQueue.Count > 0)
            {
                result = eventQueue.Dequeue();
            }
        }
        return(result);
    }
Beispiel #5
0
    // ------ 取分发事件出队
    private MBaseEvent dispatchDequeue()
    {
        MBaseEvent result = null;

        lock (dispatchQueue)
        {
            if (dispatchQueue.Count > 0)
            {
                result = dispatchQueue.Dequeue();
            }
        }
        return(result);
    }
Beispiel #6
0
 void Update()
 {
     try
     {
         execute();                     // 子类实现更新调用
         MBaseEvent e = DequeueEvent(); // 取出一个待处理事件
         if (e != null)
         {
             handleEvent(e);
         }
     }
     catch (Exception e)
     {
         Debug.LogError(e.StackTrace);
     }
 }
Beispiel #7
0
 protected override void handleEvent(MBaseEvent e)
 {
     Debug.Log("1------收到方法,处理中....");
 }
Beispiel #8
0
 public abstract string getTagName();               // 获取当前子类对应的事件分发表键名
 protected abstract void handleEvent(MBaseEvent e); // 事件处理方法,子类实现