コード例 #1
0
ファイル: Game1.cs プロジェクト: mrhaboobi/CaveStory
        protected override void Update(GameTime gameTime)
        {
            input.BeginFrame();

            if (input.WasKeyPressed(Keys.Escape))
            {
                Exit();
            }

            // Player horizontal movement
            if (input.IsKeyHeld(Keys.Left) && input.IsKeyHeld(Keys.Right))
            {
                player.StopMoving();
            }
            else if (input.IsKeyHeld(Keys.Left))
            {
                player.StartMovingLeft();
            }
            else if (input.IsKeyHeld(Keys.Right))
            {
                player.StartMovingRight();
            }
            else
            {
                player.StopMoving();
            }

            if (input.IsKeyHeld(Keys.Up) && input.IsKeyHeld(Keys.Down))
            {
                player.LookHorizontal();
            }
            else if (input.IsKeyHeld(Keys.Up))
            {
                player.LookUp();
            }
            else if (input.IsKeyHeld(Keys.Down))
            {
                player.LookDown();
            }
            else
            {
                player.LookHorizontal();
            }

            // Player Jump Logic
            if (input.WasKeyPressed(Keys.Z))
            {
                player.StartJump();
            }
            else if (input.WasKeyReleased(Keys.Z))
            {
                player.StopJump();
            }

            if (input.WasKeyPressed(Keys.X))
            {
                player.StartFire();
            }
            else if (input.WasKeyReleased(Keys.X))
            {
                player.StopFire();
            }

            player.debugCollidingTiles.Clear();
            player.debugOppositeCollidingTiles.Clear();
            Timer.UpdateAll(gameTime);
            damageTexts.Update(gameTime);
            pickups.Update(gameTime, map);
            frontParticleSystem.Update(gameTime);
            entityParticleSystem.Update(gameTime);
            player.Update(gameTime, map);

            if (bat != null)
            {
                if (!bat.Update(gameTime, player.CenterX))
                {
                    DeathCloudParticle.CreateRandomDeathCloud(particleTools,
                                                              bat.CenterX, bat.CenterY,
                                                              3);
                    pickups.Add(FlashingPickup.HeartPickup(Content, bat.CenterX, bat.CenterY));
                    damageTexts.damageTextDict[bat.DamageText] = null;
                    bat = null;
                }
            }

            List <IProjectile> projectiles = player.Projectiles;

            for (int i = 0; i < projectiles.Count; i++)
            {
                if (bat != null && bat.CollisionRectangle.Intersects(projectiles[i].CollisionRectangle))
                {
                    bat.TakeDamage(projectiles[i].ContactDamage);
                    projectiles[i].CollideWithEnemy();
                }
            }

            pickups.HandleCollisions(player);

            if (bat != null && bat.DamageRectangle.Intersects(player.DamageRectangle))
            {
                player.TakeDamage(bat.ContactDamage);
            }

            input.EndFrame();
            base.Update(gameTime);
        }