public Level1(ContentManager content, SpriteBatch sb)
        {
            levelEnded = false;
            lastShot = false;
            lastCharge = false;
            this.content = content;
            spriteBatch = sb;
            geometry = this.content.Load<Model>(@"levels/level1");
            levelTexture = this.content.Load<Texture2D>(@"textures/levelTexture");
            position = new Vector3(-45, -755, 8200);
            timeToResume = TimeSpan.FromSeconds(timeToResumeSeconds);

            switchedToBoss = false;
            switchedToMiniBoss = false;
            switchedToStart = false;
            switchedToClot = false;

            startGameZ = 7645;
            infectorZ = 2800;
            clotZ = 2200;
            thirdPersonZ = 650;
            preBossZ = 1300;

            reachedClotZ = false;
            infectorAdded = false;
            reachedPreBossZ = false;
            infectorDestroyed = false;
            movePreInfector = false;

            endingMove1 = endingMove2 = endingMove3 = false;

            velocity = Vector3.Zero;
            firstMove = false;
            secondMove = false;
            thirdMove = false;
            fourthMove = false;
            rotatedBehind = false;
            fifthMove = false;
            beginDescentZ = -430;

            reachedBoss = false;
            enemySpawner = new EnemySpawner(1, content);
            bossAdded = false;
            clotsAdded = false;
            firstStart = false;

            introRot1 = false;
            introRot2 = false;
            introRot3 = false;
            introRot4 = false;

            thirdPersonRot = false;
            thirdPersonTrans = false;
            setRot = false;
            setTrans = false;
            returnedToTopDown = false;
            enemiesReenabled = false;

            miniBoss = new Infector(content, new Vector3(0, 0, 250));
            rightClot = new ClotSide(content, new Vector3(-60, 0, 20), Side.Right);
            leftClot = new ClotSide(content, new Vector3(60, 0, 20), Side.Left);

            preloadedStraightCell = new StraightCell(content, new Vector3(0, 500, 0));
            preloadedLatchingCell = new LatchingCell(content, new Vector3(0, 500, 0), Vector3.Zero);
            preloadedChargingCell = new ChargingCell(content, new Vector3(0, 500, 0), Vector3.Zero);
            preloadedMeleeBot = new MeleeBot(content, new Vector3(0, 500, 0), Vector3.Zero);
            preloadedMissileBot = new MissileBot(content, new Vector3(0, 500, 0), Vector3.Zero);
            preloadedTokenPickup = new TokenPickup(content, new Vector3(0, 500, 0));
            preloadedMissile = new Missle(content, Vector3.Zero, Vector3.Zero);
            preloadedBotMissile = new BotMissile(content, Vector3.Zero, Vector3.Zero);
            preloadedNeedle = new Needle(content, Vector3.Zero, Vector3.Zero);
            preloadedLaser = new Laser(content, Vector3.Zero, Vector3.Zero);
            preloadedExplosion = new Explosion(0, 0, 0, Vector3.Zero, content, false);
            preloadedChargeBall = new ChargeBall(content, Vector3.Zero);

            clotsDestroyed = false;

            Camera.Instance.setPosition(new Vector3(-7, 7, 7));
        }
        public void UpdateBoss(GameTime gameTime)
        {
            Player p = entities[0] as Player;
            if (!endingMove1)
            {
                if (p.Rotation.Y > MathHelper.ToRadians(140))
                {
                    p.rotate(new Vector3(0, -MathHelper.ToRadians(1), 0));
                }
                else endingMove1 = true;
            }
            if (endingMove1 && !endingMove2)
            {
                endingMove2 = movePlayerToPos(p, new Vector3(p.Position.X, -850, p.Position.Z));
            }
            if (endingMove1 && endingMove2 && !lastCharge)
            {
                timeToChargeShot = timeToChargeShot.Subtract(gameTime.ElapsedGameTime);
                if (timeToChargeShot.TotalSeconds <= 0)
                {
                    cb = new ChargeBall(content, new Vector3(p.Position.X + 5, p.Position.Y, p.Position.Z - 5));
                    Add(cb);
                    lastCharge = true;
                }
            }
            if (endingMove1 && endingMove2 && lastCharge && !lastShot)
            {
                if (cb.isDead)
                {
                    Vector3 dir = new Vector3(285, p.Position.Y, -400) - p.Position;
                    dir.Normalize();
                    dir /= 2;
                    laser = new Laser(content, new Vector3(p.position.X, p.position.Y, p.position.Z), dir);
                    Add(laser);
                    p.CameraEnabled = false;
                    Camera.Instance.rotateCameraPos(new Vector3(MathHelper.ToRadians(60), 0, 0));
                    lastShot = true;
                }
            }
            if (lastShot)
            {
                p.CameraEnabled = false;

                Camera.Instance.UpdateCamera(laser.Position, laser.Rotation);

                if (Vector3.Distance(new Vector3(285, p.Position.Y, -400), laser.Position) <  200)
                {
                    levelEnded = true;
                }

            }
            //p.Position = new Vector3(285, -850, -200);
            CheckCollision();
            levelWorldMat = Matrix.CreateScale(10) * Matrix.CreateRotationY(0) * Matrix.CreateTranslation(position);
            base.Update(gameTime);
        }