Exemple #1
0
 public void DoGUIStatusReceivedData(string paramString)
 {
     if (this.InvokeRequired)
     {
         GUIStatus delegateMethod = new GUIStatus(this.DoGUIStatusReceivedData);
         this.Invoke(delegateMethod, new object[] { paramString });
     }
     else
     {
         this.tbReceive.AppendText(paramString);
     }
 }
Exemple #2
0
 public void DoGUIStatus(string paramString)
 {
     if (this.InvokeRequired)
     {
         GUIStatus delegateMethod = new GUIStatus(this.DoGUIStatus);
         this.Invoke(delegateMethod, new object[] { paramString });
     }
     else
     {
         this.statusStrip1.Text = paramString;
     }
 }
Exemple #3
0
 public void DoGUIChart(string paramString)
 {
     /* função delegada para atualizar o gráfico com o valor da placa */
     if (this.InvokeRequired)
     {
         GUIStatus delegateMethod = new GUIStatus(this.DoGUIChart);
         this.Invoke(delegateMethod, new object[] { paramString });
     }
     else
     {
         Atualiza_Chart(Convert.ToInt16(paramString));
     }
 }
Exemple #4
0
 public void DoGUIConexao(string paramString)
 {
     /* função delegada para gravar log com o que recebeu da placa no paramstring */
     if (this.InvokeRequired)
     {
         GUIStatus delegateMethod = new GUIStatus(this.DoGUIConexao);
         this.Invoke(delegateMethod, new object[] { paramString });
     }
     else
     {
         Grava_Log(paramString);
     }
 }
Exemple #5
0
        private void ExecuteFile(string fname)
        {
            if (Strings.LCase(Strings.Right(fname, 5)) == ".srcs")
            {
                using (var stream = File.OpenRead(fname))
                {
                    // セーブデータの読み込み
                    GUI.OpenNowLoadingForm();
                    LoadData(stream);
                    GUI.CloseNowLoadingForm();

                    // インターミッション
                    InterMission.InterMissionCommand(true);
                    if (!IsSubStage)
                    {
                        if (string.IsNullOrEmpty(Expression.GetValueAsString("次ステージ")))
                        {
                            GUI.ErrorMessage("次のステージのファイル名が設定されていません");
                            TerminateSRC();
                        }

                        StartScenario(Expression.GetValueAsString("次ステージ"));
                    }
                    else
                    {
                        IsSubStage = false;
                    }
                }
            }
            else if (Strings.LCase(Strings.Right(fname, 5)) == ".srcq")
            {
                // 中断データの読み込み
                GUI.LockGUI();
                RestoreData(fname, SRCSaveKind.Suspend);

                // 画面を書き直してステータスを表示
                GUI.RedrawScreen();
                GUIStatus.DisplayGlobalStatus();
                GUI.UnlockGUI();
            }
            else if (Strings.LCase(Strings.Right(fname, 4)) == ".eve")
            {
                // イベントファイルの実行
                StartScenario(fname);
            }
            else
            {
                GUI.ErrorMessage("「" + fname + "」はSRC用のファイルではありません!" + Constants.vbCr + Constants.vbLf + "拡張子が「.eve」のイベントファイル、" + "または拡張子が「.src」のセーブデータファイルを指定して下さい。");
                TerminateSRC();
            }
        }
Exemple #6
0
 public void DoGUIStatus(string paramString)
 {
     /* função delegada para gravar log e atualizar status com o que recebeu da placa no paramstring */
     if (this.InvokeRequired)
     {
         GUIStatus delegateMethod = new GUIStatus(this.DoGUIStatus);
         this.Invoke(delegateMethod, new object[] { paramString });
     }
     else
     {
         this.lblStatus.Text = paramString;
         Grava_Log(this.lblStatus.Text);
     }
 }
Exemple #7
0
        private void OnEnable()
        {
            this.titleContent = new GUIContent("对话预览");

            m_Player            = new DialoguePlayer();
            m_Player.OnDoChoose = (choose) =>
            {
                m_CurStatus = GUIStatus.choose;
                m_Title     = choose.GetTitle();
                m_Content   = choose.GetContent();

                var           chooses = choose.Chooses;
                List <Button> buttons = new List <Button>();
                for (int i = 0; i < chooses.Count; i++)
                {
                    int index = i;
                    buttons.Add(new Button()
                    {
                        Title    = chooses[i].Title,
                        callback = () => { m_Player.NextWithParam(index); }
                    });
                }
                m_Btns = buttons.ToArray();
            };


            m_Player.OnDoContent = (content) =>
            {
                m_CurStatus = GUIStatus.content;
                m_Title     = content.GetTitle();
                m_Content   = content.GetContent();
            };

            m_Player.OnDoFinish = (finish) =>
            {
                m_Title     = "";
                m_Content   = "";
                m_CurStatus = GUIStatus.finish;
            };
        }
Exemple #8
0
        // 一時中断用データをロード
        public void RestoreData(Stream stream, SRCSaveKind saveKind)
        {
            var quick_load = saveKind == SRCSaveKind.Quik || saveKind == SRCSaveKind.Restart;

            try
            {
                // マウスカーソルを砂時計に
                GUI.ChangeStatus(GuiStatus.WaitCursor);
                if (quick_load)
                {
                    if (Expression.IsOptionDefined("デバッグ"))
                    {
                        Event.LoadEventData(ScenarioFileName, "クイックロード");
                    }
                }
                if (!quick_load)
                {
                    GUI.OpenNowLoadingForm();
                }

                // XXX Version プロパティだけのオブジェクトでバージョンチェックなど
                var data = JsonConvert.DeserializeObject <SRCSuspendData>((new StreamReader(stream).ReadToEnd()));
                //SaveDataVersion = Conversions.ToInteger(fname2);
                var scenario_file_is_different = !FileSystem.RelativePathEuqals(ScenarioPath, ScenarioFileName, data.ScenarioFileName);
                if (scenario_file_is_different)
                {
                    // TODO Impl ウィンドウのタイトルを設定
                    // ウィンドウのタイトルを設定
                    //GUI.MainFormText = "SRC - " + Strings.Left(fname2, Strings.Len(fname2) - 4);
                }
                Titles    = data.Titles;
                TotalTurn = data.TotalTurn;
                Money     = data.Money;
                Event.GlobalVariableList = data.GlobalVariableList;
                PList = data.PList;
                UList = data.UList;
                IList = data.IList;
                //
                ScenarioFileName        = FileSystem.ToAbsolutePath(ScenarioPath, data.ScenarioFileName);
                Turn                    = data.Turn;
                Event.LocalVariableList = data.LocalVariableList;

                // 使用するデータをロード
                if (!quick_load)
                {
                    GUI.SetLoadImageSize(data.Titles.Count * 2 + 5);
                    foreach (var title in Titles)
                    {
                        IncludeData(title);
                    }

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\alias.txt"))
                    //{
                    //    ALDList.Load(ScenarioPath + @"Data\alias.txt");
                    //}

                    //bool localFileExists() { string argfname = ScenarioPath + @"Data\mind.txt"; var ret = SRC.FileSystem.FileExists(argfname); return ret; }

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\sp.txt"))
                    //{
                    //    SPDList.Load(ScenarioPath + @"Data\sp.txt");
                    //}
                    //else if (localFileExists())
                    //{
                    //    SPDList.Load(ScenarioPath + @"Data\mind.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\pilot.txt"))
                    //{
                    //    PDList.Load(ScenarioPath + @"Data\pilot.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\non_pilot.txt"))
                    //{
                    //    NPDList.Load(ScenarioPath + @"Data\non_pilot.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\robot.txt"))
                    //{
                    //    UDList.Load(ScenarioPath + @"Data\robot.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\unit.txt"))
                    //{
                    //    UDList.Load(ScenarioPath + @"Data\unit.txt");
                    //}

                    //GUI.DisplayLoadingProgress();
                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\pilot_message.txt"))
                    //{
                    //    MDList.Load(ScenarioPath + @"Data\pilot_message.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\pilot_dialog.txt"))
                    //{
                    //    DDList.Load(ScenarioPath + @"Data\pilot_dialog.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\effect.txt"))
                    //{
                    //    EDList.Load(ScenarioPath + @"Data\effect.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\animation.txt"))
                    //{
                    //    ADList.Load(ScenarioPath + @"Data\animation.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\ext_animation.txt"))
                    //{
                    //    EADList.Load(ScenarioPath + @"Data\ext_animation.txt");
                    //}

                    //if (SRC.FileSystem.FileExists(ScenarioPath + @"Data\item.txt"))
                    //{
                    //    IDList.Load(ScenarioPath + @"Data\item.txt");
                    //}

                    GUI.DisplayLoadingProgress();
                    IsLocalDataLoaded = true;
                    Event.LoadEventData(ScenarioFileName, "リストア");
                    GUI.DisplayLoadingProgress();
                }
                else
                {
                    if (scenario_file_is_different)
                    {
                        Event.LoadEventData(ScenarioFileName, "リストア");
                    }
                }

                Event.Restore(data);
                PList.Restore(this);
                UList.Restore(this);
                IList.Restore(this);
                Map.Restore(data);

                // XXX 仮処理
                UList.Items.ToList().ForEach(x => x.Update());
                PList.Items.ToList().ForEach(x => x.Update());

                // BGM関連の設定を復元
                // TODO パスの正規化
                var bgmFile = Sound.SearchMidiFile("(" + Path.GetFileName(data.BGMFileName) + ")");
                if (!string.IsNullOrEmpty(bgmFile))
                {
                    // BGMが必ず切り替わる状態で変更してから関連設定を復元する
                    Sound.KeepBGM = false;
                    Sound.BossBGM = false;
                    Sound.ChangeBGM(bgmFile);
                }
                else
                {
                    Sound.StopBGM();
                }
                Sound.RepeatMode = data.RepeatMode;
                Sound.KeepBGM    = data.KeepBGM;
                Sound.BossBGM    = data.BossBGM;

                //    // 乱数系列を復元
                //    if (!Expression.IsOptionDefined("デバッグ") && !Expression.IsOptionDefined("乱数系列非保存") && !FileSystem.EOF(SaveDataFileNumber))
                //    {
                //        FileSystem.Input(SaveDataFileNumber, GeneralLib.RndSeed);
                //        GeneralLib.RndReset();
                //        FileSystem.Input(SaveDataFileNumber, GeneralLib.RndIndex);
                //    }

                if (!quick_load)
                {
                    GUI.DisplayLoadingProgress();
                }

                //    // リンクデータを処理するため、セーブファイルを一旦閉じてから再度読み込み
                //    Event.SkipEventData();
                //    PList.RestoreLinkInfo();
                //    IList.RestoreLinkInfo();
                //    UList.RestoreLinkInfo();
                //    FileSystem.FileClose(SaveDataFileNumber);

                //    // パラメータ情報を処理するため、セーブファイルを一旦閉じてから再度読み込み。
                //    // 霊力やHP、ENといったパラメータは最大値が特殊能力で変動するため、
                //    // 特殊能力の設定が終わってから改めて設定してやる必要がある。

                //    Event.SkipEventData();
                //    PList.RestoreParameter();
                //    IList.RestoreParameter();
                //    UList.RestoreParameter();
                //    PList.UpdateSupportMod();

                // 背景書き換え
                // XXX 常に書き換えでない理由何かある?
                //if (Map.IsMapDirty)
                //{
                int map_x, map_y;
                map_x = GUI.MapX;
                map_y = GUI.MapY;
                GUI.SetupBackground(Map.MapDrawMode, "非同期");
                GUI.MapX = map_x;
                GUI.MapY = map_y;

                // 再開イベントによるマップ画像の書き換え処理を行う
                Event.HandleEvent("再開");
                Map.IsMapDirty = false;
                //}

                Commands.SelectedUnit   = null;
                Commands.SelectedTarget = null;

                // 画面更新
                GUI.Center(GUI.MapX, GUI.MapY);
                if (!quick_load)
                {
                    GUI.DisplayLoadingProgress();
                }

                if (!quick_load)
                {
                    GUI.CloseNowLoadingForm();
                }

                if (!quick_load)
                {
                    GUI.MainFormShow();
                }

                // マウスカーソルを元に戻す
                GUI.ChangeStatus(GuiStatus.Default);
                GUIStatus.ClearUnitStatus();
                if (!GUI.MainFormVisible)
                {
                    GUI.MainFormShow();
                    GUI.RefreshScreen();
                }

                GUI.RedrawScreen();
                if (Turn == 0)
                {
                    Event.HandleEvent("スタート");

                    // スタートイベントから次のステージが開始された場合、StartTurnが上のHandleEventで
                    // 実行されてしまう。
                    // 味方ターンの処理が2重起動されるのを防ぐため、Turnをチェックしてから起動する
                    if (Turn == 0)
                    {
                        StartTurn("味方");
                    }
                }
                else
                {
                    Commands.CommandState = "ユニット選択";
                    Stage = "味方";
                }
                if (saveKind == SRCSaveKind.Restart)
                {
                    IsRestartSaveDataAvailable = true;
                }
                else if (saveKind == SRCSaveKind.Quik)
                {
                    IsQuickSaveDataAvailable = true;
                }
            }
            catch
            {
                GUI.ErrorMessage("ロード中にエラーが発生しました");
                TerminateSRC();
            }
        }
Exemple #9
0
 public void DoGUIStatus(string paramString)
 {
     if (this.InvokeRequired)
     {
     GUIStatus delegateMethod = new GUIStatus(this.DoGUIStatus);
     this.Invoke(delegateMethod, new object[] { paramString });
     }
     else
     this.lblStatus.Text = paramString;
 }
Exemple #10
0
        private void CPUOperation(string uparty)
        {
            // CPUによるユニット操作
            for (var phase = 1; phase <= 5; phase++)
            {
                foreach (var u in UList.Items)
                {
                    // フェイズ中に行動するユニットを選択
                    Commands.SelectedUnit = u;
                    if (u.Status != "出撃")
                    {
                        continue;
                    }

                    if (u.Action == 0)
                    {
                        continue;
                    }

                    if ((u.Party ?? "") != (uparty ?? ""))
                    {
                        continue;
                    }

                    var phaseJudgeUnit = u;

                    // 他のユニットを護衛しているユニットは護衛対象と同じ順に行動
                    if (PList.IsDefined(u.Mode))
                    {
                        var p = PList.Item(u.Mode);
                        if (p.Unit != null)
                        {
                            if (p.Unit.Party == uparty)
                            {
                                phaseJudgeUnit = p.Unit;
                            }
                        }
                    }
                    // XXX 二段階走査してるってこと?
                    if (PList.IsDefined(phaseJudgeUnit.Mode))
                    {
                        var p = PList.Item(phaseJudgeUnit.Mode);
                        if (p.Unit != null)
                        {
                            if (p.Unit.Party == uparty)
                            {
                                phaseJudgeUnit = p.Unit;
                            }
                        }
                    }

                    switch (phase)
                    {
                    case 1:
                        // 最初にサポート能力を持たないザコユニットが行動
                        if (phaseJudgeUnit.BossRank >= 0)
                        {
                            continue;
                        }
                        if (phaseJudgeUnit.MainPilot().HasSupportSkill())
                        {
                            continue;
                        }

                        break;

                    case 2:
                        // 次にサポート能力を持たないボスユニットが行動
                        if (phaseJudgeUnit.MainPilot().HasSupportSkill())
                        {
                            continue;
                        }

                        break;

                    case 3:
                        // 次に統率能力を持つユニットが行動
                        if (!phaseJudgeUnit.MainPilot().IsSkillAvailable("統率"))
                        {
                            continue;
                        }
                        break;

                    case 4:
                        // 次にサポート能力を持つザコユニットが行動
                        if (phaseJudgeUnit.BossRank >= 0)
                        {
                            continue;
                        }
                        break;

                    case 5:
                        // 最後にサポート能力を持つボスユニットが行動
                        break;
                    }

                    while (Commands.SelectedUnit.Action > 0)
                    {
                        // 途中で状態が変更された場合
                        if (Commands.SelectedUnit.Status != "出撃")
                        {
                            break;
                        }

                        // 途中で陣営が変更された場合
                        if ((Commands.SelectedUnit.Party ?? "") != (uparty ?? ""))
                        {
                            break;
                        }

                        if (!GUI.IsRButtonPressed())
                        {
                            GUIStatus.DisplayUnitStatus(Commands.SelectedUnit);
                            GUI.Center(Commands.SelectedUnit.x, Commands.SelectedUnit.y);
                            GUI.RedrawScreen();
                            // XXX
                            //Application.DoEvents();
                        }

                        IsCanceled = false; // Cancelコマンドのクリア

                        // ユニットを行動させる
                        COM.OperateUnit();
                        if (IsScenarioFinished)
                        {
                            return;
                        }

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

                        // Cancelコマンドが実行されたらここで終了
                        if (IsCanceled)
                        {
                            if (Commands.SelectedUnit is null)
                            {
                                break;
                            }

                            if (Commands.SelectedUnit.Status != "出撃")
                            {
                                break;
                            }

                            IsCanceled = false;
                        }

                        // 行動数を減少
                        Commands.SelectedUnit.UseAction();

                        // 接触イベント
                        {
                            var withBlock13 = Commands.SelectedUnit;
                            if (withBlock13.Status == "出撃" && withBlock13.x > 1)
                            {
                                if (Map.MapDataForUnit[withBlock13.x - 1, withBlock13.y] is object)
                                {
                                    Commands.SelectedTarget = Map.MapDataForUnit[withBlock13.x - 1, withBlock13.y];
                                    Event.HandleEvent("接触", withBlock13.MainPilot().ID, Map.MapDataForUnit[withBlock13.x - 1, withBlock13.y].MainPilot().ID);
                                    if (IsScenarioFinished)
                                    {
                                        return;
                                    }
                                }
                            }
                        }

                        {
                            var withBlock14 = Commands.SelectedUnit;
                            if (withBlock14.Status == "出撃" && withBlock14.x < Map.MapWidth)
                            {
                                if (Map.MapDataForUnit[withBlock14.x + 1, withBlock14.y] is object)
                                {
                                    Commands.SelectedTarget = Map.MapDataForUnit[withBlock14.x + 1, withBlock14.y];
                                    Event.HandleEvent("接触", withBlock14.MainPilot().ID, Map.MapDataForUnit[withBlock14.x + 1, withBlock14.y].MainPilot().ID);
                                    if (IsScenarioFinished)
                                    {
                                        return;
                                    }
                                }
                            }
                        }

                        {
                            var withBlock15 = Commands.SelectedUnit;
                            if (withBlock15.Status == "出撃" && withBlock15.y > 1)
                            {
                                if (Map.MapDataForUnit[withBlock15.x, withBlock15.y - 1] is object)
                                {
                                    Commands.SelectedTarget = Map.MapDataForUnit[withBlock15.x, withBlock15.y - 1];
                                    Event.HandleEvent("接触", withBlock15.MainPilot().ID, Map.MapDataForUnit[withBlock15.x, withBlock15.y - 1].MainPilot().ID);
                                    if (IsScenarioFinished)
                                    {
                                        return;
                                    }
                                }
                            }
                        }

                        {
                            var withBlock16 = Commands.SelectedUnit;
                            if (withBlock16.Status == "出撃" && withBlock16.y < Map.MapHeight)
                            {
                                if (Map.MapDataForUnit[withBlock16.x, withBlock16.y + 1] is object)
                                {
                                    Commands.SelectedTarget = Map.MapDataForUnit[withBlock16.x, withBlock16.y + 1];
                                    Event.HandleEvent("接触", withBlock16.MainPilot().ID, Map.MapDataForUnit[withBlock16.x, withBlock16.y + 1].MainPilot().ID);
                                    if (IsScenarioFinished)
                                    {
                                        return;
                                    }
                                }
                            }
                        }

                        // 進入イベント
                        {
                            var withBlock17 = Commands.SelectedUnit;
                            if (withBlock17.Status == "出撃")
                            {
                                Event.HandleEvent("進入", withBlock17.MainPilot().ID, "" + withBlock17.x, "" + withBlock17.y);
                                if (IsScenarioFinished)
                                {
                                    return;
                                }
                            }
                        }

                        // 行動終了イベント
                        {
                            var withBlock18 = Commands.SelectedUnit;
                            if (withBlock18.Status == "出撃")
                            {
                                Event.HandleEvent("行動終了", withBlock18.MainPilot().ID);
                                if (IsScenarioFinished)
                                {
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
Exemple #11
0
        // 陣営upartyのフェイズを実行
        public void StartTurn(string uparty)
        {
            // TODO Impl StartTurn
            Stage         = uparty;
            Sound.BossBGM = false;
            if (uparty == "味方")
            {
                do
                {
                    // 味方フェイズ
                    Stage = "味方";

                    // ターン数を進める
                    if (!Map.IsStatusView)
                    {
                        Turn      = Turn + 1;
                        TotalTurn = TotalTurn + 1;
                    }

                    // 状態回復
                    foreach (var currentUnit in UList.Items)
                    {
                        Commands.SelectedUnit = currentUnit;
                        switch (currentUnit.Status)
                        {
                        case "出撃":
                        case "格納":
                        {
                            if ((currentUnit.Party ?? "") == (uparty ?? ""))
                            {
                                if (Map.IsStatusView)
                                {
                                    currentUnit.UsedAction = 0;
                                }
                                else
                                {
                                    currentUnit.Rest();
                                }

                                if (IsScenarioFinished)
                                {
                                    GUI.UnlockGUI();
                                    return;
                                }
                            }
                            else
                            {
                                currentUnit.UsedAction = 0;
                            }

                            break;
                        }

                        case "旧主形態":
                        case "旧形態":
                        {
                            currentUnit.UsedAction = 0;
                            break;
                        }
                        }
                    }

                    // 味方が敵にかけたスペシャルパワーを解除
                    foreach (var currentU in UList.Items)
                    {
                        switch (currentU.Status)
                        {
                        case "出撃":
                        case "格納":
                        {
                            currentU.RemoveSpecialPowerInEffect("敵ターン");
                            break;
                        }
                        }
                    }

                    GUI.RedrawScreen();

                    // 味方フェイズ用BGMを演奏
                    if (!Map.IsStatusView)
                    {
                        var terrain = Map.Terrain(1, 1);
                        switch (terrain?.Class ?? "")
                        {
                        case "屋内":
                            Sound.StartBGM(Sound.BGMName("Map3"));
                            break;

                        case "宇宙":
                            Sound.StartBGM(Sound.BGMName("Map5"));
                            break;

                        default:
                            if (terrain?.Name == "壁")
                            {
                                Sound.StartBGM(Sound.BGMName("Map3"));
                            }
                            else
                            {
                                Sound.StartBGM(Sound.BGMName("Map1"));
                            }
                            break;
                        }
                    }

                    // ターンイベント
                    Event.IsUnitCenter = false;
                    Event.HandleEvent("ターン", Turn.ToString(), "味方");
                    if (IsScenarioFinished)
                    {
                        GUI.UnlockGUI();
                        return;
                    }

                    // 操作可能なユニットがいるかどうかチェック
                    if (UList.Items.Count(x => x.Party == "味方" && x.CanAction) > 0 ||
                        Expression.IsOptionDefined("味方フェイズ強制発動"))
                    {
                        break;
                    }

                    // CPUが操作するユニットがいるかどうかチェック
                    if (UList.Items.Count(x => x.Party != "味方" && x.Status == "出撃") > 0)
                    {
                        break;
                    }

                    // 敵フェイズ
                    StartTurn("敵");
                    if (IsScenarioFinished)
                    {
                        IsScenarioFinished = false;
                        return;
                    }

                    // 中立フェイズ
                    StartTurn("中立");
                    if (IsScenarioFinished)
                    {
                        IsScenarioFinished = false;
                        return;
                    }

                    // NPCフェイズ
                    StartTurn("NPC");
                    if (IsScenarioFinished)
                    {
                        IsScenarioFinished = false;
                        return;
                    }
                }while (true);
            }
            else
            {
                // 味方フェイズ以外

                // 状態回復
                foreach (var currentUnit in UList.Items)
                {
                    Commands.SelectedUnit = currentUnit;
                    switch (currentUnit.Status)
                    {
                    case "出撃":
                    case "格納":
                    {
                        if ((currentUnit.Party ?? "") == (uparty ?? ""))
                        {
                            currentUnit.Rest();
                            if (IsScenarioFinished)
                            {
                                GUI.UnlockGUI();
                                return;
                            }
                        }
                        else
                        {
                            currentUnit.UsedAction = 0;
                        }

                        break;
                    }

                    case "旧主形態":
                    case "旧形態":
                    {
                        currentUnit.UsedAction = 0;
                        break;
                    }
                    }
                }

                // 敵ユニットが味方にかけたスペシャルパワーを解除
                foreach (var currentUnit in UList.Items)
                {
                    switch (currentUnit.Status)
                    {
                    case "出撃":
                    case "格納":
                    {
                        currentUnit.RemoveSpecialPowerInEffect("敵ターン");
                        break;
                    }
                    }
                }

                GUI.RedrawScreen();

                // 敵(NPC)フェイズ用BGMを演奏
                var terrain = Map.Terrain(1, 1);
                if (Stage == "NPC")
                {
                    switch (terrain?.Class ?? "")
                    {
                    case "屋内":
                        Sound.StartBGM(Sound.BGMName("Map3"));
                        break;

                    case "宇宙":
                        Sound.StartBGM(Sound.BGMName("Map5"));
                        break;

                    default:
                        if (terrain?.Name == "壁")
                        {
                            Sound.StartBGM(Sound.BGMName("Map3"));
                        }
                        else
                        {
                            Sound.StartBGM(Sound.BGMName("Map1"));
                        }
                        break;
                    }
                }
                else
                {
                    switch (terrain?.Class ?? "")
                    {
                    case "屋内":
                        Sound.StartBGM(Sound.BGMName("Map4"));
                        break;

                    case "宇宙":
                        Sound.StartBGM(Sound.BGMName("Map6"));
                        break;

                    default:
                        if (terrain?.Name == "壁")
                        {
                            Sound.StartBGM(Sound.BGMName("Map4"));
                        }
                        else
                        {
                            Sound.StartBGM(Sound.BGMName("Map2"));
                        }
                        break;
                    }
                }

                // ターンイベント
                Event.HandleEvent("ターン", Turn.ToString(), uparty);
                if (IsScenarioFinished)
                {
                    GUI.UnlockGUI();
                    return;
                }
            }

            int  max_lv;
            Unit max_unit = null;

            if (uparty == "味方")
            {
                // 味方フェイズのプレイヤーによるユニット操作前の処理

                // ターン数を表示
                if (Turn > 1 && Expression.IsOptionDefined("デバッグ"))
                {
                    GUI.DisplayTelop("ターン" + SrcFormatter.Format(Turn));
                }

                // 通常のステージでは母艦ユニットまたはレベルがもっとも高い
                // ユニットを中央に配置
                if (!Map.IsStatusView && !Event.IsUnitCenter)
                {
                    foreach (Unit currentUnit in UList.Items)
                    {
                        if (currentUnit.Party == "味方" && currentUnit.Status == "出撃" && currentUnit.Action > 0)
                        {
                            if (currentUnit.IsFeatureAvailable("母艦"))
                            {
                                GUI.Center(currentUnit.x, currentUnit.y);
                                GUIStatus.DisplayUnitStatus(currentUnit);
                                GUI.RedrawScreen();
                                GUI.UnlockGUI();
                                return;
                            }
                        }
                    }

                    max_lv = 0;
                    foreach (Unit cuttentUnit in UList.Items)
                    {
                        if (cuttentUnit.Party == "味方" && cuttentUnit.Status == "出撃")
                        {
                            if (cuttentUnit.MainPilot().Level > max_lv)
                            {
                                max_unit = cuttentUnit;
                                max_lv   = cuttentUnit.MainPilot().Level;
                            }
                        }
                    }

                    if (max_unit != null)
                    {
                        GUI.Center(max_unit.x, max_unit.y);
                    }
                }

                // ステータスを表示
                if (!Map.IsStatusView)
                {
                    GUIStatus.DisplayGlobalStatus();
                }

                // プレイヤーによる味方ユニット操作に移行
                GUI.RedrawScreen();
                GUI.UnlockGUI();
                return;
            }

            GUI.LockGUI();

            CPUOperation(uparty);

            if (IsScenarioFinished)
            {
                return;
            }

            // ステータスウィンドウの表示を消去
            GUIStatus.ClearUnitStatus();
        }
Exemple #12
0
        // イベントファイルfnameを実行
        public void StartScenario(string fname)
        {
            // ファイルを検索
            if (!Path.IsPathRooted(fname))
            {
                fname = new string[]
                {
                    FileSystem.PathCombine(ScenarioPath, fname),
                    FileSystem.PathCombine(AppPath, fname),
                }.FirstOrDefault(x => FileSystem.FileExists(x)) ?? fname;
            }

            if (!FileSystem.FileExists(fname))
            {
                GUI.ErrorMessage(fname + "が見つかりません");
                TerminateSRC();
            }

            //// ウィンドウのタイトルを設定
            //if (My.MyProject.Application.Info.Version.Minor % 2 == 0)
            //{
            //    GUI.MainForm.Text = "SRC";
            //}
            //else
            //{
            //    GUI.MainForm.Text = "SRC開発版";
            //}

            ScenarioFileName = fname;
            //if (!IsSubStage)
            //{
            //    // UPGRADE_WARNING: Dir に新しい動作が指定されています。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' をクリックしてください。
            //    if (Strings.Len(FileSystem.Dir(ScenarioPath + "Date", FileAttribute.Directory)) > 0)
            //    {
            //        GUI.ErrorMessage("シナリオ側のDataフォルダ名がDateになっています。" + Constants.vbCr + Constants.vbLf + ScenarioPath + "Date" + Constants.vbCr + Constants.vbLf + "フォルダ名をDataに直してください。");
            //        TerminateSRC();
            //    }
            //    // UPGRADE_WARNING: Dir に新しい動作が指定されています。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' をクリックしてください。
            //    if (Strings.Len(FileSystem.Dir(ScenarioPath + "Data", FileAttribute.Directory)) > 0)
            //    {
            //        GUI.ErrorMessage("シナリオ側のDataフォルダ名が全角文字になっています。" + Constants.vbCr + Constants.vbLf + ScenarioPath + "Data" + Constants.vbCr + Constants.vbLf + "フォルダ名を半角文字に直してください。");
            //        TerminateSRC();
            //    }
            //    // UPGRADE_WARNING: Dir に新しい動作が指定されています。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' をクリックしてください。
            //    if (Strings.Len(FileSystem.Dir(ScenarioPath + "Bitmap", FileAttribute.Directory)) > 0)
            //    {
            //        GUI.ErrorMessage("シナリオ側のBitmapフォルダ名が全角文字になっています。" + Constants.vbCr + Constants.vbLf + ScenarioPath + "Bitmap" + Constants.vbCr + Constants.vbLf + "フォルダ名を半角文字に直してください。");
            //        TerminateSRC();
            //    }
            //    // UPGRADE_WARNING: Dir に新しい動作が指定されています。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' をクリックしてください。
            //    if (Strings.Len(FileSystem.Dir(ScenarioPath + "Lib", FileAttribute.Directory)) > 0)
            //    {
            //        GUI.ErrorMessage("シナリオ側のLibフォルダ名が全角文字になっています。" + Constants.vbCr + Constants.vbLf + ScenarioPath + "Lib" + Constants.vbCr + Constants.vbLf + "フォルダ名を半角文字に直してください。");
            //        TerminateSRC();
            //    }
            //    // UPGRADE_WARNING: Dir に新しい動作が指定されています。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' をクリックしてください。
            //    if (Strings.Len(FileSystem.Dir(ScenarioPath + "Midi", FileAttribute.Directory)) > 0)
            //    {
            //        GUI.ErrorMessage("シナリオ側のMidiフォルダ名が全角文字になっています。" + Constants.vbCr + Constants.vbLf + ScenarioPath + "Midi" + Constants.vbCr + Constants.vbLf + "フォルダ名を半角文字に直してください。");
            //        TerminateSRC();
            //    }
            //    // UPGRADE_WARNING: Dir に新しい動作が指定されています。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' をクリックしてください。
            //    if (Strings.Len(FileSystem.Dir(ScenarioPath + "Sound", FileAttribute.Directory)) > 0)
            //    {
            //        GUI.ErrorMessage("シナリオ側のSoundフォルダ名が全角文字になっています。" + Constants.vbCr + Constants.vbLf + ScenarioPath + "Sound" + Constants.vbCr + Constants.vbLf + "フォルダ名を半角文字に直してください。");
            //        TerminateSRC();
            //    }

            //    // 読み込むイベントファイル名に合わせて各種システム変数を設定
            //    if (!Expression.IsGlobalVariableDefined("次ステージ"))
            //    {
            //        Expression.DefineGlobalVariable("次ステージ");
            //    }

            //    Expression.SetVariableAsString("次ステージ", "");
            //    var loopTo = Strings.Len(fname);
            //    for (i = 1; i <= loopTo; i++)
            //    {
            //        if (Strings.Mid(fname, Strings.Len(fname) - i + 1, 1) == @"\")
            //        {
            //            break;
            //        }
            //    }

            //    Expression.SetVariableAsString("ステージ", Strings.Mid(fname, Strings.Len(fname) - i + 2));
            //    if (!Expression.IsGlobalVariableDefined("セーブデータファイル名"))
            //    {
            //        Expression.DefineGlobalVariable("セーブデータファイル名");
            //    }

            //    Expression.SetVariableAsString("セーブデータファイル名", Strings.Mid(fname, Strings.Len(fname) - i + 2, i - 5) + "までクリア.src");

            //    // ウィンドウのタイトルにシナリオファイル名を表示
            //    GUI.MainForm.Text = GUI.MainForm.Text + " - " + Strings.Mid(fname, Strings.Len(fname) - i + 2, i - 5);
            //}

            // 画面をクリアしておく
            GUI.ClearScrean();

            // イベントデータの読み込み
            Event.LoadEventData(fname, "");

            // 各種変数の初期化
            Turn = 0;
            IsScenarioFinished         = false;
            GUI.IsPictureVisible       = false;
            GUI.IsCursorVisible        = false;
            LastSaveDataFileName       = "";
            IsRestartSaveDataAvailable = false;
            IsQuickSaveDataAvailable   = false;
            Commands.CommandState      = "ユニット選択";
            //Commands.SelectedPartners.Clear();

            //// フォント設定をデフォルトに戻す
            //{
            //    var withBlock1 = GUI.MainForm.picMain(0);
            //    withBlock1.ForeColor = Information.RGB(255, 255, 255);
            //    if (withBlock1.Font.Name != "MS P明朝")
            //    {
            //        sf = (Font)Control.DefaultFont.Clone();
            //        sf = SrcFormatter.FontChangeName(sf, "MS P明朝");
            //        withBlock1.Font = sf;
            //    }
            //    withBlock1.Font.Size = 16;
            //    withBlock1.Font.Bold = true;
            //    withBlock1.Font.Italic = false;
            //    GUI.PermanentStringMode = false;
            //    GUI.KeepStringMode = false;
            //}

            //// 描画の基準座標位置をリセット
            //Event.ResetBasePoint();

            //// メモリを消費し過ぎないようにユニット画像をクリア
            //if (!IsSubStage)
            //{
            //    UList.ClearUnitBitmap();
            //}

            GUI.LockGUI();
            //if (Map.MapWidth == 1)
            //{
            //    Map.SetMapSize(15, 15);
            //}

            // プロローグ
            Stage = "プロローグ";
            if (!IsSubStage && Event.IsEventDefined("プロローグ", true))
            {
                Sound.StopBGM();
                Sound.StartBGM(Sound.BGMName("Briefing"), true);
            }

            Event.HandleEvent("プロローグ");
            if (IsScenarioFinished)
            {
                IsScenarioFinished = false;
                GUI.UnlockGUI();
                return;
            }

            if (!Event.IsEventDefined("スタート"))
            {
                GUI.ErrorMessage("スタートイベントが定義されていません");
                TerminateSRC();
            }

            GUI.IsPictureVisible = false;
            GUI.IsCursorVisible  = false;
            Stage = "味方";
            Sound.StopBGM();

            // リスタート用にデータをセーブ
            // XXX パスセパレータマッチ
            if (Strings.InStr(fname, @"\Lib\ユニットステータス表示.eve") == 0 &&
                Strings.InStr(fname, @"\Lib\パイロットステータス表示.eve") == 0)
            {
                DumpData(Path.Combine(ScenarioPath, "_リスタート.srcq"), SRCSaveKind.Restart);
            }

            // スタートイベントが始まった場合は通常のステージとみなす
            IsSubStage = false;
            GUIStatus.ClearUnitStatus();
            if (!GUI.MainFormVisible)
            {
                GUI.MainFormShow();
                //GUI.MainForm.Refresh();
            }

            GUI.RedrawScreen();

            // スタートイベント
            Event.HandleEvent("スタート");
            if (IsScenarioFinished)
            {
                IsScenarioFinished = false;
                GUI.UnlockGUI();
                return;
            }

            GUI.IsPictureVisible = false;
            GUI.IsCursorVisible  = false;

            // クイックロードを無効にする
            IsQuickSaveDataAvailable = false;
            StartTurn("味方");
        }