public void MoveState(T _nextState) { if (!dicFun.ContainsKey(_nextState)) { Debug.LogError("I don't know " + _nextState); return; //} else if (curState == _nextState) { // return; } //state out is callback pInOut... if (cbOut != null) { cbOut(); } //state preState = gamestate; gamestate = _nextState; nextState = _nextState; //callback setting FSMData <T> _s = dicFun[gamestate]; cbIn = _s.cbIn; cbLoop = _s.cbLoop; cbOut = _s.cbOut; //pIn start if (cbIn != null) { cbIn(); } }
protected void ChangeState(T _state) { if (!dicState.ContainsKey(_state)) { Debug.LogError(" Not Found State Change and Check state"); return; } //before state information is clear; if (onOut != null) { onOut(); } //change state befState = curState; curState = _state; nextState = _state; FSMData <T> _data = dicState[curState]; onIn = _data.onIn; onModify = _data.onModify; onOut = _data.onOut; //init data if (onIn != null) { onIn(); } }
public void SetData(string dataName, FSMData data) { if (string.IsNullOrEmpty(dataName)) { Utility.DebugError("Data name is invalid !"); } fsmDataDict[dataName] = data; }
public CT11ModeAction(ref FSMData fSMData) { _fsmData = fSMData; tslPath = fSMData.tcaTSLPath; tCACommandWarpper = fSMData.tCACommand; CT11ModeActionDic.Add("SendRUCommand", RuCommandSend); CT11ModeActionDic.Add("ExitCT11Mode", exitCT11Mode); }
public ConnectedAction(ref FSMData fSMData) { connectedfSMData = fSMData; connectedRequestHandleAction.Add("RuCommand", tryEnterRuCommandsMode); connectedRequestHandleAction.Add("CT11Commands", tryEnterCT11Mode); connectedRequestHandleAction.Add("TCAIcolish", tryTCAIcolish); connectedRequestHandleAction.Add("help", connectedRequestPrintHelp); }
public RuModeAction(ref FSMData fSMData) { ruModeFSMData = fSMData; //connectedRequestHandleAction.Add("RuCommand", ruCommandsMode); RuModeActionDic.Add("SendCT11Command", ct11CommandSend); RuModeActionDic.Add("ExitRuMode", exitRuMode); RuSpecialControlActionDic.Add("InterrupterRuProcess", controlC_Action); RuSpecialControlActionDic.Add("ExitRuProcess", controlD_Action); RuSpecialControlActionDic.Add("SuspendRuProcess", controlZ_Action); //serialRecviThread = new Thread(this.serialReviParameterizedThreadStart); }
public FSMData GetData(string dataName) { if (string.IsNullOrEmpty(dataName)) { Utility.DebugError("Data name is invalid !"); } FSMData data = null; if (fsmDataDict.TryGetValue(dataName, out data)) { return(data); } return(null); }
protected void AddState(T _state, VOID_FUN_VOID _onIn, VOID_FUN_VOID _onModify, VOID_FUN_VOID _onOut) { if (!dicState.ContainsKey(_state)) { //add //Debug.Log(_onIn + ":" + _onModify + ":" + _onOut); FSMData <T> _data = new FSMData <T>(_state, _onIn, _onModify, _onOut); dicState.Add(_state, _data); } else { Debug.LogError("Same State Add Error" + _state); } }
public void AddState(T _t, System.Action _cbIn, System.Action _cbLoop, System.Action _cbOut) { if (dicFun.ContainsKey(_t)) { Debug.LogError("Already added state"); } else { FSMData <T> _data = new FSMData <T> (); _data.t = _t; _data.cbIn = _cbIn; _data.cbLoop = _cbLoop; _data.cbOut = _cbOut; dicFun.Add(_t, _data); } }
private void NewFSM() { // 当前FSM存在,提示保存当前FSM if (currentFSMAsset && EditorUtility.DisplayDialog("save fsm", "you want to save change?", "yes", "no")) { Save(); } // 清除Node和Edge foreach (var edge in graphView.edges.ToList()) { graphView.RemoveElement(edge); } foreach (var node in graphView.nodes.ToList()) { graphView.RemoveElement(node); } currentFSMAsset = null; }
private void Save() { // 新建的FSMAsset,还未保存 if (!currentFSMAsset) { currentFSMAsset = CreateInstance <FSMData>(); var path = OpenSavePanel(); AssetDatabase.CreateAsset(currentFSMAsset, path); AssetDatabase.Refresh(); } currentFSMAsset.NodeDatas = new List <FSMStateNodeData>(); currentFSMAsset.PortDatas = new List <FSMPortData>(); graphView.nodes.ForEach(tempNode => { FSMStateNode node = tempNode as FSMStateNode; var fsmStateNodeData = new FSMStateNodeData(); fsmStateNodeData.GUID = node.viewDataKey; fsmStateNodeData.Position = node.GetPosition().position; int portIndex = 0; foreach (Port port in node.outputContainer.Children()) { var portData = new FSMPortData(); var edge = port.connections.First(); portData.FromNodeGUID = node.viewDataKey; portData.ToNodeGUID = edge.input.node.viewDataKey; portData.Index = portIndex; portData.ConditionGUID = node.PortIndexToConditions[portIndex]; portIndex++; currentFSMAsset.PortDatas.Add(portData); } ; currentFSMAsset.NodeDatas.Add(fsmStateNodeData); }); EditorUtility.SetDirty(currentFSMAsset); AssetDatabase.SaveAssets(); }
private void Load(FSMData asset) { if (!asset) { return; } currentFSMAsset = asset; if (currentFSMAsset.NodeDatas == null || currentFSMAsset.NodeDatas.Count == 0) { return; } // 清除Node和Edge foreach (var edge in graphView.edges.ToList()) { graphView.RemoveElement(edge); } foreach (var node in graphView.nodes.ToList()) { graphView.RemoveElement(node); } foreach (var data in currentFSMAsset.NodeDatas) { var node = graphView.AddNode(data.Position); node.viewDataKey = data.GUID; node.SetPosition(new Rect(data.Position, new Vector2(200f, 150f))); } if (currentFSMAsset.PortDatas == null || currentFSMAsset.PortDatas.Count == 0) { return; } foreach (var portData in currentFSMAsset.PortDatas) { FSMStateNode fromNode = null; FSMStateNode toNode = null; foreach (FSMStateNode tempNode in graphView.nodes.ToList()) { if (tempNode.viewDataKey == portData.FromNodeGUID) { fromNode = tempNode; } if (tempNode.viewDataKey == portData.ToNodeGUID) { toNode = tempNode; } } if (fromNode == null || toNode == null) { continue; } var fromPort = fromNode.AddCondition(); if (!string.IsNullOrEmpty(portData.ConditionGUID)) { fromNode.SetCondition(portData.Index, fromPort, portData.ConditionGUID); } graphView.Add(fromPort.ConnectTo(toNode.InputPort)); } ; }
public TCAIcolishAction(ref FSMData fSMData) { _fsmData = fSMData; _TCAIcolishActionDic.Add("ExitIcolishMode", exitIcolishMode); TCACommandWarpper.ComportCreated += TCACommandWarpper_ComportCreated; }