Exemplo n.º 1
0
        public IEnumerator StartQuestion()
        {
            GlobalEvent.shared.Invoke(EventType.PlayStartAudio);
            yield return(ShowDialogue(true, true, string.Format("『{0}』马上要开始了,点击任意位置开始答题", roundService.IsChanllenge() ? "挑战模式" : "答题回合")));

            yield return(WaitDialogueConfirm());

            while (roundService.HasNextQuestion() && !roundService.IsEnergyEmpty())
            {
                questionView.gameObject.SetActive(true);
                questionView.ShowQuestion(roundService.NextQuestion());
                SetProgress(roundService.Current, roundService.Total);
                yield return(ShowDialogue(false, false, "请作答..."));

                while (!roundService.IsCurrentCompleted)
                {
                    Debug.Log(roundService.Current + "," + roundService.CurrentQuestion.result);
                    yield return(WaitForAnswer());

                    roundService.SubmitAnswer(answer);

                    if (!roundService.IsCorrect)
                    {
                        Utils.PlayClip(wrongClip, 0.4f);
                    }
                    else
                    {
                        Utils.PlayClip(correctClip, 0.4f);
                    }

                    if (roundService.IsEnergyEmpty())
                    {
                        questionView.DisableOption(answer);
                        yield return(characterController.ShowStateFor(roundService));

                        VoicePlayer.shared.Play(voiceSuite.X0Clips.RandomOne());
                        break;
                    }

                    if (!roundService.IsCorrect)
                    {
                        questionView.DisableOption(answer);
                        yield return(characterController.ShowStateFor(roundService));

                        switch (roundService.Energy)
                        {
                        case 1: VoicePlayer.shared.Play(voiceSuite.X1Clips.RandomOne()); break;

                        case 2: VoicePlayer.shared.Play(voiceSuite.X2Clips.RandomOne()); break;

                        case 3: VoicePlayer.shared.Play(voiceSuite.X3Clips.RandomOne()); break;

                        case 4: VoicePlayer.shared.Play(voiceSuite.X4Clips.RandomOne()); break;
                        }
                        yield return(ShowDialogue(false, true, "好像不正确哦"));

                        yield return(WaitDialogueConfirm());

                        StartCoroutine(characterController.ResumeStateFor(roundService));
                        yield return(ShowDialogue(false, false, "请继续作答..."));
                    }
                    else
                    {
                        yield return(characterController.ShowStateFor(roundService));

                        if (roundService.Energy < 5)
                        {
                            VoicePlayer.shared.Play(voiceSuite.XYClips.RandomOne());
                        }
                        else
                        {
                            if (roundService.Current == 1)
                            {
                                VoicePlayer.shared.Play(voiceSuite.Y1Clips.RandomOne());
                            }
                            else
                            {
                                if (roundService.Combo <= 1)
                                {
                                    VoicePlayer.shared.Play(voiceSuite.X5Clips.RandomOne());
                                }
                                else
                                {
                                    switch (roundService.Combo)
                                    {
                                    case 2: VoicePlayer.shared.Play(voiceSuite.Y2Clips.RandomOne()); break;

                                    case 3: VoicePlayer.shared.Play(voiceSuite.Y3Clips.RandomOne()); break;

                                    case 4: VoicePlayer.shared.Play(voiceSuite.Y4Clips.RandomOne()); break;

                                    case 5: VoicePlayer.shared.Play(voiceSuite.Y5Clips.RandomOne()); break;

                                    case 6: VoicePlayer.shared.Play(voiceSuite.Y6Clips.RandomOne()); break;

                                    case 7: VoicePlayer.shared.Play(voiceSuite.Y7Clips.RandomOne()); break;

                                    case 8: VoicePlayer.shared.Play(voiceSuite.Y8Clips.RandomOne()); break;

                                    case 9: VoicePlayer.shared.Play(voiceSuite.Y9Clips.RandomOne()); break;

                                    case 10: VoicePlayer.shared.Play(voiceSuite.Y10Clips.RandomOne()); break;
                                    }
                                }
                            }
                        }
                    }
                }

                questionView.HighlightOptions(roundService.CurrentQuestion.result);

                // show explaination
                string resultTpl = "{1},解释如下:\n『{2}』";
                string result    = (roundService.IsCorrect ? "回答正确" : "回答错误");
                string dialogue  = String.Format(
                    resultTpl, Const.COLOR_CORRECT_HEX_STRING, result, roundService.CurrentQuestion.explain);
                yield return(ShowDialogue(false, true, dialogue));

                yield return(WaitDialogueConfirm());

                if (roundService.IsCorrect)
                {
                    yield return(characterController.ResumeStateFor(roundService));
                }
            }

            // save completed
            var completedCount = 0;
            var pkgService     = PackageService.For(roundService.package);

            pkgService.Load();
            foreach (var answerItem in roundService.CompletedList)
            {
                if (answerItem.completed)
                {
                    completedCount++;
                    pkgService.SetCompleted(answerItem.question);
                }
            }
            pkgService.Save();

            int originCompleted = PackageProgressService.shared.CompletedCount;

            // save progress
            if (!roundService.package.temporary)
            {
                var progressService = PackageProgressService.shared;
                progressService.Load();
                progressService.SetProgress(roundService.package.id, pkgService.CompletedCount, roundService.PackageQuestionCount);
                progressService.Save();
            }

            if (completedCount < roundService.Total)
            {
                // show ending dialogue
                string roundResult = "『答题回合』结束了,总共{0}题,本次完成{1}题,只有一次回答成功才算完成,点击任意位置返回";
                roundResult = String.Format(roundResult, "" + roundService.Total, "" + completedCount);
                yield return(ShowDialogue(true, true, roundResult));

                yield return(WaitDialogueConfirm());
            }
            else
            {
                yield return(ShowFullScreenEffect());
            }

            int currentCompleted = PackageProgressService.shared.CompletedCount;

            if (currentCompleted / Const.ILLUSTRATION_REWARD_BASE_FACTOR > originCompleted / Const.ILLUSTRATION_REWARD_BASE_FACTOR)
            {
                yield return(RewardIllustration());
            }

            GlobalEvent.shared.Invoke(EventType.QuestionPanelToPackageList);
        }