/// <summary> /// Allows the game to run logic such as player input and character selection, /// also changes visual representation of selected/unselected characters /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> public void Update(GameTime gameTime) { if (isConnected) { if (!isNewGame) { // Allows the game to exit if (InputHelper.GetInput(currentPlayer.playerIndex).IsPressed(Keys.Escape, Buttons.Back) && currentPlayer.timer <= 0) { if (currentPlayerIndex == 0) { game.Exit(); } else { currentPlayerIndex--; currentPlayer = players.ElementAt(currentPlayerIndex); currentPlayer.Timer = controllerDelay; currentPlayer.Selected = false; } } if (InputHelper.GetInput(PlayerIndex.One).IsPressed(Keys.Enter, Buttons.Start)) { playerOne.Connected = true; if (!players.Contains(playerOne)) { players.Add(playerOne); } } if (InputHelper.GetInput(PlayerIndex.Two).IsPressed(Keys.Enter, Buttons.Start)) { playerTwo.Connected = true; if (!players.Contains(playerTwo)) { players.Add(playerTwo); } } if (InputHelper.GetInput(PlayerIndex.Three).IsPressed(Keys.Enter, Buttons.Start)) { playerThree.Connected = true; if (!players.Contains(playerThree)) { players.Add(playerThree); } } if (InputHelper.GetInput(PlayerIndex.Four).IsPressed(Keys.Enter, Buttons.Start)) { playerFour.Connected = true; if (!players.Contains(playerFour)) { players.Add(playerFour); } } #if XBOX // If windows we don't want to disconnect the keyboard, which is player one if (!UserInput.GetInput(PlayerIndex.One).IsGamePadConnected()) { players.Remove(playerOne); playerOne.Connected = false; } #endif if (!InputHelper.GetInput(PlayerIndex.Two).IsGamePadConnected()) { players.Remove(playerTwo); playerTwo.Connected = false; } if (!InputHelper.GetInput(PlayerIndex.Three).IsGamePadConnected()) { players.Remove(playerThree); playerThree.Connected = false; } if (!InputHelper.GetInput(PlayerIndex.Four).IsGamePadConnected()) { players.Remove(playerFour); playerFour.Connected = false; } if (currentPlayer.Connected) { currentPlayer.Timer -= (float)gameTime.ElapsedGameTime.Milliseconds; if (!currentPlayer.Selected && currentPlayer.Timer <= 0) { currentPlayer.timer = controllerDelay; if (InputHelper.GetInput(currentPlayer.playerIndex).IsPressed(Keys.Down, Buttons.DPadDown)) { selectedGameSave++; if (selectedGameSave < gameSaves.Count) { foreach (CharSelectPreview preview in gameSaves) { preview.MoveByOffset(-movementOffset); preview.Color = unselected; } } else { selectedGameSave = 0; foreach (CharSelectPreview preview in gameSaves) { preview.MoveByOffset((movementOffset * (gameSaves.Count - 1))); preview.Color = unselected; } } cursorMoved = true; gameSaves.ElementAt(selectedGameSave).Color = selected; } if (InputHelper.GetInput(currentPlayer.playerIndex).IsPressed(Keys.Up, Buttons.DPadUp)) { selectedGameSave--; if (selectedGameSave >= 0) { foreach (CharSelectPreview preview in gameSaves) { preview.MoveByOffset((movementOffset)); preview.Color = unselected; } } else { selectedGameSave = gameSaves.Count - 1; foreach (CharSelectPreview preview in gameSaves) { preview.MoveByOffset(-(movementOffset * (gameSaves.Count - 1))); preview.Color = unselected; } } cursorMoved = true; gameSaves.ElementAt(selectedGameSave).Color = selected; } if (InputHelper.GetInput(currentPlayer.playerIndex).IsPressed(Keys.Space, Buttons.A)) { currentPlayer.Timer = controllerDelay; if (selectedGameSave == 0) { isNewGame = true; CharacterSelectionScreen.selectionDone = false; currentPlayer.GameSave = gameSaves.ElementAt(selectedGameSave); //currentPlayer.GameSave.FileNumber = gameSaves.Count; currentPlayer.GameSave.NewGame = true; CharacterSelectionScreen.LoadContent(currentPlayer); } else { currentPlayer.GameSave = gameSaves.ElementAt(selectedGameSave); currentPlayer.Selected = true; currentPlayer.Cursor.Color = unselected; currentPlayerIndex++; // If we are on the last player in the wait list, go to the networking screen if (currentPlayerIndex == players.Count) { GoToNetworking(); } else { gameSaves.Remove(currentPlayer.GameSave); currentPlayer = players.ElementAt(currentPlayerIndex); currentPlayer.Selected = false; currentPlayer.Cursor.Color = selected; ReloadGameSaves(); currentPlayer.Timer = controllerDelay; } } } if (InputHelper.GetInput(currentPlayer.playerIndex).IsPressed(Keys.Escape, Buttons.Back)) { currentPlayer.Timer = controllerDelay; if (selectedGameSave != 0) { DoGameDelete(LoadGameSave(gameSaves.ElementAt(selectedGameSave))); } } if (GamePad.GetState(currentPlayer.PlayerIndex).Buttons.B == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.B)) { //currentPlayer.selected = false; //currentPlayer.cursor.Color = Color.White; } } } // If there has been a cursor movement, play the sound if (cursorMoved) { soundEffect.Play(); cursorMoved = false; } } else { CharacterSelectionScreen.Update(gameTime); if (CharacterSelectionScreen.selectionDone) { isNewGame = false; CharacterSelectionScreen.selectionDone = false; if (currentPlayer.Selected) { currentPlayer.Cursor.Color = unselected; currentPlayerIndex++; // If we are on the last player in the wait list, go to the networking screen if (currentPlayerIndex == players.Count) { GoToNetworking(); } else { gameSaves.Remove(currentPlayer.GameSave); currentPlayer = players.ElementAt(currentPlayerIndex); currentPlayer.Selected = false; currentPlayer.Cursor.Color = selected; ReloadGameSaves(); currentPlayer.Timer = controllerDelay; } } } } } }
/// <summary> /// Allows the game 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> protected override void Update(GameTime gameTime) { // Allows the game to exit if (InputHelper.GetInput(PlayerIndex.One).IsPressed(Keys.Escape, Buttons.Back)) { this.Exit(); } float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds; switch (GameState) { case GameState.SplashScreen: SplashSystem.Update(elapsedTime); break; case GameState.SignIn: // Requires at least one player to sign in if (Gamer.SignedInGamers.Count == 0) { if (IsActive) { Guide.ShowSignIn(4, false); InputHelper.DisableAll(); } } else { GameState = GameState.SplashScreen; SplashSystem.Load(SplashSystem.SplashType.GameStart); InputHelper.EnableAll(); if (!ContinueNewGameScreen.isConnected) { ContinueNewGameScreen.LoadContent(); ContinueNewGameScreen.isConnected = true; ContinueNewGameScreen.loadGameSaves(); } } break; case GameState.CharacterSelection: // TODO: Update character selection screen SpriteAnimationSystem.Update(elapsedTime); ContinueNewGameScreen.Update(gameTime); break; case GameState.NetworkSetup: NetworkSystem.Update(elapsedTime); break; case GameState.GameMenu: // TODO: Update game menu screen // Game Menu does not pause game! // Update game systems NetworkSystem.Update(elapsedTime); MovementSystem.Update(elapsedTime); break; case GameState.Gameplay: // Update game systems #if DEBUG if (InputHelper.GetInput(PlayerIndex.One).IsPressed(Keys.OemTilde)) { GameState = DungeonCrawler.GameState.SplashScreen; SplashSystem.Load(Systems.SplashSystem.SplashType.Credits); return; } #endif InputSystem.Update(elapsedTime); NetworkSystem.Update(elapsedTime); MovementSystem.Update(elapsedTime); WeaponSystem.Update(elapsedTime); SkillSystem.Update(elapsedTime); LevelManager.Update(elapsedTime); CollisionSystem.Update(elapsedTime); HUDSystem.Update(elapsedTime); QuestLogSystem.Update(elapsedTime); SpriteAnimationSystem.Update(elapsedTime); NpcAISystem.Update(elapsedTime); EnemyAISystem.Update(elapsedTime); TextSystem.Update(elapsedTime); EngineeringOffenseSystem.Update(elapsedTime); GarbagemanSystem.Update(elapsedTime); /* * if (pI.Health <= 0) * { * GameState = DungeonCrawler.GameState.SplashScreen; * SplashSystem.Load(Systems.SplashSystem.SplashType.GameOver); * return; * }*/ break; case GameState.Credits: // TODO: Update credits break; case GameState.RoomChange: NetworkSystem.Update(elapsedTime); RoomChangingSystem.Update(elapsedTime); break; } base.Update(gameTime); }
/// <summary> /// Allows the game to run logic such as player input and character selection, /// also changes visual representation of selected/unselected characters /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> public void Update(GameTime gameTime) { // Allows the game to exit InputHelper state = InputHelper.GetInput(currentPlayer.playerIndex); if (state.IsPressed(Keys.Escape, Buttons.Back)) { currentPlayer.Timer = controllerDelay; selectionDone = true; } if (!currentPlayer.Connected) { selectionDone = true; } if (currentPlayer.Connected) { currentPlayer.Timer -= (float)gameTime.ElapsedGameTime.Milliseconds; if (!currentPlayer.Selected && currentPlayer.Timer <= 0) { if (state.IsPressed(Keys.Down, Buttons.DPadDown) || state.IsPressed(Keys.Up, Buttons.DPadUp)) { currentPlayer.MoveUpDown(); currentPlayer.Cursor.Position = buttons[currentPlayer.YPos, currentPlayer.XPos].Position; currentPlayer.Timer = controllerDelay; cursorMoved = true; } if (state.IsPressed(Keys.Left, Buttons.DPadLeft)) { currentPlayer.MoveLeft(); currentPlayer.Cursor.Position = buttons[currentPlayer.YPos, currentPlayer.XPos].Position; currentPlayer.Timer = controllerDelay; cursorMoved = true; } if (state.IsPressed(Keys.Right, Buttons.DPadRight)) { currentPlayer.MoveRight(); currentPlayer.Cursor.Position = buttons[currentPlayer.YPos, currentPlayer.XPos].Position; currentPlayer.Timer = controllerDelay; cursorMoved = true; } if (state.IsPressed(Keys.Enter, Buttons.A)) { currentPlayer.Selected = true; currentPlayer.GameSave.Aggregate = (int)buttonAggregates[currentPlayer.YPos, currentPlayer.XPos]; currentPlayer.GameSave.CharType.Text = buttonTexts[currentPlayer.YPos, currentPlayer.XPos].Text; selectionDone = true; currentPlayer.Timer = controllerDelay; } } } // Update the color of the character images if the are/are not selected for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { if (currentPlayer.YPos == i && currentPlayer.XPos == j) { buttons[i, j].Color = selected; } else { buttons[i, j].Color = unselected; } } } // If there has been a cursor movement, play the sound if (cursorMoved) { soundEffect.Play(); cursorMoved = false; } }