Exemple #1
0
    public void TestTransitionEquals()
    {
        var firstState  = new State();
        var secondState = new State();

        var testTransition1 = new StateTransition(firstState, secondState, "TransitionTrigger");
        var testTransition2 = new StateTransition(firstState, secondState, "TransitionTrigger");
        var testTransition3 = new StateTransition(secondState, firstState, "TransitionTrigger");

        Assert.True(testTransition1.Equals(testTransition2));
        Assert.True(!testTransition1.Equals(testTransition3));
    }
Exemple #2
0
 public void TestStateTransitionEquals()
 {
     var s1 = new StateTransition<SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator,
         SystemStateEvent.AllContextsAreReady);
     var s2 = new StateTransition<SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator,
         SystemStateEvent.AllContextsAreReady);
     Assert.True(s1.Equals(s2), "The two transitions should be equal");
 }
        public void TestStateTransitionEquals()
        {
            var s1 = new StateTransition <SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator,
                                                                         SystemStateEvent.AllContextsAreReady);
            var s2 = new StateTransition <SystemState, SystemStateEvent>(SystemState.WaitingForEvaluator,
                                                                         SystemStateEvent.AllContextsAreReady);

            Assert.True(s1.Equals(s2), "The two transitions should be equal");
        }
Exemple #4
0
        public void Equals_VariousStateTransitionsAndOperators_TestsCorrectly()
        {
            // Arrange
            var stateTransition1 = new StateTransition(new State(OrderStatus.Initialized), new Trigger(OrderEvent.Accepted));
            var stateTransition2 = new StateTransition(new State(OrderStatus.Initialized), new Trigger(OrderEvent.Accepted));
            var stateTransition3 = new StateTransition(new State(OrderStatus.Accepted), new Trigger(OrderEvent.Working));

            // Act
            var result1 = stateTransition1.Equals(stateTransition2);
            var result2 = !stateTransition1.Equals(stateTransition3);
            var result3 = stateTransition1 == stateTransition2;
            var result4 = stateTransition1 != stateTransition3;
            var result5 = stateTransition1.GetHashCode() == stateTransition2.GetHashCode();

            // Assert
            Assert.True(result1);
            Assert.True(result2);
            Assert.True(result3);
            Assert.True(result4);
            Assert.True(result5);
        }
        private void ChangeStateInternal(T newState, StateTransition transition, float enterDuration, float exitDuration)
        {
            if (_stateLookup == null)
            {
                throw new Exception("States have not been configured, please call initialized before trying to set state");
            }

            if (!_stateLookup.ContainsKey(newState))
            {
                throw new Exception("No state with the name " + newState.ToString() +
                                    " can be found. Please make sure you are called the correct type the statemachine was initialized with");
            }

            var nextState = _stateLookup[newState];

            if (_currentState != null && _currentState == nextState)
            {
                return;
            }
            //if (_StateInQeue != null && _StateInQeue == nextState) return;

            if (transition.Equals(StateTransition.Safe))
            {
                if (_currentState == null)                         //for initial run
                {
                    _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                    _StateInQeue = nextState;
                    return;
                }

                if (_currentState.ExitInQue)                        //if current one has exit routine waiting
                {
                    _queHistory.Add(_currentState.CreateNewRoutine(_currentState.HasExitRoutine ? exitDuration : 0f, false));
                    _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                    _StateInQeue = nextState;
                }
                else                                                           //already in current  exit routine
                {
                    if (!_StateInQeue.GetState().Equals(nextState.GetState())) //if next state is not in qeue
                    {
                        _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                        _StateInQeue = nextState;
                    }
                }
            }
            else if (transition.Equals(StateTransition.Overwrite))
            {
                if (_currentState == null)                         //for initial run
                {
                    _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                    _StateInQeue = nextState;
                }
                else
                {
                    //todo test more on OnCancle.Invoke
                    //_StateInQeue.EnterCancel.Invoke();
                    _queHistory.Cancle();
                    _currentState.Finally.Invoke();

                    _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                    _StateInQeue = nextState;
                }
            }
            else                           //blend
            {
                if (_currentState == null) //for initial run
                {
                    _queHistory.Add(nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                    _StateInQeue = nextState;
                    return;
                }
                if (_currentState.ExitInQue)                        //if current one has exit routine, waiting
                {
                    _queHistory.AddPair(_currentState.CreateNewRoutine(_currentState.HasExitRoutine ? exitDuration : 0f, false),
                                        nextState.CreateNewRoutine(nextState.HasEnterRoutine ? enterDuration : 0f, true));
                    _StateInQeue = nextState;
                }
            }
        }