示例#1
0
    IEnumerator Start()
    {
        //intro
        input.isLocked = true;

        animator.Play(takeStart);
        while (animator.isPlaying)
        {
            yield return(null);
        }

        var parmDlg = new M8.GenericParams();

        //start dialog
        for (int i = 0; i < dialogsBegin.Length; i++)
        {
            dialogsBegin[i].Show(parmDlg);

            while (dialogsBegin[i].isShowing)
            {
                yield return(null);
            }
        }

        parmDlg.Clear();
        //

        //prepare animation
        animator.Play(takePrepare);
        while (animator.isPlaying)
        {
            yield return(null);
        }

        //init play
        GenerateQuestions();

        mCurScore = 0;

        HUD.instance.SetMissionActive(true);
        HUD.instance.SetTimeActive(false);
        HUD.instance.UpdateScore(mCurScore, mCurScore);

        //play
        while (mCurQuestionIndex < mQuestions.Length)
        {
            mIncorrectCounter = 0;

            var question = curQuestion;

            //deck entry
            animator.Play(takeDeckEnter);
            while (animator.isPlaying)
            {
                yield return(null);
            }

            //populate deck
            PopulateDeck();

            //dock
            SetupDock();

            //question dialog
            parmDlg[ModalDialog.parmStringRefs]    = new string[] { curQuestion.questionStringRef };
            parmDlg[ModalDialog.parmPauseOverride] = false;

            M8.UIModal.Manager.instance.ModalOpen(modalQuestion, parmDlg);

            parmDlg.Clear();
            //

            input.isLocked = false;

            //wait for anchors to be filled
            while (mAvailableAnchors.Count > 0)
            {
                yield return(null);

                if (mIsAnswerPicked)
                {
                    input.isLocked = true;
                    yield return(null);

                    yield return(null);

                    mIsAnswerPicked = false;
                    input.isLocked  = false;
                }
            }

            input.isLocked = true;

            M8.UIModal.Manager.instance.ModalCloseUpTo(modalQuestion, true);

            //deck exit
            ClearDeck();

            animator.Play(takeDeckExit);
            while (animator.isPlaying)
            {
                yield return(null);
            }

            bool isResultEnterPlayed = false;

            //results dialog
            if (!string.IsNullOrEmpty(curQuestion.resultStringRef))
            {
                //move to an appropriate position
                animator.Play(takeQuestionResultEnter);
                isResultEnterPlayed = true;

                parmDlg[ModalDialog.parmStringRefs]    = new string[] { curQuestion.resultStringRef };
                parmDlg[ModalDialog.parmPauseOverride] = false;

                M8.UIModal.Manager.instance.ModalOpen(modalPostQuestion, parmDlg);

                while (M8.UIModal.Manager.instance.isBusy || M8.UIModal.Manager.instance.ModalIsInStack(modalPostQuestion))
                {
                    yield return(null);
                }

                parmDlg.Clear();
            }
            else
            {
                yield return(new WaitForSeconds(1f));
            }
            //

            ClearDock();

            //next
            mCurQuestionIndex++;

            //show multi question dialog explanation
            if (mCurQuestionIndex == mQuestionMultiStartIndex)
            {
                dialogMultiQuestionBegin.Show(parmDlg);

                while (dialogMultiQuestionBegin.isShowing)
                {
                    yield return(null);
                }

                parmDlg.Clear();
            }

            //move back
            if (isResultEnterPlayed)
            {
                //in case dialog was ended quickly
                while (animator.isPlaying)
                {
                    yield return(null);
                }

                animator.Play(takeQuestionResultExit);
                while (animator.isPlaying)
                {
                    yield return(null);
                }
            }

            yield return(null);
        }

        ClearDock();

        //end
        input.isLocked = true;

        StartCoroutine(DoVictoryMusic());

        animator.Play(takeEndPrepare);
        while (animator.isPlaying)
        {
            yield return(null);
        }

        //end dialog
        for (int i = 0; i < dialogsEnd.Length; i++)
        {
            dialogsEnd[i].Show(parmDlg);

            while (dialogsEnd[i].isShowing)
            {
                yield return(null);
            }
        }

        parmDlg.Clear();
        //

        animator.Play(takeEnd);

        if (takeEndWait)
        {
            while (animator.isPlaying)
            {
                if (Input.anyKeyDown)
                {
                    animator.GotoFrame(takeEndSkipFrame);
                    break;
                }
                yield return(null);
            }
        }

        parmDlg[ModalStartFinish.parmMaxScore] = mMaxScore;
        M8.UIModal.Manager.instance.ModalOpen(modalProceed, parmDlg);
    }