public void _clear() { if (null == firstNode) { return; } SignalNode <T> t = firstNode; SignalNode <T> n; while (t != null) { t.action = null; if (NodePool.Count > MAX) { break; } n = t.next; t.action = null; t.pre = t.next = null; NodePool.Push(t); t = n; } maping = null; firstNode = lastNode = null; len = 0; }
public void _clear() { if (null == firstNode) { return; } SignalNode t = firstNode; while (t != null) { t.data = null; if (nodePool.Count < MAX) { nodePool.Push(t); } else { break; } t = t.next; } maping = null; firstNode = lastNode = null; len = 0; }
public void render(float deltaTime) { if (len < 1) { TickManager.Remove(render); return; } float now = Time.realtimeSinceStartup; float dis = now - pre; if (dis < delayTime - 0.016f) { return; } pre = now; dispatching = true; SignalNode <float> t = firstNode; List <SignalNode <float> > temp = GetSignalNodeList(); while (t != null) { if (t.active == NodeActiveState.Runing) { float delta = delayTime; if (t.data != -1) { delta = t.data - pre; if (delta < 0) { ___removeHandle(t.action); } } t.action(delta); } temp.Add(t); t = t.next; } dispatching = false; int l = temp.Count; for (int i = 0; i < l; i++) { SignalNode <float> item = temp[i]; if (item.active == NodeActiveState.ToDoDelete) { _remove(item, item.action); } else if (item.active == NodeActiveState.ToDoAdd) { item.active = NodeActiveState.Runing; } } Recycle(temp); }
public bool ___addHandle(Action <T> value, T data, bool forceData = false) { if (maping == null) { maping = new Dictionary <Action <T>, SignalNode <T> >(); } SignalNode <T> t = null; if (maping.TryGetValue(value, out t)) { if (t.active == NodeActiveState.ToDoDelete) { if (dispatching) { t.active = NodeActiveState.ToDoAdd; } else { t.active = NodeActiveState.Runing; } t.data = data; return(true); } if (forceData) { t.data = data; } return(false); } t = getSignalNode(); t.action = value; t.data = data; maping.Add(value, t); if (dispatching) { t.active = NodeActiveState.ToDoAdd; } if (lastNode != null) { lastNode.next = t; t.pre = lastNode; lastNode = t; } else { firstNode = lastNode = t; } len++; return(true); }
internal bool invokeEvent(EventX e) { if (mEventListeners == null) { return(false); } Signal signal; if (mEventListeners.TryGetValue(e.type, out signal) == false) { return(false); } SignalNode <EventX> t = signal.firstNode; if (t == null) { return(false); } List <Action <EventX> > temp = SimpleListPool <Action <EventX> > .Get(); int i = 0; while (t != null) { temp.Add(t.action); t = t.next; i++; } e.setCurrentTarget(mTarget); Action <EventX> listener; for (int j = 0; j < i; j++) { listener = temp[j]; listener(e); if (e.stopsImmediatePropagation) { return(true); } } SimpleListPool <Action <EventX> > .Release(temp); return(e.stopsPropagation); }
protected bool addHandle(Action <EventX> value) { if (maping == null) { maping = new Dictionary <Action <EventX>, SignalNode>(); } SignalNode t = null; if (maping.TryGetValue(value, out t)) { if (t.active == 0) { if (dispatching) { t.active = 2; } else { t.active = 1; } return(true); } return(false); } t = getSignalNode(); t.data = value; maping.Add(value, t); if (dispatching) { t.active = 2; } if (lastNode != null) { lastNode.next = t; t.pre = lastNode; lastNode = t; } else { firstNode = lastNode = t; } len++; return(true); }
protected SignalNode <T> getSignalNode() { SignalNode <T> t; if (NodePool.Count > 0) { t = NodePool.Pop(); t.active = NodeActiveState.Runing; } else { t = new SignalNode <T>(); } return(t); }
protected SignalNode getSignalNode() { SignalNode t; if (nodePool.Count > 0) { t = nodePool.Pop(); t.next = t.pre = null; t.active = 1; } else { t = new SignalNode(); } return(t); }
protected bool _remove(SignalNode <T> t, Action <T> value) { if (t == null) { DebugX.LogError("queueHandle error nil"); } SignalNode <T> pre = t.pre; SignalNode <T> next = t.next; if (pre != null) { pre.next = next; } else { firstNode = next; } if (next != null) { next.pre = pre; } else { lastNode = pre; } t.active = NodeActiveState.ToDoDelete; maping.Remove(value); if (NodePool.Count < MAX) { t.action = null; t.pre = t.next = null; NodePool.Push(t); } len--; if (len < 0) { DebugX.LogError("QueueHandle lenError:" + len); } return(true); }
protected bool _remove(SignalNode t, Action <EventX> value) { if (t == null) { DebugX.Log("d"); } SignalNode pre = t.pre; SignalNode next = t.next; if (pre != null) { pre.next = next; } else { firstNode = next; } if (next != null) { next.pre = pre; } else { lastNode = pre; } t.active = 0; maping.Remove(value); if (nodePool.Count < MAX) { t.data = null; nodePool.Push(t); } len--; return(true); }
protected bool removeHandle(Action <EventX> value) { if (lastNode == null || maping == null) { return(false); } SignalNode t = null; if (maping.TryGetValue(value, out t) == false || t.active == 0) { return(false); } if (dispatching) { t.active = 0; return(true); } return(_remove(t, value)); }
public void dispatch(T e) { if (len > 0) { dispatching = true; SignalNode <T> t = firstNode; List <SignalNode <T> > temp = GetSignalNodeList(); while (t != null) { if (t.active == NodeActiveState.Runing) { t.action(e); } temp.Add(t); t = t.next; } dispatching = false; int l = temp.Count; for (int i = 0; i < l; i++) { SignalNode <T> item = temp[i]; if (item.active == NodeActiveState.ToDoDelete) { _remove(item, item.action); } else if (item.active == NodeActiveState.ToDoAdd) { item.active = NodeActiveState.Runing; } } Recycle(temp); } }
public bool ___removeHandle(Action <T> value) { if (lastNode == null || maping == null) { return(false); } SignalNode <T> t = null; if (maping.TryGetValue(value, out t) == false || t.active == NodeActiveState.ToDoDelete) { return(false); } if (dispatching) { t.active = NodeActiveState.ToDoDelete; return(true); } return(_remove(t, value)); }
public void dispatch(EventX e) { if (len > 0) { dispatching = true; SignalNode t = firstNode; List <SignalNode> temp = getSignalNodeList(); while (t != null) { if (t.active == 1) { t.data(e); } temp.Add(t); t = t.next; } dispatching = false; foreach (SignalNode item in temp) { if (item.active == 0) { _remove(item, item.data); } else if (item.active == 2) { item.active = 1; } } recycle(temp); } }
public bool add(Action <EventX> value, int priority = 0) { if (maping == null) { maping = new Dictionary <Action <EventX>, SignalNode <EventX> >(); } SignalNode <EventX> t = null; if (maping.TryGetValue(value, out t)) { //如果已被删除过程中又被添加(好神奇的逻辑,但必然会有这种情况,不是可能); if (t.active == NodeActiveState.ToDoDelete) { if (dispatching) { t.active = NodeActiveState.ToDoAdd; } else { t.active = NodeActiveState.Runing; } return(true); } return(false); } SignalNode <EventX> newNode = getSignalNode(); newNode.action = value; newNode.priority = priority; maping[value] = newNode; if (dispatching) { newNode.active = NodeActiveState.ToDoAdd; } if (firstNode == null) { len = 1; lastNode = firstNode = newNode; return(true); } SignalNode <EventX> findNode = null; if (priority > lastNode.priority) { t = firstNode; SignalNode <EventX> pre; //var next:SignalNode; while (null != t) { if (priority > t.priority) { pre = t.pre; //next=t.next; newNode.next = t; t.pre = newNode; if (null != pre) { pre.next = newNode; newNode.pre = pre; } else { firstNode = newNode; } findNode = t; break; } t = t.next; } } if (null == findNode) { lastNode.next = newNode; newNode.pre = lastNode; lastNode = newNode; } len++; return(true); }