Exemplo n.º 1
0
        // 「合体」コマンド
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        // マップコマンド実行
        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;
        }
Exemplo n.º 4
0
        // ユニットコマンドを実行
        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;
            }
        }