コード例 #1
0
    private void UpdateUI()
    {
        // Question Text.
        _questionNumberText.text = "Page " + (_selectedQuestionIndex + 1) + " of " + _questionAmount;
        _questionText.text       = _selectedQuestion._questionName;

        // Answers.
        int answersAmount = _selectedAnswers.Length;

        _currentAnswerButtons = new GameObject[answersAmount];

        for (int index = 0; index < answersAmount; index++)
        {
            // Initialisation of an Answer.
            Answer     answer       = _selectedAnswers[index];
            GameObject answerButton = Instantiate(_answerPrefab, _answerPanel.transform);
            _currentAnswerButtons[index] = answerButton;

            // Setting UI Text.
            Text answerText = answerButton.GetComponentInChildren <Text>();
            answerText.text = answer._answerTxt;

            // Setting Controller Values.
            AnswerButtonController controller = answerButton.GetComponent <AnswerButtonController>();
            controller._answerIndex     = index;
            controller._questionManager = this;
        }
    }
コード例 #2
0
    // Start is called before the first frame update
    IEnumerator Start()
    {
        // 参照キャッシュ
        HUDController           = GameObject.Find("HUD").GetComponent <HUDController>();
        answerButtonController  = FindObjectOfType <AnswerButtonController>();
        handController          = FindObjectOfType <HandController>();
        timeLimitAreaController = GameObject.Find("TimeLimitArea").GetComponent <TimeLimitAreaController>();
        scoreAreaController     = GameObject.Find("ScoreArea").GetComponent <ScoreAreaController>();

        // このオブジェクトのコンポーネント
        audioSource = GetComponent <AudioSource>();

        session = new Session(scoreAreaController,
                              timeLimitAreaController,
                              InitialTimeLimitSeconds,
                              wrongAnswerPenaltySeconds);


        // 中断されるまで繰り返す
        while (session.CurrentTimeLimitSeconds > 0)
        {
            session.elapsedTimeInTurn = 0f;

            // カードを配る
            session.Deal();

            // 手札をクリア
            handController.ClearCards();

            // カード表示
            handController.PlaceCards(session.Hand.Cards);

            // 選択肢を用意する
            var choices = session.GenerateChoices();
            // 選択肢表示
            answerButtonController.SetChoices(choices);

            do
            {
                // プレイヤーが答えるまで待つ
                playerHasAnswered = false;

                // 時間切れの際、WaitPlayerToAnswerは中断される
                yield return(StartCoroutine(WaitPlayerToAnswer()));

                // 中断時はdo-whileを抜ける
                if (!playerHasAnswered)
                {
                    break;
                }

                if (session.AnswerIsCorrect)
                {
                    playerHasAnswered = true;

                    session.rule.OnCorrectAnswer();

                    HUDController.DisplaycorrectOverlay();

                    audioSource.PlayOneShot(CorrectAnswerAudioClip);
                }
                else
                {
                    // 失敗時ペナルティ
                    session.rule.OnWrongAnswer();

                    audioSource.PlayOneShot(WrongAnswerAudioClip);
                }
            } while (!session.rule.ShouldProceedToNextTurn());
        }

        // 時間切れになったらゲームオーバー
        audioSource.Stop();
        audioSource.PlayOneShot(TimeUpAudioClip);
        answerButtonController.Disable();

        var modalWindow = GameObject.Find("ResultModal").GetComponent <ModalWindowManager>();

        modalWindow.titleText       = "Result";
        modalWindow.descriptionText = $"Score: {session.Score}\nMiss: 0";
        modalWindow.UpdateUI();
        modalWindow.OpenWindow();

        yield return(new WaitForSeconds(3.0f));

        audioSource.clip = ResultAudioClip;
        audioSource.Play();
    }