示例#1
0
        public void Can_transition_between_states()
        {
            using (new StateProviderFixture())
            {
                StateProvider.Setup <ThreeValidStaticStates>();

                var data  = new ThreeValidStatesData();
                var actor = new ThreeValidStaticStates();

                actor.SetState <ThreeValidStaticStates.StateA>(data);
                actor.SetState <ThreeValidStaticStates.StateB>(data);
                actor.SetState <ThreeValidStaticStates.StateC>(data);

                Assert.True(data.BeginStateA);
                Assert.True(data.EndStateA);
                Assert.True(data.BeginStateB);
                Assert.True(data.EndStateB);

                // last state was C
                Assert.Equal(typeof(ThreeValidStaticStates.StateC), actor.CurrentState.GetType());
                Assert.Equal("ThreeValidStaticStates (StateC)", actor.DisplayName);

                // all states A and C have names
                Assert.NotNull(actor.GetState <ThreeValidStaticStates.StateA>().Name);
                Assert.NotNull(actor.GetState <ThreeValidStaticStates.StateC>().Name);

                // can lookup state by name
                Assert.Equal(typeof(ThreeValidStaticStates.StateA), actor.GetStateByName("StateA").GetType());

                // can enumerate all states
                var allStates = StateProvider.GetAllStatesByType <ThreeValidStaticStates>();
                Assert.Equal(4, allStates.Count);
            }
        }
示例#2
0
        public void BeforeBegin_failure_blocks_state_transition()
        {
            using (new StateProviderFixture())
            {
                StateProvider.Setup <ThreeValidStaticStates>();

                var data = new ThreeValidStatesData {
                    AllowBeginStateC = false
                };
                var actor = new ThreeValidStaticStates();

                Assert.Equal(typeof(StateProvider.State), actor.CurrentState.GetType());
                actor.SetState <ThreeValidStaticStates.StateC>(data);
                Assert.Equal(typeof(StateProvider.State), actor.CurrentState.GetType());
            }
        }
示例#3
0
        public void Reentrant_state_ends_itself()
        {
            using (new StateProviderFixture())
            {
                StateProvider.Setup <ThreeValidStaticStates>();

                var data  = new ThreeValidStatesData();
                var actor = new ThreeValidStaticStates();

                actor.SetState <ThreeValidStaticStates.StateA>(data);
                actor.SetState <ThreeValidStaticStates.StateA>(data, true);

                Assert.True(data.BeginStateA);
                Assert.True(data.EndStateA);
            }
        }
示例#4
0
        public void Non_reentrant_state_does_nothing_when_reentering()
        {
            using (new StateProviderFixture())
            {
                StateProvider.Setup <ThreeValidStaticStates>();

                var data  = new ThreeValidStatesData();
                var actor = new ThreeValidStaticStates();

                actor.SetState <ThreeValidStaticStates.StateA>(data);
                actor.SetState <ThreeValidStaticStates.StateA>(data);

                Assert.True(data.BeginStateA);
                Assert.False(data.EndStateA);
            }
        }
示例#5
0
        public void Update_respects_current_state_and_is_optional()
        {
            using (new StateProviderFixture())
            {
                StateProvider.Setup <ThreeValidStaticStates>();

                var data  = new ThreeValidStatesData();
                var actor = new ThreeValidStaticStates();

                Assert.Equal(0, data.TicksA);
                Assert.Equal(0, data.TicksB);

                actor.SetState <ThreeValidStaticStates.StateA>(data);
                actor.Update(data);
                actor.SetState <ThreeValidStaticStates.StateB>(data);
                actor.Update(data);
                actor.SetState <ThreeValidStaticStates.StateC>(data);
                actor.Update(data);

                Assert.Equal(1, data.TicksA);
                Assert.Equal(1, data.TicksB);
            }
        }
示例#6
0
 private void EndState(ThreeValidStatesData stateData, State nextState)
 {
 }
示例#7
0
 private bool State_StateC_BeforeEndState(ThreeValidStatesData stateData, State previousState)
 {
     return(stateData.AllowEndStateC);
 }
示例#8
0
 private void BeginState(ThreeValidStatesData stateData, State previousState)
 {
 }
示例#9
0
 private bool State_StateC_BeforeBeginState(ThreeValidStatesData stateData, State nextState)
 {
     return(stateData.AllowBeginStateC);
 }
示例#10
0
 private void State_StateB_Update(ThreeValidStatesData stateData)
 {
     stateData.TicksB++;
 }
示例#11
0
 private void StateB_EndState(ThreeValidStatesData stateData, State nextState)
 {
     stateData.EndStateB = true;
 }
示例#12
0
 private void StateB_BeginState(ThreeValidStatesData stateData, State previousState)
 {
     stateData.BeginStateB = true;
 }