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();
        }
    }
예제 #2
0
    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();
        }
    }
예제 #3
0
 public void SetData(string dataName, FSMData data)
 {
     if (string.IsNullOrEmpty(dataName))
     {
         Utility.DebugError("Data name is invalid !");
     }
     fsmDataDict[dataName] = data;
 }
예제 #4
0
 public CT11ModeAction(ref FSMData fSMData)
 {
     _fsmData          = fSMData;
     tslPath           = fSMData.tcaTSLPath;
     tCACommandWarpper = fSMData.tCACommand;
     CT11ModeActionDic.Add("SendRUCommand", RuCommandSend);
     CT11ModeActionDic.Add("ExitCT11Mode", exitCT11Mode);
 }
예제 #5
0
 public ConnectedAction(ref FSMData fSMData)
 {
     connectedfSMData = fSMData;
     connectedRequestHandleAction.Add("RuCommand", tryEnterRuCommandsMode);
     connectedRequestHandleAction.Add("CT11Commands", tryEnterCT11Mode);
     connectedRequestHandleAction.Add("TCAIcolish", tryTCAIcolish);
     connectedRequestHandleAction.Add("help", connectedRequestPrintHelp);
 }
예제 #6
0
 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);
 }
예제 #7
0
        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);
        }
예제 #8
0
 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);
     }
 }
예제 #10
0
 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;
 }
예제 #11
0
        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();
        }
예제 #12
0
        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));
            }
            ;
        }
예제 #13
0
 public TCAIcolishAction(ref FSMData fSMData)
 {
     _fsmData = fSMData;
     _TCAIcolishActionDic.Add("ExitIcolishMode", exitIcolishMode);
     TCACommandWarpper.ComportCreated += TCACommandWarpper_ComportCreated;
 }