Пример #1
0
 public void Remove(StandardState <TTrigger> state)
 {
     if (states.Contains(state))
     {
         states.Remove(state);
         state.SetParent(null);
     }
 }
Пример #2
0
 public void Add(StandardState <TTrigger> state)
 {
     if (!states.Contains(state))
     {
         states.Add(state);
         state.SetParent(this);
     }
 }
Пример #3
0
        public StandardStateMachine(StandardState <TTrigger> startState)
        {
            Debug.Assert(startState != null);

            this.startState = startState;
            activeState     = null;

            Add(startState);
        }
Пример #4
0
        public void Reboot()
        {
            if (activeState == null)
            {
                return;
            }

            activeState.StopState();
            activeState = null;
        }
Пример #5
0
        public void Step()
        {
            Debug.Assert(startState != null);

            if (activeState == null)
            {
                activeState = startState;
                activeState.StartState();
            }

            using (ProfilingScope.Open(activeState))
            {
                //Find the first triggered transition and consume it
                var transitions = activeState.Transitions;
                foreach (var transition in transitions)
                {
                    if (!transition.IsUsable || !transition.HasTriggered)
                    {
                        continue;
                    }

                    var targetState = transition.TryConsumingTrigger();
                    if (targetState == null)
                    {
                        continue;
                    }

                    //Stop the last state, and start the next one
                    activeState.StopState();
                    activeState = targetState;
                    activeState.StartState();

                    break;
                }

                //Execute the current active state
                activeState.Execute();
            }
        }
Пример #6
0
 protected ProfilingScope(StandardState <TTrigger> state) : base(state.Name)
 {
 }
Пример #7
0
 public void Kill()
 {
     activeState = null;
 }