protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            KeyboardState prevKeyboard = keyboard;

            keyboard = Keyboard.GetState();

            GamePadState prevGamepad = gamepad;

            gamepad = GamePad.GetState(PlayerIndex.One);

            Random random = new Random();

            if (keyboard.IsKeyDown(Keys.F2) && prevKeyboard.IsKeyUp(Keys.F2))
            {
                particles.Add(new particle(new Vector2(320, 240), 1, "red", random.Next(5, 10), 0.1f, random.Next(360), 4));
            }

            switch (gameState)
            {
            case GameState.startScreen:
                if (keyboard.IsKeyDown(Keys.Space) || gamepad.Buttons.A == ButtonState.Pressed)
                {
                    gameState = GameState.menu;
                }
                break;

            case GameState.menu:
                menu.Update();
                if (keyboard.IsKeyDown(Keys.Escape) && prevKeyboard.IsKeyUp(Keys.Escape) || gamepad.Buttons.Start == ButtonState.Pressed && prevGamepad.Buttons.Start == ButtonState.Released)
                {
                    if (startedGame)
                    {
                        gameState = GameState.game;
                    }
                }
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    switch (menu.selected)
                    {
                    case 1:
                        gameState = GameState.game;
                        if (!startedGame)
                        {
                            Initialize();
                            startedGame = true;
                        }
                        break;

                    case 2:
                        gameState = GameState.howTo;
                        break;

                    case 3:
                        this.Exit();
                        break;
                    }
                }
                break;

            case GameState.game:
                player.Input(projectiles);
                player.Update();
                player.CheckHealth(healthbar, particles);
                spawnManager.Spawn(level, backgroundObjects, enemies);
                gui.update(player, level);
                foreach (enemyProjectile ep in enemyProjectiles)
                {
                    ep.Movment();
                }
                foreach (enemy e in enemies)
                {
                    e.Attack(enemyProjectiles);
                    e.Movment(player);
                    e.Animation();
                    e.CheckHealth(projectiles, explosions, ref player);
                }
                foreach (explosion ex in explosions)
                {
                    ex.Animation();
                }
                foreach (backgroundObject bo in backgroundObjects)
                {
                    bo.Movment();
                }
                foreach (projectile p in projectiles)
                {
                    p.Movment();
                }
                foreach (particle p in particles)
                {
                    p.Movemnt();
                }
                if (keyboard.IsKeyDown(Keys.Escape) && prevKeyboard.IsKeyUp(Keys.Escape) || gamepad.Buttons.Start == ButtonState.Pressed && prevGamepad.Buttons.Start == ButtonState.Released)
                {
                    gameState     = GameState.menu;
                    menu.selected = 1;
                }
                for (int i = 0; i < projectiles.Count; i++)
                {
                    if (projectiles[i].destroy)
                    {
                        projectiles.RemoveAt(i);
                    }
                }
                for (int i = 0; i < enemyProjectiles.Count; i++)
                {
                    if (enemyProjectiles[i].destroy)
                    {
                        enemyProjectiles.RemoveAt(i);
                    }
                }
                for (int i = 0; i < particles.Count; i++)
                {
                    if (particles[i].destroy)
                    {
                        particles.RemoveAt(i);
                    }
                }
                for (int i = 0; i < enemies.Count; i++)
                {
                    if (enemies[i].destroy)
                    {
                        enemies.RemoveAt(i);
                    }
                }
                for (int i = 0; i < backgroundObjects.Count; i++)
                {
                    if (backgroundObjects[i].destroy)
                    {
                        backgroundObjects.RemoveAt(i);
                    }
                }
                for (int i = 0; i < explosions.Count; i++)
                {
                    if (explosions[i].destroy)
                    {
                        explosions.RemoveAt(i);
                    }
                }
                break;

            case GameState.howTo:
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    gameState = GameState.menu;
                }
                break;
            }

            base.Update(gameTime);
        }
        protected override void Update(GameTime gameTime)
        {
            KeyboardState prevKeyboard = keyboard;

            keyboard = Keyboard.GetState();

            GamePadState prevGamepad = gamepad;

            gamepad = GamePad.GetState(PlayerIndex.One);

            Random random = new Random();

            if (keyboard.IsKeyDown(Keys.F1) && prevKeyboard.IsKeyUp(Keys.F1) || gamepad.Buttons.Back == ButtonState.Pressed && prevGamepad.Buttons.Back == ButtonState.Released)
            {
                graphics.ToggleFullScreen();
            }

            switch (gameState)
            {
            case GameState.startScreen:
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || keyboard.IsKeyDown(Keys.Enter) && prevKeyboard.IsKeyUp(Keys.Enter) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    gameState = GameState.menu;
                }
                break;

            case GameState.menu:
                menu.Update();
                if (keyboard.IsKeyDown(Keys.Escape) && prevKeyboard.IsKeyUp(Keys.Escape) || gamepad.Buttons.Start == ButtonState.Pressed && prevGamepad.Buttons.Start == ButtonState.Released)
                {
                    if (startedGame)
                    {
                        gameState = GameState.game;
                    }
                }
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || keyboard.IsKeyDown(Keys.Enter) && prevKeyboard.IsKeyUp(Keys.Enter) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    switch (menu.selected)
                    {
                    case 1:
                        gameState = GameState.game;
                        if (!startedGame)
                        {
                            Initialize();
                            startedGame = true;
                        }
                        break;

                    case 2:
                        gameState = GameState.howTo;
                        break;

                    case 3:
                        this.Exit();
                        break;
                    }
                }
                break;

            case GameState.levelTransition:
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || keyboard.IsKeyDown(Keys.Enter) && prevKeyboard.IsKeyUp(Keys.Enter) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    resetLevel();
                    gameState = GameState.game;
                }
                break;

            case GameState.gameOver:
                gibs.Clear();
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || keyboard.IsKeyDown(Keys.Enter) && prevKeyboard.IsKeyUp(Keys.Enter) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    resetLevel();
                    Initialize();
                    gameState = GameState.menu;
                }
                break;

            case GameState.game:

                if (!this.IsActive)
                {
                    gameState = GameState.menu;
                }
                player.Input(projectiles, particles);
                player.Update();
                if (player.lives <= -1)
                {
                    gameState = GameState.gameOver;
                }
                player.CheckHealth(healthbar, particles);
                spawnManager.Spawn(level, backgroundObjects, enemies, powerUps, bosses);
                gui.Update(player, level);

                foreach (gib g in gibs)
                {
                    g.movment();
                }
                foreach (boss b in bosses)
                {
                    b.Attack(enemyProjectiles, player);
                    b.Movment(player);
                    b.checkHealth(projectiles, particles, ref player, ref level);
                    b.Update();
                    if (b.nextLevelCount >= 128 * 2)
                    {
                        gameState = GameState.levelTransition;
                    }
                }
                foreach (enemyProjectile ep in enemyProjectiles)
                {
                    ep.Movment(player);
                    ep.Update(player, projectiles, gibs);
                }
                foreach (hitEffect he in hitEffects)
                {
                    he.Update();
                }
                foreach (enemy e in enemies)
                {
                    e.Attack(enemyProjectiles, player);
                    e.Movment(player);
                    e.Animation();
                    e.CheckHealth(projectiles, explosions, hitEffects, gibs, ref player);
                }
                foreach (explosion ex in explosions)
                {
                    ex.Animation();
                }
                foreach (powerUp pu in powerUps)
                {
                    pu.Update(ref player);
                    pu.Movment();
                }
                foreach (backgroundObject bo in backgroundObjects)
                {
                    bo.Movment();
                }
                foreach (projectile p in projectiles)
                {
                    p.Movment();
                    p.Update(particles);
                }
                foreach (particle p in particles)
                {
                    p.Movemnt();
                }
                if (keyboard.IsKeyDown(Keys.Escape) && prevKeyboard.IsKeyUp(Keys.Escape) || gamepad.Buttons.Start == ButtonState.Pressed && prevGamepad.Buttons.Start == ButtonState.Released)
                {
                    gameState     = GameState.menu;
                    menu.selected = 1;
                }
                for (int i = 0; i < projectiles.Count; i++)
                {
                    if (projectiles[i].destroy)
                    {
                        projectiles.RemoveAt(i);
                    }
                }
                for (int i = 0; i < gibs.Count; i++)
                {
                    if (gibs[i].destroy)
                    {
                        gibs.RemoveAt(i);
                    }
                }
                for (int i = 0; i < hitEffects.Count; i++)
                {
                    if (hitEffects[i].destroy)
                    {
                        hitEffects.RemoveAt(i);
                    }
                }
                for (int i = 0; i < enemyProjectiles.Count; i++)
                {
                    if (enemyProjectiles[i].destroy)
                    {
                        enemyProjectiles.RemoveAt(i);
                    }
                }
                for (int i = 0; i < particles.Count; i++)
                {
                    if (particles[i].destroy)
                    {
                        particles.RemoveAt(i);
                    }
                }
                for (int i = 0; i < enemies.Count; i++)
                {
                    if (enemies[i].destroy)
                    {
                        enemies.RemoveAt(i);
                    }
                }
                for (int i = 0; i < backgroundObjects.Count; i++)
                {
                    if (backgroundObjects[i].destroy)
                    {
                        backgroundObjects.RemoveAt(i);
                    }
                }
                for (int i = 0; i < powerUps.Count; i++)
                {
                    if (powerUps[i].destroy)
                    {
                        powerUps.RemoveAt(i);
                    }
                }
                for (int i = 0; i < explosions.Count; i++)
                {
                    if (explosions[i].destroy)
                    {
                        explosions.RemoveAt(i);
                    }
                }
                for (int i = 0; i < bosses.Count; i++)
                {
                    if (bosses[i].destroy)
                    {
                        bosses.RemoveAt(i);
                    }
                }
                break;

            case GameState.howTo:
                if (keyboard.IsKeyDown(Keys.Space) && prevKeyboard.IsKeyUp(Keys.Space) || keyboard.IsKeyDown(Keys.Enter) && prevKeyboard.IsKeyUp(Keys.Enter) || gamepad.Buttons.A == ButtonState.Pressed && prevGamepad.Buttons.A == ButtonState.Released)
                {
                    gameState = GameState.menu;
                }
                break;
            }

            base.Update(gameTime);
        }