/// <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) { // MONO: Add your update logic here //In every State you are able to quit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } lastGameState = currentGameState; //MUSIC Updating Timer audioManager.UpdateAudioManagerTimer(gameTime); //Update Timer float animationFrameTime = 0.02f; float gameFrameTime = (float)gameTime.ElapsedGameTime.TotalSeconds; timeUntilNextFrame1 -= gameFrameTime; timeUntilNextFrame2 -= gameFrameTime; switch (currentGameState) { case GameState.SPLASHSCREEN: splashScreen.ClickedButton(); break; case GameState.MAINMENU: if (MediaPlayer.State != 0) { MediaPlayer.Stop(); turnOnMusic = true; } mainMenu.Update(this); this.IsMouseVisible = true; break; case GameState.LEVELEDITOR: levelEditor.HandleLevelEditorEvents(); levelEditor.moveOrDeletePlatforms(ref allGameObjectList, transformationMatrix); this.IsMouseVisible = true; levelEditor.moveCamera(ref cameraOffset); // Makes player movable in the leveleditor //Enemies are alive but not visible gameObjectsToRender = camera.GameObjectsToRender(wormPlayer.gameObjectPosition, allGameObjectList, ref interactiveObject); wormPlayer.Update(gameTime, gameObjectsToRender, ref viewableEnemies, interactiveObject, ref allGameObjectList, loadAndSave, ingameMenus, levelManager, ref allGameObjectList, shopKeeper, itemUIManager, ref hakume); break; case GameState.GAMELOOP: this.IsMouseVisible = false; //MUSIC if (turnOnMusic) { audioManager.Play("IngameMusic"); turnOnMusic = false; } //switch to LevelEditor levelManager.ManageLevels(wormPlayer.gameObjectPosition); itemUIManager.ManageItems(ref wormPlayer, ref levelObjectList); if (currentGameState == GameState.GAMELOOP) { //cameraOffset = new Vector2(0, 0); if (Keyboard.GetState().IsKeyDown(Keys.L) && !previousState.IsKeyDown(Keys.L)) { currentGameState = GameState.LEVELEDITOR; } //previousState = Keyboard.GetState(); if (Keyboard.GetState().IsKeyDown(Keys.M) && !previousState.IsKeyDown(Keys.M) && levelManager.currentLevel != Enums.Level.TUTORIAL) { currentGameState = GameState.MINIMAP; } if ((Keyboard.GetState().IsKeyDown(Keys.P) && !previousState.IsKeyDown(Keys.P)) || (GamePad.GetState(0).IsButtonDown(Buttons.Start) && !previousGamePadState.IsButtonDown(Buttons.Start))) { currentGameState = GameState.GAMEMENU; } previousState = Keyboard.GetState(); previousGamePadState = GamePad.GetState(0); } if (shopKeeper.shopOpen == true) { shopKeeper.handleShopKeeperEvents(); } if (timeUntilNextFrame1 <= 0) { gameObjectsToRender = camera.GameObjectsToRender(wormPlayer.gameObjectPosition, levelObjectList, ref interactiveObject); timeUntilNextFrame1 += animationFrameTime; } camera.SpawnEnemyOffScreen(wormPlayer, enemySpawnList, ref enemyList, enemySpriteSheets, levelManager.PlayerLevelLocation()); if (!camera.spawnBoss) { viewableEnemies = camera.RenderedEnemies(wormPlayer.gameObjectPosition, enemyList); } wormPlayer.Update(gameTime, gameObjectsToRender, ref viewableEnemies, interactiveObject, ref levelObjectList, loadAndSave, ingameMenus, levelManager, ref allGameObjectList, shopKeeper, itemUIManager, ref hakume); if (timeUntilNextFrame2 <= 0) { if (levelManager.PlayerLevelLocation() != Enums.Level.CROWN) { foreach (var enemy in viewableEnemies.ToList()) { enemy.Update(gameTime, gameObjectsToRender); if (enemy.EnemyAliveState() == false || enemy.fallOutOfMap) { viewableEnemies.RemoveAt(viewableEnemies.IndexOf(enemy)); } } } if (levelManager.PlayerLevelLocation() == Enums.Level.CROWN) { if (hakume != null) { hakume.Update(gameTime, gameObjectsToRender); } if (hakume.EnemyAliveState() == false) { hakume = null; } } timeUntilNextFrame2 += animationFrameTime; } break; case GameState.MINIMAP: if (Keyboard.GetState().IsKeyDown(Keys.M) && !previousState.IsKeyDown(Keys.M)) { currentGameState = GameState.GAMELOOP; } previousState = Keyboard.GetState(); break; case GameState.GAMEMENU: gameMenu.Update(this, loadAndSave); break; case GameState.CREDITS: credits.UpdateCredits(); break; } }