示例#1
0
        /// <summary>ランク表示更新
        /// </summary>
        private async UniTask rankDisplayUpdate()
        {
            // ランクアップしたとき
            if (GamePlayInfo.BeforeRank < GamePlayInfo.AfterRank)
            {
                // メーターを満タンまで上げた後、0に戻す
                await meterIncrease(GamePlayInfo.QuizType.RegularQuiz, StatusPanel.Fill_AMOUNT_MAX);

                await UniTask.Delay(100);

                statusPanelController.setFillAmount(GamePlayInfo.QuizType.RegularQuiz, StatusPanel.Fill_AMOUNT_MIN);

                // メーターを一旦止めた所から最終的な値まで上げる
                await UniTask.Delay(300);

                meterIncrease(GamePlayInfo.QuizType.RegularQuiz, OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterRankExpMeter)).Forget();

                // ランク維持
            }
            else
            {
                // ランクは減らないので経験値が増えた場合のみメーターを増やす
                if (GamePlayInfo.BeforeRankExpMeter < GamePlayInfo.AfterRankExpMeter)
                {
                    await meterIncrease(GamePlayInfo.QuizType.RegularQuiz, OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterRankExpMeter));
                }
            }
        }
示例#2
0
 private void AfterStatusOutput()
 {
     statusPanelController.StatusOutput(GamePlayInfo.AfterRank,
                                        OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterRankExpMeter),
                                        GamePlayInfo.AfterCareer,
                                        OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterCareerExpMeter),
                                        GamePlayInfo.AfterCastleDominance,
                                        GamePlayInfo.AfterDaimyouClass);
     // Debug.LogWarning("城支配数更新値:" + GamePlayInfo.AfterCastleDominance);
 }
示例#3
0
        private void statusOutput(StatusInfo statusInfo)
        {
            Debug.Log("■■■statusInfo.DaimyouClass:" + statusInfo.DaimyouClass);

            statusPanelController.StatusOutput(statusInfo.Rank,
                                               OshiroUtil.AdjustExpMeter(statusInfo.RankMeter),
                                               statusInfo.Career,
                                               OshiroUtil.AdjustExpMeter(statusInfo.CareerMeter),
                                               statusInfo.CastleDominance,
                                               statusInfo.DaimyouClass);
        }
示例#4
0
        /**
         * 更新前のステータス表示
         */
        private void beforeStatusOutput()
        {
            Debug.Log("■■■GamePlayInfo.BeforeDaimyouClass:" + GamePlayInfo.BeforeDaimyouClass);

            statusPanelController.StatusOutput(GamePlayInfo.BeforeRank,
                                               OshiroUtil.AdjustExpMeter(GamePlayInfo.BeforeRankExpMeter),
                                               GamePlayInfo.BeforeCareer,
                                               OshiroUtil.AdjustExpMeter(GamePlayInfo.BeforeCareerExpMeter),
                                               GamePlayInfo.BeforeCastleDominance,
                                               GamePlayInfo.BeforeDaimyouClass,
                                               false);
        }
示例#5
0
        // Start is called before the first frame update
        async UniTask Start()
        {
            // フレームを少しだけ抑える
            QualitySettings.vSyncCount  = 1;
            Application.targetFrameRate = 30;

            this.selectUIPanel.SetActive(true);
            // this.statusPanel.SetActive(true);
            this.statusPanelController.DisplayChange(true);
            this.gameUIPanel.SetActive(false);
            this.questionPanel.SetActive(false);

            // this.charactorController = this.charactor.GetComponent<CharactorController>();
            this.apiController = this.api.GetComponent <ApiController>();
            // TODO Unitaskに置き換える
            this.timeLimitCoroutine = timeLimitCheck();

            // セーブデータ
            SaveData   saveData   = new SaveData();
            StatusInfo statusInfo = saveData.GetStatusInfo();

            // 使いまわせるようにデータを退避
            GamePlayInfo.BeforeRank            = statusInfo.Rank;
            GamePlayInfo.BeforeCareer          = statusInfo.Career;
            GamePlayInfo.BeforeDaimyouClass    = statusInfo.DaimyouClass;
            GamePlayInfo.BeforeCastleDominance = statusInfo.CastleDominance;

            statusOutput(statusInfo);

            // リスナー登録
            // TODO リスナーの解除もやる
            // 階級挑戦問題が解放済ならリスナー登録
            if (OshiroUtil.IsCareerQuestionRelease(statusInfo.Rank))
            {
                careerQuizButton.interactable = true;
                // 画面連打していた時にすぐにクイズが始まってしまわないように対応
                await UniTask.Delay(500);

                careerQuizButton.onClick.AddListener(() => SelectQuizType((int)GamePlayInfo.QuizType.CareerQuiz));
            }
            else
            {
                careerQuizButton.interactable = false;
                // 画面連打していた時にすぐにクイズが始まってしまわないように対応
                await UniTask.Delay(500);
            }

            regularQuizButton.onClick.AddListener(() => SelectQuizType((int)GamePlayInfo.QuizType.RegularQuiz));
            titleButton.onClick.AddListener(() => GoTitle());
        }
 /// <summary>階級の上限達成表示の更新
 /// <param name="rank">ランク</param>
 /// <param name="careerNum">身分</param>
 /// <param name="careerExpMeter">身分経験値</param>
 /// <param name="isShowCareerLimit">階級上限の説明を表示するかどうか</param>
 /// </summary>
 private void UpdateCareerDescription(int rank, int careerNum, float careerExpMeter, bool isShowCareerLimit)
 {
     if (!OshiroUtil.IsCareerQuestionRelease(rank))
     {
         careerDescriptionText.text = "階級挑戦問題はお城好きレベル5で解放されます";
     }
     else if (OshiroUtil.IsCareerLimit(careerNum, careerExpMeter) && isShowCareerLimit)
     {
         // 今の身分が大名未満かつ現在対応している身分の上限まで達している場合
         careerDescriptionText.text = "階級の上限に達しています\n上限は今後解放されます";
     }
     else
     {
         careerDescriptionText.text = "";
     }
 }
示例#7
0
        public void StatusUpdate(int correctNum)
        {
            // ステータス情報を取得
            this.loadStatus();

            // ランク情報更新
            this.rankUpdate(correctNum);

            // 正解不正解の差
            int correctDiff = (correctNum * 2) - GameDirector.QUIZ_MAX_NUM;

            // 階級挑戦クイズかつ身分上限で正解数の方が多い場合以外は身分情報を更新
            if (GamePlayInfo.PlayQuizType == GamePlayInfo.QuizType.CareerQuiz &&
                !(OshiroUtil.IsCareerLimit(this.beforeCareer, this.beforeCareerMeter) &&
                  correctDiff > 0))
            {
                this.careerUpdate(correctDiff);
            }

            this.updateAfterSave();
        }
示例#8
0
        /// <summary>身分表示更新
        /// </summary>
        private async UniTask  careerDisplayUpdate()
        {
            // 身分が上がった時
            if (GamePlayInfo.BeforeCareer < GamePlayInfo.AfterCareer)
            {
                // // メーターアップ時のサウンド
                // SoundController.instance.MeterUp();

                // メーターを満タンまで上た後、0に戻す
                await meterIncrease(GamePlayInfo.QuizType.CareerQuiz, StatusPanel.Fill_AMOUNT_MAX);

                await UniTask.Delay(100);

                statusPanelController.setFillAmount(GamePlayInfo.QuizType.CareerQuiz, StatusPanel.Fill_AMOUNT_BEFORE_DOWN);

                if (GamePlayInfo.AfterCareer == (int)StatusCalcBasis.Career.大名)
                {
                    // TODO 大名に上がった場合 メーターの色を変える
                }

                // メーターを一旦止めた所から最終的な値まで上げる
                await UniTask.Delay(200);
                await meterIncrease(GamePlayInfo.QuizType.CareerQuiz, OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterCareerExpMeter));

                // // TODO 身分上がるときのサウンド
                // SoundController.instance.RankUp();

                // 身分が下がった時
            }
            else if (GamePlayInfo.BeforeCareer > GamePlayInfo.AfterCareer)
            {
                // メーターダウン時のサウンド
                // SoundController.instance.MeterDown();
                // // いったんメーターアップと共通にしてみる
                // SoundController.instance.MeterUp();

                // メーターを0まで下げた後、MAXに戻す
                await meterDecrease(GamePlayInfo.QuizType.CareerQuiz, StatusPanel.Fill_AMOUNT_MIN);

                await UniTask.Delay(100);

                statusPanelController.setFillAmount(GamePlayInfo.QuizType.CareerQuiz, StatusPanel.Fill_AMOUNT_BEFORE_UP);

                // メーターを一旦止めた所から最終的な値まで下げる
                await UniTask.Delay(200);
                await meterDecrease(GamePlayInfo.QuizType.CareerQuiz, OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterCareerExpMeter));

                // // TODO 身分落ちるときのサウンド
                // SoundController.instance.RankDown();

                // 身分の変化なし
            }
            else
            {
                // メーターが増える場合
                if (GamePlayInfo.BeforeCareerExpMeter < GamePlayInfo.AfterCareerExpMeter)
                {
                    // // メーターアップ時のサウンド
                    // SoundController.instance.MeterUp();
                    await UniTask.Delay(300);

                    meterIncrease(GamePlayInfo.QuizType.CareerQuiz, OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterCareerExpMeter)).Forget();
                }
                else if (GamePlayInfo.BeforeCareerExpMeter > GamePlayInfo.AfterCareerExpMeter)
                {
                    // メーターダウン時のサウンド
                    // SoundController.instance.MeterDown();
                    // // いったんメーターアップと共通にしてみる
                    // SoundController.instance.MeterUp();
                    await UniTask.Delay(300);

                    meterDecrease(GamePlayInfo.QuizType.CareerQuiz, OshiroUtil.AdjustExpMeter(GamePlayInfo.AfterCareerExpMeter)).Forget();
                }
            }
        }
示例#9
0
        /**
         * Rank、身分の経験値表示を更新
         */
        private async UniTask  statusDisplayUpdate()
        {
            // 経験値メーターを増減させる演出
            // ランクや身分が上下する場合はメーターをいったん空かMAXで止める

            // ************ ランク表示更新演出 ************
            await rankDisplayUpdate();

            // ************ 身分表示更新演出 ************
            // bool isCareerUpdate = false;
            // 身分上限かつ経験値メーターが上限から変更していない場合は対象外にする
            if (GamePlayInfo.PlayQuizType == GamePlayInfo.QuizType.CareerQuiz &&
                !(OshiroUtil.IsCareerLimit(GamePlayInfo.BeforeCareer, GamePlayInfo.BeforeCareerExpMeter) &&
                  GamePlayInfo.BeforeCareerExpMeter == GamePlayInfo.AfterCareerExpMeter))
            {
                // 身分とランクのメーター更新の間の待ち
                await UniTask.Delay(500);

                if (GamePlayInfo.BeforeCareer == (int)StatusCalcBasis.Career.大名)
                {
                    // 城支配数の更新
                    await castleDominanceDisplayUpdate();
                }
                else
                {
                    // 身分表示更新
                    await careerDisplayUpdate();
                }
            }

            await UniTask.Delay(600);

            // ************ ランクや身分上下時のエフェクト表示と最終的なステータス表示 ************
            if (GamePlayInfo.Result.RankUp == GamePlayInfo.QuizResult ||
                GamePlayInfo.Result.RankDown == GamePlayInfo.QuizResult)
            {
                // ランクまたは身分が上がった場合の花火の演出
                if (GamePlayInfo.Result.RankUp == GamePlayInfo.QuizResult)
                {
                    SoundController.instance.Fireworks1();

                    var particle = Instantiate(this.burstParticle);
                    particle.transform.position = new Vector3(0.0f, 1.0f, -0.5f);
                    particle.GetComponent <ParticleSystem>().Play();

                    await UniTask.Delay(1000);

                    SoundController.instance.Fireworks2();
                }
                else
                {
                    await UniTask.Delay(800);
                }


                // ランクや身分などに上下があった時の最終的なステータス
                AfterStatusOutput();

                // メーターが割れた演出を戻す(今割れているかどうか気にせず固定で指定)
                statusPanelController.setCareerCrack(false);
            }
            // else if (GamePlayInfo.Result.RankDown == GamePlayInfo.QuizResult)
            // {
            //  await UniTask.Delay(800);
            //  AfterStatusOutput();
            // }
            // ステータス表示更新で行う
            // else if (GamePlayInfo.AfterCareer == (int)StatusCalcBasis.Career.大名)
            // {
            //     statusPanelController.CastleDominanceOutput(GamePlayInfo.AfterCastleDominance);
            // }
        }
示例#10
0
        /**
         * クイズ種類選択
         */
        private async UniTask SelectQuizType(int selectType)
        {
            // 階級挑戦問題説明文の初期化
            statusPanelController.OutputCareerDescription("");

            // RemoteConfigのFetch日時が古い場合はFetchを行う
            if (OshiroRemoteConfig.Instance().IsNeedFetch())
            {
                UnityAction     callback        = () => OshiroRemoteConfig.Instance().RemoteConfigFetch();
                OshiroFirebases oshiroFirebases = new OshiroFirebases();
                oshiroFirebases.FirebaseAsyncAction(callback);
            }

            // 強制アップデートチェック
            if (OshiroUtil.IsForceUpdate())
            {
                var modalWindow = GameObject.FindWithTag("Modal");

                if (modalWindow == null)
                {
                    var canvas      = GameObject.Find("Canvas");
                    var forceUpdate = Instantiate(this.forceUpdatePrefab);
                    forceUpdate.tag = "Modal";
                    forceUpdate.transform.SetParent(canvas.transform, false);
                }

                return;
            }

            // 階級挑戦クイズはメンテナンス中は実施不可
            if (OshiroRemoteConfig.Instance().IsMaintenance)
            {
                if ((int)GamePlayInfo.QuizType.CareerQuiz == selectType)
                {
                    statusPanelController.OutputCareerDescription("メンテナンス中のため階級挑戦問題で遊ぶことができません");
                    return;
                }
            }

            SoundController.instance.QuizStart();
            // Loading表示
            loadingText.Display();

            // ロード中状態に変更
            this.quizOutputStatus = QuizOutputStatus.QuizLoad;

            // 選択したクイズ種類を設定
            if ((int)GamePlayInfo.QuizType.RegularQuiz == selectType)
            {
                // レギュラークイズ
                GamePlayInfo.PlayQuizType = GamePlayInfo.QuizType.RegularQuiz;
                quizMaker = new RegularQuizMaker();

                // クイズ情報ロード
                ((RegularQuizMaker)quizMaker).QuizDataLoad();
            }
            else
            {
                // 身分クイズ
                GamePlayInfo.PlayQuizType = GamePlayInfo.QuizType.CareerQuiz;
                quizMaker = new CareerQuizMaker();

                // クイズ情報ロード
                bool isSuccess = await this.apiController.CareerQuizLoad((CareerQuizMaker)quizMaker, GamePlayInfo.BeforeCareer);

                // 失敗時は1回だけリトライ
                if (!isSuccess)
                {
                    await UniTask.Delay(2500);

                    isSuccess = await this.apiController.CareerQuizLoad((CareerQuizMaker)quizMaker, GamePlayInfo.BeforeCareer);
                }

                // ロードリトライも失敗時
                if (!isSuccess)
                {
                    statusPanelController.OutputCareerDescription("サーバーとの通信に失敗しました。");
                    // Loading表示の解除
                    loadingText.Hidden();
                    // ステータスをクイズ開始前に戻す
                    quizOutputStatus = QuizOutputStatus.BeforeQuiz;

                    return;
                }
            }
            // Loading表示の解除
            loadingText.Hidden();

            // パネルを切り替え
            this.selectUIPanel.SetActive(false);
            this.statusPanelController.DisplayChange(false);
            this.gameUIPanel.SetActive(true);
            this.questionPanel.SetActive(true);

            // 出題状況チェックしてクイズを作成
            StartCoroutine(quizOutputCheck());

            this.charactorController.QuizStartTrigger();
        }