/// <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); } }
/// <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>城支配数の更新 /// </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); } } }