Esempio n. 1
0
        /// <summary>宿老以下の身分経験値を更新
        /// <param name="correctDiff">正解不正解の差</param>
        /// </summary>
        private void updateCareerExp(int correctDiff)
        {
            // 現在の身分経験値と今回獲得分を合計(0より小さくはならないように)
            int careerExp = Mathf.Max(0, this.beforeCareerExp + correctDiff);

            // 身分の上限になっている場合は経験値がメーターMAX分よりも多くならないように調整
            if (this.beforeCareer >= OshiroRemoteConfig.Instance().CareerUpLimit)
            {
                if (careerExp >= StatusCalcBasis.NextCareerUpExps[this.beforeCareer])
                {
                    careerExp = StatusCalcBasis.NextCareerUpExps[this.beforeCareer] - 1;
                }
            }
            this.afterCareerExp = careerExp;

            // 身分経験値から該当の身分を取得
            this.afterCareer = (int)StatusCalcBasis.CareerFromCareerExp(this.afterCareerExp);
            // 宿老から大名に上がった場合
            if (this.afterCareer == (int)StatusCalcBasis.Career.大名)
            {
                // 大名中は身分経験値は使用しないが、便宜上大名に上がった時の閾値の経験値を設定しておく
                this.afterCareerExp = StatusCalcBasis.NextCareerUpExps[this.afterCareer];

                // 大名に上がったときは城支配数は1からスタートする
                this.afterCastleDominance = 1;
                // 大名格を設定(デフォルト値だが念のため)
                this.afterDaimyouClass = (int)StatusCalcBasis.DaimyouClassFromCastleNum(this.afterCastleDominance);
            }
        }
        /**
         * ステータス表示
         */
        public void StatusOutput(int rank, float rankExpMeter,
                                 int careerNum, float careerExpMeter, int castleDominance, int daimyouClass,
                                 bool isShowCareerLimit = true)
        {
            this.rankText.text = "お城好きレベル " + rank;
            // Debug.LogWarning("お城好きレベル経験値メーター:" + rankExpMeter);
            this.rankMeter.fillAmount = rankExpMeter;

            StatusCalcBasis.Career career = StatusCalcBasis.CareerFromNum(careerNum);
            if (castleDominance > 0 && StatusCalcBasis.Career.大名 == career)
            {
                this.CastleDominanceOutput(castleDominance, daimyouClass);
            }
            else
            {
                this.castleDominance.text = "";
            }
            this.careerText.text = "お城好き階級 " + career.ToString();
            // Debug.LogWarning("お城好き階級:" + career);
            // Debug.LogWarning("階級経験値メーター:" + careerExpMeter);
            this.careerMeter.fillAmount = careerExpMeter;

            SetCareerMeterColor(careerNum, daimyouClass);

            UpdateCareerDescription(rank, careerNum, careerExpMeter, isShowCareerLimit);
        }
Esempio n. 3
0
        /// <summary>大名の城支配数を更新
        /// <param name="correctDiff">正解不正解の差</param>
        /// </summary>
        private void updateCastleDominance(int correctDiff)
        {
            // 現在の城支配数にクイズ結果の値を加算
            int nextCastleDominance = this.beforeCastleDominance + castleDominanceUpdateAmount(correctDiff);

            // 城支配数がなくなったときは身分を落とす
            if (nextCastleDominance < 1)
            {
                // 身分
                this.afterCareer = (int)StatusCalcBasis.Career.宿老;
                // 身分が上がるために必要な経験値から少し減らした状態を設定(好成績を残せばすぐに上がれるくらい)
                this.afterCareerExp = StatusCalcBasis.NextCareerUpExps[this.afterCareer] - 4;
                nextCastleDominance = 0;
            }
            else
            {
                this.afterCareer = (int)StatusCalcBasis.Career.大名;
                // 大名中は身分経験値は使用しないが、便宜上閾値の経験値を設定しておく
                this.afterCareerExp = StatusCalcBasis.NextCareerUpExps[this.afterCareer];
            }

            // 城支配数更新
            this.afterCastleDominance = nextCastleDominance;
            // 大名格更新
            this.afterDaimyouClass = (int)StatusCalcBasis.DaimyouClassFromCastleNum(this.afterCastleDominance);
        }
        /// <summary>城支配数と大名格表示
        /// <param name="castleNum">城支配数</param>
        /// <param name="daimyouClass">大名格</param>
        /// </summary>
        public void CastleDominanceOutput(int castleNum, int daimyouClass)
        {
            string daimyouClassName = StatusCalcBasis.DaimyouClassFromNum(daimyouClass).ToString();

            if (daimyouClassName.Length < 2)
            {
                // 値がおかしい場合は表示しない
                // Debug.LogWarning("daimyouClassName:"+daimyouClassName);
                CastleDominanceOutput(castleNum, "");
            }
            else
            {
                CastleDominanceOutput(castleNum, daimyouClassName);
            }
        }
Esempio n. 5
0
        /// <summary>ランク情報更新
        /// <param name="correctNum">正解数</param>
        /// </summary>
        private void rankUpdate(int correctNum)
        {
            // 現在の経験値と今回獲得分の合計
            int rankExpSum = this.beforeRankExp + correctNum;

            // 次のランクアップに必要な経験値(ステータス更新前の経験値のメーター算出用)
            int nextRankUpExp = StatusCalcBasis.CalcNextRankUpExp(this.beforeRank);

            int nextRank = this.beforeRank;

            // ランクアップの場合
            if (nextRankUpExp <= rankExpSum)
            {
                nextRank++;

                this.afterRankExp       = rankExpSum - nextRankUpExp;
                GamePlayInfo.QuizResult = GamePlayInfo.Result.RankUp;

                // 次のランクアップに必要な経験値を更新(ランクアップ後の経験値のメーター算出用)
                nextRankUpExp = StatusCalcBasis.CalcNextRankUpExp(nextRank);
            }
            else
            {
                this.afterRankExp       = rankExpSum;
                GamePlayInfo.QuizResult = GamePlayInfo.Result.STAY;
            }

            // 更新後のランク
            this.afterRank = nextRank;
            // ランク更新後の経験値メーターを作成
            this.afterRankMeter = StatusCalcBasis.CalcMeter(this.afterRankExp, nextRankUpExp);

            // 身分情報は変更がないので計算前の値をそのまま設定する
            this.afterCareer          = this.beforeCareer;
            this.afterCareerExp       = this.beforeCareerExp;
            this.afterCareerMeter     = this.beforeCareerMeter;
            this.afterCastleDominance = this.beforeCastleDominance;
            this.afterDaimyouClass    = this.beforeDaimyouClass;
        }
Esempio n. 6
0
        /// <summary>城支配数の更新
        /// </summary>
        private async UniTask castleDominanceDisplayUpdate()
        {
            int    beforeCastleNum    = GamePlayInfo.BeforeCastleDominance;
            string beforeDaimyouClass = StatusCalcBasis.DaimyouClassFromCastleNum(beforeCastleNum).ToString();

            int    afterCastleNum    = GamePlayInfo.AfterCastleDominance;
            string afterDaimyouClass = StatusCalcBasis.DaimyouClassFromCastleNum(afterCastleNum).ToString();

//			StatusCalcBasis.DaimyouClass afterDaimyouClass = StatusCalcBasis.DaimyouClassFromCastleNum(afterNum);
//			StatusCalcBasis.DaimyouClass nextDaimyouClass = StatusCalcBasis.DaimyouClassFromCastleNum(beforeNum);

            // TODO UniTaskの中でUIを操作してもよいのか?

            // 上昇時
            if (beforeCastleNum < afterCastleNum)
            {
                // TODO 支配数増加時の音を鳴らす
                SoundController.instance.MeterUp();

                await UniTask.Delay(300);

                for (int castleNum = beforeCastleNum + 1; castleNum <= afterCastleNum; castleNum++)
                {
                    statusPanelController.CastleDominanceOutput(castleNum, beforeDaimyouClass);

                    await UniTask.Delay(300);
                }

                // TODO 支配数増加時の音を止める

                // 大名格が上がった場合
                if (!beforeDaimyouClass.Equals(afterDaimyouClass))
                {
                    // // TODO 大名格が上がった時の音を鳴らす
                    // SoundController.instance.MeterUp();
                }
            }
            else
            {
                // TODO 支配数減少時の音を鳴らす
                SoundController.instance.MeterDown();

                await UniTask.Delay(300);

                for (int castleNum = beforeCastleNum - 1; castleNum >= afterCastleNum; castleNum--)
                {
                    statusPanelController.CastleDominanceOutput(castleNum, beforeDaimyouClass);

                    await UniTask.Delay(300);
                }

                // TODO 支配数減少時の音を止める

                // 大名格が下がった場合
                if (!beforeDaimyouClass.Equals(afterDaimyouClass) || GamePlayInfo.AfterCastleDominance == 0)
                {
                    await UniTask.Delay(500);

                    // TODO 大名格が下がった時の音を鳴らす
                    SoundController.instance.MeterCrack();

                    // メーターが割れた演出
                    statusPanelController.setCareerCrack(true);

                    await UniTask.Delay(600);
                }
            }
        }
        /// <summary>身分メーター色を指定
        /// <param name="careerNum">身分</param>
        /// <param name="daimyouClass">大名格</param>
        /// </summary>
        public void SetCareerMeterColor(int careerNum, int daimyouClass)
        {
            Color meterColor = StatusCalcBasis.CareerMeterColorCode(careerNum, daimyouClass);

            careerMeter.color = meterColor;
        }
Esempio n. 8
0
        /// <summary>キャリア情報更新
        /// <param name="correctDiff">正解不正解の差</param>
        /// </summary>
        private void careerUpdate(int correctDiff)
        {
            // 計算前が大名の場合は城支配数を加算する
            if (this.beforeCareer == (int)StatusCalcBasis.Career.大名)
            {
                this.updateCastleDominance(correctDiff);
            }
            else
            {
                // 計算前が大名ではない場合は身分経験値を加算する
                this.updateCareerExp(correctDiff);
            }

            Debug.Log("beforeDaimyouClass:" + this.beforeDaimyouClass);
            Debug.Log("afterDaimyouClass:" + this.afterDaimyouClass);

            // 身分または大名格が上下した場合はランクの計算結果でのアニメーション設定を上書きする
            if (this.beforeCareer < this.afterCareer ||
                (this.afterCareer == (int)StatusCalcBasis.Career.大名 && this.beforeDaimyouClass < this.afterDaimyouClass))
            {
                // 上がった時
                GamePlayInfo.QuizResult = GamePlayInfo.Result.RankUp;
            }
            else if (this.beforeCareer > this.afterCareer ||
                     (this.afterCareer == (int)StatusCalcBasis.Career.大名 && this.beforeDaimyouClass > this.afterDaimyouClass))
            {
                // 下がった時
                GamePlayInfo.QuizResult = GamePlayInfo.Result.RankDown;
            }


            // 身分の経験値メーターを更新
            // 大名は身分が最大なのでメーターはMAXを設定しておく
            if (this.afterCareer == (int)StatusCalcBasis.Career.大名)
            {
                this.afterCareerMeter = StatusPanel.Fill_AMOUNT_MAX;
            }
            else
            {
                // 現在のメーターの数値
                int nowMeterPoint = 0;
                // メーターMAXの時の数値
                int maxMeterPoint = 0;

                // 次の身分に上がるために必要な経験値
                int nextCarrerUpExp = StatusCalcBasis.NextCareerUpExps[this.afterCareer];

                // 一番下の身分より一つでも上がっている場合
                if (this.afterCareer > (int)StatusCalcBasis.Career.足軽)
                {
                    // 今の身分に上がる時の閾値だった経験値を取得
                    int prevCareerUpExp = StatusCalcBasis.NextCareerUpExps[afterCareer - 1];
                    // 現在の身分に上がるときの閾値時点が0で、次の身分に上がる直前がMAXのゲージ値を取得する
                    nowMeterPoint = this.afterCareerExp - prevCareerUpExp;
                    maxMeterPoint = nextCarrerUpExp - prevCareerUpExp;
                }
                else
                {
                    nowMeterPoint = this.afterCareerExp;
                    maxMeterPoint = nextCarrerUpExp;
                }
                // 次に経験値が上がるためのMAX値からの割合値を取得(小数点第2位まで)
                this.afterCareerMeter = StatusCalcBasis.CalcMeter(nowMeterPoint, maxMeterPoint);
            }

            Debug.Log("career: " + this.afterCareer);
            Debug.Log("nowCareerExp: " + this.afterCareerExp);
        }