示例#1
0
        public override void OnHeaderGUI()
        {
            GUI.color = Color.white;
            StateNode         node  = target as StateNode;
            StateMachineGraph graph = node.graph as StateMachineGraph;

            if (graph.currentState == node)
            {
                GUI.color = Color.red;
            }

            if (graph.defaultState == node)
            {
                GUI.color = Color.blue;
            }

            if (graph.defaultState == node && graph.currentState == node)
            {
                GUI.color = Color.cyan;
            }

            string title = target.name;

            GUILayout.Label(title, NodeEditorResources.styles.nodeHeader, GUILayout.Height(30));
            GUI.color = Color.white;
        }
示例#2
0
 private void MoveNextImmediateState(Node connectingNode)
 {
     if (connectingNode is StateNode)
     {
         StateNode         node     = connectingNode as StateNode;
         StateMachineGraph fsmGraph = graph as StateMachineGraph;
         fsmGraph.TransitionToState(node);
     }
 }
示例#3
0
        /// <summary>
        /// Finds the owner of our state machine if one exists.
        /// </summary>
        /// <param name="fsmgraph"></param>
        private void FindOwner_Editor(StateMachineGraph fsmgraph)
        {
            var stateMachines = GameObject.FindObjectsOfType <StateMachine>();

            for (int i = 0; i < stateMachines.Length; i++)
            {
                if (stateMachines[i].CompareCurrentGraph(fsmgraph))
                {
                    fsmgraph.SetStateMachineOwner(stateMachines[i].gameObject);
                }
            }
        }
示例#4
0
        public void OnEnter()
        {
            StateMachineGraph fsmGraph = graph as StateMachineGraph;

            if (this.thisState != null)
            {
                GameObject owner = fsmGraph.GetStateMachineOwner();
                if (owner != null)
                {
                    this.thisState.OnEnterState(owner);
                }
            }
        }
示例#5
0
        public override void OnBodyGUI()
        {
            base.OnBodyGUI();
            StateNode         node     = target as StateNode;
            StateMachineGraph fsmgraph = node.graph as StateMachineGraph;

            if (fsmgraph.GetStateMachineOwner() == null)
            {
                FindOwner_Editor(fsmgraph);
            }

            if (GUILayout.Button("Proceed State"))
            {
                fsmgraph.NextState();
            }

            if (GUILayout.Button("Set as default state"))
            {
                node.name             = "Starting State";
                fsmgraph.defaultState = node;
            }
        }
示例#6
0
        public void MoveNext()
        {
            StateMachineGraph fsmGraph = graph as StateMachineGraph;

            if (fsmGraph.currentState != this)
            {
                Debug.LogError("This node is not the current one.");
                return;
            }

            NodePort exitPort = GetPort("exitState");

            if (!exitPort.IsConnected)
            {
                Debug.LogError("State exit port is not connected");
                return;
            }

            MoveNextImmediateState(exitPort.Connection.node);
            MoveNextTransition(exitPort.Connection.node);
            MoveNextForwarded(exitPort.Connection.node);
        }