/// <summary> /// Draw ghost texture. /// </summary> public void drawGhost() { ghostViewPos = m_camera.GetViewPosition(m_model.getGhostPosition().X, m_model.GetPlayerPosition().Y, viewportSize); destRectGhost = new Rectangle((int)(ghostViewPos.X - scale / 2), (int)(ghostViewPos.Y - scale), (int)scale, (int)scale); m_spriteBatch.Begin(); m_spriteBatch.Draw(m_ghostTexture, destRectGhost, Color.White); m_spriteBatch.End(); }
/// <summary> /// draw player and level. /// </summary> /// <param name="a_graphicsDevice"></param> /// <param name="a_level"></param> /// <param name="a_camera"></param> /// <param name="postion"></param> /// <param name="model"></param> public void DrawLevel(Level a_level, Camera a_camera, gameModel model) { viewportSize = new Vector2(m_graphics.Viewport.Width, m_graphics.Viewport.Height); scale = a_camera.GetScale(); m_camera = a_camera; m_model = model; m_spriteBatch.Begin(); if (Level.CurrentLevel == 1) { m_spriteBatch.Draw(m_Level1Background, new Rectangle(0, 0, (int)viewportSize.X, (int)viewportSize.Y), Color.White); } else if (Level.CurrentLevel == 2) { m_spriteBatch.Draw(m_Level2Background, new Rectangle(0, 0, (int)viewportSize.X, (int)viewportSize.Y), Color.White); } else if (Level.CurrentLevel == 3) { m_spriteBatch.Draw(m_Level3Background, new Rectangle(0, 0, (int)viewportSize.X, (int)viewportSize.Y), Color.DarkRed); } for (int x = 0; x < Level.g_levelWidth; x++) { for (int y = 0; y < Level.g_levelHeight; y++) { Vector2 viewPos = a_camera.GetViewPosition(x, y, viewportSize); //Destination rectangle in windows coordinates only scaling Rectangle destRect = new Rectangle((int)viewPos.X, (int)viewPos.Y, (int)scale, (int)scale); if (a_level.m_tiles[x, y] == TileType.BLOCKED) { m_spriteBatch.Draw(m_blockTexture, destRect, Color.White); } else if (a_level.m_tiles[x, y] == TileType.Background) { m_spriteBatch.Draw(m_backgroundTexture, destRect, Color.White); } else if (a_level.m_tiles[x, y] == TileType.Water) { m_spriteBatch.Draw(m_WaterTexture, destRect, Color.White); } } } Color color; if (model.hasCollidedWidthTheLeft()) { color = Color.Red; } else { color = Color.White; } Vector2 viewpos = a_camera.GetViewPosition(model.GetPlayerPosition().X, model.GetPlayerPosition().Y, viewportSize); destrect = new Rectangle((int)(viewpos.X - scale / 2), (int)(viewpos.Y - scale), (int)scale, (int)scale); Rectangle animationRect = new Rectangle(m_Texture.Width / 8 * (int)model.getFrame(), 0, m_Texture.Width / 8, m_Texture.Height / 2); m_spriteBatch.Draw(m_Texture, destrect, animationRect, color); m_spriteBatch.End(); }
/// <summary> /// This is called when the game should draw itself. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White); spriteBatch.Begin(); Level level = model.GetLevel(); //update camera m_Camera.CenterOn(model.GetPlayerPosition(), new Vector2(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), new Vector2(Level.g_levelWidth, Level.g_levelHeight)); m_Camera.SetZoom(GraphicsDevice.Viewport.Width / 12); //draw background and player m_View.DrawLevel(level, m_Camera, model); // Switch sats to draw the right texture in the right gamestate. switch (CurrentGameState) { case GameState.MainMenu: m_MenuView.DrawMenu(); m_MenuView.DrawButtons(); m_MenuView.DrawRePlayTexture(); paused = true; break; case GameState.Pause: m_MenuView.DrawPaused(); MediaPlayer.Pause(); m_MenuView.DrawResumeButton(); paused = true; break; case GameState.Playing: if (CurrentLevel != 1) { if (CurrentLevel == 2) { m_rainParticle.Draw(spriteBatch, Color.White); } if (CurrentLevel == 3) { m_rainParticle.Draw(spriteBatch, Color.Red); } foreach (BombView bomb in bombs) { bomb.Draw(spriteBatch, m_Camera); } } if (model.hasCollidedWidthTheLeft() == true) { m_destroyedEffect.Play(); m_splitterView.draw((float)gameTime.ElapsedGameTime.TotalSeconds); } if (CurrentLevel == 1) { spriteBatch.DrawString(m_LevelsFont, "Level one", m_levelsTextPosition, Color.Yellow); } else if (CurrentLevel == 2) { spriteBatch.DrawString(m_LevelsFont, "Level two", m_levelsTextPosition, Color.Yellow); } else if (CurrentLevel == 3) { m_View.drawGhost(); spriteBatch.DrawString(m_LevelsFont, "Level three", m_levelsTextPosition, Color.Yellow); } paused = false; MediaPlayer.Resume(); m_MenuView.DrawPauseTexture(); m_MenuView.DrawReturnButton(); model.endOfTheGame(); var Count = model.nrOfLifes(); spriteBatch.DrawString(m_NrOfLifes, "Lifes : " + Count, new Vector2(GraphicsDevice.Viewport.Width / 1.35f, GraphicsDevice.Viewport.Height / 18), Color.Yellow); break; case GameState.Options: m_MenuView.DrawMenu(); m_MenuView.DrawOpstion(); m_MenuView.DrawReturnButton(); break; case GameState.GameOver: MediaPlayer.Stop(); isPlayed = false; m_MenuView.DrawGameOver(); m_MenuView.DrawPlayAgainBtn(); m_MenuView.DrawReturnButton(); break; case GameState.Finish: if (CurrentLevel == 1 || CurrentLevel == 2) { m_MenuView.DrawCompletedLevel(); m_MenuView.DrawContinueBtn(); } else { m_MenuView.DrawTheEnd(); m_MenuView.drawExit(); } MediaPlayer.Stop(); isPlayed = false; break; } spriteBatch.End(); base.Draw(gameTime); }