Example #1
0
        // 「換装」コマンド
        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();
        }
Example #2
0
        // 「ハイパーモード」コマンド
        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();
        }