Exemplo n.º 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);
            }
        }
    }
Exemplo n.º 2
0
 public void DealKeyBoardEvent()
 {
     m_lstCurrPressed.Clear();
     if (Input.anyKey)
     {
         //检测组合件是否按下
         foreach (KeyCode controlKey in listControlKeys)                 //控制类型键只判断摁下状态
         {
             if (Input.GetKey(controlKey))
             {
                 m_lstCurrPressed.Add(controlKey);
             }
         }
         bool ifDown = false;
         foreach (KeyCode listenerKey in listListenerKeys)                    //其他按键 按下的时候生效 不允许组合
         {
             if (Input.GetKeyDown(listenerKey))
             {
                 m_lstCurrPressed.Add(listenerKey);
                 ifDown = true;
                 break;
             }
         }
         if (!ifDown)
         {
             foreach (KeyCode listenerKey in listListenerKeys)                        //其他按键 按下的时候生效 不允许组合
             {
                 if (Input.GetKey(listenerKey))
                 {
                     m_lstCurrPressed.Add(listenerKey);
                     break;
                 }
             }
         }
         else
         {
             m_strLastPressedKey = string.Empty;                     // 不是一直按着键盘则不考虑事件触发间隔时间
         }
         if (m_lstCurrPressed.Count > 0)
         {
             string strKey = GenKey(m_lstCurrPressed);
             if (listKeyBoardEvents.Count > 0)
             {
                 EventListenerInfo[] events = listKeyBoardEvents.ToArray();
                 foreach (EventListenerInfo listenerInfo in events)
                 {
                     if (listenerInfo.listener != null)
                     {
                         if (strKey == m_strLastPressedKey && Time.realtimeSinceStartup - m_fLastPressedTime < listenerInfo.eventResponseInterval)
                         {
                             // 按下键盘响应太频繁
                             //Debug.LogFormat(string.Format("DealKeyBoardEvent key {0} is too fast\r\n", strKey));
                         }
                         else
                         {
                             try
                             {
                                 ResonseInfo resInfo = new ResonseInfo();
                                 resInfo.keys         = m_lstCurrPressed;
                                 resInfo.strKey       = strKey;
                                 resInfo.IfDown       = ifDown;
                                 resInfo.isEventBegin = ifDown;
                                 //Debug.LogFormat(string.Format("Invoke target is {0} method is {1}\r\n", listenerInfo.listener.Target, listenerInfo.listener.Method));
                                 listenerInfo.listener.Invoke(resInfo);
                             }
                             catch (Exception e)
                             {
                                 Debug.LogError(e);
                             }
                         }
                     }
                 }
                 m_strLastPressedKey = strKey;
                 m_fLastPressedTime  = Time.realtimeSinceStartup;
             }
         }
     }
     else
     {
         foreach (KeyCode listenerKey in listListenerKeys)             //其他按键 按下的时候生效 不允许组合
         {
             if (Input.GetKeyUp(listenerKey))
             {
                 m_lstCurrPressed.Add(listenerKey);
                 break;
             }
         }
         if (m_lstCurrPressed.Count > 0)
         {
             string strKey = GenKey(m_lstCurrPressed);
             if (listKeyBoardEvents.Count > 0)
             {
                 EventListenerInfo[] events = listKeyBoardEvents.ToArray();
                 foreach (EventListenerInfo listenerInfo in events)
                 {
                     if (strKey == m_strLastPressedKey && Time.realtimeSinceStartup - m_fLastPressedTime >= listenerInfo.eventResponseInterval && listenerInfo.listener != null)
                     {
                         try
                         {
                             ResonseInfo resInfo = new ResonseInfo();
                             resInfo.keys         = m_lstCurrPressed;
                             resInfo.strKey       = strKey;
                             resInfo.IfDown       = false;
                             resInfo.isEventBegin = false;
                             resInfo.isEventEnd   = true;
                             //Debug.LogFormat(string.Format("Invoke target is {0} method is {1}\r\n", listenerInfo.listener.Target, listenerInfo.listener.Method));
                             listenerInfo.listener.Invoke(resInfo);
                         }
                         catch (Exception e)
                         {
                             Debug.LogError(e);
                         }
                     }
                 }
                 m_strLastPressedKey = strKey;
                 m_fLastPressedTime  = Time.realtimeSinceStartup;
             }
         }
     }
 }