internal void Restart(NodeCanvas outnodecanvas) { if (outnodecanvas == null) { return; } FSMRunerState state = null; if (nodestates.ContainsKey(outnodecanvas)) { state = nodestates[outnodecanvas]; } else { state = new FSMRunerState(); nodestates[outnodecanvas] = state; } state.Reset(outnodecanvas); this.ClearValues(outnodecanvas); }
internal void UpdateInFrame(long cnt) { if (runners.Count == 0) { return; } List <NodeCanvas> values = GetAllFSM(); for (int i = 0; i < values.Count; ++i) { NodeCanvas nodecanvas = values[i]; if (nodestates.ContainsKey(nodecanvas)) { FSMRunerState runningstate = nodestates[nodecanvas]; if (runningstate.isRunning && runningstate.current != null) { FSMElement current = runningstate.current; FSMElement laststate = runningstate.laststate; if (laststate != null) { if (laststate != current) { // LogMgr.LogError("this is " + nodecanvas); ScriptCommand exitcmd = ScriptCommand.Create((int)FrameWorkCmdDefine.FSMCallExit); exitcmd.CallParams.WriteObject(laststate); exitcmd.ExcuteAndRelease(); ScriptCommand entercmd = ScriptCommand.Create((int)FrameWorkCmdDefine.FSMCallEnter); entercmd.CallParams.WriteObject(current); entercmd.ExcuteAndRelease(); } } else { // LogMgr.LogError("this is " + nodecanvas); ScriptCommand cmd = ScriptCommand.Create((int)FrameWorkCmdDefine.FSMCallEnter); cmd.CallParams.WriteObject(current); cmd.ExcuteAndRelease(); } runningstate.laststate = current; bool ret = current.UpdateFrameInFSM(cnt); if (!ret && runningstate.isRunning) { FSMElement next = current.SelectForNext(); if (next != null) { runningstate.current = next; } else { ScriptCommand exitcmd = ScriptCommand.Create((int)FrameWorkCmdDefine.FSMCallExit); exitcmd.CallParams.WriteObject(current); exitcmd.ExcuteAndRelease(); runningstate.isRunning = false; this.CallFinishCanvas(nodecanvas); } } } } } ListPool.TryDespawn(values); }