// 「合体」コマンド private void CombineCommand(UiCommand command) { //// MOD END MARGE //int i, j; //string[] list; //Unit u; //// MOD START MARGE //// If MainWidth <> 15 Then //if (GUI.NewGUIMode) //{ // // MOD END MARGE // Status.ClearUnitStatus(); //} GUI.LockGUI(); //list = new string[1]; //GUI.ListItemFlag = new bool[1]; var currentUnit = SelectedUnit; if (string.IsNullOrEmpty(Map.MapFileName)) { // ユニットステータスコマンドの時 // パーツ合体ならば…… if (command.Label == "パーツ合体" && currentUnit.IsFeatureAvailable("パーツ合体")) { // パーツ合体を実施 currentUnit.Transform(currentUnit.FeatureData("パーツ合体")); Status.DisplayUnitStatus(Map.MapDataForUnit[currentUnit.x, currentUnit.y]); Map.MapDataForUnit[currentUnit.x, currentUnit.y].CheckAutoHyperMode(); Map.MapDataForUnit[currentUnit.x, currentUnit.y].CheckAutoNormalMode(); // ユニットリストの表示を更新 Event.MakeUnitList(smode: ""); // コマンドを終了 CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } } // 選択可能な合体パターンのリストを作成 var combines = currentUnit.CombineFeatures(SRC); int i; // どの合体を行うかを選択 if (combines.Count == 1) { i = 1; } else { GUI.TopItem = 1; i = GUI.ListBox(new ListBoxArgs { lb_caption = "合体後の形態", lb_info = "名前", lb_mode = "", HasFlag = false, Items = combines.Select(x => new ListBoxItem { Text = x.CombineName, }).ToList(), }); if (i == 0) { CancelCommand(); GUI.UnlockGUI(); return; } } var combineunitname = combines[i - 1].ConbineUnitName; if (Map.IsStatusView) { // ユニットステータスコマンドの時 SelectedUnit.Combine(combineunitname, true); // ハイパーモード・ノーマルモードの自動発動をチェック SRC.UList.CheckAutoHyperMode(); SRC.UList.CheckAutoNormalMode(); // ユニットリストの表示を更新 Event.MakeUnitList(smode: ""); // コマンドを終了 CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } // 合体! SelectedUnit.Combine(combineunitname); // ハイパーモード&ノーマルモードの自動発動 SRC.UList.CheckAutoHyperMode(); SRC.UList.CheckAutoNormalMode(); // 合体後のユニットを選択しておく SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y]; // 行動数消費 SelectedUnit.UseAction(); // カーソル自動移動 if (SRC.AutoMoveCursor) { GUI.MoveCursorPos("ユニット選択", SelectedUnit); } Status.DisplayUnitStatus(SelectedUnit); // 合体イベント Event.HandleEvent("合体", SelectedUnit.MainPilot().ID, SelectedUnit.Name); if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; GUI.UnlockGUI(); return; } if (SRC.IsCanceled) { SRC.IsCanceled = false; Status.ClearUnitStatus(); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } // 行動終了 WaitCommand(true); }
private void UserDefineUnitCommand(UiCommand command) { var unit = SelectedUnit; var prev_used_action = unit.UsedAction; GUI.LockGUI(); // ユニットコマンドの使用イベント Event.HandleEvent("使用", unit.MainPilot().ID, command.Label); if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; GUI.UnlockGUI(); return; } if (SRC.IsCanceled) { SRC.IsCanceled = false; WaitCommand(); return; } // ユニットコマンドを実行 Event.HandleEvent("" + command.LabelData.EventDataId); if (SRC.IsCanceled) { SRC.IsCanceled = false; CancelCommand(); GUI.UnlockGUI(); return; } // ユニットコマンドの使用後イベント if (unit.CurrentForm().CountPilot() > 0) { Event.HandleEvent("使用後", unit.CurrentForm().MainPilot().ID, command.Label); if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; GUI.UnlockGUI(); return; } } // ステータスウィンドウを更新 if (unit.CurrentForm().CountPilot() > 0) { Status.DisplayUnitStatus(unit.CurrentForm()); } // 行動終了 if (unit.CurrentForm().UsedAction <= prev_used_action) { if (CommandState == "移動後コマンド選択") { WaitCommand(); } else { CommandState = "ユニット選択"; GUI.UnlockGUI(); } } else if (SRC.IsCanceled) { SRC.IsCanceled = false; } else { WaitCommand(true); } }
// マップコマンド実行 public void MapCommand(UiCommand command) { LogDebug(); CommandState = "ユニット選択"; switch (command.Id) { case EndTurnCmdID: // ターン終了 if (ViewMode) { ViewMode = false; return; } EndTurnCommand(); break; case DumpCmdID: // 中断 DumpCommand(); break; case UnitListCmdID: // 部隊表 UnitListCommand(); break; case SearchSpecialPowerCmdID: // スペシャルパワー検索 SearchSpecialPowerCommand(); break; case GlobalMapCmdID: // 全体マップ GlobalMapCommand(); break; case OperationObjectCmdID: // 作戦目的 GUI.LockGUI(); Event.HandleEvent("勝利条件"); GUI.RedrawScreen(); GUI.UnlockGUI(); break; case MapCommandCmdID: // マップコマンド GUI.LockGUI(); Event.HandleEvent("" + command.LabelData.EventDataId); GUI.UnlockGUI(); break; case AutoDefenseCmdID: // 自動反撃モード SystemConfig.AutoDefense = !SystemConfig.AutoDefense; SystemConfig.Save(); break; case ConfigurationCmdID: // 設定変更 GUI.Configure(); break; case RestartCmdID: // リスタート RestartCommand(); break; case QuickLoadCmdID: // クイックロード QuickLoadCommand(); break; case QuickSaveCmdID: // クイックセーブ QuickSaveCommand(); break; default: throw new NotSupportedException(JsonConvert.SerializeObject(command)); } SRC.IsScenarioFinished = false; }
// ユニットコマンドを実行 public void UnitCommand(UiCommand command) { LogDebug(); PrevCommand = SelectedCommand; var unit = SelectedUnit; var prev_used_action = unit.UsedAction; switch (command.Id) { case MoveCmdID: // 移動 // なんらかの原因により、ユニットコマンドの選択がうまくいかなかった場合は // 移動後のコマンド選択をやり直す if (CommandState == "移動後コマンド選択") { //Application.DoEvents(); return; } if (command.Label == "移動") { StartMoveCommand(); } else { ShowAreaInSpeedCommand(); } break; case TeleportCmdID: // テレポート StartTeleportCommand(); break; case JumpCmdID: // ジャンプ StartJumpCommand(); break; case TalkCmdID: // 会話 StartTalkCommand(); break; case AttackCmdID: // 攻撃 if (command.Label == "攻撃") { StartAttackCommand(); } else { ShowAreaInRangeCommand(); } break; case FixCmdID: // 修理 StartFixCommand(); break; case SupplyCmdID: // 補給 StartSupplyCommand(); break; case AbilityCmdID: // アビリティ StartAbilityCommand(); break; case ChargeCmdID: // チャージ ChargeCommand(); break; case SpecialPowerCmdID: // 精神 StartSpecialPowerCommand(); break; case TransformCmdID: // 変形 TransformCommand(); break; case SplitCmdID: // 分離 SplitCommand(); break; case CombineCmdID: // 合体 CombineCommand(command); break; case HyperModeCmdID: // ハイパーモード・変身解除 if (Strings.InStr(unit.FeatureData("ノーマルモード"), "手動解除") > 0) { CancelTransformationCommand(); } else { HyperModeCommand(); } break; case GroundCmdID: // 地上 { GUI.LockGUI(); if (Map.Terrain(unit.x, unit.y).Class == "水" || Map.Terrain(unit.x, unit.y).Class == "深水") { unit.Area = "水上"; } else { unit.Area = "地上"; } unit.Update(); if (unit.IsMessageDefined(unit.Area)) { GUI.OpenMessageForm(u1: null, u2: null); unit.PilotMessage(unit.Area, msg_mode: ""); GUI.CloseMessageForm(); } GUI.PaintUnitBitmap(SelectedUnit); CommandState = "ユニット選択"; GUI.UnlockGUI(); break; } case SkyCmdID: // 空中 { GUI.LockGUI(); if (Map.Terrain(unit.x, unit.y).Class == "月面") { unit.Area = "宇宙"; } else { unit.Area = "空中"; } unit.Update(); if (unit.IsMessageDefined(unit.Area)) { GUI.OpenMessageForm(u1: null, u2: null); unit.PilotMessage(unit.Area, msg_mode: ""); GUI.CloseMessageForm(); } GUI.PaintUnitBitmap(SelectedUnit); CommandState = "ユニット選択"; GUI.UnlockGUI(); break; } case UndergroundCmdID: // 地中 { GUI.LockGUI(); unit.Area = "地中"; unit.Update(); if (unit.IsMessageDefined(unit.Area)) { GUI.OpenMessageForm(u1: null, u2: null); unit.PilotMessage(unit.Area, msg_mode: ""); GUI.CloseMessageForm(); } GUI.PaintUnitBitmap(SelectedUnit); CommandState = "ユニット選択"; GUI.UnlockGUI(); break; } case WaterCmdID: // 水中 { GUI.LockGUI(); unit.Area = "水中"; unit.Update(); if (unit.IsMessageDefined(unit.Area)) { GUI.OpenMessageForm(u1: null, u2: null); unit.PilotMessage(unit.Area, msg_mode: ""); GUI.CloseMessageForm(); } GUI.PaintUnitBitmap(SelectedUnit); CommandState = "ユニット選択"; GUI.UnlockGUI(); break; } case LaunchCmdID: // 発進 StartLaunchCommand(); break; case ItemCmdID: // アイテム StartAbilityCommand(true); break; case DismissCmdID: // 召喚解除 DismissCommand(); break; case OrderCmdID: // 命令 StartOrderCommand(); break; case ExchangeFormCmdID: // 換装 ExchangeFormCommand(); break; case FeatureListCmdID: // 特殊能力一覧 FeatureListCommand(); break; case WeaponListCmdID: // 武器一覧 WeaponListCommand(); break; case AbilityListCmdID: // アビリティ一覧 AbilityListCommand(); break; case UnitCommandCmdID: // ユニットコマンド UserDefineUnitCommand(command); break; case WaitCmdID: // 待機 WaitCommand(); break; default: // なんらかの原因により、ユニットコマンドの選択がうまくいかなかった場合は // 移動後のコマンド選択をやり直す if (CommandState == "移動後コマンド選択") { // XXX //Application.DoEvents(); return; } break; } }