public void WarpToNewLocation(object sender, PlayerWarpingEventArgs e)
 {
     /*if(e.WarpExit.LevelArea != 0)
      * {
      *  BlockFactory.SpriteFactory = SubThemedBlockSpriteFactory.Instance;
      * }
      * else
      * {
      *  BlockFactory.SpriteFactory = NormalThemedBlockSpriteFactory.Instance;
      * }*/
 }
예제 #2
0
 public void Warping(object sender, PlayerWarpingEventArgs e)
 {
     if (e.WarpExit.LevelArea != 0)
     {
         SoundPool.Instance.ReplaceBackground(SoundType.Underworld);
     }
     else
     {
         SoundPool.Instance.ReplaceBackground(SoundType.Background);
     }
 }
예제 #3
0
 private void PlayerWarped(object sender, PlayerWarpingEventArgs e)
 {
     if (ReferenceEquals(e.Warper, Player))
     {
         if (e.WarpExit.LevelArea != 0)
         {
             Underground = true;
         }
         else
         {
             Underground = false;
         }
     }
 }
예제 #4
0
        private void UpdateCameraForWarp(GameTime gameTime, PlayerWarpingEventArgs e)
        {
            Camera camera = Player1Camera;

            if (ReferenceEquals(e.Warper, Player2) && (Mode == GameMode.MultiPlayer))
            {
                camera = Player2Camera;
            }

            camera.Limits = level.LevelAreas[e.WarpExit.LevelArea];

            if (e.WarpExit.LevelArea != 0)
            {
                if (ReferenceEquals(e.Warper, Player2) && (Mode == GameMode.MultiPlayer))
                {
                    _backgroundP2 = new Background(spriteBatch, camera, BackgroundType.Underworld);
                }
                else
                {
                    _backgroundP1 = new Background(spriteBatch, camera, BackgroundType.Underworld);
                }
                BlockFactory.SpriteFactory = SubThemedBlockSpriteFactory.Instance;
            }
            else
            {
                if (ReferenceEquals(e.Warper, Player2) && (Mode == GameMode.MultiPlayer))
                {
                    _backgroundP2 = new Background(spriteBatch, camera, BackgroundType.Overworld);
                }
                else
                {
                    _backgroundP1 = new Background(spriteBatch, camera, BackgroundType.Overworld);
                }
                BlockFactory.SpriteFactory = NormalThemedBlockSpriteFactory.Instance;
            }

            gameGrid.Remove(e.Warper);
            e.Warper.LevelArea = e.WarpExit.LevelArea;
            e.Warper.Position  = e.WarpExit.Position - new Vector2(0, e.Warper.Sprite.SourceRectangle.Height / 2);
            e.Warper.Update(gameTime, 1);
            gameGrid.Add(e.Warper);

            camera.LookAt(e.Warper.Position);

            /*gameGrid.CurrentLeftSideViewPort = camera.Position.X;
             * gameGrid.CurrentTopSideViewPort = camera.Position.Y;*/
        }
예제 #5
0
 private void PauseForWarp(object sender, PlayerWarpingEventArgs e)
 {
     if (ReferenceEquals(e.Warper, Player1))
     {
         transitioningAreaP1 = true;
         warpOpacityP1       = 1;
         opacityChangeP1     = 5;
         warpArgsP1          = e;
         e.Warper.BecomeWarp();
     }
     else if (ReferenceEquals(e.Warper, Player2) && (Mode == GameMode.MultiPlayer))
     {
         transitioningAreaP2 = true;
         warpOpacityP2       = 1;
         opacityChangeP2     = 5;
         warpArgsP2          = e;
         e.Warper.BecomeWarp();
     }
 }
예제 #6
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)
        {
            if (State == GameState.Playing || State == GameState.Paused)
            {
                if (State != GameState.Paused)
                {
                    if (transitioningAreaP1)
                    {
                        if (warpOpacityP1 > 255)
                        {
                            warpOpacityP1   = 255;
                            opacityChangeP1 = -5;
                            UpdateCameraForWarp(gameTime, warpArgsP1);
                        }
                        else if (warpOpacityP1 <= 0)
                        {
                            transitioningAreaP1 = false;
                            warpArgsP1          = null;
                            Player1.StateMachine.TransitionIdle();
                        }
                    }


                    if (transitioningAreaP2 && (Mode == GameMode.MultiPlayer))
                    {
                        if (warpOpacityP2 > 255)
                        {
                            warpOpacityP2   = 255;
                            opacityChangeP2 = -5;
                            UpdateCameraForWarp(gameTime, warpArgsP2);
                        }
                        else if (warpOpacityP2 <= 0)
                        {
                            transitioningAreaP2 = false;
                            warpArgsP2          = null;
                            Player2.StateMachine.TransitionIdle();
                        }
                    }
                }

                Vector2 parallax = new Vector2(1.0f);
                GraphicsDevice.Clear(Color.LightSkyBlue);


                GraphicsDevice.Viewport = player1Viewport;
                _backgroundP1.Draw();

                gameGrid.CurrentLeftSideViewPort = Player1Camera.Position.X;
                gameGrid.CurrentTopSideViewPort  = Player1Camera.Position.Y;
                List <AbstractGameObject> player1Objects = gameGrid.GetAllCurrentGameObjects;

                spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, null, null, null, Player1Camera.GetViewMatrix(parallax));
                if (transitioningAreaP1 && !(State == GameState.Paused))
                {
                    opacityChangeTimeDeltaP1 += gameTime.ElapsedGameTime.Milliseconds;
                    if (opacityChangeTimeDeltaP1 >= 1)
                    {
                        opacityChangeTimeDeltaP1 = 0;
                        warpOpacityP1           += opacityChangeP1;
                    }
                }
                DrawPlayerHalfOfGame(gameTime, HUDs[0], Player1Camera, player1Objects, transitioningAreaP1, warpOpacityP1);
                spriteBatch.End();

                spriteBatch.Begin(SpriteSortMode.BackToFront);
                if (Player1.LevelCompleted)
                {
                    player1CompletedMenu.Draw(spriteBatch, gameTime);
                }
                spriteBatch.End();

                if (Mode == GameMode.MultiPlayer)
                {
                    GraphicsDevice.Viewport = player2Viewport;
                    _backgroundP2.Draw();

                    gameGrid.CurrentLeftSideViewPort = Player2Camera.Position.X;
                    gameGrid.CurrentTopSideViewPort  = Player2Camera.Position.Y;
                    List <AbstractGameObject> player2Objects = gameGrid.GetAllCurrentGameObjects;

                    spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, null, null, null, Player2Camera.GetViewMatrix(parallax));
                    //TODO probably remove time delta
                    if (transitioningAreaP2 && !(State == GameState.Paused))
                    {
                        opacityChangeTimeDeltaP2 += gameTime.ElapsedGameTime.Milliseconds;
                        if (opacityChangeTimeDeltaP2 >= 1)
                        {
                            opacityChangeTimeDeltaP2 = 0;
                            warpOpacityP2           += opacityChangeP2;
                        }
                    }
                    DrawPlayerHalfOfGame(gameTime, HUDs[1], Player2Camera, player2Objects, transitioningAreaP2, warpOpacityP2);

                    spriteBatch.End();

                    spriteBatch.Begin(SpriteSortMode.BackToFront);
                    if (Player2.LevelCompleted)
                    {
                        player2CompletedMenu.Draw(spriteBatch, gameTime);
                    }
                    spriteBatch.End();
                }

                GraphicsDevice.Viewport = new Viewport(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);

                if (Mode == GameMode.MultiPlayer)
                {
                    spriteBatch.Begin(SpriteSortMode.BackToFront);
                    using (Texture2D pixel = new Texture2D(GraphicsDevice, 1, 1))
                    {
                        Color[] color = { Color.Crimson };
                        pixel.SetData(color);
                        spriteBatch.Draw(pixel, new Rectangle(player1Viewport.Width, 0,
                                                              player2Viewport.X - player1Viewport.Width, graphics.PreferredBackBufferHeight), Color.White);
                    }
                    spriteBatch.End();
                }

                if (State == GameState.Paused)
                {
                    spriteBatch.Begin(SpriteSortMode.BackToFront);
                    pauseMenu.Draw(spriteBatch, gameTime);
                    spriteBatch.End();
                    base.Draw(gameTime);
                }

                base.Draw(gameTime);
            }
            else if (State == GameState.GameStart)
            {
                GraphicsDevice.Clear(Color.Black);
                spriteBatch.Begin(SpriteSortMode.BackToFront);

                mainMenu.Draw(spriteBatch, gameTime);

                spriteBatch.End();
                base.Draw(gameTime);
            }
            else if (State == GameState.GameOver)
            {
                GraphicsDevice.Clear(Color.Black);
                spriteBatch.Begin(SpriteSortMode.BackToFront);

                gameOverScreen.Draw(spriteBatch, gameTime);

                spriteBatch.End();
                base.Draw(gameTime);
            }
        }