Exemplo n.º 1
0
        private FSMGraph GenerateGraph()
        {
            //FOR DETAILED EXPLANATION please see SimpleGraph example project
            var dataGraph = new FSMGraph();

            foreach (FSM_State state in fsmStates)
            {
                var dataVertex = new DataVertex(state.name, state.whenStmentTxt);
                dataGraph.AddVertex(dataVertex);
            }
            var vlist = dataGraph.Vertices.ToList();

            for (int i = 0; i < vlist.Count; i++)
            {
                FSM_State stateDst = fsmStates[i];
                for (int j = 0; j < vlist.Count; j++)
                {
                    FSM_State stateSrc = fsmStates[j];
                    if (stateSrc.next_states.ContainsKey(stateDst))
                    {
                        var dataEdge = new DataEdge(vlist[j], vlist[i])
                        {
                            Condition = stateSrc.next_states[stateDst]
                        };
                        dataGraph.AddEdge(dataEdge);
                    }
                }
            }
            return(dataGraph);
        }
Exemplo n.º 2
0
 public void Init(FSMGraph graph_, params object[] token_)
 {
     Log.Assert(graph_ != null, "invalid fsm graph");
     transitDepth = 0;
     Graph        = graph_;
     Token        = token_ ?? Token ?? DefaultToken;
 }
Exemplo n.º 3
0
 public FSMTransition(FSMGraph parent, int from, int to)
 {
     _from       = from;
     _to         = to;
     _parent     = parent;
     _editorName = Name;
 }
Exemplo n.º 4
0
        public void Open(FSMGraph stateMachineGraph)
        {
            if (stateMachineGraph == null)
            {
                var path = EditorUtility.SaveFilePanel(
                    "Save texture as PNG",
                    Application.dataPath,
                    "StateMachine.asset",
                    "asset"
                    );

                if (path.Length == 0)
                {
                    this.Close();
                    return;
                }

                // Create new StateMachineGraph
                var graphName = Path.GetFileNameWithoutExtension(path);
                stateMachineGraph      = ScriptableObject.CreateInstance <FSMGraph>();
                stateMachineGraph.name = graphName;

                var databasePath = FileUtil.GetProjectRelativePath(path);

                AssetDatabase.CreateAsset(stateMachineGraph, databasePath);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }

            Initialize(stateMachineGraph);
            Show();
        }
Exemplo n.º 5
0
        private void Initialize(FSMGraph stateMachineGraph)
        {
            StateMachineGraph = stateMachineGraph;
            titleContent.text = stateMachineGraph.name;

            CreateGraphView();
            CreateToolbar();
        }
Exemplo n.º 6
0
        private FSMGraph GenerateGraph()
        {
            //FOR DETAILED EXPLANATION please see SimpleGraph example project
            var dataGraph = new FSMGraph();

            foreach (FSM_State state in fsmStates)
            {
                var dataVertex = new DataVertex(state.name);
                dataGraph.AddVertex(dataVertex);
            }
            var vlist = dataGraph.Vertices.ToList();

            for (int i = 0; i < vlist.Count; i++)
            {
                FSM_State stateDst = fsmStates[i];
                for (int j = 0; j < vlist.Count; j++)
                {
                    FSM_State stateSrc = fsmStates[j];
                    if (stateSrc.next_states.ContainsKey(stateDst.name))
                    {
                        var dataEdge = new DataEdge(vlist[j], vlist[i])
                        {
                            Text = string.Format("{0} -> {1}", vlist[j], vlist[i])
                        };
                        dataGraph.AddEdge(dataEdge);
                    }
                }
            }
            //Then create two edges optionaly defining Text property to show who are connected
            //var dataEdge = new DataEdge(vlist[0], vlist[1]) { Text = string.Format("{0} -> {1}", vlist[0], vlist[1]) };
            //dataGraph.AddEdge(dataEdge);
            //dataEdge = new DataEdge(vlist[2], vlist[0]) { Text = string.Format("{0} -> {1}", vlist[2], vlist[0]) };
            //dataGraph.AddEdge(dataEdge);


            //dataEdge = new DataEdge(vlist[1], vlist[2]) { Text = string.Format("{0} -> {1}", vlist[2], vlist[1]) };
            //dataGraph.AddEdge(dataEdge);
            return(dataGraph);
        }
Exemplo n.º 7
0
        public void LoadGraph(FSMGraph stateMachineGraph)
        {
            // Clear
            edges.ToList().ForEach(e => RemoveElement(e));
            nodes.ToList().ForEach(n => RemoveElement(n));

            _stateMachineGraph = stateMachineGraph;

            // Load nodes
            foreach (var node in stateMachineGraph.Nodes)
            {
                var nodeView = new FSMNodeView(node);
                AddElement(nodeView);
            }

            // Restore connections
            foreach (var transition in stateMachineGraph.Transitions)
            {
                var viewFrom = ViewFor(transition.From);
                var viewTo   = ViewFor(transition.To);

                Port outputPort = viewFrom.outputContainer.Query <Port>().First();
                Port inputPort  = viewTo.inputContainer.Query <Port>().First();

                var edge = new FSMEdgeView(transition)
                {
                    input  = inputPort,
                    output = outputPort,
                };

                outputPort.Connect(edge);
                inputPort.Connect(edge);

                AddElement(edge);
            }
        }