public void WarpToNewLocation(object sender, PlayerWarpingEventArgs e) { /*if(e.WarpExit.LevelArea != 0) * { * BlockFactory.SpriteFactory = SubThemedBlockSpriteFactory.Instance; * } * else * { * BlockFactory.SpriteFactory = NormalThemedBlockSpriteFactory.Instance; * }*/ }
public void Warping(object sender, PlayerWarpingEventArgs e) { if (e.WarpExit.LevelArea != 0) { SoundPool.Instance.ReplaceBackground(SoundType.Underworld); } else { SoundPool.Instance.ReplaceBackground(SoundType.Background); } }
private void PlayerWarped(object sender, PlayerWarpingEventArgs e) { if (ReferenceEquals(e.Warper, Player)) { if (e.WarpExit.LevelArea != 0) { Underground = true; } else { Underground = false; } } }
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;*/ }
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(); } }
/// <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); } }