コード例 #1
0
        /// <summary>
        /// 发送事件给接收者的所有子物体(不包含接收者)。
        /// </summary>
        /// <param name="sender">事件发送者。</param>
        /// <param name="type">事件类型。</param>
        /// <param name="e">事件数据。</param>
        /// <param name="receiver">事件接收者。</param>
        public static void SendEventToChildren(object sender,
                                               int type,
                                               EventData e,
                                               GameObject receiver)
        {
            Dictionary <GameObject, List <EventCallback> > listeners;

            if (!eventTable.TryGetValue(type, out listeners))
            {
                EventPool.Delete(e);
                return;
            }

            SenderCount += 1;
            e.Sender     = sender;

            foreach (Transform child in receiver.transform)
            {
                if (e.IsStopped)
                {
                    break;
                }

                SendEventToGameObject(sender, e, child.gameObject, listeners, true);
            }

            EventPool.Delete(e);
            SenderCount -= 1;
        }
コード例 #2
0
        /// <summary>
        /// 发送一个事件给 Component 接收者列表。
        /// </summary>
        /// <param name="sender">事件发送者。</param>
        /// <param name="type">事件类型。</param>
        /// <param name="e">事件数据。</param>
        /// <param name="receivers">接收者列表。</param>
        /// <param name="includeChildren">是否发送给接收者的子物体。</param>
        public static void SendEvent(object sender,
                                     int type,
                                     EventData e,
                                     List <Component> receivers,
                                     bool includeChildren = false)
        {
            Dictionary <GameObject, List <EventCallback> > listeners;

            if (!eventTable.TryGetValue(type, out listeners))
            {
                EventPool.Delete(e);
                return;
            }

            SenderCount += 1;
            e.Sender     = sender;

            for (int i = 0; i < receivers.Count; i++)
            {
                if (e.IsStopped)
                {
                    break;
                }

                SendEventToGameObject(sender, e, receivers[i].gameObject, listeners, includeChildren);
            }

            EventPool.Delete(e);
            SenderCount -= 1;
        }
コード例 #3
0
        /// <summary>
        /// 发送一个事件给指定的 GameObject 接收者。
        /// </summary>
        /// <param name="sender">事件发送者。</param>
        /// <param name="type">事件类型。</param>
        /// <param name="e">事件数据。</param>
        /// <param name="receiver">接收者。</param>
        /// <param name="includeChildren">是否发送给接收者的子物体。</param>
        public static void SendEvent(object sender,
                                     int type,
                                     EventData e,
                                     GameObject receiver,
                                     bool includeChildren = false)
        {
            if (receiver == null)
            {
                throw new ApplicationException("SendEvent: receiver == null!");
            }

            Dictionary <GameObject, List <EventCallback> > listeners;

            if (!eventTable.TryGetValue(type, out listeners))
            {
                EventPool.Delete(e);
                return;
            }

            SenderCount += 1;
            e.Sender     = sender;

            SendEventToGameObject(sender, e, receiver, listeners, includeChildren);
            EventPool.Delete(e);
            SenderCount -= 1;
        }
コード例 #4
0
        /// <summary>
        /// 发送一个事件给所有侦听者。
        /// </summary>
        /// <param name="sender">事件发送者。</param>
        /// <param name="type">事件类型。</param>
        /// <param name="e">事件数据。</param>
        public static void SendEvent(object sender,
                                     int type,
                                     EventData e)
        {
            Dictionary <GameObject, List <EventCallback> > listeners;

            if (!eventTable.TryGetValue(type, out listeners))
            {
                EventPool.Delete(e);
                return;
            }

            SenderCount += 1;

            e.Sender = sender;

            foreach (GameObject receiver in listeners.Keys)
            {
                if (e.IsStopped)
                {
                    break;
                }

                SendEventToGameObject(sender, e, receiver, listeners, false);
            }

            EventPool.Delete(e);
            SenderCount -= 1;
        }