Example #1
0
        // ------------------------------------------------------------------------------------
        #region Transition manipulation

        // Add animation leading from one node to another.
        // You can pass existing instance of transition (for example, you need subclass), however, it must not be present anywhere else.
        // Returns instanced transition, where you can add your conditions etc.
        // Returns null on failure.
        public MyStateMachineTransition AddTransition(string startNodeName, string endNodeName, MyStateMachineTransition existingInstance = null)
        {
            // nodes are passed through their names because of these checks:
            var startNode = FindNode(startNodeName);
            var endNode   = FindNode(endNodeName);

            if (startNode == null || endNode == null)
            {
                return(null);
            }

            MyStateMachineTransition rtnTransition;

            if (existingInstance == null)
            {
                // autocreate
                rtnTransition = new MyStateMachineTransition();
            }
            else
            {
                // check
                Debug.Assert(existingInstance.TargetNode == null, "Target node of existing transition must be null.");
                rtnTransition = existingInstance;
            }

            m_transitionIdCounter++;
            rtnTransition._SetId(m_transitionIdCounter);
            rtnTransition.TargetNode = endNode;

            startNode.Transitions.Add(rtnTransition);
            m_transitions.Add(m_transitionIdCounter, new MyStateMachineTransitionWithStart(startNode, rtnTransition));
            return(rtnTransition);
        }
Example #2
0
 // Fires change event for all registered instances.
 private void NotifyCursorChanged(MyStateMachineTransition transition)
 {
     if (OnCursorStateChanged != null)
     {
         OnCursorStateChanged(transition.Id, Node, StateMachine);
     }
 }
 protected override void TransitionRemovedInternal(MyStateMachineTransition transition)
 {
     // is Incoming edge
     if (transition.TargetNode == this)
     {
         var transitionIndex = InTransitions.IndexOf(transition);
         m_cursorsFromInEdgesReceived.RemoveAt(transitionIndex);
     }
 }
 // Performs transition to different state. Fires state change event.
 public void FollowTransition(MyStateMachineTransition transition)
 {
     Debug.Assert(Node.OutTransitions.Contains(transition));
     // Manage Nodes cursors set.
     Node.Cursors.Remove(this);
     transition.TargetNode.Cursors.Add(this);
     // Do transition
     Node = transition.TargetNode;
     LastTransitionTakenId = transition.Id;
     NotifyCursorChanged(transition);
 }
Example #5
0
 // Performs transition to different state. Fires state change event.
 public void FollowTransition(MyStateMachineTransition transition)
 {
     Debug.Assert(Node.OutTransitions.Contains(transition));
     // Manage Nodes cursors set.
     Node.Cursors.Remove(this);
     transition.TargetNode.Cursors.Add(this);
     // Do transition
     Node = transition.TargetNode;
     LastTransitionTakenId = transition.Id;
     NotifyCursorChanged(transition);
 }
 protected override void TransitionAddedInternal(MyStateMachineTransition transition)
 {
     // is Incoming edge
     if (transition.TargetNode == this)
     {
         m_cursorsFromInEdgesReceived.Add(false);
     }
     else
     {
         Debug.Assert(OutTransitions.Count < 2, "Only one output per barrier node intended.");
     }
 }
Example #7
0
 /// <summary>
 /// Called before Transition remove.
 /// Override for custom behavior.
 /// </summary>
 protected virtual void TransitionRemovedInternal(MyStateMachineTransition transition)
 {
 }
Example #8
0
 // Gets called by state machine when transtion is removed
 // Leave INTERNAL
 internal void TransitionRemoved(MyStateMachineTransition transition)
 {
     TransitionRemovedInternal(transition);
 }
Example #9
0
        // ------------------------------------------------------------------------------------
        #region Transition manipulation

        // Add animation leading from one node to another.
        // You can pass existing instance of transition (for example, you need subclass), however, it must not be present anywhere else.
        // Returns instanced transition, where you can add your conditions etc.
        // Returns null on failure.
        public MyStateMachineTransition AddTransition(string startNodeName, string endNodeName, MyStateMachineTransition existingInstance = null)
        {
            // nodes are passed through their names because of these checks:
            var startNode = FindNode(startNodeName);
            var endNode = FindNode(endNodeName);
            if (startNode == null || endNode == null)
                return null;

            MyStateMachineTransition rtnTransition;
            if (existingInstance == null)
            {
                // autocreate
                rtnTransition = new MyStateMachineTransition();
            }
            else
            {
                // check
                Debug.Assert(existingInstance.TargetNode == null, "Target node of existing transition must be null.");
                rtnTransition = existingInstance;
            }

            m_transitionIdCounter++;
            rtnTransition._SetId(m_transitionIdCounter);
            rtnTransition.TargetNode = endNode;

            startNode.Transitions.Add(rtnTransition);
            m_transitions.Add(m_transitionIdCounter, new MyStateMachineTransitionWithStart(startNode, rtnTransition));
            return rtnTransition;
        }
 /// <summary>
 /// Called before Transition remove.
 /// Override for custom behavior.
 /// </summary>
 protected virtual void TransitionRemovedInternal(MyStateMachineTransition transition) { }
 // Gets called by state machine when transtion is removed
 // Leave INTERNAL
 internal void TransitionRemoved(MyStateMachineTransition transition)
 {
     TransitionRemovedInternal(transition);
 }
Example #12
0
 /// <summary>
 /// Full constructor.
 /// </summary>
 public MyStateMachineTransitionWithStart(MyStateMachineNode startNode, MyStateMachineTransition transition)
 {
     StartNode  = startNode;
     Transition = transition;
 }
 /// <summary>
 /// Full constructor.
 /// </summary>
 public MyStateMachineTransitionWithStart(MyStateMachineNode startNode, MyStateMachineTransition transition)
 {
     StartNode = startNode;
     Transition = transition;
 }
 // Fires change event for all registered instances.
 private void NotifyCursorChanged(MyStateMachineTransition transition)
 {
     if(OnCursorStateChanged != null)
         OnCursorStateChanged(transition.Id, Node, StateMachine);
 }