/// <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();
        }
Пример #3
0
        /// <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);
        }