public override void update(float elapsed) { if (this.player != null) { this.treasureText.WrittenText = " x " + this.player.CapturedTreasures; } if (this.mapWalls != null) { this.mapWalls.update(elapsed); } this.dustEmitter.update(elapsed); Vector2 mousePos = InputManager.getInstance().MousePosition; if (StateManager.getInstance().CurrentGameState == StateManager.GameState.Waiting) { this.startButton.processActorsMovement(mousePos); // mouse over sfx if (this.startButton.isActorOver(mousePos)) { if (!base.previousMouseOverButton) { SoundManager.getInstance().sfxEngine.playSoundEffect(ResourceManager.getInstance().MouseOverSfx); } base.previousMouseOverButton = true; } else { base.previousMouseOverButton = false; } if (InputManager.getInstance().wasLeftButtonPressed() || InputManager.getInstance().wasButtonPressed(PlayerIndex.One, Buttons.A)) { if (this.startButton.isActorOver(mousePos)) { StateManager.getInstance().CurrentGameState = StateManager.GameState.Active; } } } else if (StateManager.getInstance().CurrentGameState == StateManager.GameState.Active) { // check if the player won foreach (Point point in this.entryExitPoints) { if (point == this.player.Placement.index) { StateManager.getInstance().CurrentGameState = StateManager.GameState.GameOver; if (this.player.CapturedTreasures >= 1) { StateManager.getInstance().TypeOfGameOver = StateManager.GameOverType.Player; SoundManager.getInstance().sfxEngine.playSoundEffect(this.payDaySfx); } else { StateManager.getInstance().TypeOfGameOver = StateManager.GameOverType.None; } break; } } this.timer.update(elapsed); this.player.update(elapsed); foreach (Guard guard in this.guards) { guard.update(elapsed); if (guard.Ring.BoundingSphere.Intersects(this.player.BoundingBox) && !this.player.Hiding) { // did we JUST get detected? if (!AIManager.getInstance().PlayerDetected) { SoundManager.getInstance().sfxEngine.playSoundEffect(this.guardDetectedSfx); } AIManager.getInstance().PlayerDetected = true; } } foreach (Treasure treasure in this.treasures) { treasure.update(elapsed); if (treasure.BoundingBox.Intersects(this.player.BoundingBox)) { treasure.PickedUp = true; this.player.CapturedTreasures++; SoundManager.getInstance().sfxEngine.playSoundEffect(this.treasureSfx, .5f); break; } } // are we trying to enter a dumpster if (InputManager.getInstance().wasKeyPressed(Keys.Space) || InputManager.getInstance().wasButtonPressed(PlayerIndex.One, Buttons.A)) { // check if we are close to a dumpster foreach (Dumpster dumpster in dumpsters) { if (dumpster.BoundingBox.Intersects(this.player.BoundingBox) && dumpster.AcceptingOccupants) { this.player.Hiding = !this.player.Hiding; // reverse the bool if (!this.player.Hiding) { // make this dumpster unusable again dumpster.AcceptingOccupants = false; SoundManager.getInstance().sfxEngine.playSoundEffect(this.dumpsterCloseSfx); } else { SoundManager.getInstance().sfxEngine.playSoundEffect(this.dumpsterCrashSfx); } break; } } } } // Transitions #region Transitions if (StateManager.getInstance().CurrentTransitionState == StateManager.TransitionState.TransitionIn) { // start our intro sound effect if we just started to transition if (StateManager.getInstance().PreviousGameState == StateManager.GameState.MapSelection && !SoundManager.getInstance().sfxEngine.isPlaying(LEVEL_ENTRY_SFX_NAME)) { StateManager.getInstance().CurrentGameState = StateManager.GameState.Waiting; SoundManager.getInstance().sfxEngine.playSoundEffect(this.introSfx); // initially create some particles for (int i = 0; i < 40; i++) { this.dustEmitter.createParticle(); } } Color colour = base.fadeIn(Color.White); this.mapWalls.updateColours(base.fadeIn(this.mapWalls.Colour)); this.mapFloor.updateColours(base.fadeIn(this.mapFloor.Colour)); foreach (Treasure treasure in this.treasures) { treasure.updateColours(colour); } foreach (Dumpster dumpster in this.dumpsters) { dumpster.updateColours(colour); } this.player.updateColours(colour); foreach (Guard guard in this.guards) { guard.updateColours(colour); } this.startButton.updateColours(base.fadeIn(ResourceManager.TEXT_COLOUR)); if (this.startButton.isActorOver(mousePos)) { this.startButton.updateColours(base.fadeIn(ResourceManager.MOUSE_OVER_COLOUR)); } // HUD this.treasure.LightColour = colour; this.treasureText.LightColour = base.fadeIn(ResourceManager.TEXT_COLOUR); this.timer.updateColours(base.fadeIn(ResourceManager.TEXT_COLOUR), base.fadeIn(this.timer.ActiveTimeColour)); } else if (StateManager.getInstance().CurrentTransitionState == StateManager.TransitionState.TransitionOut) { Color colour = base.fadeOut(Color.White); this.mapWalls.updateColours(base.fadeOut(this.mapWalls.Colour)); this.mapFloor.updateColours(base.fadeOut(this.mapFloor.Colour)); foreach (Treasure treasure in this.treasures) { treasure.updateColours(colour); } foreach (Dumpster dumpster in this.dumpsters) { dumpster.updateColours(colour); } this.player.updateColours(colour); foreach (Guard guard in this.guards) { guard.updateColours(colour); } this.startButton.updateColours(base.fadeOut(ResourceManager.TEXT_COLOUR)); if (this.startButton.isActorOver(mousePos)) { this.startButton.updateColours(base.fadeOut(ResourceManager.MOUSE_OVER_COLOUR)); } this.dustEmitter.updateColours(base.fadeOut(DustParticleEmitter.COLOUR)); // HUD this.treasure.LightColour = colour; this.treasureText.LightColour = base.fadeOut(ResourceManager.TEXT_COLOUR); this.timer.updateColours(base.fadeOut(ResourceManager.TEXT_COLOUR), base.fadeOut(this.timer.ActiveTimeColour)); // if the alarm is blaring, turn it off if (SoundManager.getInstance().sfxEngine.isPlaying(Timer.DETECTED_SFX_NAME)) { SoundManager.getInstance().sfxEngine.stop(Timer.DETECTED_SFX_NAME); } } // if our transition is up if (base.transitionTimeElapsed()) { if (StateManager.getInstance().CurrentTransitionState == StateManager.TransitionState.TransitionIn) { StateManager.getInstance().CurrentTransitionState = StateManager.TransitionState.None; if (StateManager.getInstance().PreviousGameState == StateManager.GameState.MapSelection) { StateManager.getInstance().CurrentGameState = StateManager.GameState.Waiting; } } else if (StateManager.getInstance().CurrentTransitionState == StateManager.TransitionState.TransitionOut) { StateManager.getInstance().CurrentTransitionState = StateManager.TransitionState.TransitionIn; // clear out the particles this.dustEmitter.Particles.Clear(); } } if (StateManager.getInstance().CurrentTransitionState == StateManager.TransitionState.None && StateManager.getInstance().CurrentGameState == StateManager.GameState.Waiting || StateManager.getInstance().CurrentGameState == StateManager.GameState.Active) { if (InputManager.getInstance().wasKeyPressed(Keys.Escape) || InputManager.getInstance().wasButtonPressed(PlayerIndex.One, Buttons.Start)) { StateManager.getInstance().CurrentGameState = StateManager.GameState.InGameMenu; StateManager.getInstance().CurrentTransitionState = StateManager.TransitionState.TransitionOut; } } #endregion Transitions #if DEBUG if (InputManager.getInstance().wasKeyPressed(Keys.D1)) { this.showAI = !this.showAI; } else if (InputManager.getInstance().wasKeyPressed(Keys.D2)) { this.showCD = !this.showCD; } else if (InputManager.getInstance().wasKeyPressed(Keys.D3)) { this.showWayPoints = !this.showWayPoints; } else if (InputManager.getInstance().wasKeyPressed(Keys.R)) { reset(); } // map editor MapEditor.getInstance().update(); #endif base.update(elapsed); }