/// <summary> /// 一括編集対象の指揮官リストを取得する /// </summary> /// <param name="args">一括編集のパラメータ</param> /// <returns>一括編集対象の指揮官リスト</returns> private static IEnumerable<Leader> GetBatchEditLeaders(LeaderBatchEditArgs args) { return args.CountryMode == BatchCountryMode.All ? Items .Where(leader => (leader.Branch == Branch.Army && args.Army) || (leader.Branch == Branch.Navy && args.Navy) || (leader.Branch == Branch.Airforce && args.Airforce)) .ToList() : Items .Where(leader => args.TargetCountries.Contains(leader.Country)) .Where(leader => (leader.Branch == Branch.Army && args.Army) || (leader.Branch == Branch.Navy && args.Navy) || (leader.Branch == Branch.Airforce && args.Airforce)) .ToList(); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="args">一括編集のパラメータ</param> public LeaderBatchDialog(LeaderBatchEditArgs args) { InitializeComponent(); _args = args; }
/// <summary> /// 一括編集項目のログ文字列を取得する /// </summary> /// <param name="args">一括編集のパラメータ</param> /// <returns>ログ文字列</returns> private static string GetBatchEditItemLog(LeaderBatchEditArgs args) { StringBuilder sb = new StringBuilder(); if (args.Items[(int) LeaderBatchItemId.IdealRank]) { sb.AppendFormat($" ideal rank: {Config.GetText(RankNames[(int) args.IdealRank])}"); } if (args.Items[(int) LeaderBatchItemId.Skill]) { sb.AppendFormat($" skill: {args.Skill}"); } if (args.Items[(int) LeaderBatchItemId.MaxSkill]) { sb.AppendFormat($" max skill: {args.MaxSkill}"); } if (args.Items[(int) LeaderBatchItemId.Experience]) { sb.AppendFormat($" experience: {args.Experience}"); } if (args.Items[(int) LeaderBatchItemId.Loyalty]) { sb.AppendFormat($" loyalty: {args.Loyalty}"); } if (args.Items[(int) LeaderBatchItemId.StartYear]) { sb.AppendFormat($" start year: {args.StartYear}"); } if (args.Items[(int) LeaderBatchItemId.EndYear]) { sb.AppendFormat($" end year: {args.EndYear}"); } if (args.Items[(int) LeaderBatchItemId.RetirementYear]) { sb.AppendFormat($" retirement year: {args.RetirementYear}"); } if (args.Items[(int) LeaderBatchItemId.Rank3Year]) { sb.AppendFormat($" rank3 year: {args.RankYear[0]}"); } if (args.Items[(int) LeaderBatchItemId.Rank2Year]) { sb.AppendFormat($" rank2 year: {args.RankYear[1]}"); } if (args.Items[(int) LeaderBatchItemId.Rank1Year]) { sb.AppendFormat($" rank1 year: {args.RankYear[2]}"); } if (args.ActionMode == BatchActionMode.Copy) { sb.Append($" Copy: {Countries.Strings[(int) args.Destination]} id: {args.Id}"); } else if (args.ActionMode == BatchActionMode.Move) { sb.Append($" Move: {Countries.Strings[(int) args.Destination]} id: {args.Id}"); } if (sb.Length > 0) { sb.Remove(0, 1); } return sb.ToString(); }
/// <summary> /// 一括編集の個別処理 /// </summary> /// <param name="leader">対象指揮官</param> /// <param name="args">一括編集のパラメータ</param> private static void BatchEditLeader(Leader leader, LeaderBatchEditArgs args) { // 理想階級 if (args.Items[(int) LeaderBatchItemId.IdealRank]) { if (leader.IdealRank != args.IdealRank) { leader.IdealRank = args.IdealRank; leader.SetDirty(LeaderItemId.IdealRank); SetDirty(leader.Country); } } // スキル if (args.Items[(int) LeaderBatchItemId.Skill]) { if (leader.Skill != args.Skill) { leader.Skill = args.Skill; leader.SetDirty(LeaderItemId.Skill); SetDirty(leader.Country); } } // 最大スキル if (args.Items[(int) LeaderBatchItemId.MaxSkill]) { if (leader.MaxSkill != args.MaxSkill) { leader.MaxSkill = args.MaxSkill; leader.SetDirty(LeaderItemId.MaxSkill); SetDirty(leader.Country); } } // 経験値 if (args.Items[(int) LeaderBatchItemId.Experience]) { if (leader.Experience != args.Experience) { leader.Experience = args.Experience; leader.SetDirty(LeaderItemId.Experience); SetDirty(leader.Country); } } // 忠誠度 if (args.Items[(int) LeaderBatchItemId.Loyalty]) { if (leader.Loyalty != args.Loyalty) { leader.Loyalty = args.Loyalty; leader.SetDirty(LeaderItemId.Loyalty); SetDirty(leader.Country); } } // 開始年 if (args.Items[(int) LeaderBatchItemId.StartYear]) { if (leader.StartYear != args.StartYear) { leader.StartYear = args.StartYear; leader.SetDirty(LeaderItemId.StartYear); SetDirty(leader.Country); } } // 終了年 if (args.Items[(int) LeaderBatchItemId.EndYear]) { if (leader.EndYear != args.EndYear) { leader.EndYear = args.EndYear; leader.SetDirty(LeaderItemId.EndYear); SetDirty(leader.Country); } } // 引退年 if (args.Items[(int) LeaderBatchItemId.RetirementYear]) { if (leader.RetirementYear != args.RetirementYear) { leader.RetirementYear = args.RetirementYear; leader.SetDirty(LeaderItemId.RetirementYear); SetDirty(leader.Country); } } // 少将任官年 if (args.Items[(int) LeaderBatchItemId.Rank3Year]) { if (leader.RankYear[0] != args.RankYear[0]) { leader.RankYear[0] = args.RankYear[0]; leader.SetDirty(LeaderItemId.Rank3Year); SetDirty(leader.Country); } } // 中将任官年 if (args.Items[(int) LeaderBatchItemId.Rank2Year]) { if (leader.RankYear[1] != args.RankYear[1]) { leader.RankYear[1] = args.RankYear[1]; leader.SetDirty(LeaderItemId.Rank2Year); SetDirty(leader.Country); } } // 大将任官年 if (args.Items[(int) LeaderBatchItemId.Rank1Year]) { if (leader.RankYear[2] != args.RankYear[2]) { leader.RankYear[2] = args.RankYear[2]; leader.SetDirty(LeaderItemId.Rank1Year); SetDirty(leader.Country); } } // 元帥任官年 if (args.Items[(int) LeaderBatchItemId.Rank0Year]) { if (leader.RankYear[3] != args.RankYear[3]) { leader.RankYear[3] = args.RankYear[3]; leader.SetDirty(LeaderItemId.Rank0Year); SetDirty(leader.Country); } } }
/// <summary> /// 一括編集 /// </summary> /// <param name="args">一括編集のパラメータ</param> public static void BatchEdit(LeaderBatchEditArgs args) { LogBatchEdit(args); IEnumerable<Leader> leaders = GetBatchEditLeaders(args); Country newCountry; switch (args.ActionMode) { case BatchActionMode.Modify: // 指揮官を一括編集する foreach (Leader leader in leaders) { BatchEditLeader(leader, args); } break; case BatchActionMode.Copy: // 指揮官をコピーする newCountry = args.Destination; int id = args.Id; foreach (Leader leader in leaders) { id = GetNewId(id); Leader newLeader = new Leader(leader) { Country = newCountry, Id = id }; newLeader.SetDirtyAll(); Items.Add(newLeader); } // コピー先の国の編集済みフラグを設定する SetDirty(newCountry); // コピー先の国がファイル一覧に存在しなければ追加する if (!FileNameMap.ContainsKey(newCountry)) { FileNameMap.Add(newCountry, Game.GetLeaderFileName(newCountry)); SetDirtyList(); } break; case BatchActionMode.Move: // 指揮官を移動する newCountry = args.Destination; foreach (Leader leader in leaders) { // 移動前の国の編集済みフラグを設定する SetDirty(leader.Country); leader.Country = newCountry; leader.SetDirty(LeaderItemId.Country); } // 移動先の国の編集済みフラグを設定する SetDirty(newCountry); // 移動先の国がファイル一覧に存在しなければ追加する if (!FileNameMap.ContainsKey(newCountry)) { FileNameMap.Add(newCountry, Game.GetLeaderFileName(newCountry)); SetDirtyList(); } break; } }
/// <summary> /// 一括編集処理のログ出力 /// </summary> /// <param name="args">一括編集のパラメータ</param> private static void LogBatchEdit(LeaderBatchEditArgs args) { Log.Verbose($"[Leader] Batch {GetBatchEditItemLog(args)} ({GetBatchEditModeLog(args)})"); }
/// <summary> /// 一括編集対象モードのログ文字列を取得する /// </summary> /// <param name="args">一括編集のパラメータ</param> /// <returns>ログ文字列</returns> private static string GetBatchEditModeLog(LeaderBatchEditArgs args) { StringBuilder sb = new StringBuilder(); // 一括編集対象国 if (args.CountryMode == BatchCountryMode.All) { sb.Append("ALL"); } else { foreach (Country country in args.TargetCountries) { sb.AppendFormat(" {0}", Countries.Strings[(int) country]); } if (sb.Length > 0) { sb.Remove(0, 1); } } // 一括編集対象兵科 if (!args.Army || !args.Navy || !args.Airforce) { sb.Append($"|{(args.Army ? 'o' : 'x')}{(args.Navy ? 'o' : 'x')}{(args.Airforce ? 'o' : 'x')}"); } return sb.ToString(); }