コード例 #1
0
        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);
        }