Gameprogrammeren: Edit states Arjan Egges Paul Bergervoet Wouter van Toll
Level finished Overlay
‘Edit states’ Een edit state is een game state die gebruikt maakt van andere game states Voorbeelden: Game over state Level finished state …
Plaats de overlay in het midden LevelFinishedState class LevelFinishedState : GameObjectList { protected IGameLoopObject playingState; public LevelFinishedState() GameStateManager gm = GameEnvironment.GameStateManager; playingState = gm.GetGameState("playingState"); SpriteGameObject o = new SpriteGameObject(“spr_welldone"); o.Position = new Vector2(GameEnvironment.Screen.X, GameEnvironment.Screen.Y) / 2 - o.Center; this.Add(o); } … Plaats de overlay in het midden van het scherm.
LevelFinishedState public override void HandleInput(InputHelper inputHelper) { if (!inputHelper.KeyPressed(Keys.Space)) return; GameEnvironment.GameStateManager.SwitchTo("playingState"); (playingState as PlayingState).NextLevel(); } public override void Update(GameTime gameTime) { playingState.Update(gameTime); public override void Draw(GameTime gameTime, SpriteBatch s) { playingState.Draw(gameTime, s); base.Draw(gameTime, s);
Level afgemaakt? public bool Completed { get SpriteGameObject exitObj = this.Find("exit") as SpriteGameObject; Player player = this.Find("player") as Player; GameObjectList w = this.Find("waterdrops") as GameObjectList; if (!exitObj.CollidesWith(player)) return false; foreach (GameObject d in w.Objects) if (d.Visible) return true; } Speler heeft de uitgang nog niet bereikt Alle waterdruppels zijn nog niet verzameld
Update-actie van Level public override void Update(GameTime gameTime) { TimerGameObject timer = Find("timer") as TimerGameObject; Player player = Find("player") as Player; // check if we died … // check if we ran out of time // check if we won base.Update(gameTime); }
Update-actie van Level // check if we died if (!player.IsAlive) timer.Running = false; // check if we ran out of time if (timer.GameOver) player.Explode(); // check if we won if (this.Completed && timer.Running) { player.LevelFinished(); }
public void Explode() { if (!isAlive || finished) return; isAlive = false; exploded = true; velocity = Vector2.Zero; position.Y += 15; this.PlayAnimation("explode"); } public void LevelFinished() { finished = true; velocity.X = 0.0f; this.PlayAnimation("celebrate"); GameEnvironment.AssetManager.playSound("snd_player_won");