// Start is called before the first frame update
    public override void Start()
    {
        base.Start();

        if (!back)
        {
            Debug.LogError("TutorialA: Did not find Back Game Object");
        }

        // Setting back alpha
        var mat = back.GetComponent <Renderer>().material;
        var col = mat.color;

        col.a     = backAlpha;
        mat.color = col;

        // Finding slide scripts, to interact directly with
        slideScripts = new TutorialASlide[activeSlides.Count];
        for (int i = 0; i < slideScripts.Length; i++)
        {
            slideScripts[i] = activeSlides[i].GetComponent <TutorialASlide>();
        }
        transitionSlideScript = transitionSlide.GetComponent <TutorialASlide>();
        winningSlideScript    = winningSlide.GetComponent <TutorialASlide>();
    }
    public override void TriggerWinSlide()
    {
        if (!isActiveAndEnabled)
        {
            return;
        }
        base.TriggerWinSlide();

        winningOutro = true;
        winningIntro = false;
        fadeScript   = slideScripts[currentState];
    }
    public override void TriggerNextSlide(int nextState)
    {
        if (!isActiveAndEnabled)
        {
            return;
        }
        base.TriggerNextSlide(nextState);

        transitionAlpha = 1;
        outro           = true;
        intro           = false;
        middleIntro     = false;
        middleOutro     = false;
        winningOutro    = false;
        winningIntro    = false;
        fadeScript      = slideScripts[currentState];

        // Debug.Log("Trigger next slide: starting outro - current: "+currentState+", next: "+nextState);
    }
    // Update is called once per frame
    public override void Update()
    {
        base.Update();

        // While transition in progress
        if (IsTransitioning())
        {
            // Outro for previous slide or transition-slide
            if (outro || middleOutro || winningOutro)
            {
                if (transitionAlpha > 0)
                {
                    transitionAlpha -= Time.deltaTime * transitionFadeSpeed;
                }

                if (transitionAlpha <= 0)
                {
                    transitionAlpha = 0;

                    // Trigger intro for transition-slide
                    if (outro)
                    {
                        outro       = false;
                        middleIntro = true;
                        waitTime    = transitionSlideWait;
                        fadeScript.gameObject.SetActive(false);
                        fadeScript = transitionSlideScript;
                        fadeScript.gameObject.SetActive(true);
                        // Debug.Log("Outro done, starting middle-intro");

                        // Trigger intro for next slide
                    }
                    else if (middleOutro)
                    {
                        middleOutro = false;
                        intro       = true;
                        fadeScript.gameObject.SetActive(false);
                        fadeScript = slideScripts[nextState];
                        fadeScript.gameObject.SetActive(true);
                        // Debug.Log("Middle Outro done, starting intro");

                        // Trigger intro for winning slide
                    }
                    else if (winningOutro)
                    {
                        winningOutro = false;
                        winningIntro = true;
                        fadeScript.gameObject.SetActive(false);
                        fadeScript = winningSlideScript;
                        fadeScript.gameObject.SetActive(true);
                        // Debug.Log("Winning Outro done, starting Winning Intro");
                    }
                }

                fadeScript.SetAlpha(transitionAlpha);
            }
            // Intro for transition-slide or next slide
            else if (intro || middleIntro || winningIntro)
            {
                if (transitionAlpha < 1)
                {
                    transitionAlpha += Time.deltaTime * transitionFadeSpeed;
                }

                if (transitionAlpha >= 1)
                {
                    transitionAlpha = 1;

                    // Transition is all done!
                    if (intro)
                    {
                        intro = false;
                        ArrivedAtSlide(nextState);
                        // Debug.Log("Intro done, arrived at next state! "+nextState);

                        // Trigger outro for transition-slide
                    }
                    else if (middleIntro)
                    {
                        if (waitTime > 0)
                        {
                            waitTime -= Time.deltaTime;
                        }
                        if (waitTime <= 0)
                        {
                            middleIntro = false;
                            middleOutro = true;
                            waitTime    = 0;
                        }

                        // Stop fading because at win-state
                    }
                    else if (winningIntro)
                    {
                        winningIntro = false;
                        atWinState   = true;
                        // Debug.Log("Winning Intro done, THE END");
                    }
                }

                // Update alpha for whatever slide is active
                fadeScript.SetAlpha(transitionAlpha);
            }
        }
    }