protected override void Initialize()
 {
     player = new Player();
         enemy1 = new Enemies();
         enemies = new List<Enemies>();
         lastEnemy = 0;
     bullet = new Projectiles();
     bullets = new List<Projectiles>();
     cooldown = 500;
     enemyCooldown = 250;
     lastShot = 0;
     lastHit = 0;
     lastReload = player.rsMachinegun*2;
     amountPerWave = 10;
     totalEnemiesCount = 0;
     wave = 1;
     currentWeapon = 1;
     healthColor = Color.LightGreen;
     bulletColor = Color.White;
     
     //player.profession = "Vampire";
     base.Initialize();
 }
        protected override void Update(GameTime gameTime)
        {


            KeyboardState pressedKeys = Keyboard.GetState();
            if (pressedKeys.IsKeyDown(Keys.P))
            {
                paused = true;
            }
            if (pressedKeys.IsKeyDown(Keys.P) && pressedKeys.IsKeyDown(Keys.LeftShift))
            {
                paused = false;
            }
            if (!paused)
            {
                lastShot += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                lastEnemy += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                lastHit += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                lastReload += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
                


                #region Waving
                for (int i = 0; i < amountPerWave; i++)
                {
                    if (lastEnemy > enemyCooldown && enemies.Count < amountPerWave && totalEnemiesCount < amountPerWave)
                    {
                        Random rnd = new Random();
                        Enemies newEnemy = new Enemies();
                        newEnemy.speed = rnd.Next(1,4);
                        newEnemy.sprite = Content.Load<Texture2D>("enemy");
                        enemies.Add(newEnemy);
                        lastEnemy = 0;
                        totalEnemiesCount++;
                        newEnemy.position = new Vector2(rnd.Next(-2500, 2500), rnd.Next(-2500, 2500));
                    }
                }
                if (totalEnemiesCount > 0 && enemies.Count == 0)
                {
                    totalEnemiesCount = 0;
                    amountPerWave += 5;
                    wave++;
                    player.health += 10;
                }
                #endregion

                #region Movement
                if (pressedKeys.IsKeyDown(Keys.W))
                {
                    player.velocity.Y = -player.speed;
                }
                else if (pressedKeys.IsKeyDown(Keys.S))
                {
                    player.velocity.Y = player.speed;
                }
                else
                    player.velocity.Y = 0;
                if (pressedKeys.IsKeyDown(Keys.D))
                {
                    player.velocity.X = player.speed;
                }
                else if (pressedKeys.IsKeyDown(Keys.A))
                {
                    player.velocity.X = -player.speed;
                }
                else player.velocity.X = 0;
                #endregion

                #region Bullet control
                if (currentWeapon == 1) //Gun
                {
                    if (lastShot > player.gunCooldown && player.gunAmmo > 0 && lastReload > player.rsGun)
                    {
                        if (pressedKeys.IsKeyDown(Keys.Left))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, 0, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("revolverBullet_left");
                            bullets.Add(bullet);
                            player.gunAmmo--;
                            lastShot = 0;
                        }


                        else if (pressedKeys.IsKeyDown(Keys.Right))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, 0, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("revolverBullet_right");
                            bullets.Add(bullet);
                            player.gunAmmo--;
                            lastShot = 0;
                        }

                        else if (pressedKeys.IsKeyDown(Keys.Up))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, 0, -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("revolverBullet_up");
                            bullets.Add(bullet);
                            player.gunAmmo--;
                            lastShot = 0;


                        }

                        else if (pressedKeys.IsKeyDown(Keys.Down))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, 0, bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("revolverBullet_down");
                            bullets.Add(bullet);
                            player.gunAmmo--;
                            lastShot = 0;
                        }
                    }
                }
                else if (currentWeapon == 2) //Shotgun
                {
                    Random rnd = new Random();
                    if (lastShot > player.shotgunCooldown && player.shotgunAmmo > 0 && lastReload > player.rsShotgun)
                    {
                        if (pressedKeys.IsKeyDown(Keys.Left))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, 0, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, 5, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, -5, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, 2, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, -2, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            player.shotgunAmmo--;
                            lastShot = 0;

                        }


                        else if (pressedKeys.IsKeyDown(Keys.Right))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, 0, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, bullet.speed / 2, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, -bullet.speed / 2, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, 2, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, -2, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            player.shotgunAmmo--;
                            lastShot = 0;
                        }

                        else if (pressedKeys.IsKeyDown(Keys.Up))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, 0, -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed / 2, -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed / 2, -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, 2, -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -2, -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            player.shotgunAmmo--;
                            lastShot = 0;


                        }

                        else if (pressedKeys.IsKeyDown(Keys.Down))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, 0, bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed / 2, bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed / 2, bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, 2, bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -2, bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("shotgunBullet");
                            bullets.Add(bullet);
                            player.shotgunAmmo--;
                            lastShot = 0;
                        }
                    }
                }
                if (currentWeapon == 3) // Machinegun
                {
                    if (lastShot > player.machinegunCooldown && player.machinegunAmmo > 0 && lastReload > player.rsMachinegun)
                    {
                        Random rnd = new Random();
                        if (pressedKeys.IsKeyDown(Keys.Left))
                        {
                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, -bullet.speed, rnd.Next(-1, 2), currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("machinegunBullet_left");
                            bullets.Add(bullet);
                            player.machinegunAmmo--;
                            lastShot = 0;
                        }


                        else if (pressedKeys.IsKeyDown(Keys.Right))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, bullet.speed, rnd.Next(-1, 2), currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("machinegunBullet_right");
                            bullets.Add(bullet);
                            player.machinegunAmmo--;
                            lastShot = 0;
                        }

                        else if (pressedKeys.IsKeyDown(Keys.Up))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, rnd.Next(-1, 2), -bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("machinegunBullet_up");
                            bullets.Add(bullet);
                            player.machinegunAmmo--;
                            lastShot = 0;


                        }

                        else if (pressedKeys.IsKeyDown(Keys.Down))
                        {

                            bullet = new Projectiles(player.position.X + 10, player.position.Y + 10, rnd.Next(-1, 2), bullet.speed, currentWeaponDamage);
                            bullet.sprite = Content.Load<Texture2D>("machinegunBullet_down");
                            bullets.Add(bullet);
                            player.machinegunAmmo--;
                            lastShot = 0;
                        }
                    }
                }
                if (currentWeapon == 1)
                {
                    //Måla ut rätt sprite
                    currentWeaponDamage = player.gunDamage;
                }
                if (currentWeapon == 2)
                {
                    //Måla ut rätt sprite
                    currentWeaponDamage = player.shotgunDamage;
                }
                if (currentWeapon == 3)
                {
                    //Måla ut rätt sprite
                    currentWeaponDamage = player.machinegunDamage;
                }
                #endregion

                #region Weapon control

                if (pressedKeys.IsKeyDown(Keys.D1))
                {

                    currentWeapon = 1;
                }
                if (pressedKeys.IsKeyDown(Keys.D2))
                {

                    currentWeapon = 2;
                }
                if (pressedKeys.IsKeyDown(Keys.D3))
                {

                    currentWeapon = 3;
                }
                if (pressedKeys.IsKeyDown(Keys.R))
                {
                    if(currentWeapon == 1 && player.gunAmmo < player.gunAmmoMax)
                    {
                        player.gunAmmo = player.gunAmmoMax;
                        lastReload = 0;
                    }
                    else if (currentWeapon == 2 && player.shotgunAmmo < player.shotgunAmmoMax)
                    {
                        player.shotgunAmmo = player.shotgunAmmoMax;
                        lastReload = 0;
                    }
                    else if (currentWeapon == 3 && player.gunAmmo < player.machinegunAmmoMax)
                    {
                        player.machinegunAmmo = player.machinegunAmmoMax;
                        lastReload = 0;
                    }

                }




                #endregion

                #region Progression!
                //if (player.experiencePoints == 10)
                //{

                //    if (player.gunCooldown > 410)
                //    {
                //        player.gunCooldown -= 10;
                //    }
                //    player.experiencePoints = 0;
                //    player.level++;
                //}
                #endregion

                #region Professions control

                //if(player.profession == "Vampire") 
                //{
                //    if (pressedKeys.IsKeyDown(Keys.Space) && player.health < 100 && player.manaPoints > 5)
                //    {
                //        player.health += 25;
                //        player.manaPoints -= 5;

                //    }
                //}
                #endregion


                player.Update();


                foreach (Enemies enemyUpdate in enemies)
                {
                    enemyUpdate.Update(player.position);
                }

                foreach (Projectiles bulletUpdate in bullets)
                {
                    bulletUpdate.Update();
                }

                for (int i = 0; i < bullets.Count; i++)
                {

                    for (int j = 0; j < enemies.Count; j++)
                    {


                        if (bullets[i].Hitbox.Intersects(enemies[j].Hitbox))
                        {

                            enemies[j].health -= bullets[i].damage;
                            bullets.RemoveAt(i);
                            player.experiencePoints++;
                            if (bullets.Count == 0)
                                goto outOfLoop;
                            else if (i != 0) {
                                i--;
                            }
                        }
                    }
                }
            outOfLoop:

                for (int i = 0; i < enemies.Count; i++)
                {
                    if (player.Hitbox.Intersects(enemies[i].Hitbox))
                    {
                        if (lastHit > cooldown)
                        {
                            player.health -= 10;

                            lastHit = 0;
                        }
                    }
                }

               
                    if (player.health == 0 || player.health < 0)
                {
                    Game newGame = new Game1();
                    newGame.Run();
                    Environment.Exit(0);
                }
                for (int i = 0; i < enemies.Count; i++)
                {
                    if (enemies[i].health == 0 || enemies[i].health < 0)
                    {
                        enemies.RemoveAt(i);
                    }
                }

                for(int i = 0; i < enemies.Count; i++)
                {
                    if(enemies[i].position.X < player.position.X)
                    {
                        enemies[i].sprite = Content.Load<Texture2D>("enemy");
                    }
                    else
                        enemies[i].sprite = Content.Load<Texture2D>("enemyLeft");
                }
                base.Update(gameTime);
            }
        }