/// <summary> /// Default constructor. /// </summary> /// <param name="title"> Level title.</param> /// <param name="game"> Game.</param> public Level(string title, SuperPlatformerGame game) { CurrentTime = 0; Gravity = 550; // Create the lists. _entities = new List <Entity>(); _pendingEntities = new List <Entity>(); _decorations = new List <MonoSprite>(); _backgroundTiles = new List <Tile>(); // Time moves on. _time = new TimedEvent(OnTimeTick, 1000); _time.Enable(); // Time to respawn _respawnTimer = new TimedEvent(OnRespawnTimerElapsed, 3000); // Wait X seconds before switching to end level scene on level finished. _endTimer = new TimedEvent(() => { game.SceneActivator.ActivateScene(new EndLevelScene(game)); }, 4000); _scale = SuperPlatformerGame.SCALE; _viewport = game.GraphicsDevice.Viewport; _title = title; _collisions = new CollisionTester(); _camera = new Camera2D(_viewport); Player = new Player(game.Content.Load <Texture2D>("Images/Player/Protagonist"), Vector2.Zero, 16, 22, game.KeyboardDevice, this, game.Content); // Listen to some player events Player.OnSizeChanged += OnPlayerSizeChange; Player.OnDied += OnPlayerDeath; Score = new ScoreCollector(); TypePlayer = PlayerType.PROTAGONIST; Display = new HUD(this, _camera, game.Content); _collidables = new List <Entity>(); _camera.Follow(Player); }
/// <summary> /// Update het speel scherm /// </summary> /// <param name="gameTime">GameTime object dat ervoor zorgt dat we iets op een bepaalde tijd kunnen afspelen</param> /// <param name="camera">Camera2D object dat de hero volgt</param> /// <param name="hero">Hero object dat we besturen</param> /// <param name="collisionObjects">Lijst met alle objecten die kunnen colliden</param> /// <param name="background">Background object voor de game</param> /// <param name="collider">Collider object die kijkt of er een collision gebeurt</param> /// <param name="currentLevel">Level object dat ons huidig level bevat</param> public void Update(GameTime gameTime, Camera2D camera, Hero hero, List <ICollide> collisionObjects, Background background, Collider collider, ref Level currentLevel) { MediaPlayer.Resume(); KeyboardState keyboardState = Keyboard.GetState(); screenManager.MakeMouseVisible(false); foreach (ButtonNextLevel nextLevelButton in collisionObjects.OfType <ButtonNextLevel>()) { if (hero.CollisionRectangle.Intersects(nextLevelButton.CollisionRectangle) && hero.Velocity.Y > 5) { loadNextLevel = true; } } if (keyboardState.IsKeyDown(Keys.Escape) && escapeReleased) { escapeReleased = false; MediaPlayer.Pause(); screenManager.SetState(screenManager.GetPauseScreen()); } if (keyboardState.IsKeyUp(Keys.Escape)) { escapeReleased = true; } camera.Follow(hero); background.Update(hero.Position.X); hero.Update(gameTime, collisionObjects, collider); currentLevel.Update(gameTime, collisionObjects, collider); if (hero.AmountOfLives < 0 && hero.currentAnimation.CurrentFrame == hero.deathAnimation.frames[hero.deathAnimation.frames.Count - 1]) { screenManager.SetState(screenManager.GetGameOverScreen()); } if (loadNextLevel) { MediaPlayer.Pause(); loadNextLevel = false; if (currentLevel is Level1) { screenManager.SetState(screenManager.GetNextLevel1Screen()); } else { screenManager.SetState(screenManager.GetNextLevel2Screen()); } } }
public void Update(GameTime gt, Game1 Game) { if (!MatchController.MatchDone) { localTeam = localPlayer.Team; m_controller.ProcessInput(Game.KbState); m_sessionManager.GetGameUpdates(gt, gameWorld); for (int i = 0; i < gameWorld.PickupItems.Count; i++) { Type itemType = gameWorld.PickupItems[i].GetType(); if ((itemType == typeof(Weapon)) || (itemType.BaseType == typeof(Weapon))) { Weapon gun = (Weapon)gameWorld.PickupItems[i]; gun.Update(gt, gameWorld); } else if (itemType == typeof(Flag)) { Flag flag = (Flag)gameWorld.PickupItems[i]; flag.Update(gt, gameWorld); flag.CheckCapState(gameWorld.RedBase); flag.CheckCapState(gameWorld.BlueBase); } if (gameWorld.PickupItems[i].State == EntityState.Dead) { if (gameWorld.PickupItems[i].GetType().BaseType == typeof(Weapon)) { if (gameWorld.PickupItems[i].SpawnPont != null) { ((Weapon)gameWorld.PickupItems[i]).SpawnPont.SpawnWeapon(gameWorld.PickupItems); } else { gameWorld.PickupItems[i].SpawnPont = getSpawn(gameWorld.PickupItems[i]); ((Weapon)gameWorld.PickupItems[i]).SpawnPont.SpawnWeapon(gameWorld.PickupItems); } gameWorld.PickupItems.RemoveAt(i); } else if (gameWorld.PickupItems[i].GetType() == typeof(Flag)) { if (((Flag)gameWorld.PickupItems[i]).Base == null) { if (((Flag)gameWorld.PickupItems[i]).Team == 1) { ((Flag)gameWorld.PickupItems[i]).Base = gameWorld.BlueBase; } else if (((Flag)gameWorld.PickupItems[i]).Team == 2) { ((Flag)gameWorld.PickupItems[i]).Base = gameWorld.RedBase; } } else { ((Flag)gameWorld.PickupItems[i]).Base.SpawnFlag(gameWorld.PickupItems); gameWorld.PickupItems.RemoveAt(i); } } } } foreach (NetworkGamer player in m_sessionManager.NetSession.AllGamers) { ((SpaceMarine)player.Tag).UpdateProjectiles(gt, m_sessionManager); } localPlayer.Update(gt, m_controller, gameWorld, m_crossHair); if (localPlayer != null) { if (localPlayer.Rectangle.Intersects(gameWorld.WorldBoundary)) { m_camera.updateMe(gt, Game.KbState, Game.MouseState); } if (localPlayer.isHit) { m_camera.doShake(1f, 3f, 1f); } m_crossHair.updateMe(Game.MouseState, m_camera, localPlayer); } m_matchController.updateMe(gameWorld); m_sessionManager.SendLocalUpdate(localPlayer); if (localPlayer.State != ActorState.Dying) { m_camera.Follow(localPlayer, 0f); } if (m_matchController.Match != MatchType.DM) { if (localPlayer.Team != 0) { if (localPlayer.State == ActorState.Dead) { m_spawnManager.RespawnPlayer(localPlayer, m_matchController); } } } else { if (localPlayer.State == ActorState.Dead) { m_spawnManager.RespawnPlayer(localPlayer, m_matchController); } } } if (m_sessionManager.gameEnded) { m_sessionManager.Dispose(); Game.State = GameState.Menu; MessageBox.Show("Game Session has ended."); } }