// 「換装」コマンド public void ExchangeFormCommand() { GUI.LockGUI(); var fd = SelectedUnit.Feature("換装"); // 選択可能な換装先のリストを作成 var uList = fd.DataL.Select(x => SelectedUnit.OtherForm(x)) .Where(x => x.IsAvailable()) .Select(u => { // 各形態の表示内容を作成 var msg = ""; msg += (u.Nickname == SelectedUnit.Nickname0) ? GeneralLib.RightPaddedString(u.Name, 27) : GeneralLib.RightPaddedString(u.Nickname0, 27); // ユニットに関する情報 msg += GeneralLib.LeftPaddedString(SrcFormatter.Format(u.MaxHP), 6); msg += GeneralLib.LeftPaddedString(SrcFormatter.Format(u.MaxEN), 5); msg += GeneralLib.LeftPaddedString(SrcFormatter.Format(u.get_Armor("")), 5); msg += GeneralLib.LeftPaddedString(SrcFormatter.Format(u.get_Mobility("")), 5); var weapons = u.Weapons.Where(uw => uw.IsDisplayFor(WeaponListMode.List)).ToList(); // 最大攻撃力 var maxPower = weapons.Max(uw => uw.WeaponPower("")); msg += GeneralLib.LeftPaddedString("" + maxPower, 7); // 最大射程 var maxRange = weapons.Max(uw => uw.WeaponMaxRange()); msg += GeneralLib.LeftPaddedString("" + maxRange, 5); // 換装先が持つ特殊能力一覧 var comment = string.Join(" ", u.Features .Select(fd => fd.FeatureName(u)) .Where(x => !string.IsNullOrEmpty(x)) .Distinct()); return(new ListBoxItem(msg, u.ID) { ListItemComment = comment, }); }) .ToList(); // どの形態に換装するかを選択 GUI.TopItem = 1; var tfRet = GUI.ListBox(new ListBoxArgs { Items = uList, lb_caption = "変更先選択", lb_info = "ユニット " + Expression.Term("HP", null, 4) + " " + Expression.Term("EN", null, 4) + " " + Expression.Term("装甲", null, 4) + " " + Expression.Term("運動", u: null) + " 適応 攻撃力 射程", lb_mode = "連続表示,コメント", }); // キャンセル? if (tfRet == 0) { CancelCommand(); GUI.UnlockGUI(); return; } // 換装を実施 SelectedUnit.Transform(SelectedUnit.OtherForm(uList[tfRet - 1].ListItemID).Name); // ユニットリストの再構築 Event.MakeUnitList(smode: ""); // カーソル自動移動 if (SRC.AutoMoveCursor) { GUI.MoveCursorPos("ユニット選択", SelectedUnit.CurrentForm()); } Status.DisplayUnitStatus(SelectedUnit.CurrentForm()); CommandState = "ユニット選択"; GUI.UnlockGUI(); }
// 「ハイパーモード」コマンド private void HyperModeCommand() { //// MOD START MARGE //// If MainWidth <> 15 Then //if (GUI.NewGUIMode) //{ // // MOD END MARGE // Status.ClearUnitStatus(); //} GUI.LockGUI(); var uname = GeneralLib.LIndex(SelectedUnit.FeatureData("ハイパーモード"), 2); var fname = SelectedUnit.FeatureName("ハイパーモード"); if (Map.IsStatusView) { // ユニットステータスコマンドの場合 if (!SelectedUnit.IsFeatureAvailable("ハイパーモード")) { uname = GeneralLib.LIndex(SelectedUnit.FeatureData("ノーマルモード"), 1); } // ハイパーモードを発動 SelectedUnit.Transform(uname); // ユニットリストの表示を更新 Event.MakeUnitList(smode: ""); // ステータスウィンドウの表示を更新 Status.DisplayUnitStatus(SelectedUnit.CurrentForm()); // コマンドを終了 GUI.UnlockGUI(); CommandState = "ユニット選択"; return; } // ハイパーモードを発動可能かどうかチェック { var withBlock1 = SelectedUnit.OtherForm(uname); if (!withBlock1.IsAbleToEnter(SelectedUnit.x, SelectedUnit.y) && !string.IsNullOrEmpty(Map.MapFileName)) { GUI.Confirm("この地形では変形できません", "", GuiConfirmOption.Ok); GUI.UnlockGUI(); CancelCommand(); return; } } // ダイアログでメッセージを表示させるため追加パイロットをあらかじめ作成 AddAdditionalPilotIfNotExist(uname, SelectedUnit); { // BGMを変更 if (SelectedUnit.IsFeatureAvailable("ハイパーモードBGM")) { var loopTo11 = SelectedUnit.CountFeature(); for (var i = 1; i <= loopTo11; i++) { var fdata = SelectedUnit.Feature(i).Data; if (SelectedUnit.Feature(i).Name == "ハイパーモードBGM" && (GeneralLib.LIndex(fdata, 1) ?? "") == uname) { var BGM = Sound.SearchMidiFile(Strings.Mid(fdata, Strings.InStr(fdata, " ") + 1)); if (Strings.Len(BGM) > 0) { Sound.ChangeBGM(BGM); GUI.Sleep(500); } break; } } } // メッセージを表示 SelectedUnit.PilotMassageIfDefined(new string[] { "ハイパーモード(" + SelectedUnit.Name + "=>" + uname + ")", "ハイパーモード(" + uname + ")", "ハイパーモード(" + fname + ")" }); // アニメ表示 SelectedUnit.PlayAnimation(new string[] { "ハイパーモード(" + SelectedUnit.Name + "=>" + uname + ")", "ハイパーモード(" + uname + ")", "ハイパーモード(" + fname + ")", "ハイパーモード", }); } // ハイパーモード発動 SelectedUnit.Transform(uname); // ハイパーモード・ノーマルモードの自動発動をチェック SelectedUnit.CurrentForm().CheckAutoHyperMode(); SelectedUnit.CurrentForm().CheckAutoNormalMode(); SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y]; // 変形イベント { var withBlock4 = SelectedUnit.CurrentForm(); Event.HandleEvent("変形", withBlock4.MainPilot().ID, withBlock4.Name); } if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; Status.ClearUnitStatus(); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } SRC.IsCanceled = false; // カーソル自動移動 if (SelectedUnit.Status == "出撃") { if (SRC.AutoMoveCursor) { GUI.MoveCursorPos("ユニット選択", SelectedUnit); } Status.DisplayUnitStatus(SelectedUnit); } CommandState = "ユニット選択"; GUI.UnlockGUI(); }