Example #1
0
    public void DispachEvent(ResonseInfo eventinfo)
    {
        MouseEventKey       eventkey      = new MouseEventKey(eventinfo.objTarget, eventinfo.eventtype, eventinfo.mousekey);
        List <ListenerInfo> listListeners = null;

        m_dicMouseEvents.TryGetValue(eventkey, out listListeners);

        List <ListenerInfo> allIntercepts = new List <ListenerInfo>();
        List <ListenerInfo> allNormals    = new List <ListenerInfo>();

        if (listListeners != null)               //指定对象先检查是否有监听
        {
            List <ListenerInfo> intercepts;
            List <ListenerInfo> normals;
            GetInteceptListener(eventinfo.eventtype, listListeners, out intercepts, out normals);
            allIntercepts.AddRange(intercepts);

            if (allIntercepts.Count == 0)
            {
                allNormals.AddRange(normals);
            }
        }

        if (eventinfo.objTarget != null)               //不指定对象是否有监听
        {
            eventkey.target = null;
            m_dicMouseEvents.TryGetValue(eventkey, out listListeners);
            if (listListeners != null)
            {
                List <ListenerInfo> intercepts;
                List <ListenerInfo> normals;
                GetInteceptListener(eventinfo.eventtype, listListeners, out intercepts, out normals);
                allIntercepts.AddRange(intercepts);
                if (allIntercepts.Count == 0)
                {
                    allNormals.AddRange(normals);
                }
            }
        }

        if (allIntercepts.Count > 0)
        {
            for (int i = 0; i < allIntercepts.Count; i++)
            {
                if (allIntercepts[i].listener != null)
                {
                    allIntercepts[i].listener(eventinfo);
                }
            }
            return;
        }
        for (int i = 0; i < allNormals.Count; i++)
        {
            if (allNormals[i].listener != null)
            {
                allNormals[i].listener(eventinfo);
            }
        }
    }
Example #2
0
    public void RemoveMouseEventListener(GameObject objTarget, EMouseEvent eventtype, EMouseKey mousekey, DlgtMouseEventListener listener, object objListener = null)
    {
        List <ListenerInfo> listListeners = null;
        MouseEventKey       eventkey      = new MouseEventKey(objTarget, eventtype, mousekey);

        m_dicMouseEvents.TryGetValue(eventkey, out listListeners);
        if (listListeners != null)
        {
            for (int i = 0; i < listListeners.Count; i++)
            {
                if (listListeners[i].listener == listener && listListeners[i].objListener == objListener)
                {
                    listListeners.RemoveAt(i);
                    break;
                }
            }
            if (listListeners.Count == 0)
            {
                m_dicMouseEvents.Remove(eventkey);
            }
        }
    }
Example #3
0
    /// <summary>
    /// 添加鼠标监听
    /// </summary>
    /// <param name="objTarget">监听对象</param>
    /// <param name="eventtype">监听事件类型</param>
    /// <param name="mousekey">鼠标键</param>
    /// <param name="newListener">监听者接口</param>
    public void AddMouseEventListener(GameObject objTarget, EMouseEvent eventtype, EMouseKey mousekey, DlgtMouseEventListener newListener, object objListener = null, bool insertFirst = false)
    {
        List <ListenerInfo> listListeners = null;
        MouseEventKey       eventkey      = new MouseEventKey(objTarget, eventtype, mousekey);

        m_dicMouseEvents.TryGetValue(eventkey, out listListeners);
        if (listListeners == null)
        {
            listListeners = new List <ListenerInfo>();
            ListenerInfo listenerinfo = new ListenerInfo(newListener, objListener);
            listListeners.Add(listenerinfo);
            m_dicMouseEvents[eventkey] = listListeners;
        }
        else
        {
            bool bFound = false;
            for (int i = 0; i < listListeners.Count; i++)
            {
                if (listListeners[i].listener == newListener && listListeners[i].objListener == objListener)
                {
                    break;
                }
            }

            if (!bFound)
            {
                ListenerInfo listenerinfo = new ListenerInfo(newListener, objListener);
                if (insertFirst)
                {
                    listListeners.Insert(0, listenerinfo);
                }
                else
                {
                    listListeners.Add(listenerinfo);
                }
            }
        }
    }