- // Get user's input state.\r
-\r
- KeyboardState keyState = Keyboard.GetState();\r
- MouseState mouseState = Mouse.GetState();\r
-\r
- // Make a list of the keys pressed or released this frame.\r
-\r
- List<Keys> pressedKeys = new List<Keys>();\r
- List<Keys> releasedKeys = new List<Keys>();\r
-\r
- Keys[] pressedKeysArray = keyState.GetPressedKeys();\r
- foreach (Keys k in pressedKeysArray)\r
- if (!lastPressedKeys.Contains(k))\r
- pressedKeys.Add(k);\r
- else\r
- lastPressedKeys.Remove(k);\r
-\r
- releasedKeys = lastPressedKeys;\r
- lastPressedKeys = new List<Keys>(pressedKeysArray);\r
-\r
- // Get mouse button state.\r
-\r
- bool buttonPressed = mouseState.LeftButton == ButtonState.Pressed;\r
-\r
- /***** Begining of game logic. *****/\r
-\r
- // Debug - allow user to exit.\r
-\r
- if (pressedKeys.Contains(Keys.Escape))\r
- this.Exit();\r
-\r
- // Debug - allow user on this machine to direct input to any player's state in the game.\r
-\r
- if (pressedKeys.Contains(Keys.F1)) activePlayer = playerIdentifiers[0];\r
- if (pressedKeys.Contains(Keys.F2)) activePlayer = playerIdentifiers[1];\r
- if (pressedKeys.Contains(Keys.F3)) activePlayer = playerIdentifiers[2];\r
- if (pressedKeys.Contains(Keys.F4)) activePlayer = playerIdentifiers[3];\r
-\r
- // Debug - allow user on this machine to pause/resume game state advances.\r
-\r
- if (pressedKeys.Contains(Keys.F12) ||\r
- pressedKeys.Contains(Keys.P) && (keyState.IsKeyDown(Keys.LeftControl) || keyState.IsKeyDown(Keys.RightControl)))\r
- {\r
- paused = !paused;\r
- return; // Don't update on pause start or stop\r
- }\r
-\r
- // Debug - automatically pause every 1000 frames.\r
-\r
- if (deterministicGame.CurrentFrameNumber % 1000 == 0 && deterministicGame.CurrentFrameNumber != lastAutoPause)\r
- {\r
- paused = true;\r
- lastAutoPause = deterministicGame.CurrentFrameNumber;\r
- }\r
-\r
- // Game update\r
-\r
- // Direct inputs to the game engine - only report changes.\r
-\r
- foreach (Keys k in pressedKeys)\r
- deterministicGame.ApplyKeyInput(activePlayer, k, true);\r
-\r
- foreach (Keys k in releasedKeys)\r
- deterministicGame.ApplyKeyInput(activePlayer, k, false);\r
-\r
- deterministicGame.ApplyMouseLocationInput(activePlayer, mouseState.X, mouseState.Y);\r
-\r
- if (lastButtonPressed != buttonPressed)\r
- deterministicGame.ApplyMouseButtonInput(activePlayer, buttonPressed);\r
-\r
- lastButtonPressed = buttonPressed;\r
-\r
- if (!paused)\r
- {\r
- // Advance the game engine.\r
-\r
- deterministicGame.Update(targetTimeSpan);\r
- }\r
-\r
- /***** End of game logic. *****/\r