Exemplo n.º 1
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();
        }
Exemplo n.º 2
0
        // 「分離」コマンド
        private void SplitCommand()
        {
            string uname, tname, fname;

            //// MOD START MARGE
            //// If MainWidth <> 15 Then
            //if (GUI.NewGUIMode)
            //{
            //    // MOD END MARGE
            //    Status.ClearUnitStatus();
            //}

            GUI.LockGUI();
            if (Map.IsStatusView)
            {
                // ユニットステータスコマンドの場合

                // 分離を実施
                {
                    var u = SelectedUnit;
                    if (u.IsFeatureAvailable("パーツ分離"))
                    {
                        tname = GeneralLib.LIndex(u.FeatureData("パーツ分離"), 2);
                        u.Transform(tname);
                    }
                    else
                    {
                        u.Split();
                    }

                    SRC.UList.CheckAutoHyperMode();
                    SRC.UList.CheckAutoNormalMode();
                    Status.DisplayUnitStatus(Map.MapDataForUnit[u.x, u.y]);
                }

                // ユニットリストの表示を更新
                Event.MakeUnitList(smode: "");

                // コマンドを終了
                CommandState = "ユニット選択";
                GUI.UnlockGUI();
                return;
            }

            {
                var u = SelectedUnit;
                if (u.IsFeatureAvailable("パーツ分離"))
                {
                    // パーツ分離を行う場合
                    var confirmRes = GUI.Confirm("パーツを分離しますか?", "パーツ分離", GuiConfirmOption.OkCancel | GuiConfirmOption.Question);
                    if (confirmRes == GuiDialogResult.Cancel)
                    {
                        GUI.UnlockGUI();
                        CancelCommand();
                        return;
                    }

                    tname = GeneralLib.LIndex(u.FeatureData("パーツ分離"), 2);

                    if (!u.OtherForm(tname).IsAbleToEnter(u.x, u.y))
                    {
                        GUI.Confirm("この地形では分離できません", "分離", GuiConfirmOption.Ok);
                        GUI.UnlockGUI();
                        CancelCommand();
                        return;
                    }

                    // BGM変更
                    if (u.IsFeatureAvailable("分離BGM"))
                    {
                        var BGM = Sound.SearchMidiFile(u.FeatureData("分離BGM"));
                        if (Strings.Len(BGM) > 0)
                        {
                            Sound.StartBGM(u.FeatureData("分離BGM"));
                            GUI.Sleep(500);
                        }
                    }

                    fname = u.FeatureName("パーツ分離");

                    // メッセージを表示
                    SelectedUnit.PilotMassageIfDefined(new string[] {
                        "分離(" + u.Name + ")",
                        "分離(" + fname + ")",
                        "分離",
                    });

                    // アニメ表示
                    SelectedUnit.PlayAnimation(new string[] {
                        "分離(" + u.Name + ")",
                        "分離(" + fname + ")",
                        "分離",
                    });

                    // パーツ分離
                    uname = u.Name;
                    u.Transform(tname);
                    SelectedUnit = Map.MapDataForUnit[u.x, u.y];
                    Status.DisplayUnitStatus(SelectedUnit);
                }
                else
                {
                    // 通常の分離を行う場合
                    var confirmRes = GUI.Confirm("分離しますか?", "分離", GuiConfirmOption.OkCancel | GuiConfirmOption.Question);
                    if (confirmRes == GuiDialogResult.Cancel)
                    {
                        GUI.UnlockGUI();
                        CancelCommand();
                        return;
                    }

                    // BGM変更
                    if (u.IsFeatureAvailable("分離BGM"))
                    {
                        var BGM = Sound.SearchMidiFile(u.FeatureData("分離BGM"));
                        if (Strings.Len(BGM) > 0)
                        {
                            Sound.StartBGM(u.FeatureData("分離BGM"));
                            GUI.Sleep(500);
                        }
                    }

                    fname = u.FeatureName("分離");

                    // メッセージを表示
                    SelectedUnit.PilotMassageIfDefined(new string[] {
                        "分離(" + u.Name + ")",
                        "分離(" + fname + ")",
                        "分離",
                    });

                    // アニメ表示
                    SelectedUnit.PlayAnimation(new string[] {
                        "分離(" + u.Name + ")",
                        "分離(" + fname + ")",
                        "分離",
                    });

                    // 分離
                    uname = u.Name;
                    u.Split();

                    // 選択ユニットを再設定
                    SelectedUnit = SRC.UList.Item(GeneralLib.LIndex(u.FeatureData("分離"), 2));
                    Status.DisplayUnitStatus(SelectedUnit);
                }
            }

            // 分離イベント
            Event.HandleEvent("分離", SelectedUnit.MainPilot().ID, uname);
            if (SRC.IsScenarioFinished)
            {
                SRC.IsScenarioFinished = false;
                Status.ClearUnitStatus();
                GUI.RedrawScreen();
                CommandState = "ユニット選択";
                GUI.UnlockGUI();
                return;
            }

            SRC.IsCanceled = false;

            // カーソル自動移動
            if (SRC.AutoMoveCursor)
            {
                GUI.MoveCursorPos("ユニット選択", SelectedUnit);
            }

            // ハイパーモード&ノーマルモードの自動発動チェック
            SRC.UList.CheckAutoHyperMode();
            SRC.UList.CheckAutoNormalMode();
            CommandState = "ユニット選択";
            GUI.UnlockGUI();
            // XXX RedrawScreen 元はしてなかった気がする
            GUI.RedrawScreen();
        }
Exemplo n.º 3
0
        // 「変形」コマンド
        private void TransformCommand()
        {
            // MOD START MARGE
            //// If MainWidth <> 15 Then
            //if (GUI.NewGUIMode)
            //{
            //    // MOD END MARGE
            //    Status.ClearUnitStatus();
            //}

            GUI.LockGUI();
            var fdata = SelectedUnit.FeatureData("変形");

            if (Map.IsStatusView)
            {
                // ユニットステータスコマンドの場合
                var forms = GeneralLib.ToL(fdata).Skip(1)
                            .Select(x => SelectedUnit.OtherForm(x))
                            .Where(x => x.IsAvailable())
                            .Select(x => new ListBoxItem
                {
                    ListItemID = x.Name,
                    Text       = x.Nickname0,
                }).ToList();
                var ret = 1;
                if (forms.Count > 1)
                {
                    GUI.TopItem = 1;
                    ret         = GUI.ListBox(new ListBoxArgs
                    {
                        lb_caption = SelectedUnit.IsHero() ? "変身先" : "変形先",
                        lb_info    = "名前",
                        lb_mode    = "カーソル移動",
                        Items      = forms,
                    });

                    if (ret == 0)
                    {
                        CancelCommand();
                        GUI.UnlockGUI();
                        return;
                    }
                }

                var uname      = forms[ret - 1].ListItemID;
                var targetUnit = SRC.UDList.Item(uname);

                // 変形を実施
                var u = SelectedUnit;
                u.Transform(uname);

                // ユニットリストの表示を更新
                Event.MakeUnitList(smode: "");

                // ステータスウィンドウの表示を更新
                Status.DisplayUnitStatus(u.CurrentForm());

                // コマンドを終了
                // XXX RedrawScreen 元はしてなかった気がする
                GUI.RedrawScreen();
                GUI.UnlockGUI();
                CommandState = "ユニット選択";
                return;
            }
            {
                // 変形可能な形態の一覧を作成
                var forms = GeneralLib.ToL(fdata).Skip(1)
                            .Select(x => SelectedUnit.OtherForm(x))
                            .Where(x => x.IsAvailable())
                            .Select(x => new ListBoxItem
                {
                    ListItemID   = x.Name,
                    Text         = x.Nickname0,
                    ListItemFlag = !(x.IsAbleToEnter(SelectedUnit.x, SelectedUnit.y) || Map.IsStatusView)
                }).ToList();
                // 変形先の形態を選択
                int ret;
                if (forms.Count() == 1)
                {
                    if (forms.First().ListItemFlag)
                    {
                        GUI.Confirm("この地形では" + GeneralLib.LIndex(fdata, 1) + "できません", "", GuiConfirmOption.Ok);
                        CancelCommand();
                        GUI.UnlockGUI();
                        return;
                    }

                    ret = 1;
                }
                else
                {
                    GUI.TopItem = 1;
                    ret         = GUI.ListBox(new ListBoxArgs
                    {
                        lb_caption = SelectedUnit.IsHero() ? "変身先" : "変形先",
                        lb_info    = "名前",
                        lb_mode    = "カーソル移動",
                        HasFlag    = true,
                        Items      = forms,
                    });

                    if (ret == 0)
                    {
                        CancelCommand();
                        GUI.UnlockGUI();
                        return;
                    }
                }

                var    uname      = forms[ret - 1].ListItemID;
                var    targetUnit = SRC.UDList.Item(uname);
                string BGM;
                {
                    var u = SelectedUnit;
                    // ダイアログでメッセージを表示させるため追加パイロットをあらかじめ作成
                    AddAdditionalPilotIfNotExist(uname, u);

                    // BGMの変更
                    if (u.IsFeatureAvailable("変形BGM"))
                    {
                        foreach (var fd in u.Features.Where(x => x.Name == "変形BGM")
                                 .Where(x => GeneralLib.LIndex(x.Data, 1) == uname))
                        {
                            BGM = Sound.SearchMidiFile(Strings.Mid(fd.Data, Strings.InStr(fd.Data, " ") + 1));
                            if (Strings.Len(BGM) > 0)
                            {
                                Sound.ChangeBGM(BGM);
                                GUI.Sleep(500);
                            }
                            break;
                        }
                    }

                    // メッセージを表示
                    SelectedUnit.PilotMassageIfDefined(new string[] {
                        "変形(" + u.Name + "=>" + uname + ")",
                        "変形(" + uname + ")",
                        "変形(" + u.FeatureName("変形") + ")",
                    });

                    // アニメ表示
                    SelectedUnit.PlayAnimationIfDefined(new string[] {
                        "変形(" + u.Name + "=>" + uname + ")",
                        "変形(" + uname + ")",
                        "変形(" + u.FeatureName("変形") + ")",
                    });
                }

                // 変形
                var prev_uname = SelectedUnit.Name;
                SelectedUnit.Transform(uname);
                SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y];

                // 変形をキャンセルする?
                if (SelectedUnit.Action == 0)
                {
                    var confirmRet = GUI.Confirm(
                        "この形態ではこれ以上の行動が出来ません。" + Constants.vbCr + Constants.vbLf + "それでも変形しますか?",
                        "変形",
                        GuiConfirmOption.OkCancel | GuiConfirmOption.Question);
                    if (confirmRet == GuiDialogResult.Cancel)
                    {
                        SelectedUnit.Transform(prev_uname);
                        SelectedUnit = Map.MapDataForUnit[SelectedUnit.x, SelectedUnit.y];
                        if (SelectedUnit.IsConditionSatisfied("消耗"))
                        {
                            SelectedUnit.DeleteCondition("消耗");
                        }
                    }

                    GUI.RedrawScreen();
                }

                // 変形イベント
                {
                    Event.HandleEvent("変形", SelectedUnit.CurrentForm().MainPilot().ID, SelectedUnit.CurrentForm().Name);
                }

                if (SRC.IsScenarioFinished)
                {
                    SRC.IsScenarioFinished = false;
                    Status.ClearUnitStatus();
                    GUI.RedrawScreen();
                    CommandState = "ユニット選択";
                    GUI.UnlockGUI();
                    return;
                }

                SRC.IsCanceled = false;

                // ハイパーモード・ノーマルモードの自動発動をチェック
                SelectedUnit.CurrentForm().CheckAutoHyperMode();
                SelectedUnit.CurrentForm().CheckAutoNormalMode();

                // カーソル自動移動
                if (SelectedUnit.Status == "出撃")
                {
                    if (SRC.AutoMoveCursor)
                    {
                        GUI.MoveCursorPos("ユニット選択", SelectedUnit);
                    }

                    Status.DisplayUnitStatus(SelectedUnit);
                }

                // XXX RedrawScreen 元はしてなかった気がする
                GUI.RedrawScreen();
                CommandState = "ユニット選択";
                GUI.UnlockGUI();
            }
        }