internal override void Changed(bool e)
 {
     BSCollapseEvent = new BSCollapseEvent()
     {
         Target = this
     };
     if (e)
     {
         ShowEvent.InvokeAsync(BSCollapseEvent);
         EventQue.Add(ShownEvent);
     }
     else
     {
         if (IsNavbar && Navbar != null)
         {
             if (Navbar.HasCollapsed == false)
             {
                 Navbar.HasCollapsed = true;
                 Navbar.Visable      = false;
             }
         }
         HideEvent.InvokeAsync(BSCollapseEvent);
         EventQue.Add(HiddenEvent);
     }
 }
Exemplo n.º 2
0
 protected override async Task OnAfterRenderAsync()
 {
     // Sets Focus inside model so escape key can work.
     if (JustOpened)
     {
         await new BlazorStrapInterop(JSRuntime).ChangeBody(_isOpen ? "modal-open" : null);
         await new BlazorStrapInterop(JSRuntime).ChangeBodyModal(_isOpen ? "17px" : null);
         if (!IgnoreEscape)
         {
             await new BlazorStrapInterop(JSRuntime).ModalEscapeKey();
             BlazorStrapInterop.OnEscapeEvent += OnEscape;
         }
         JustOpened = false;
     }
     else if (Closed)
     {
         Closed = false;
         await new BlazorStrapInterop(JSRuntime).ChangeBody(_isOpen ? "modal-open" : null);
         await new BlazorStrapInterop(JSRuntime).ChangeBodyModal(_isOpen ? "17px" : null);
     }
     for (int i = 0; i < EventQue.Count; i++)
     {
         await EventQue[i].InvokeAsync(BSModalEvent);
         EventQue.RemoveAt(i);
     }
 }
Exemplo n.º 3
0
        internal override async Task Changed(bool e)
        {
            Collapsing = true;

            BSCollapseEvent = new BSCollapseEvent()
            {
                Target = this
            };
            if (e)
            {
                await ShowEvent.InvokeAsync(BSCollapseEvent).ConfigureAwait(false);

                EventQue.Add(ShownEvent);
            }
            else
            {
                if (IsNavbar && Navbar != null)
                {
                    if (Navbar.HasCollapsed == false)
                    {
                        Navbar.HasCollapsed = true;
                        Navbar.Visible      = false;
                    }
                }
                await HideEvent.InvokeAsync(BSCollapseEvent).ConfigureAwait(false);

                EventQue.Add(HiddenEvent);
            }
        }
Exemplo n.º 4
0
        // イベントデータの消去
        // ただしグローバル変数のデータは残しておく
        public void ClearEventData()
        {
            SelectedUnitForEvent   = null;
            SelectedTargetForEvent = null;
            // XXX 消し方。。。
            EventData = EventData.Where(x => x.IsSystemData).ToList();
            colNormalLabelList.Clear();
            var maxEventId = EventData.Max(x => x.ID);

            foreach (var label in colEventLabelList.List.Where(x => x.EventDataId > maxEventId).ToList())
            {
                colEventLabelList.Remove(label);
            }

            EventQue.Clear();
            CallDepth            = 0;
            ArgIndex             = 0;
            VarIndex             = -1;
            ForIndex             = 0;
            UpVarLevel           = 0;
            HotPointList         = new HotPoint[1];
            ObjColor             = Color.White;
            ObjFillColor         = Color.White;
            ObjFillStyle         = FillStyle.VbFSTransparent;
            ObjDrawWidth         = 1;
            ObjDrawOption        = "";
            GUI.IsPictureVisible = false;
            GUI.IsCursorVisible  = false;
            GUI.PaintedAreaX1    = GUI.MainPWidth;
            GUI.PaintedAreaY1    = GUI.MainPHeight;
            GUI.PaintedAreaX2    = -1;
            GUI.PaintedAreaY2    = -1;
            LocalVariableList.Clear();
        }
 protected override Task OnAfterRenderAsync()
 {
     for (int i = 0; i < EventQue.Count; i++)
     {
         EventQue[i].InvokeAsync(BSCollapseEvent);
         EventQue.RemoveAt(i);
     }
     return(base.OnAfterRenderAsync());
 }
Exemplo n.º 6
0
 protected override Task OnAfterRenderAsync(bool firstrun)
 {
     for (var i = 0; i < EventQue.Count; i++)
     {
         EventQue[i].InvokeAsync(BSCollapseEvent);
         EventQue.RemoveAt(i);
     }
     return(base.OnAfterRenderAsync(false));
 }
Exemplo n.º 7
0
 protected override async Task OnAfterRenderAsync(bool firstrun)
 {
     for (var i = 0; i < EventQue.Count; i++)
     {
         await EventQue[i].InvokeAsync(BSCollapseEvent).ConfigureAwait(false);
         EventQue.RemoveAt(i);
     }
     // return base.OnAfterRenderAsync(false);
 }
Exemplo n.º 8
0
 protected void OnClick()
 {
     IsOpen = false;
     OnDismiss.InvokeAsync(EventCallback.Empty);
     BSAlertEvent = new BSAlertEvent()
     {
         Target = this
     };
     CloseEvent.InvokeAsync(BSAlertEvent);
     EventQue.Add(ClosedEvent);
 }
Exemplo n.º 9
0
        protected override Task OnAfterRenderAsync(bool firstrun)
        {
            // This is models like the demo where they are open prior to the page drawing.
            if (firstrun)
            {
                _isInitialized = true;
            }
            for (var i = 0; i < EventQue.Count; i++)
            {
                EventQue[i].InvokeAsync(BSModalEvent);
                EventQue.RemoveAt(i);
            }

            return(base.OnAfterRenderAsync(false));
        }
Exemplo n.º 10
0
 internal override void Changed(bool e)
 {
     BSDropdownEvent = new BSDropdownEvent()
     {
         Target = this
     };
     if (e)
     {
         ShowEvent.InvokeAsync(BSDropdownEvent);
         EventQue.Add(ShownEvent);
     }
     else
     {
         HideEvent.InvokeAsync(BSDropdownEvent);
         EventQue.Add(HiddenEvent);
     }
 }
Exemplo n.º 11
0
 internal override void Changed(bool e)
 {
     BSModalEvent = new BSModalEvent()
     {
         Target = this
     };
     if (e)
     {
         ShowEvent.InvokeAsync(BSModalEvent);
         EventQue.Add(ShownEvent);
     }
     else
     {
         Closed = true;
         HideEvent.InvokeAsync(BSModalEvent);
         EventQue.Add(HiddenEvent);
     }
 }
Exemplo n.º 12
0
 protected override async Task OnAfterRenderAsync(bool firstrun)
 {
     if (Collapsing)
     {
         if (firstrun && Collapsing)
         {
             Collapsing = false;
             await InvokeAsync(StateHasChanged).ConfigureAwait(false);
         }
         else
         {
             await new BlazorStrapInterop(JSRuntime).SetOffsetHeight(MyRef, IsOpen ?? false);
         }
     }
     for (var i = 0; i < EventQue.Count; i++)
     {
         EventQue[i].InvokeAsync(BSCollapseEvent);
         EventQue.RemoveAt(i);
     }
     // return base.OnAfterRenderAsync(false);
 }
Exemplo n.º 13
0
 protected override async Task OnAfterRenderAsync(bool firstrun)
 {
     if (!HasRendered)
     {
         HasRendered = true;
     }
     else
     {
         // This try can be removed after they fix prerendering
         try
         {
             // Sets Focus inside model so escape key can work.
             if (JustOpened)
             {
                 await new BlazorStrapInterop(JSRuntime).ChangeBody(_isOpen ? "modal-open" : null);
                 await new BlazorStrapInterop(JSRuntime).ChangeBodyModal(_isOpen ? "17px" : null);
                 if (!IgnoreEscape)
                 {
                     await new BlazorStrapInterop(JSRuntime).ModalEscapeKey();
                     BlazorStrapInterop.OnEscapeEvent += OnEscape;
                 }
                 JustOpened = false;
             }
             else if (Closed)
             {
                 Closed = false;
                 await new BlazorStrapInterop(JSRuntime).ChangeBody(_isOpen ? "modal-open" : null);
                 await new BlazorStrapInterop(JSRuntime).ChangeBodyModal(_isOpen ? "17px" : null);
             }
             for (int i = 0; i < EventQue.Count; i++)
             {
                 await EventQue[i].InvokeAsync(BSModalEvent);
                 EventQue.RemoveAt(i);
             }
         }
         catch
         {
         }
     }
 }
Exemplo n.º 14
0
        // イベントを登録しておき、後で実行
        public void RegisterEvent(params string[] Args)
        {
            var item = string.Join(" ", Args);

            EventQue.Enqueue(item);
        }
Exemplo n.º 15
0
        // イベントの実行
        public void HandleEvent(params string[] Args)
        {
            SRC.LogDebug(">", Args);

            // 画面入力をロック
            var prev_is_gui_locked = GUI.IsGUILocked;

            if (!GUI.IsGUILocked)
            {
                GUI.LockGUI();
            }

            // 現在選択されているユニット&ターゲットをイベント用に設定
            // (SearchLabel()実行時の式計算用にあらかじめ設定しておく)
            SelectedUnitForEvent = Commands.SelectedUnit;
            // 引数に指定されたユニットを優先
            if (Args.Length > 1)
            {
                if (SRC.PList.IsDefined(Args[1]))
                {
                    var p = SRC.PList.Item(Args[1]);
                    if (p.Unit is object)
                    {
                        SelectedUnitForEvent = p.Unit;
                    }
                }
            }
            SelectedTargetForEvent = Commands.SelectedTarget;

            // イベントキューを作成
            // XXX キューをいつ処理しきるのか?
            //event_que_idx = Information.UBound(EventQue);
            switch (Args[0])
            {
            case "プロローグ":
            {
                EventQue.Enqueue("プロローグ");
                SRC.Stage = "プロローグ";
                break;
            }

            case "エピローグ":
            {
                EventQue.Enqueue("エピローグ");
                SRC.Stage = "エピローグ";
                break;
            }

            case "破壊":
            {
                EventQue.Enqueue("破壊 " + Args[1]);
                var p      = SRC.PList.Item(Args[1]);
                var uparty = p.Party;
                if (p.Unit != null)
                {
                    var u = p.Unit;
                    // 格納されていたユニットも破壊しておく
                    while (u.CountUnitOnBoard() > 0)
                    {
                        var onBoardUnit = u.UnitOnBoards.First();
                        onBoardUnit.UnloadUnit(onBoardUnit.ID);
                        onBoardUnit.Status = "破壊";
                        onBoardUnit.HP     = 0;
                        EventQue.Enqueue("マップ攻撃破壊 " + onBoardUnit.MainPilot().ID);
                    }
                    uparty = u.Party0;
                }

                // 全滅の判定
                var flag = false;
                foreach (Unit currentU in SRC.UList.Items)
                {
                    if ((currentU.Party0 ?? "") == (uparty ?? "") &&
                        currentU.Status == "出撃" &&
                        !currentU.IsConditionSatisfied("憑依"))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    EventQue.Enqueue("全滅 " + uparty);
                }
                break;
            }

            case "マップ攻撃破壊":
            {
                EventQue.Enqueue("マップ攻撃破壊 " + Args[1]);
                var p      = SRC.PList.Item(Args[1]);
                var uparty = p.Party;
                if (p.Unit != null)
                {
                    var u = p.Unit;
                    // 格納されていたユニットも破壊しておく
                    while (u.CountUnitOnBoard() > 0)
                    {
                        var onBoardUnit = u.UnitOnBoards.First();
                        onBoardUnit.UnloadUnit(onBoardUnit.ID);
                        onBoardUnit.Status = "破壊";
                        onBoardUnit.HP     = 0;
                        EventQue.Enqueue("マップ攻撃破壊 " + onBoardUnit.MainPilot().ID);
                    }
                    uparty = u.Party0;
                }

                // XXX 全滅の処理どこでやってんの?

                break;
            }

            case "ターン":
                EventQue.Enqueue(string.Join(" ", "ターン ", "全", Args[2]));
                EventQue.Enqueue(string.Join(" ", "ターン ", Args[1], Args[2]));
                break;

            case "損傷率":
                EventQue.Enqueue(string.Join(" ", "損傷率", Args[1], Args[2]));
                break;

            case "攻撃":
                EventQue.Enqueue(string.Join(" ", "攻撃", Args[1], Args[2]));
                break;

            case "攻撃後":
                EventQue.Enqueue(string.Join(" ", "攻撃後", Args[1], Args[2]));
                break;

            case "会話":
                EventQue.Enqueue(string.Join(" ", "会話", Args[1], Args[2]));
                break;

            case "接触":
                EventQue.Enqueue(string.Join(" ", "接触", Args[1], Args[2]));
                break;

            case "進入":
                EventQue.Enqueue(string.Join(" ", "進入", Args[1], Args[2], Args[3]));
                EventQue.Enqueue(string.Join(" ", "進入", Args[1], Map.Terrain(Conversions.ToInteger(Args[2]), Conversions.ToInteger(Args[3])).Name));
                if (Conversions.ToInteger(Args[2]) == 1)
                {
                    EventQue.Enqueue(string.Join(" ", "脱出", Args[1], "W"));
                }
                else if (Conversions.ToInteger(Args[2]) == Map.MapWidth)
                {
                    EventQue.Enqueue(string.Join(" ", "脱出", Args[1], "E"));
                }
                else if (Conversions.ToInteger(Args[3]) == 1)
                {
                    EventQue.Enqueue(string.Join(" ", "脱出", Args[1], "N"));
                }
                else if (Conversions.ToInteger(Args[3]) == Map.MapHeight)
                {
                    EventQue.Enqueue(string.Join(" ", "脱出", Args[1], "S"));
                }
                break;

            case "収納":
                EventQue.Enqueue(string.Join(" ", "収納", Args[1]));
                break;

            case "使用":
                EventQue.Enqueue(string.Join(" ", "使用", Args[1], Args[2]));
                break;

            case "使用後":
                EventQue.Enqueue(string.Join(" ", "使用後", Args[1], Args[2]));
                break;

            case "行動終了":
                EventQue.Enqueue(string.Join(" ", "行動終了", Args[1]));
                break;

            case "ユニットコマンド":
                var cmd1 = string.Join(" ", "ユニットコマンド", Args[1], Args[2]);
                if (IsEventDefined(cmd1))
                {
                    EventQue.Enqueue(cmd1);
                }
                else
                {
                    var cmd2 = string.Join(" ", "ユニットコマンド", Args[1], SRC.PList.Item(Args[2]).Unit.Name);
                    EventQue.Enqueue(cmd2);
                }
                break;

            default:
                EventQue.Enqueue(string.Join(" ", Args));
                break;
            }

            if (CallDepth > MaxCallDepth)
            {
                GUI.ErrorMessage("サブルーチンの呼び出し階層が" + SrcFormatter.Format(MaxCallDepth) + "を超えているため、イベントの処理が出来ません");
                CallDepth = MaxCallDepth;
                return;
            }

            // 現在の状態を保存
            ArgIndexStack[CallDepth] = ArgIndex;
            VarIndexStack[CallDepth] = VarIndex;
            ForIndexStack[CallDepth] = ForIndex;
            SaveBasePoint();

            // 呼び出し階層数をインクリメント
            var prev_call_depth = CallDepth;

            CallDepth = (CallDepth + 1);

            // 各イベントを発生させる
            // XXX キューのスキップすんの?
            //i = event_que_idx;
            SRC.IsCanceled = false;
            while (EventQue.Count > 0)
            {
                var eventItem = EventQue.Dequeue();
                SRC.LogDebug("EventQue.Dequeue", eventItem);

                // 前のイベントで他のユニットが出現している可能性があるので
                // 本当に全滅したのか判定
                if (GeneralLib.LIndex(eventItem, 1) == "全滅")
                {
                    var uparty = GeneralLib.LIndex(eventItem, 2);
                    if (SRC.UList.Items.Any(u => u.Party0 == uparty &&
                                            u.Status == "出撃" &&
                                            !u.IsConditionSatisfied("憑依")))
                    {
                        continue;
                    }
                }

                CurrentLabel = -1;
                var ret             = -1;
                var main_event_done = false;
                while (true)
                {
                    // 現在選択されているユニット&ターゲットをイベント用に設定
                    // SearchLabel()で入れ替えられる可能性があるので、毎回設定し直す必要あり
                    SelectedUnitForEvent = Commands.SelectedUnit;
                    // 引数に指定されたユニットを優先
                    if (Args.Length > 1)
                    {
                        if (SRC.PList.IsDefined(Args[1]))
                        {
                            var p = SRC.PList.Item(Args[1]);
                            if (p.Unit is object)
                            {
                                SelectedUnitForEvent = p.Unit;
                            }
                        }
                    }
                    SelectedTargetForEvent = Commands.SelectedTarget;

                    // 実行するイベントラベルを探す
                    do
                    {
                        if (Information.IsNumeric(eventItem))
                        {
                            // 数値の場合はラベルの示す位置が指定されたとみなす
                            // (マップコマンド、ユニットコマンド)
                            if (CurrentLabel < 0)
                            {
                                ret = Conversions.ToInteger(eventItem);
                            }
                            else
                            {
                                ret = -1;
                            }
                        }
                        else
                        {
                            // 数値以外はラベルを探す
                            ret = SearchLabel(eventItem, CurrentLabel + 1);
                        }

                        // ラベルが見つからなければ終わり
                        if (ret < 0)
                        {
                            break;
                        }

                        CurrentLabel = ret;
                        if (!EventData[ret].IsAlwaysEventLabel)
                        {
                            // 常時イベントではないイベントは1度しか実行しない
                            if (main_event_done)
                            {
                                ret = -1;
                            }
                            else
                            {
                                main_event_done = true;
                            }
                        }
                    }while (ret < 0);

                    if (ret < 0)
                    {
                        break;
                    }

                    // 戦闘後のイベント実行前にはいくつかの後始末が必要
                    if (!EventData[ret].IsAlwaysEventLabel)
                    {
                        if (Args[0] == "破壊" ||
                            Args[0] == "損傷率" ||
                            Args[0] == "攻撃後" ||
                            Args[0] == "全滅")
                        {
                            // 画面をクリア
                            if (GUI.MainFormVisible)
                            {
                                Status.ClearUnitStatus();
                                GUI.RedrawScreen();
                            }

                            // メッセージウィンドウを閉じる
                            if (GUI.MessageFormVisible)
                            {
                                GUI.CloseMessageForm();
                            }
                        }
                    }

                    // ラベルの行は実行しても無駄なので
                    ret = ret + 1;
                    GUI.DoEvents();

                    // イベントの各コマンドを実行
                    do
                    {
                        CurrentLineNum = ret;
                        if (CurrentLineNum >= EventCmd.Count)
                        {
                            break;
                        }

                        ret = EventCmd[CurrentLineNum].Exec();
                    }while (ret > 0);

                    // ステージが終了 or キャンセル?
                    if (SRC.IsScenarioFinished || SRC.IsCanceled)
                    {
                        break;
                    }
                }
                // ステージが終了 or キャンセル?
                if (SRC.IsScenarioFinished || SRC.IsCanceled)
                {
                    break;
                }
            }
            ;

            if (CallDepth >= 0)
            {
                // 呼び出し階層数を元に戻す
                // (サブルーチン内でExitが呼ばれることがあるので単純に-1出来ない)
                CallDepth = prev_call_depth;

                // イベント実行前の状態に復帰
                ArgIndex = ArgIndexStack[CallDepth];
                VarIndex = VarIndexStack[CallDepth];
                ForIndex = ForIndexStack[CallDepth];
            }
            else
            {
                ArgIndex = 0;
                VarIndex = 0;
                ForIndex = 0;
            }

            //// イベントキューを元に戻す
            //Array.Resize(EventQue, GeneralLib.MinLng(event_que_idx - 1, Information.UBound(EventQue)) + 1);

            // フォント設定をデフォルトに戻す
            // XXX 位置はリセットしない?
            GUI.ResetDrawString();
            GUI.PermanentStringMode = false;
            GUI.KeepStringMode      = false;

            // オブジェクト色をデフォルトに戻す
            // XXX これはEventsが持ってていいのか?
            ObjColor      = Color.White;
            ObjFillColor  = Color.White;
            ObjFillStyle  = FillStyle.VbFSTransparent;
            ObjDrawWidth  = 1;
            ObjDrawOption = "";

            // 描画の基準座標位置を元に戻す
            RestoreBasePoint();

            // 画面入力のロックを解除
            if (!prev_is_gui_locked)
            {
                GUI.UnlockGUI();
            }
        }