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); } } }
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; } } } }