Update() public method

public Update ( ) : void
return void
コード例 #1
0
ファイル: Map.cs プロジェクト: ShatteredMind/ArenaGame
 public void Update(GameTime gameTime, Player player, Camera camera)
 {
     ChangeState(player);
     if (currentStage == Stage.Introduction)
     {
         introduction.Update(gameTime);
         return;
     }
     if (currentStage == Stage.MainStage)
     {
         ManageItems(gameTime, player);
         ManageEntitiesCollision(player);
         ManageNpc(gameTime, player);
         return;
     }
     if (currentStage == Stage.BossFight)
     {
         ManageEntitiesCollision(player);
         boss.Update(gameTime, player);
         foreach (CollisionTiles tile in collisionTiles)
         {
             boss.ManageMapCollision(tile.rect1, width, height);
         }
     }
     if (currentStage == Stage.Finished)
     {
     }
 }
コード例 #2
0
        /// <summary>
        /// Updates all objects in the world, performs collision between them,
        /// and handles the time limit with scoring.
        /// </summary>
        public void Update(GameTime gameTime)
        {
            // Pause while the player is dead
            if (Player.Health <= 0)
            {
                // Still want to perform physics on the player.
                Hud.Update(gameTime);
                PlayerDied();

                Player.Lives--;
                if (Player.Lives <= 0)
                {
                    Player.Alive     = false;
                    Statics.Gameover = true;
                    MediaPlayer.Stop();
                }
                else
                {
                    Statics.Realm = Enums.Realm.WorldMap;
                    int temp = 0;
                    if (Statics.WorldPlayer.Direction == Enums.Direction.East)
                    {
                        temp = -100;
                    }
                    else
                    {
                        temp = 100;
                    }

                    Statics.WorldPlayer.Position = new Vector2(Statics.WorldPlayer.Position.X + temp, Statics.WorldPlayer.Position.Y);
                }
            }
            else
            {
                Player.Update(gameTime);

                TileEngine.UpdateHealthPotions(gameTime, Player);

                UpdateMovableTiles(gameTime);

                Hud.Update(gameTime);

                if (Boss != null)
                {
                    Boss.Update(gameTime);
                    Statics.Collision.PlayerAndEnemy(Player, Boss, gameTime);
                }

                UpdateEnemies(gameTime);

                // The player has reached the exit if they are standing on the ground and
                // his bounding rectangle contains the center of the exit tile.
                if (Player.Health > 0 &&
                    Player.IsOnGround &&
                    Player.BoundingRectangle.Contains(TileEngine.exit) || Player.BoundingRectangle.Contains(TileEngine.exit2))
                {
                    OnExitReached();
                }
            }
        }
コード例 #3
0
        internal State EnableBossMode(Boss boss, bool bossHasInstance, GameDatabase db, State gameState, GameTime gameTime)
        {
            State state = gameState;

            boss            = Boss.Instance;
            bossHasInstance = true;

            if (bossHasInstance)
            {
                CollisionHandler.CheckBossBulletsCollisions(db.Bullets.GetAll(), db.Players.GetAll());
                CollisionHandler.CheckPlayerBulletsCollisions(new List <IGameObject>()
                {
                    boss
                }, db.Bullets.GetAll(),
                                                              db.Players.GetAll(), db.Explosions.GetAll());

                BulletsFactory.BossShoot(db.Bullets, boss);

                boss.Update(gameTime);

                if (!boss.IsVisible)
                {
                    state = State.Winning;
                }
            }
            return(state);
        }
コード例 #4
0
        private void UpdateBoss(GameTime gameTime)
        {
            boss.Update(gameTime, tickCount, gameMap.ScrollRows);
            var playerIsWithinBossShootingRange = gameMap.ScrollRows <= GameSettings.Instance.WindowTilesSize.Y / 2;

            if (playerIsWithinBossShootingRange &&
                boss.State == CharacterState.Alive &&
                boss.Reloaded)
            {
                ShootNewBossBullet();
            }
        }
コード例 #5
0
        public void Update(GameTime gameTime)
        {
            if (!EndGame() || (GameIsFinished() || TransitioningToEndGame()))
            {
                MoverManager.Update();
            }

            if (!_ready)
            {
                return;
            }

            _cameraZoomTimer.Update(gameTime);
            _explosionTimer.Update(gameTime);

            if (_boss != null && (!EndGame() || (GameIsFinished() || TransitioningToEndGame())))
            {
                _boss.Update(gameTime);
            }

            if (!EndGame() || (GameIsFinished() || TransitioningToEndGame()))
            {
                foreach (var bullet in _bullets)
                {
                    bullet.Update(gameTime);
                }

                _bullets.RemoveAll(b => !b.Used);

                foreach (var laser in _lasers)
                {
                    laser.Update(gameTime);
                }

                ParticleManager.Update(gameTime);
            }

            if (GameIsFinished())
            {
                return;
            }

            _playTime += gameTime.ElapsedGameTime;

            if (_boss != null && _boss.IsReady() && !EndGame())
            {
                _timer += gameTime.ElapsedGameTime;
            }

            CollisionWorld.Update(gameTime);

            _player.Update(gameTime);
        }
コード例 #6
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }
            KeyboardState pauseButton = Keyboard.GetState();

            if (pauseButton.IsKeyDown(Keys.P))
            {
                _pauseGame = false;
            }
            CheckLivingEntityCollision(_player);
            if (!_pauseGame)
            {
                if (gc.CurrentLevel == 1 && gc.LevelFinished)
                {
                    gc.LevelFinished = false;
                    gc.CurrentLevel  = 2;
                    _board           = new Board(_spriteBatch, _tileTexture, 59, 25);
                    _board.CreateNewBossBoard();

                    _player.Position = new Vector2(50, ScreenHeight - (TileHeight * 2));
                    _geryon.Position = new Vector2(ScreenWidth - (TileWidth * 2), ScreenHeight - (TileHeight * 2));
                }

                base.Update(gameTime);
                background1.Update(gameTime);
                _player.Update(gameTime);
                _vortex.Update(gameTime, _player);

                _spawn += (float)gameTime.ElapsedGameTime.TotalSeconds;
                foreach (Enemy demon in _demonHorde)
                {
                    demon.Update(gameTime, _player);
                }
                if (gc.CurrentLevel == 1)
                {
                    LoadEnemies();
                }

                for (int i = 0; i < gc.MaxScoreCount; i++)
                {
                    _coins[i].Update(gameTime, _player);
                }
                if (gc.CurrentLevel == 2)
                {
                    _geryon.Update(gameTime, _player);
                    _healthRectangle = new Rectangle(ScreenWidth / 2, ScreenHeight / 10, _geryon.Health, 20);
                    CheckWinCondition();
                }
            }
        }
コード例 #7
0
        public void Update(ref GameTime gameTime)
        {
            // Updates all creatures, if health is less than 0, they die. Removed from the creature less
            for (int i = Creatures.Count - 1; i >= 0; --i)
            {
                Creatures[i].Update(ref gameTime);
                if (Creatures[i].CurrentHealth <= 0)
                {
                    Creatures[i] = null;
                    Creatures.RemoveAt(i);
                }
            }

            // Updates all the items dropped on the ground
            for (int i = DroppedItems.Count - 1; i >= 0; --i)
            {
                DroppedItems[i].Update(ref gameTime);
                if (DroppedItems[i].LifeTime >= 300) // Removed after 5 mins
                {
                    DroppedItems[i] = null;
                    DroppedItems.RemoveAt(i);
                }
            }

            // Updates all the projectiles, if lifetime is less than or equal to 0, they are removed.
            for (int i = Projectiles.Count - 1; i >= 0; --i)
            {
                Projectiles[i].Update(ref gameTime);
                if (Projectiles[i].LifeTime <= 0)
                {
                    Projectiles[i] = null;
                    Projectiles.RemoveAt(i);
                }
            }

            // If the boss of the level is up then they are updates, when dead a text appears to press N to continue.
            Background.Update(gameTime);
            if (Boss.IsAlive)
            {
                Boss.Update(gameTime);
            }
            else
            {
                TradingManager.Update(gameTime);
                if (Game1.InputManager.KeyClicked(Microsoft.Xna.Framework.Input.Keys.N))
                {
                    Game1.WindowManager.GetGameplayWindow().NewLevel(NextLevel);
                }
            }
        }
コード例 #8
0
ファイル: Board.cs プロジェクト: FrancoisJEA/ITI.BBTB
        private void BulletUpdate(GameTime gameTime)
        {
            for (int i = 0; i < Bullets.Count; i++)
            {
                Bullet b = Bullets[i];
                if (b.BulletLib.IsDead() || b.TouchEnemy() || b.HasTouchedTile())
                {
                    Bullets.RemoveAt(i--);
                }
                else
                {
                    b.Update(gameTime);
                }

                _boss.Update(gameTime);
            }
        }
コード例 #9
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (Game.Pause)
            {
                return;
            }

            if (!Game.GameManager.EndGame())
            {
                if (_player.Alive())
                {
                    _player.Update(gameTime);
                }

                _boss.Update(gameTime);
            }
        }
コード例 #10
0
        public void Update(GameTime gameTime)
        {
            if (boss.player == null)
            {
                boss.GetPlayer(player);
            }
            sound.PlayBGM("BossBGM");
            boss.Update(gameTime);
            player.Update(gameTime);

            if (Input.GetKeyTrigger(Keys.Space) || Input.IsButtonDown(PlayerIndex.One, Buttons.Start))
            {
                IsEndFlag = true;
            }

            if (boss.IsDead())
            {
                IsEndFlag = true;
            }
        }
コード例 #11
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (InputManager.PressedCancel())
            {
                Game.ScreenManager.GoTo <BossSelectionScreen>();
            }

            _playTime += gameTime.ElapsedGameTime;

            if (!Game.GameManager.EndGame())
            {
                if (_player.Alive())
                {
                    _player.Update(gameTime);
                }

                _boss.Update(gameTime);
            }
        }
コード例 #12
0
        public virtual void Update()
        {
            foreach (var background in backgrounds)
            {
                background.Update();
            }

            ground.Update();

            boss.Update();

            player.Update();

            foreach (var p in plates)
            {
                Platform plate = (Platform)p;
                plate.Update();
            }

            powerup.Update();

            CollisionManager.Update();
        }
コード例 #13
0
 protected void UpdateBoss(GameTime gameTime)
 {
     _boss.Update(gameTime);
 }
コード例 #14
0
        public override void Update(GameTime gameTime)
        {
            // Move the background
            if (_backgroundMainRectangle.Y >= Config.Resolution.Y)
            {
                _backgroundMainRectangle.Y = _backgroundTopRectangle.Y - Config.Resolution.Y;
            }
            if (_backgroundTopRectangle.Y >= Config.Resolution.Y)
            {
                _backgroundTopRectangle.Y = _backgroundMainRectangle.Y - Config.Resolution.Y;
            }

            /*
             * _backgroundMainRectangle.Y += (int)(250 * (float)gameTime.ElapsedGameTime.TotalSeconds);
             * _backgroundTopRectangle.Y += (int)(250 * (float)gameTime.ElapsedGameTime.TotalSeconds);
             */

            HandleInput();

            _timer.Update(gameTime);

            _playTime += gameTime.ElapsedGameTime;

            if (InputHandler.PressedCancel())
            {
                UnloadContent();
                StateManager.ChangeState(GameRef.TitleScreen);
            }

            base.Update(gameTime);

            foreach (Player p in Players)
            {
                if (p.IsAlive)
                {
                    if (p.BulletTime)
                    {
                        var newGameTime = new GameTime(
                            gameTime.TotalGameTime,
                            new TimeSpan((long)(gameTime.ElapsedGameTime.Ticks / Improvements.BulletTimeDivisorData[PlayerData.BulletTimeDivisorIndex].Key))
                            );

                        gameTime = newGameTime;
                    }

                    for (int i = 0; i < p.GetBullets().Count; i++)
                    {
                        p.GetBullets()[i].Update(gameTime);

                        if (_enemy.IsAlive && _enemy.GetBoundingElement().Intersects(p.GetBullets()[i].GetBoundingElement()))
                        {
                            if (_enemy.IsReady())
                            {
                                _enemy.TakeDamage(p.GetBullets()[i].Power);
                                hit.Play();
                                p.AddScore(Improvements.ScoreByHitData[PlayerData.ScoreByHitIndex].Key);
                            }

                            p.GetBullets().Remove(p.GetBullets()[i]);
                        }
                        else
                        {
                            if (p.GetBullets()[i].X <0 || p.GetBullets()[i].X> Config.GameArea.X ||
                                p.GetBullets()[i].Y <0 || p.GetBullets()[i].Y> Config.GameArea.Y)
                            {
                                p.GetBullets().Remove(p.GetBullets()[i]);
                            }
                        }
                    }

                    if (p.Intersects(_enemy))
                    {
                        p.Hit();
                    }

                    foreach (Mover m in _enemy.MoverManager.movers)
                    {
                        if (p.Intersects(m))
                        {
                            p.Hit();
                        }
                    }

                    p.Update(gameTime);
                }
            }

            if (_enemy.IsAlive)
            {
                _enemy.Update(gameTime);
            }
            else
            {
                _waveNumber++;

                _timer.AddTime(Improvements.TimerExtraTimeData[PlayerData.TimerExtraTimeIndex].Key);

                _enemy.DefeatNumber++;
                _enemy.Initialize();
            }

            // Game Over
            if ((!Players[0].IsAlive && (Config.PlayersNumber == 1 || (Config.PlayersNumber == 2 && !Players[1].IsAlive))) || _timer.IsFinished)
            {
                UnloadContent();

                GameRef.GameOverScreen.Died         = !_timer.IsFinished;
                GameRef.GameOverScreen.Time         = _playTime;
                GameRef.GameOverScreen.WaveNumber   = _waveNumber;
                GameRef.GameOverScreen.Player1Score = Players[0].Score;
                if (Config.PlayersNumber == 2)
                {
                    GameRef.GameOverScreen.Player2Score = Players[1].Score;
                }

                int totalScore =
                    GameRef.GameOverScreen.Player1Score +
                    GameRef.GameOverScreen.Player2Score +
                    (Improvements.ScoreByEnemyData[PlayerData.ScoreByEnemyIndex].Key * GameRef.GameOverScreen.WaveNumber) +
                    (int)_playTime.TotalSeconds;

                GameRef.GameOverScreen.TotalScore = totalScore;

                PlayerData.Credits += totalScore;

                StateManager.ChangeState(GameRef.GameOverScreen);
            }

            if (Config.Debug && InputHandler.KeyPressed(Keys.C))
            {
                Config.DisplayCollisionBoxes = !Config.DisplayCollisionBoxes;
            }
        }
コード例 #15
0
        public override void Update(GameTime gameTime)
        {
            timer       += gameTime.ElapsedGameTime.TotalMilliseconds;
            rSpawnTimer += gameTime.ElapsedGameTime.TotalMilliseconds;
            spawnTimer  += gameTime.ElapsedGameTime.TotalMilliseconds;
            float dt = (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            float dv = 0.0004f;

            water.Update(gameTime);
            Tile.Update(gameTime);
            player.Update(gameTime);
            float bossFightTimer = (float)(timer - (124000 + 4 / dv + 64));

            if (player.Health <= 0)
            {
                GameManager.GetInstance().ChangeScreen(ScreenState.MENU);
            }

            int t = (int)(2 / dv + 16);
            int rSpawnTimerThresh = (state.Equals(MinigameState.BOSS)) ? 300 : 200;

            if (timer > 8000 && rSpawnTimer > rSpawnTimerThresh && boss.Health > 0)
            {
                rSpawnTimer = 0;
                if (!state.Equals(MinigameState.BOSS))
                {
                    SpawnRandom(350);
                }
                Color            c  = (state.Equals(MinigameState.BOSS)) ? Color.Red : Color.Transparent;
                RandomProjectile p  = GenerateProjectile(game.Width / 5, 0, 10, c);
                RandomProjectile p2 = GenerateProjectile(game.Width / 5 * 2, 0, 10, c);
                RandomProjectile p3 = GenerateProjectile(game.Width / 5 * 3, 0, 10, c);
                RandomProjectile p4 = GenerateProjectile(game.Width / 5 * 4, 0, 10, c);

                projectiles.Add(p);
                projectiles.Add(p2);
                projectiles.Add(p3);
                projectiles.Add(p4);
            }

            int initialCount = projectiles.Count;

            for (int i = 0; i < projectiles.Count; i++)
            {
                projectiles[i].Update(gameTime);
                i += Math.Max(Math.Min(0, projectiles.Count - initialCount), 0);
                if (projectiles[Math.Min(i, projectiles.Count - 1)].TTL <= 0)
                {
                    projectiles.RemoveAt(i--);
                }
                i += Math.Max(Math.Min(0, projectiles.Count - initialCount), 0);
            }

            if (timer < 8000)
            {
                state = MinigameState.BEGIN;
            }
            else if (timer > 8000 && timer < 14000)
            {
                state = MinigameState.KEYNESIAN_CROSS;
                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new FortyFiveProjectile(blank, new Rectangle(
                                                                0, game.Height, 10, 10), 9000));
                    projectiles.Add(new KeynesianCross(blank, new Rectangle(
                                                           0, game.Height / 3 * 2, 10, 10), 9000));
                }
            }
            else if (timer > 15000 && timer < 28500)
            {
                state = MinigameState.AGGREGATE_DEMAND_SUPPLY;
                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new LRASProjectile(blank, new Rectangle(
                                                           game.Width / 2, 0, 10, 10), 5000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         0, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width, game.Height * 3 / 4, 10, 10), 10000));
                }
            }
            else if (timer > 32000 && timer < 46500)
            {
                state = MinigameState.BUSINESS_CYCLE;
                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new BusinessCycleProjectile(blank, new Rectangle(
                                                                    0, game.Height / 4 * 3, 10, 10), 10000));
                }
            }
            else if (timer > 50000 && timer < 62000)
            {
                state = MinigameState.PHILLIPS;

                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new PhillipsProjectile(blank, new Rectangle(50, 0, 10, 10), 18000));
                }
            }
            else if (timer > 64000 && timer < 78000)
            {
                state = MinigameState.SUPPLY_DEMAND;

                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         0, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width, game.Height * 3 / 4, 10, 10), 10000));
                }
            }
            else if (timer > 82000 && timer < 88500)
            {
                state = MinigameState.RECESSION_DEPRESSION;

                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    // recession/depression
                    projectiles.Add(new LRASProjectile(blank, new Rectangle(
                                                           game.Width / 2, 0, 10, 10), 5000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         0, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width - 300, game.Height * 3 / 4 + 300, 10, 10), 10000));
                }
            }
            else if (timer >= 88500 && timer < 96000)
            {
                state = MinigameState.INFLATION;

                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new LRASProjectile(blank, new Rectangle(
                                                           game.Width / 2, 0, 10, 10), 5000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         0, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width + 200, game.Height * 3 / 4 - 100, 10, 10), 10000));
                }
            }
            else if (timer >= 96000 && timer < 103000)
            {
                state = MinigameState.STAGFLATION;
                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new LRASProjectile(blank, new Rectangle(
                                                           game.Width / 2, 0, 10, 10), 5000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         0, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         -200, game.Height * 3 / 4 - 200, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width, game.Height * 3 / 4, 10, 10), 10000));
                }
            }
            else if (timer > 103000 && timer < 112000)
            {
                state = MinigameState.ECONOMIC_BOOM;
                if (spawnTimer > 200)
                {
                    spawnTimer = 0;
                    projectiles.Add(new LRASProjectile(blank, new Rectangle(
                                                           game.Width / 2, 0, 10, 10), 5000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         0, game.Height * 3 / 4, 10, 10), 10000));
                    projectiles.Add(new ASProjectile(blank, new Rectangle(
                                                         200, game.Height * 3 / 4 + 200, 10, 10), 10000));
                    projectiles.Add(new ADProjectile(blank, new Rectangle(
                                                         game.Width, game.Height * 3 / 4, 10, 10), 10000));
                }
            }
            else if (timer > 114000 && timer < 124000)
            {
                if (spawnTimer > 70)
                {
                    spawnTimer = 0;
                    projectiles.Add(new LafferProjectile(blank, new Rectangle(0, game.Height, 10, 10), 10000));
                }
                state = MinigameState.LAFFERS_CURVE;
            }
            else if (timer > 124000 && timer < 124000 + t)
            {
                state = MinigameState.NONE;
                MediaPlayer.Volume = Math.Max(MediaPlayer.Volume - dv * dt, 0);
                //GameManager.GetInstance().ChangeScreen(ScreenState.MENU);
            }
            else if (timer > 124000 + t && timer < 124000 + 2 * t)
            {
                if (!isPlayFlag)
                {
                    isPlayFlag = true;
                    MediaPlayer.Play(background2);
                }
                MediaPlayer.Volume = Math.Min(MediaPlayer.Volume + dv * dt, 1);
            }
            else if (timer > 124000 + 4 / dv + 64 && boss.Health > 0)
            {
                state = MinigameState.BOSS;
                boss.Update(gameTime);
                songName = "Spear of Justice! - Undertale";
            }
            else
            {
                state = MinigameState.NONE;
            }

            if (boss.Health <= 0)
            {
                endTimer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                state     = MinigameState.END;

                if (endTimer > 10000)
                {
                    GameManager.GetInstance().ChangeScreen(ScreenState.MENU);
                }
            }
        }
コード例 #16
0
    void Update()
    {
        GameDeltaTime = Paused ? 0.0f : Time.deltaTime;

        if (mGameStatus == State.Level)
        {
            mDistanceTravelled += ScenerySpeed * GameDeltaTime;
            if (mDistanceTravelled != 0f)
            {
                UpdateText(string.Format("Distance: {0:0.0} m", mDistanceTravelled));
            }

            mLevelTimeLeft -= GameDeltaTime;

            if (!GameFrozen)
            {
                if (mLevelTimeLeft > 0f)
                {
                    //Get a bit pattern and spawn enemies according to it
                    int enemies = mCurrentDifficulty.SpawnPattern();
                    for (int ColumnCount = 0; ColumnCount < 3; ColumnCount++)
                    {
                        if ((enemies & (1 << ColumnCount)) != 0)
                        {
                            EnemyFactory.Dispatch((EnemyFactory.Column)ColumnCount);
                        }
                    }

                    PowerupFactory.DetectCollisions(mPlayerCharacter.transform.position);
                }
                else if (mActiveEnemies.Count == 0)
                {
                    switch (SlowDownStage)
                    {
                    case 0:     //We are just now starting to slow down
                        mCurrentDifficulty.SlowDown();
                        break;

                    //For case 1 - slowing down in progress - nothing is to be done
                    case 2:     //Slowing down has finished; switch to boss state
                        mGameStatus = State.Boss;
                        boss        = new Boss(GameplayCamera, EnemyMaterial);
                        mCurrentDifficulty.TriggerTutorial(11);
                        break;
                    }

                    //At this point, we know there are no enemies to check, so it is OK to skip the loop below
                    return;
                }
            }

            /* Traverse the list descendingly so that removals of already visited elements does not affect the
             * elements yet to be visited.
             */
            for (int count = mActiveEnemies.Count - 1; count >= 0; count--)
            {
                Vector3 ThisPosition = mActiveEnemies[count].transform.position;

                //Update each enemy's position according to the game speed
                ThisPosition.y -= GameDeltaTime * EnemySpeed;
                mActiveEnemies[count].transform.position = ThisPosition;

                //Check if the enemy has flown off screen. If so, return it to the factory and count it as missed.
                if (ThisPosition.y < ScreenHeight * -0.5f)
                {
                    EnemyFactory.Return(mActiveEnemies[count]);
                    mMissedEnemies++;
                }

                //Check if the enemy is too close to the player. If so, end the game.
                else if ((mPlayerCharacter.transform.position - ThisPosition).sqrMagnitude < PlayerKillDistance)
                {
                    GameOver("You died!");
                }

                //Check if the enemy has been hit by a bullet
                else
                {
                    for (int bullet = 0; bullet < mPlayerCharacter.Weapon.ActiveBullets.Count; bullet++)
                    {
                        if (mPlayerCharacter.Weapon.ActiveBullets[bullet].CheckHit(ThisPosition, BulletKillDistance, false))
                        {
                            EnemyFactory.Return(mActiveEnemies[count]);
                            break;
                        }
                    }
                }
            }

            //Check if the player has been "invaded" (too many enemies were missed
            if (mMissedEnemies >= MaxMissedEnemies)
            {
                GameOver("You have been invaded!");
            }
        }

        else if (mGameStatus == State.Boss)
        {
            if (boss != null)
            {
                //Only if the boss is allowed to move
                if (!GameFrozen)
                {
                    //Move and rotate boss to point to player's position
                    boss.Update(mPlayerCharacter.transform.position);

                    //Check if boss has eaten the player and if so end the game
                    if (boss.HasEaten(mPlayerCharacter.transform.position))
                    {
                        GameOver("You have been eaten!");
                    }
                }

                //Check wether boss was hit by a bullet
                foreach (Bullet bullet in mPlayerCharacter.Weapon.ActiveBullets)
                {
                    if (bullet.CheckHit(boss.Position(), BossHitDistance, true))
                    {
                        if (boss.Hit(bullet.DamageValue))
                        {
                            boss = null;
                            mCurrentDifficulty.TriggerTutorial(13);
                        }
                        break;
                    }
                }
            }

            //No more boss, transitioning to normal
            else
            {
                mDistanceTravelled += ScenerySpeed * GameDeltaTime;
                UpdateText(string.Format("Distance: {0:0.0} m", mDistanceTravelled));

                if (mCurrentDifficulty.LevelUp())
                {
                    mGameStatus    = State.Level;
                    mMissedEnemies = 0;
                    mLevelTimeLeft = DifficultyCurve.LevelDuration;
                }
            }
        }

        else if (mGameStatus == State.TapToStart)
        {
            mCurrentDifficulty.TriggerTutorial(1);
            if (mCurrentDifficulty.TutorialStage != 0)
            {
                mGameStatus = State.Level;
            }
            else
            {
                GameText.text = "Tap the screen or press W to start";
            }
        }
    }
コード例 #17
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // MONO: Add your update logic here

            //In every State you are able to quit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            lastGameState = currentGameState;

            //MUSIC Updating Timer
            audioManager.UpdateAudioManagerTimer(gameTime);

            //Update Timer
            float animationFrameTime = 0.02f;

            float gameFrameTime = (float)gameTime.ElapsedGameTime.TotalSeconds;

            timeUntilNextFrame1 -= gameFrameTime;
            timeUntilNextFrame2 -= gameFrameTime;

            switch (currentGameState)
            {
            case GameState.SPLASHSCREEN:
                splashScreen.ClickedButton();
                break;

            case GameState.MAINMENU:
                if (MediaPlayer.State != 0)
                {
                    MediaPlayer.Stop();
                    turnOnMusic = true;
                }
                mainMenu.Update(this);
                this.IsMouseVisible = true;
                break;

            case GameState.LEVELEDITOR:

                levelEditor.HandleLevelEditorEvents();

                levelEditor.moveOrDeletePlatforms(ref allGameObjectList, transformationMatrix);
                this.IsMouseVisible = true;
                levelEditor.moveCamera(ref cameraOffset);
                // Makes player movable in the leveleditor //Enemies are alive but not visible
                gameObjectsToRender = camera.GameObjectsToRender(wormPlayer.gameObjectPosition, allGameObjectList, ref interactiveObject);
                wormPlayer.Update(gameTime, gameObjectsToRender, ref viewableEnemies, interactiveObject, ref allGameObjectList, loadAndSave, ingameMenus, levelManager, ref allGameObjectList, shopKeeper, itemUIManager, ref hakume);
                break;

            case GameState.GAMELOOP:

                this.IsMouseVisible = false;

                //MUSIC
                if (turnOnMusic)
                {
                    audioManager.Play("IngameMusic");
                    turnOnMusic = false;
                }

                //switch to LevelEditor
                levelManager.ManageLevels(wormPlayer.gameObjectPosition);
                itemUIManager.ManageItems(ref wormPlayer, ref levelObjectList);
                if (currentGameState == GameState.GAMELOOP)
                {
                    //cameraOffset = new Vector2(0, 0);
                    if (Keyboard.GetState().IsKeyDown(Keys.L) && !previousState.IsKeyDown(Keys.L))
                    {
                        currentGameState = GameState.LEVELEDITOR;
                    }
                    //previousState = Keyboard.GetState();
                    if (Keyboard.GetState().IsKeyDown(Keys.M) && !previousState.IsKeyDown(Keys.M) && levelManager.currentLevel != Enums.Level.TUTORIAL)
                    {
                        currentGameState = GameState.MINIMAP;
                    }
                    if ((Keyboard.GetState().IsKeyDown(Keys.P) && !previousState.IsKeyDown(Keys.P)) || (GamePad.GetState(0).IsButtonDown(Buttons.Start) && !previousGamePadState.IsButtonDown(Buttons.Start)))
                    {
                        currentGameState = GameState.GAMEMENU;
                    }

                    previousState        = Keyboard.GetState();
                    previousGamePadState = GamePad.GetState(0);
                }

                if (shopKeeper.shopOpen == true)
                {
                    shopKeeper.handleShopKeeperEvents();
                }


                if (timeUntilNextFrame1 <= 0)
                {
                    gameObjectsToRender  = camera.GameObjectsToRender(wormPlayer.gameObjectPosition, levelObjectList, ref interactiveObject);
                    timeUntilNextFrame1 += animationFrameTime;
                }


                camera.SpawnEnemyOffScreen(wormPlayer, enemySpawnList, ref enemyList, enemySpriteSheets, levelManager.PlayerLevelLocation());
                if (!camera.spawnBoss)
                {
                    viewableEnemies = camera.RenderedEnemies(wormPlayer.gameObjectPosition, enemyList);
                }
                wormPlayer.Update(gameTime, gameObjectsToRender, ref viewableEnemies, interactiveObject, ref levelObjectList, loadAndSave, ingameMenus, levelManager, ref allGameObjectList, shopKeeper, itemUIManager, ref hakume);

                if (timeUntilNextFrame2 <= 0)
                {
                    if (levelManager.PlayerLevelLocation() != Enums.Level.CROWN)
                    {
                        foreach (var enemy in viewableEnemies.ToList())
                        {
                            enemy.Update(gameTime, gameObjectsToRender);
                            if (enemy.EnemyAliveState() == false || enemy.fallOutOfMap)
                            {
                                viewableEnemies.RemoveAt(viewableEnemies.IndexOf(enemy));
                            }
                        }
                    }
                    if (levelManager.PlayerLevelLocation() == Enums.Level.CROWN)
                    {
                        if (hakume != null)
                        {
                            hakume.Update(gameTime, gameObjectsToRender);
                        }
                        if (hakume.EnemyAliveState() == false)
                        {
                            hakume = null;
                        }
                    }

                    timeUntilNextFrame2 += animationFrameTime;
                }
                break;

            case GameState.MINIMAP:
                if (Keyboard.GetState().IsKeyDown(Keys.M) && !previousState.IsKeyDown(Keys.M))
                {
                    currentGameState = GameState.GAMELOOP;
                }
                previousState = Keyboard.GetState();
                break;

            case GameState.GAMEMENU:
                gameMenu.Update(this, loadAndSave);
                break;

            case GameState.CREDITS:
                credits.UpdateCredits();
                break;
            }
        }
コード例 #18
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (InputHandler.PressedCancel())
            {
                UnloadContent();
                StateManager.ChangeState(GameRef.TitleScreen);
            }
            else if (InputHandler.KeyPressed(Keys.P))
            {
                GameRef.Pause = !GameRef.Pause;
            }

            if (GameRef.Pause)
            {
                return;
            }

            HandleInput();

            foreach (var p in Players)
            {
                if (p.IsAlive)
                {
                    if (p.BulletTime)
                    {
                        var newGameTime = new GameTime(
                            gameTime.TotalGameTime,
                            new TimeSpan((long)(gameTime.ElapsedGameTime.Ticks / Improvements.BulletTimeDivisorData[PlayerData.BulletTimeDivisorIndex].Key))
                            );

                        gameTime = newGameTime;
                    }

                    for (var i = 0; i < p.GetBullets().Count; i++)
                    {
                        var currentPlayerBullet = p.GetBullets()[i];
                        currentPlayerBullet.Update(gameTime);

                        if (_boss.Intersects(currentPlayerBullet))
                        {
                            //_boss.TakeDamage(currentPlayerBullet.Power);

                            for (var j = 0; j < 30; j++)
                            {
                                GameRef.ParticleManager.CreateParticle(GameRef.LineParticle,
                                                                       currentPlayerBullet.Position, Color.LightBlue, 50, 1,
                                                                       new ParticleState()
                                {
                                    Velocity         = GameRef.Rand.NextVector2(0, 9),
                                    Type             = ParticleType.Bullet,
                                    LengthMultiplier = 1
                                });
                            }

                            p.GetBullets().Remove(currentPlayerBullet);
                            continue;
                        }

                        if (currentPlayerBullet.X < 0 || currentPlayerBullet.X > Config.GameArea.X ||
                            currentPlayerBullet.Y < 0 || currentPlayerBullet.Y > Config.GameArea.Y)
                        {
                            for (var j = 0; j < 30; j++)
                            {
                                GameRef.ParticleManager.CreateParticle(GameRef.LineParticle,
                                                                       currentPlayerBullet.Position, Color.LightBlue, 50, 1,
                                                                       new ParticleState()
                                {
                                    Velocity         = GameRef.Rand.NextVector2(0, 9),
                                    Type             = ParticleType.Bullet,
                                    LengthMultiplier = 1
                                });
                            }

                            p.GetBullets().Remove(currentPlayerBullet);
                        }

                        /*
                         * // Collision with turrets
                         * for (int j = 0; j < _boss.Turrets.Count; j++)
                         * {
                         *  if (_boss.Turrets[j].Intersects(p.GetBullets()[i]))
                         *  {
                         *      _boss.Turrets[j].Color = Color.Blue;
                         *      _boss.DestroyTurret(_boss.Turrets[j], p.GetBullets()[i]);
                         *      p.GetBullets().Remove(p.GetBullets()[i]);
                         *      break;
                         *  }
                         * }
                         */
                    }

                    p.Update(gameTime);
                }
            }

            _boss.Update(gameTime);

            GameRef.ParticleManager.Update();
        }
コード例 #19
0
        /// <summary>
        /// 1フレームぶんの処理を行う。
        /// </summary>
        public void Update()
        {
            // スクリプト実行
            runner.Step();

            // 自機
            OwnChar.Update(key);

            // 敵
            Enemies.ForEach(enemy => enemy.Update());

            // 自機の弾
            OwnBullets.ForEach(bullet => bullet.Update());

            // 敵の弾
            EnemyBullets.ForEach(bullet => bullet.Update());

            // ボス
            if (Boss != null)
            {
                Boss.Update();
            }

            // 画面外の弾を削除
            OwnBullets.RemoveAll(bullet =>
                                 bullet.Position.X < -bullet.Radius ||
                                 bullet.Position.Y < -bullet.Radius ||
                                 bullet.Position.X > 640 + bullet.Radius ||
                                 bullet.Position.Y > 480 + bullet.Radius);
            EnemyBullets.RemoveAll(bullet =>
                                   bullet.Position.X < -bullet.Radius ||
                                   bullet.Position.Y < -bullet.Radius ||
                                   bullet.Position.X > 640 + bullet.Radius ||
                                   bullet.Position.Y > 480 + bullet.Radius);

            // 敵と弾の当たり判定
            for (var bi = OwnBullets.Count - 1; bi >= 0; --bi)
            {
                var bullet = OwnBullets[bi];
                for (var ei = Enemies.Count - 1; ei >= 0; --ei)
                {
                    var enemy = Enemies[ei];
                    if (collidesCircleCircle(
                            bullet.Position.X, bullet.Position.Y, bullet.Radius,
                            enemy.Position.X, enemy.Position.Y, enemy.Radius))
                    {
                        enemy.OnDamaged(bullet.Power);
                        OwnBullets.RemoveAt(bi);
                        break;
                    }
                }
            }
            Enemies.RemoveAll(enemy => enemy.Dead);

            // ボスと弾の当たり判定
            if (Boss != null)
            {
                for (var bi = OwnBullets.Count - 1; bi >= 0; --bi)
                {
                    var bullet = OwnBullets[bi];
                    if (collidesCircleCircle(
                            bullet.Position.X, bullet.Position.Y, bullet.Radius,
                            Boss.Position.X, Boss.Position.Y, Boss.Radius))
                    {
                        Boss.OnDamaged(bullet.Power);
                        OwnBullets.RemoveAt(bi);
                    }
                }
            }

            // 自機と敵の当たり判定
            foreach (var enemy in Enemies)
            {
                if (collidesCircleCircle(
                        OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius,
                        enemy.Position.X, enemy.Position.Y, enemy.Radius))
                {
                    failed = !DebugMode;
                }
            }

            // 自機とボスの当たり判定
            if (Boss != null)
            {
                if (collidesCircleCircle(
                        OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius,
                        Boss.Position.X, Boss.Position.Y, Boss.Radius))
                {
                    failed = !DebugMode;
                }
            }

            // 自機と敵の弾の当たり判定
            foreach (var bullet in EnemyBullets)
            {
                if (collidesCircleCircle(
                        OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius,
                        bullet.Position.X, bullet.Position.Y, bullet.Radius))
                {
                    failed = !DebugMode;
                }
            }

            // R キーで自滅
            if (key.IsPressed(DX.KEY_INPUT_R))
            {
                failed = true;
            }
        }
コード例 #20
0
        public override void Update(GameTime gametime)
        {
            manager.Update();

            sm.Update();

            bg.Update();

            if (i > 3 * 60)
            {
                console.wipe();
                i = 0;
            }
            else
            {
                if (console.log.Count > 0)
                {
                    i++;
                }
            }

            if (!manager.paused)
            {
                player.Update();
                camera.Update();

                foreach (GameObject t in tiles)
                {
                    t.Update();
                }

                foreach (GameObject t in deco)
                {
                    t.Update();
                }

                List <Destroyable> staticPickups = new List <Destroyable>();
                staticPickups = pickups.ToList();
                foreach (GameObject t in staticPickups)
                {
                    t.Update();
                }

                List <Enemy> staticEnemies = new List <Enemy>();
                staticEnemies = enemies.ToList();
                foreach (Enemy g in staticEnemies)
                {
                    g.Update();
                }

                List <Danmaku> staticProjectiles = new List <Danmaku>();
                staticProjectiles = projectiles.ToList();
                foreach (Danmaku d in staticProjectiles)
                {
                    d.Update();
                }

                foreach (Trigger t in triggers)
                {
                    t.Update();
                }

                boss.Update();
                attackoverlay.Update();
            }
            base.Update(gametime);
        }