public void UpdateDayInfo(GameInfo gameInfo) { // 日の情報を更新 TodayInfo.Update(gameInfo); // 新規会話の処理 for (int i = talkOffset; i < TodayInfo.TalkList.Count; i++) { Talk talk = TodayInfo.TalkList[i]; Content content = TodayInfo.TalkList[i].Content; // 単文か if (content.Operator == Operator.NOP) { switch (content.Topic) { case Topic.COMINGOUT: // カミングアウト // 自分に対するCOのみ対象 if (talk.Agent == content.Target) { if (content.Role.GetTeam() == Team.VILLAGER) { // 村陣営CO UpdateComingOut(content.Target, content.Role, talk); } else { // 人外CO UpdateMonsterSideComingOut(content.Target, content.Role, talk); } } break; case Topic.DIVINED: // 占い結果 // カミングアウトの更新 UpdateComingOut(talk.Agent, Role.SEER, talk); // 判定の追加 Judge newSeerJudge = new Judge(talk); SeerJudge.Add(newSeerJudge); // 内訳の削除 if (IsRemoveVillagerFakeCO) { RemovePatternFromJudge(newSeerJudge); } break; case Topic.IDENTIFIED: // 霊媒結果 // カミングアウトの更新 UpdateComingOut(talk.Agent, Role.MEDIUM, talk); // 判定の追加 Judge newMediumJudge = new Judge(talk); MediumJudge.Add(newMediumJudge); // 内訳の削除 if (IsRemoveVillagerFakeCO) { RemovePatternFromJudge(newMediumJudge); } break; case Topic.GUARDED: // 護衛履歴 break; default: break; } } } talkOffset = TodayInfo.TalkList.Count; // 新規囁きの処理 }
/// <summary> /// 日付変更時(昼の開始時)の処理 /// </summary> private void DayStart(GameInfo gameInfo) { // 昨日の情報を更新 YesterdayInfo = TodayInfo; if (YesterdayInfo != null && YesterdayInfo.Day != 0 && YesterdayInfo.Day + 1 == gameInfo.Day) { TodayInfo.UpdateFromTomorrow(gameInfo); } // 日の情報を作成 TodayInfo = new DayInfo(gameInfo); DayInfo.Add(gameInfo.Day, TodayInfo); // 死体で発見されたエージェントが人狼のパターンを削除する foreach (Agent agent in gameInfo.LastDeadAgentList) { ICondition condition = RoleCondition.GetCondition(agent, Role.WEREWOLF); AllViewSystemInfo.RemoveMatchPattern(condition); } //TODO 飽和が早い配役対応 (15人村→4日目から)(5人村→1狼のため必要無し) // 人狼生存人数がおかしいパターンを削除する int maxWolfNum = (gameInfo.AliveAgentList.Count - 1) / 2; maxWolfNum = Math.Min(maxWolfNum, GameSetting.RoleNumMap[Role.WEREWOLF]); if (gameInfo.Day > GameSetting.RoleNumMap[Role.WEREWOLF]) { BitMatchNumCondition condition = new BitMatchNumCondition() { MinNum = 1, MaxNum = maxWolfNum, }; foreach (Agent agent in gameInfo.AliveAgentList) { condition.AddWerewolf(agent); } AllViewSystemInfo.RemoveNotMatchPattern(condition); } // 自分の占い判定の追加 if (gameInfo.DivineResult != null) { MySeerJudge.Add(gameInfo.DivineResult); } // 自分の霊媒判定の追加 if (gameInfo.MediumResult != null) { MyMediumJudge.Add(gameInfo.MediumResult); } // 自分の護衛履歴の追加 if (gameInfo.GuardedAgent != null) { MyGuardHistory.Add(gameInfo.Day - 1, gameInfo.GuardedAgent); } // 護衛成功からのパターン削除 if (gameInfo.GuardedAgent != null && gameInfo.LastDeadAgentList.Count <= 0) { BitCondition condition = new BitCondition(); condition.AddWerewolf(gameInfo.GuardedAgent); AllViewSystemInfo.RemoveMatchPattern(condition); } talkOffset = 0; // debug /* * Console.Write(gameInfo.Day + "日目 : "); * Console.Write(SelfViewSystemInfo.MonsterSidePattern.Count); * Console.Write(" / "); * Console.Write(AllViewSystemInfo.MonsterSidePattern.Count); * Console.WriteLine(""); */ }