private void checkEvent(LinkedList <TimerEvent> list, float totalTime) { LinkedListNode <TimerEvent> node = list.First; List <TimerEvent> tempList = new List <TimerEvent>(); while (node != null) { TimerEvent e = node.Value; if (e._isDelete) { node = node.Next; } else { if (e._targetTime > totalTime) { break; } e._offsetTime = totalTime - e._targetTime; e._callBack.onTimeUp(e._id, e._offsetTime); if (e._isLoop) { int multi = (int)(e._offsetTime / e._nextTime); e._offsetTime -= e._nextTime * multi; tempList.Add(e.clone()); } e.delete(); node = node.Next; } } foreach (TimerEvent te in tempList) { register(te, list, totalTime); } }
private void removeAllOfOne(TimerCallBack callBack, LinkedList <TimerEvent> list) { LinkedListNode <TimerEvent> node = list.First; while (node != null) { TimerEvent e = node.Value; if (e._callBack == callBack) { e._callBack = null; e.delete(); } node = node.Next; } }
//return the remained time private float removeEvent(TimerCallBack callBack, int id, LinkedList <TimerEvent> list, float totalTime) { LinkedListNode <TimerEvent> node = list.First; while (node != null) { TimerEvent e = node.Value; if (e._callBack == callBack && e._id == id) { e._callBack = null; e.delete(); return(e._targetTime - totalTime); } node = node.Next; } return(0); }