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); } }
/// <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); } }
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); }
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); }
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); }
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 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); } }
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); } } }
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); }