/// <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); }
/// <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); } }
/// <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; }
/// <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; }
/// <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); }