public void TestNoCrossTalk() { var fsm1 = engine.Initialize <States>(behaviour1, States.One); var fsm2 = engine.Initialize <States>(behaviour2, States.Two); var fsm3 = engine.Initialize <States>(behaviour3, States.One); fsm2.ChangeState(States.Three); fsm2.ChangeState(States.Two); fsm3.ChangeState(States.Three); Assert.AreEqual(1, behaviour1.oneStats.enterCount); Assert.AreEqual(0, behaviour1.oneStats.exitCount); Assert.AreEqual(0, behaviour1.twoStats.enterCount); Assert.AreEqual(0, behaviour1.twoStats.exitCount); Assert.AreEqual(0, behaviour1.threeStats.enterCount); Assert.AreEqual(0, behaviour1.threeStats.exitCount); Assert.AreEqual(0, behaviour2.oneStats.enterCount); Assert.AreEqual(0, behaviour2.oneStats.exitCount); Assert.AreEqual(2, behaviour2.twoStats.enterCount); Assert.AreEqual(1, behaviour2.twoStats.exitCount); Assert.AreEqual(1, behaviour2.threeStats.enterCount); Assert.AreEqual(1, behaviour2.threeStats.exitCount); Assert.AreEqual(1, behaviour3.oneStats.enterCount); Assert.AreEqual(1, behaviour3.oneStats.exitCount); Assert.AreEqual(0, behaviour3.twoStats.enterCount); Assert.AreEqual(0, behaviour3.twoStats.exitCount); Assert.AreEqual(1, behaviour3.threeStats.enterCount); Assert.AreEqual(0, behaviour3.threeStats.exitCount); }
//[ExpectedException] public void TestInitializedTwice() { //Should this throw an error? I'm not sure? var fsm = engine.Initialize <TestStates>(behaviour); fsm = engine.Initialize <TestStates>(behaviour); }
//Static Methods /// <summary> /// Inspects a MonoBehaviour for state methods as definied by the supplied Enum, and returns a stateMachine instance used to trasition states. /// </summary> /// <param name="component">The component with defined state methods</param> /// <returns>A valid stateMachine instance to manage MonoBehaviour state transitions</returns> public static StateMachine <T> Initialize(MonoBehaviour component) { var engine = component.GetComponent <StateMachineRunner>(); if (engine == null) { engine = component.gameObject.AddComponent <StateMachineRunner>(); } return(engine.Initialize <T>(component)); }
public void InitialTransition() { //This is an odd request by a user, where they wanted to use methods declared in a super class. By default we expect this to fail, but we can enable this behaivour //by removing BindingFlags.DeclaredOnly from the reflection routine in StateMachine.cs fsm = engine.Initialize <States>(behaviour, States.One); fsm.ChangeState(States.Two); //Test for when we want to include superclass methods //Assert.AreEqual(1, behaviour.oneStats.enterCount); //Assert.AreEqual(0, behaviour.oneStats.updateCount); //Assert.AreEqual(0, behaviour.oneStats.lateUpdateCount); //Assert.AreEqual(1, behaviour.oneStats.exitCount); //Assert.AreEqual(1, behaviour.oneStats.finallyCount); //Assert.AreEqual(1, behaviour.twoStats.enterCount); //Assert.AreEqual(0, behaviour.twoStats.updateCount); //Assert.AreEqual(0, behaviour.twoStats.lateUpdateCount); //Assert.AreEqual(0, behaviour.twoStats.exitCount); //Assert.AreEqual(0, behaviour.twoStats.finallyCount); //Test for no superclass methods Assert.AreEqual(0, behaviour.oneStats.enterCount); Assert.AreEqual(0, behaviour.oneStats.updateCount); Assert.AreEqual(0, behaviour.oneStats.lateUpdateCount); Assert.AreEqual(0, behaviour.oneStats.exitCount); Assert.AreEqual(0, behaviour.oneStats.finallyCount); Assert.AreEqual(0, behaviour.twoStats.enterCount); Assert.AreEqual(0, behaviour.twoStats.updateCount); Assert.AreEqual(0, behaviour.twoStats.lateUpdateCount); Assert.AreEqual(0, behaviour.twoStats.exitCount); Assert.AreEqual(0, behaviour.twoStats.finallyCount); }
public void NoTransitions() { fsm = engine.Initialize <States>(behaviour); //Goes to start state by default; Assert.AreEqual(0, behaviour.oneStats.enterCount); Assert.AreEqual(0, behaviour.oneStats.updateCount); Assert.AreEqual(0, behaviour.oneStats.lateUpdateCount); Assert.AreEqual(0, behaviour.oneStats.exitCount); Assert.AreEqual(0, behaviour.oneStats.finallyCount); Assert.AreEqual(0, behaviour.twoStats.enterCount); Assert.AreEqual(0, behaviour.twoStats.updateCount); Assert.AreEqual(0, behaviour.twoStats.lateUpdateCount); Assert.AreEqual(0, behaviour.twoStats.exitCount); Assert.AreEqual(0, behaviour.twoStats.finallyCount); Assert.AreEqual(0, behaviour.threeStats.enterCount); Assert.AreEqual(0, behaviour.threeStats.updateCount); Assert.AreEqual(0, behaviour.threeStats.lateUpdateCount); Assert.AreEqual(0, behaviour.threeStats.exitCount); Assert.AreEqual(0, behaviour.threeStats.finallyCount); }
public void InitialTransition() { fsm = engine.Initialize <States>(behaviour, States.One); fsm.ChangeState(States.Two); //Test for when we want to include superclass methods Assert.AreEqual(1, behaviour.oneStats.enterCount); Assert.AreEqual(0, behaviour.oneStats.updateCount); Assert.AreEqual(0, behaviour.oneStats.lateUpdateCount); Assert.AreEqual(1, behaviour.oneStats.exitCount); Assert.AreEqual(1, behaviour.oneStats.finallyCount); Assert.AreEqual(1, behaviour.twoStats.enterCount); Assert.AreEqual(0, behaviour.twoStats.updateCount); Assert.AreEqual(0, behaviour.twoStats.lateUpdateCount); Assert.AreEqual(0, behaviour.twoStats.exitCount); Assert.AreEqual(0, behaviour.twoStats.finallyCount); }
public void InitialTransition() { fsm = engine.Initialize <States>(behaviour, States.One); fsm.ChangeState(States.Two); Assert.AreEqual(1, behaviour.oneStats.enterCount); Assert.AreEqual(0, behaviour.oneStats.updateCount); Assert.AreEqual(0, behaviour.oneStats.lateUpdateCount); Assert.AreEqual(1, behaviour.oneStats.exitCount); Assert.AreEqual(1, behaviour.oneStats.finallyCount); Assert.AreEqual(1, behaviour.twoStats.enterCount); Assert.AreEqual(0, behaviour.twoStats.updateCount); Assert.AreEqual(0, behaviour.twoStats.lateUpdateCount); Assert.AreEqual(0, behaviour.twoStats.exitCount); Assert.AreEqual(0, behaviour.twoStats.finallyCount); Assert.AreEqual(0, behaviour.threeStats.enterCount); Assert.AreEqual(0, behaviour.threeStats.updateCount); Assert.AreEqual(0, behaviour.threeStats.lateUpdateCount); Assert.AreEqual(0, behaviour.threeStats.exitCount); Assert.AreEqual(0, behaviour.threeStats.finallyCount); behaviour.enabled = false; fsm.ChangeState(States.Three); Assert.AreEqual(1, behaviour.oneStats.enterCount); Assert.AreEqual(0, behaviour.oneStats.updateCount); Assert.AreEqual(0, behaviour.oneStats.lateUpdateCount); Assert.AreEqual(1, behaviour.oneStats.exitCount); Assert.AreEqual(1, behaviour.oneStats.finallyCount); Assert.AreEqual(1, behaviour.twoStats.enterCount); Assert.AreEqual(0, behaviour.twoStats.updateCount); Assert.AreEqual(0, behaviour.twoStats.lateUpdateCount); Assert.AreEqual(1, behaviour.twoStats.exitCount); Assert.AreEqual(1, behaviour.twoStats.finallyCount); Assert.AreEqual(1, behaviour.threeStats.enterCount); Assert.AreEqual(0, behaviour.threeStats.updateCount); Assert.AreEqual(0, behaviour.threeStats.lateUpdateCount); Assert.AreEqual(0, behaviour.threeStats.exitCount); Assert.AreEqual(0, behaviour.threeStats.finallyCount); }