public new void Update(float dt)
        {
            timer -= dt;
            if (!triggered) return;
            if (finished)
            {
                if (timer <= 0)
                {
                    Lock();
                }
            }
            else if (timer <= 0)
            {
                acceptingSkip = true;
                bool metRequirements = false;

                //get this every time to account for controller switching?
                //note the tutorial images won't actually switch, but the press to continue will
                gp = cQB.GetGamePadType();
                if ((gp == Microsoft.Xna.Framework.Input.GamePadType.Guitar ||
                    gp == Microsoft.Xna.Framework.Input.GamePadType.AlternateGuitar) && PlayerAgent.isStrumMode)
                {
                    if (strum.IsNewAction)
                    {
            #if INPUTREQUIRED
                    if (unpauseInput.Length == 1 && unpauseInput[tutIndex][0].IsNewAction)
                    {
                        UnLock(dt);
                        return;
                    }
                    else if (allInputsRequired[tutIndex]) //have to make sure all buttons are pressed
                    {
                        metRequirements = true;
                        for (int i = 0; i < unpauseInput.Length; i++)
                            if (unpauseInput[tutIndex][i].value == 0) metRequirements = false;
                    }
                    else //we only care if any of the buttons are pressed
                    {
                        for (int i = 0; i < unpauseInput.Length; i++)
                            if (unpauseInput[tutIndex][i].value != 0) metRequirements = true;
                    }
            #else
                        metRequirements = (Red.value != 0);
            #endif
                        if (metRequirements) UnLock(dt);
                    }
                }
                else
                {
            #if INPUTREQUIRED
                if (unpauseInput.Length == 1 && unpauseInput[tutIndex][0].IsNewAction)
                {
                    UnLock(dt);
                    return;
                }
                else if (allInputsRequired[tutIndex])
                {
                    metRequirements = true;
                    for (int i = 0; i < unpauseInput.Length; i++)
                        if (unpauseInput[tutIndex][i].value == 0) metRequirements = false;
                }
                else
                {
                    for (int i = 0; i < unpauseInput.Length; i++)
                        if (unpauseInput[tutIndex][i].value != 0) metRequirements = true;
                }
            #else
                    metRequirements = Red.IsNewAction;
            #endif
                    if (metRequirements) UnLock(dt);
                }
            }
        }
        public override void Initialize(Stage stage)
        {
            guitarCont = Stage.Content.Load<Texture2D>("UI/Tutorial/guitarContinueTut");
            guitarContDim = new Rectangle((int)(Renderer.ScreenWidth * .5f) - 150, (int)(Renderer.ScreenHeight * .7f), 300, 100);

            controllerCont = Stage.Content.Load<Texture2D>("UI/Tutorial/controllerContinueTut");
            controllerContDim = new Rectangle((int)(Renderer.ScreenWidth * .5f) - 150, (int)(Renderer.ScreenHeight * .7f), 300, 100);

            stage.GetQB<TriggerQB>().RegisterDrawFunction(Draw);
            numTuts = actor.Parm.GetInt("Num");

            #if INPUTREQUIRED
            unpauseInput = new InputAction[numTuts][];
            allInputsRequired = new bool[numTuts];
            #endif

            killEnemies = new bool[numTuts];
            spawnEnemy = new bool[numTuts];
            triggerDelay = new float[numTuts];
            tutImgs = new Microsoft.Xna.Framework.Graphics.Texture2D[numTuts];
            imgDim = new Rectangle[numTuts];

            //get the control scheme
            cQB = stage.GetQB<ControlsQB>();

            #if !INPUTREQUIRED
            Red = cQB.GetInputAction("B");
            strum = cQB.GetInputAction("Strum");
            #endif

               gp = cQB.GetGamePadType();

            Vector2 pos, size;
            switch (gp)
            {
                case Microsoft.Xna.Framework.Input.GamePadType.Guitar:
                case Microsoft.Xna.Framework.Input.GamePadType.AlternateGuitar:
                    for (int j = 0; j < numTuts; j++)
                    {
            #if INPUTREQUIRED
                        GetInput(j,actor.Parm.GetString("GuitarInput" + j), ref cQB);
            #endif
                        tutImgs[j] = Stage.Content.Load<Texture2D>("UI/Tutorial/" + actor.Parm.GetString("GuitarImage" + j));
                        pos = actor.Parm.GetVector2("GuitarImagePos" + j);
                        size = actor.Parm.GetVector2("GuitarImageSize" + j);
                        imgDim[j] = new Rectangle((int)pos.X, (int)pos.Y, (int)size.X, (int)size.Y);
                    }
                    break;
                default:
                    for (int j = 0; j < numTuts; j++)
                    {
            #if INPUTREQUIRED
                        GetInput(j, actor.Parm.GetString("ControllerInput" + j), ref cQB);
            #endif
                        tutImgs[j] = Stage.Content.Load<Texture2D>("UI/Tutorial/" + actor.Parm.GetString("ControllerImage" + j));
                        pos = actor.Parm.GetVector2("ControllerImagePos" + j);
                        size = actor.Parm.GetVector2("ControllerImageSize" + j);
                        imgDim[j] = new Rectangle((int)pos.X, (int)pos.Y, (int)size.X, (int)size.Y);
                    }
                    break;
            }

            for (int i = 0; i < numTuts; i++)
            {
            #if INPUTREQUIRED
                if (actor.Parm.HasParm("AllInputsRequired" + i))
                    allInputsRequired[i] = actor.Parm.GetBool("AllInputsRequired" + i);
                else
                    allInputsRequired[i] = false;
            #endif
                if (actor.Parm.HasParm("SpawnEnemy" + i))
                    spawnEnemy[i] = actor.Parm.GetBool("SpawnEnemy" + i);
                else
                    spawnEnemy[i] = false;

                if (actor.Parm.HasParm("KillEnemies" + i))
                    killEnemies[i] = actor.Parm.GetBool("KillEnemies" + i);
                else
                    killEnemies[i] = false;

                if (actor.Parm.HasParm("TriggerDelay" + i))
                    triggerDelay[i] = actor.Parm.GetFloat("TriggerDelay" + i);
                else
                    triggerDelay[i] = 0;
            }

            if (actor.Parm.HasParm("EndLevel"))
                returnToMenu = actor.Parm.GetBool("EndLevel");

            actor.RegisterUpdateFunction(Update);

            UsingOnTriggerEnter = true;
            UsingOnTriggerStay = false;
            UsingOnTriggerExit = false;

            base.Initialize(stage);
        }