示例#1
0
        public void TestUpdateAndDrawListRollbackInSwitch()
        {
            var obscured = new TestGameState();
            var blocker1 = new TestGameState();
            var popup    = new TestGameState();
            var blocker2 = new TestGameState();

            using (var manager = new GameStateManager()) {
                manager.Push(obscured);
                manager.Push(blocker1);
                manager.Push(popup, GameStateModality.Popup);

                manager.Update(new GameTime());
                Assert.AreEqual(0, obscured.UpdateCallCount);
                Assert.AreEqual(1, blocker1.UpdateCallCount);
                Assert.AreEqual(1, popup.UpdateCallCount);
                Assert.AreEqual(0, blocker2.UpdateCallCount);

                manager.Push(blocker2);
                manager.Update(new GameTime());
                Assert.AreEqual(0, obscured.UpdateCallCount);
                Assert.AreEqual(1, blocker1.UpdateCallCount);
                Assert.AreEqual(1, popup.UpdateCallCount);
                Assert.AreEqual(1, blocker2.UpdateCallCount);

                manager.Switch(blocker2, GameStateModality.Popup);
                manager.Update(new GameTime());
                Assert.AreEqual(0, obscured.UpdateCallCount);
                Assert.AreEqual(2, blocker1.UpdateCallCount);
                Assert.AreEqual(2, popup.UpdateCallCount);
                Assert.AreEqual(2, blocker2.UpdateCallCount);
            }
        }
示例#2
0
 /// <summary>
 ///   Allows the game state to run logic such as updating the world,
 ///   checking for collisions, gathering input and playing audio.
 /// </summary>
 /// <param name="gameTime">Provides a snapshot of timing values.</param>
 public override void Update(GameTime gameTime)
 {
     if (this.gameStateLoaded)
     {
         // Game state is loaded, kill the loading screen and switch to the new state
         GameStateManager.Switch(this.gameStateToLoad);
     }
 }
示例#3
0
        public void TestDrawPropagation()
        {
            GameStateManager manager   = new GameStateManager(new GameServiceContainer());
            TestGameState    gameState = new TestGameState(manager);

            manager.Switch(gameState);

            manager.Draw(new GameTime());
            Assert.AreEqual(1, gameState.DrawCallCount);
        }
示例#4
0
        public void TestUpdateForwarding()
        {
            GameStateManager manager   = new GameStateManager(new GameServiceContainer());
            TestGameState    gameState = new TestGameState(manager);

            manager.Switch(gameState);

            manager.Update(new GameTime());
            Assert.AreEqual(1, gameState.UpdateCallCount);
        }
示例#5
0
        public void TestPauseOnPush()
        {
            GameStateManager manager = new GameStateManager(new GameServiceContainer());
            TestGameState    test    = new TestGameState(manager);

            manager.Switch(test);

            Assert.AreEqual(0, test.OnPauseCallCount);
            manager.Push(new TestGameState(manager));
            Assert.AreEqual(1, test.OnPauseCallCount);
        }
示例#6
0
        public void TestLeaveOnDisposal()
        {
            GameStateManager manager = new GameStateManager(new GameServiceContainer());
            TestGameState    test    = new TestGameState(manager);

            manager.Switch(test);

            Assert.AreEqual(0, test.OnLeavingCallCount);
            manager.Dispose();
            Assert.AreEqual(1, test.OnLeavingCallCount);
        }
示例#7
0
        public void TestSwitchOnlyChangesActiveState()
        {
            GameStateManager manager = new GameStateManager(new GameServiceContainer());
            TestGameState    test1   = new TestGameState(manager);
            TestGameState    test2   = new TestGameState(manager);

            manager.Push(test1);
            manager.Push(test2);

            Assert.AreEqual(0, test1.OnLeavingCallCount);
            Assert.AreEqual(0, test2.OnLeavingCallCount);

            manager.Switch(new TestGameState(manager));

            Assert.AreEqual(0, test1.OnLeavingCallCount);
            Assert.AreEqual(1, test2.OnLeavingCallCount);
        }
示例#8
0
        public void TestSwitchOnlyChangesActiveState()
        {
            var obscured = new TestGameState();
            var active   = new TestGameState();

            using (var manager = new GameStateManager()) {
                manager.Push(obscured);
                manager.Push(active);

                Assert.AreEqual(0, obscured.OnLeavingCallCount);
                Assert.AreEqual(0, active.OnLeavingCallCount);

                manager.Switch(new TestGameState());

                Assert.AreEqual(0, obscured.OnLeavingCallCount);
                Assert.AreEqual(1, active.OnLeavingCallCount);
            }
        }
示例#9
0
        public void TestDisposalInSwitch(bool disposalEnabled)
        {
            var test = new TestGameState();

            using (var manager = new GameStateManager()) {
                manager.DisposeDroppedStates = disposalEnabled;
                manager.Push(test);

                Assert.AreEqual(0, test.DisposeCallCount);
                Assert.AreSame(test, manager.Switch(new TestGameState()));
                if (disposalEnabled)
                {
                    Assert.AreEqual(1, test.DisposeCallCount);
                }
                else
                {
                    Assert.AreEqual(0, test.DisposeCallCount);
                }
            }
        }
示例#10
0
        public void TestSwitchToUnenterableState()
        {
            GameStateManager manager = new GameStateManager(new GameServiceContainer());
            TestGameState    test    = new TestGameState(manager);

            manager.Push(new TestGameState(manager));
            manager.Push(test);

            Assert.Throws <InvalidOperationException>(
                delegate() { manager.Switch(new UnenterableGameState(manager)); }
                );

            // Make sure the test state is still running. Whether pause was
            // called zero times or more, we only care that it's running after
            // the push has failed
            Assert.AreEqual(test.OnResumeCallCount, test.OnPauseCallCount);
            // Make sure the state is entered (meaning entered has been called
            // one more time than leave)
            Assert.AreEqual(test.OnLeavingCallCount + 1, test.OnEnteredCallCount);
        }
    public void TestSwitchToUnenterableState() {
      GameStateManager manager = new GameStateManager(new GameServiceContainer());
      TestGameState test = new TestGameState(manager);

      manager.Push(new TestGameState(manager));
      manager.Push(test);

      Assert.Throws<InvalidOperationException>(
        delegate() { manager.Switch(new UnenterableGameState(manager)); }
      );

      // Make sure the test state is still running. Whether pause was
      // called zero times or more, we only care that it's running after
      // the push has failed
      Assert.AreEqual(test.OnResumeCallCount, test.OnPauseCallCount);
      // Make sure the state is entered (meaning entered has been called
      // one more time than leave)
      Assert.AreEqual(test.OnLeavingCallCount + 1, test.OnEnteredCallCount);
    }
    public void TestSwitchOnlyChangesActiveState() {
      GameStateManager manager = new GameStateManager(new GameServiceContainer());
      TestGameState test1 = new TestGameState(manager);
      TestGameState test2 = new TestGameState(manager);

      manager.Push(test1);
      manager.Push(test2);

      Assert.AreEqual(0, test1.OnLeavingCallCount);
      Assert.AreEqual(0, test2.OnLeavingCallCount);

      manager.Switch(new TestGameState(manager));

      Assert.AreEqual(0, test1.OnLeavingCallCount);
      Assert.AreEqual(1, test2.OnLeavingCallCount);
    }
    public void TestPauseOnPush() {
      GameStateManager manager = new GameStateManager(new GameServiceContainer());
      TestGameState test = new TestGameState(manager);

      manager.Switch(test);

      Assert.AreEqual(0, test.OnPauseCallCount);
      manager.Push(new TestGameState(manager));
      Assert.AreEqual(1, test.OnPauseCallCount);
    }
    public void TestLeaveOnDisposal() {
      GameStateManager manager = new GameStateManager(new GameServiceContainer());
      TestGameState test = new TestGameState(manager);

      manager.Switch(test);

      Assert.AreEqual(0, test.OnLeavingCallCount);
      manager.Dispose();
      Assert.AreEqual(1, test.OnLeavingCallCount);
    }
示例#15
0
    public void TestDrawPropagation() {
      GameStateManager manager = new GameStateManager(new GameServiceContainer());
      TestGameState gameState = new TestGameState(manager);
      manager.Switch(gameState);

      manager.Draw(new GameTime());
      Assert.AreEqual(1, gameState.DrawCallCount);
    }
示例#16
0
 public void TestUpdateForwarding() {
   GameStateManager manager = new GameStateManager(new GameServiceContainer());
   TestGameState gameState = new TestGameState(manager);
   manager.Switch(gameState);
   
   manager.Update(new GameTime());
   Assert.AreEqual(1, gameState.UpdateCallCount);
 }