/// <summary>
        /// Runs one frame of update for the game.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        public override void Update(GameTime gameTime,
                                    bool otherScreenHasFocus, bool coveredByOtherScreen)
        {
            float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (IsActive)
            {
                // Move the player
                if (player.IsAlive == true)
                {
                    player.Position  += player.Velocity * 128.0f * elapsed;
                    player.FireTimer -= elapsed;

                    if (player.Position.X <= 0.0f)
                    {
                        player.Position = new Vector2(0.0f, player.Position.Y);
                    }

                    if (player.Position.X + player.Width >= worldBounds.Right)
                    {
                        player.Position = new Vector2(worldBounds.Right - player.Width, player.Position.Y);
                    }
                }

                Respawn(elapsed);

                UpdateAliens(elapsed);

                UpdateBullets(elapsed);

                CheckHits();

                if (player.IsAlive && player.Velocity.LengthSquared() > 0.0f)
                {
                    particles.CreatePlayerDust(player);
                }

                particles.Update(elapsed);
            }

            base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
        }