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