public Tick ( |
||
instance | ||
delta | long | |
Résultat | void |
public void Tick(long curTime) { if (m_IsPaused) { m_LastTickTime = curTime; return; } try { m_IsInTick = true; const int c_MaxMsgCountPerTick = 256; long delta = 0; if (m_LastTickTime == 0) { m_LastTickTime = curTime; } else { delta = curTime - m_LastTickTime; m_LastTickTime = curTime; m_CurTime += delta; } int ct = m_MessageHandlers.Count; for (int ix = ct - 1; ix >= 0; --ix) { long dt = delta; StoryMessageHandler handler = m_MessageHandlers[ix]; if (handler.IsTriggered) { handler.Tick(this, dt); dt = 0; } if (!handler.IsTriggered) { string msgId = handler.MessageId; Queue <MessageInfo> queue; if (m_MessageQueues.TryGetValue(msgId, out queue)) { for (int msgCt = 0; msgCt < c_MaxMsgCountPerTick && queue.Count > 0 && !handler.IsTriggered; ++msgCt) { MessageInfo info = queue.Dequeue(); UpdateMessageTriggerTime(info.m_MsgId, curTime); handler.Trigger(this, info.m_Args); handler.Tick(this, dt); dt = 0; } } } } } finally { m_IsInTick = false; } }
static public int Tick(IntPtr l) { try { StorySystem.StoryMessageHandler self = (StorySystem.StoryMessageHandler)checkSelf(l); StorySystem.StoryInstance a1; checkType(l, 2, out a1); System.Int64 a2; checkType(l, 3, out a2); self.Tick(a1, a2); pushValue(l, true); return(1); } catch (Exception e) { return(error(l, e)); } }
public void Tick(long curTime) { if (m_IsPaused) { m_LastTickTime = curTime; return; } try { m_IsInTick = true; const int c_MaxMsgCountPerTick = 256; const int c_MaxConcurrentMsgCountPerTick = 256; long delta = 0; if (m_LastTickTime == 0) { m_LastTickTime = curTime; } else { delta = curTime - m_LastTickTime; m_LastTickTime = curTime; m_CurTime += delta; } int ct = m_MessageHandlers.Count; for (int ix = ct - 1; ix >= 0; --ix) { long dt = delta; StoryMessageHandler handler = m_MessageHandlers[ix]; if (handler.IsTriggered) { handler.Tick(this, dt); dt = 0; } if (!handler.IsTriggered) { string msgId = handler.MessageId; Queue <MessageInfo> queue; if (m_MessageQueues.TryGetValue(msgId, out queue)) { for (int msgCt = 0; msgCt < c_MaxMsgCountPerTick && queue.Count > 0 && !handler.IsTriggered; ++msgCt) { MessageInfo info = queue.Dequeue(); UpdateMessageTriggerTime(info.m_MsgId, curTime); handler.Trigger(this, info.m_Args); handler.Tick(this, dt); dt = 0; } } } } ct = m_ConcurrentMessageHandlers.Count; int concurrentMsgCt = 0; foreach (var pair in m_ConcurrentMessageQueues) { Queue <MessageInfo> queue = pair.Value; if (concurrentMsgCt < c_MaxConcurrentMsgCountPerTick && queue.Count > 0) { MessageInfo info = queue.Dequeue(); StoryMessageHandler handler = NewConcurrentMessageHandler(info.m_MsgId); if (null != handler) { UpdateMessageTriggerTime(info.m_MsgId, curTime); handler.Trigger(this, info.m_Args); handler.Tick(this, 0); if (handler.IsTriggered) { m_ConcurrentMessageHandlers.Add(handler); } else { RecycleConcurrentMessageHandler(handler); } } } } for (int ix = ct - 1; ix >= 0; --ix) { long dt = delta; StoryMessageHandler handler = m_ConcurrentMessageHandlers[ix]; if (handler.IsTriggered) { handler.Tick(this, dt); dt = 0; } if (!handler.IsTriggered) { m_ConcurrentMessageHandlers.RemoveAt(ix); RecycleConcurrentMessageHandler(handler); } } } finally { m_IsInTick = false; } }