protected override void Update(GameTime gameTime) { cursorPos = new Vector2(Mouse.GetState().X, Mouse.GetState().Y); // Updating the game while in Start Menu // When game is at start menu it adds music and checks if we press // the buttons. If we do press the buttons it changes the game state // and changes other variables. if (gameState == GameState.StartMenu) { // Music Properties if (MediaPlayer.State != MediaState.Playing) { MediaPlayer.Play(menuSong); MediaPlayer.IsRepeating = true; MediaPlayer.Volume = 0.1f; } // When pressing the Play Button if (playButton.clicked) { clickSound.Play(); levelMenu1 = true; gameState = GameState.LevelMenu; playButton.clicked = false; } // When pressing the Quit Button if (quitButton.clicked) { this.Exit(); } // When pressing name check button if (checkButton.clicked) { clickSound.Play(); checkedPlayerName = playerName; checkButton.clicked = false; } playButton.Update(); quitButton.Update(); checkButton.Update(); // Player name input foreach (Keys k in Keyboard.GetState().GetPressedKeys()) { if ((k >= Keys.A && k <= Keys.Z) && Input.IsKeyReleased(k)) { playerName += k.ToString(); } if ((k == Keys.Enter) && Input.IsKeyReleased(k)) { checkedPlayerName = playerName; } if ((k == Keys.Back) && Input.IsKeyReleased(k)) { if (playerName.Length < 0) { playerName += ""; } else { playerName = playerName.Remove(playerName.Length - 1); } } } } // Updating the game while in LEVEL MENU and so it means that it is testing // if the buttons are clicked and if so it changes the game state and the level. if (gameState == GameState.LevelMenu) { if (levelMenu1 == true) { if (nivel1Button.clicked) { InitializeLevel(0); nivel1Button.clicked = false; } if (nivel2Button.clicked) { InitializeLevel(1); nivel2Button.clicked = false; } if (nivel3Button.clicked) { InitializeLevel(2); nivel3Button.clicked = false; } if (nivel4Button.clicked) { InitializeLevel(3); nivel4Button.clicked = false; } if (nivel5Button.clicked) { InitializeLevel(4); nivel5Button.clicked = false; } if (nivel6Button.clicked) { InitializeLevel(5); nivel6Button.clicked = false; } if (previousMenuButton.clicked) { clickSound.Play(); levelMenu1 = false; levelMenu2 = false; gameState = GameState.StartMenu; previousMenuButton.clicked = false; } if (nextMenuButton.clicked) { clickSound.Play(); levelMenu1 = false; levelMenu2 = true; nextMenuButton.clicked = false; } nivel1Button.Update(); nivel2Button.Update(); nivel3Button.Update(); nivel4Button.Update(); nivel5Button.Update(); nivel6Button.Update(); previousMenuButton.Update(); nextMenuButton.Update(); } if (levelMenu2 == true) { if (nivel7Button.clicked) { InitializeLevel(6); nivel7Button.clicked = false; } if (nivel8Button.clicked) { InitializeLevel(7); nivel8Button.clicked = false; } if (nivel9Button.clicked) { InitializeLevel(8); nivel9Button.clicked = false; } if (nivel10Button.clicked) { InitializeLevel(9); nivel10Button.clicked = false; } if (nivel11Button.clicked) { InitializeLevel(10); nivel11Button.clicked = false; } if (nivel12Button.clicked) { InitializeLevel(11); nivel12Button.clicked = false; } if (previousMenuButton.clicked) { clickSound.Play(); levelMenu1 = true; levelMenu2 = false; previousMenuButton.clicked = false; } nivel7Button.Update(); nivel8Button.Update(); nivel9Button.Update(); nivel10Button.Update(); nivel11Button.Update(); nivel12Button.Update(); previousMenuButton.Update(); } } // Updating the game while in Playing, Pause and GameOver if (gameState == GameState.Playing) { // In Playing Mode. if (isPlaying == true) { // It checks if the pause is clicked to go to the pause menu. if (pauseButton.clicked) { isPaused = true; pauseButton.clicked = false; } // Shooting // Pressing mouse left click and verifing if some variables are true // shoots the flask by calculating direction vector between mouse position and // flask position and gives him a velocity by multiplying the position w/ the speed. if (Input.IsMousePressed()) { if ((gun.canShoot) && (Mouse.GetState().X > 200)) { flaskSound.Play(0.3f, 0.6f, 0); flask = currentLevel.flaskList[currentFlask]; flask.position = new Vector2(70, 375); Vector2 direction = new Vector2(Mouse.GetState().X - flask.position.X, Mouse.GetState().Y - flask.position.Y); direction.Normalize(); flask.velocity = direction * flask.speed; currentFlask++; gun.canShoot = false; flask.visible = true; flask.idleRotation = 2; currentLevel.attemptScore -= 10000; } } // Collisions and Gravity Fields if ((gun.canShoot == false) && (flask != null)) { //Shoot enabled when flask reaches screen bounds if (GraphicsDevice.Viewport.Bounds.Contains(flask.myspace) == false) { flaskLostSound.Play(0.8f, 0.3f, 0); currentLevel.orbitingScore = 0; gun.canShoot = true; flask.visible = false; if (currentFlask >= 4) { if (currentLevel.IsFinished == false) { gameState = GameState.GameOver; } currentFlask = 0; } } // For each flask in the list it calculates its update foreach (Flask f in currentLevel.flaskList) { f.Update(gameTime.ElapsedGameTime); } // For each planet in the list foreach (Planet p in currentLevel.planetList) { // Calculates flask gravity when entering planet atmosphere if (flask.calculateGravity(p)) { currentLevel.orbitingScore += 105; } // When flask colide with any planet if (Vector2.Distance(new Vector2(flask.myspace.Center.X, flask.myspace.Center.Y), new Vector2(p.myspace.Center.X, p.myspace.Center.Y)) < p.radius + 15) { if (p.isTarget == true) { currentLevel.IsFinished = true; } else { currentLevel.orbitingScore = 0; flask.visible = false; gun.canShoot = true; crashingSound.Play(); } // If the fourth flask colides with any planet, despite the target, its GameOver if (currentFlask >= 4) { if (currentLevel.IsFinished == false) { gameState = GameState.GameOver; } currentFlask = 0; } } } } foreach (Planet p in currentLevel.planetList) { p.Update(gameTime.ElapsedGameTime); } gun.Update(gameTime.ElapsedGameTime); pauseButton.Update(); } // In Pause Menu if (isPaused == true) { isPlaying = false; // Click Resume Button to go back to the playing state if (pauseResumeButton.clicked) { isPaused = false; isPlaying = true; pauseResumeButton.clicked = false; } // Click Menu Button to go back to level menu if ((pauseMenuButton.clicked)) { isPaused = false; isPlaying = false; gameState = GameState.LevelMenu; pauseMenuButton.clicked = false; } // It checks if the retry button is clicked to reset the level. if (pauseRestartButton.clicked) { isPaused = false; pauseRestartButton.clicked = false; InitializeLevel(Level.n_level); } pauseResumeButton.Update(); pauseMenuButton.Update(); pauseRestartButton.Update(); } // In Finish Mode if (currentLevel.IsFinished == true) { isPlaying = false; finalRetryButton.Update(); currentLevel.UpdateFinish(); if ((Level.n_level < 0) || (Level.n_level > levelList.Count - 1)) { gameState = GameState.LevelMenu; MediaPlayer.Play(menuSong); } else if (currentLevel.IsFinished == false) { InitializeLevel(Level.n_level); } // It checks if the retry button is clicked to reset the level. if (finalRetryButton.clicked) { isPaused = false; finalRetryButton.clicked = false; InitializeLevel(Level.n_level); } } } if (gameState == GameState.GameOver) { if (gameoverMenuButton.clicked) { gameState = GameState.LevelMenu; gameoverMenuButton.clicked = false; } if (gameoverRetryButton.clicked) { gameState = GameState.Playing; InitializeLevel(Level.n_level); gameoverRetryButton.clicked = false; } gameoverMenuButton.Update(); gameoverRetryButton.Update(); } base.Update(gameTime); }