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);
    }
Exemplo n.º 2
0
    //[ExpectedException]
    public void TestInitializedTwice()
    {
        //Should this throw an error? I'm not sure?
        var fsm = engine.Initialize <TestStates>(behaviour);

        fsm = engine.Initialize <TestStates>(behaviour);
    }
Exemplo n.º 3
0
    //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));
    }
Exemplo n.º 4
0
        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);
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
    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);
    }