Esempio n. 1
0
        /// <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());
                }
            }
        }
Esempio n. 3
0
        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.");
            }
        }