/// <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) { //get the new state of the game MouseState ms = Mouse.GetState(); KeyboardState ks = Keyboard.GetState(); float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; removeOldMessages(); if ((ks.IsKeyDown(Keys.Escape) && isKeyUp)) { menu.isDisplayed = !menu.isDisplayed; isKeyUp = false; } if (ks.IsKeyUp(Keys.Escape)) { isKeyUp = true; } if (ks.IsKeyDown(Keys.F5)) { saveGame(StorageContainer.TitleLocation + FileIOManager.SAVE_PREFIX + "quick-" + level.levelName + FileIOManager.SAVE_EXTENSION); } if (ks.IsKeyDown(Keys.F6)) { try { loadGame(StorageContainer.TitleLocation + FileIOManager.SAVE_PREFIX + "quick-" + level.levelName + FileIOManager.SAVE_EXTENSION); } catch (Exception e) { displayMessage("No quicksave found"); e.ToString(); } } if (menu.isDisplayed || level == null) { menu.Update(ms, ks, this); } else if (easter && ks.IsKeyDown(Keys.Y)) { int tempCoins = level.player.numCoins; level = FileIOManager.loadLevel(StorageContainer.TitleLocation + FileIOManager.LEVEL_PREFIX + LEVEL_ORDER[++levelNumber],Content); level.LoadContent_OLD(Content); level.player.numCoins = tempCoins; easter = false; hasEaster = true; displayMessage("Resolution succeded: now using 'OLDSKOOL'"); } else { Particle_Engine.ParticleEngine.update(dt); //update components if (!level.gameOver) { int[] soundNums = level.Update(dt, ms, ks, IsActive); for (int i = 0; i < soundNums.Length; i++) { if (soundNums[i] == 1) { FX[i].Play(); } } //if the lazer isnt playing, play it once if (soundNums[2] == 2 && !lazer.State.Equals(SoundState.Playing)) lazer.Play(); //if it was playing but should stop before firing, then stop it if (soundNums[2] < 2 && lazer.State.Equals(SoundState.Playing)) { lazer.Dispose(); lazer = FX[FX.Length -1].CreateInstance(); } } else { displayMessage("Press 'r' to restart the level or ESC to exit"); if (ks.IsKeyDown(Keys.R)) { int tempCoins = level.player.numCoins - level.usedCoins.Count; Particle_Engine.ParticleEngine.reset(); level = FileIOManager.loadLevel(StorageContainer.TitleLocation + FileIOManager.LEVEL_PREFIX + level.levelName,Content); if (!hasEaster) level.LoadContent(Content); else level.LoadContent_OLD(Content); level.player.numCoins = tempCoins; } } if (level.levelCompleted) { if (linearOrder) { int tempCoins = level.player.numCoins; if (tempCoins % EASTER_EGG_THRESHOLD == 0 && !hasEaster && levelNumber < LEVEL_ORDER.Length - 1 && tempCoins > 0) { easter = true; } else if (levelNumber < LEVEL_ORDER.Length - 1 && !easter) { Particle_Engine.ParticleEngine.reset(); level = FileIOManager.loadLevel(StorageContainer.TitleLocation + FileIOManager.LEVEL_PREFIX + LEVEL_ORDER[++levelNumber], Content); if (!hasEaster) level.LoadContent(Content); else { hasEaster = false; level.LoadContent_OLD(Content); } level.player.numCoins = tempCoins; } } else { menu.isDisplayed = true; } } } base.Update(gameTime); }
//do actual game loading - to be called from ShellMenu public void loadGame(string fileName) { MoonPrison.clearMessages(); level = FileIOManager.loadGame(fileName, Content); level.LoadContent(Content); if (this.LEVEL_ORDER.Contains(level.levelName)) { linearOrder = true; levelNumber = Array.IndexOf(LEVEL_ORDER, level.levelName); } System.Threading.Thread.Sleep(50); }