Пример #1
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)
        {
            if (Keyboard.GetState().IsKeyDown(Keys.Escape))// || !player.IsActive)
            {
                Exit();
            }

            foreach (Interfaces.IUpdatable item in Engine.UpdatableObjects)
            {
                item.Update(gameTime);
            }

            foreach (Projectile projectile in Engine.Projectiles)
            {
                projectile.Update(gameTime);
                foreach (Unit unit in Engine.UpdatableObjects)
                {
                    if (Collision.CheckForCollisionBetweenCollidables(projectile, unit))
                    {
                        if (projectile.Owner is PlayableCharacter && unit is Enemy)
                        {
                            unit.GetHitByProjectile(projectile);
                            if (!(projectile is RayParticle))
                            {
                                projectile.Nullify();
                            }
                        }
                        if (projectile.Owner is Enemy && unit is PlayableCharacter)
                        {
                            unit.GetHitByProjectile(projectile);
                            projectile.Nullify();
                        }
                    }
                }
            }

            foreach (var bonus in Engine.PlayerTimedBonuses)
            {
                if (bonus.CountDownTimer.IsActive)
                {
                    if (bonus.CountDownTimer.CheckTimer(gameTime))
                    {
                        bonus.IsTimedOut = true;
                    }
                }
            }

            foreach (var item in Engine.Items)
            {
                if (item.IsActive)
                {
                    item.Update(gameTime);
                }
            }

            //if (Keyboard.GetState().IsKeyDown(Keys.B))
            //{
            //    Engine.ChangeLevel("Level2");
            //    camera.SetSceneBounds(new Rectangle(50, 50, Engine.LevelBounds.Width - 200, Engine.LevelBounds.Height));
            //}

            camera.Chase(gameTime);
            camera.Update(gameTime);
            Engine.CleanInactiveObjects();

            base.Update(gameTime);
        }