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); }
public void Init(FSMGraph graph_, params object[] token_) { Log.Assert(graph_ != null, "invalid fsm graph"); transitDepth = 0; Graph = graph_; Token = token_ ?? Token ?? DefaultToken; }
public FSMTransition(FSMGraph parent, int from, int to) { _from = from; _to = to; _parent = parent; _editorName = Name; }
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(); }
private void Initialize(FSMGraph stateMachineGraph) { StateMachineGraph = stateMachineGraph; titleContent.text = stateMachineGraph.name; CreateGraphView(); CreateToolbar(); }
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); }
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); } }