Пример #1
0
        private static void P2_SetScreenSize(int w, int h)
        {
            LiteStatusDlg.StartDisplay("ゲーム画面の位置とサイズを調整しています...");

            foreach (DDSubScreen subScreen in DDSubScreenUtils.SubScreens)
            {
                subScreen.WasLoaded = subScreen.IsLoaded();
            }

            bool mdm = DDUtils.GetMouseDispMode();

            //DDDerivationUtils.UnloadAll(); // moved -> DDPictureUtils.UnloadAll
            DDPictureUtils.UnloadAll();
            DDSubScreenUtils.UnloadAll();
            DDFontUtils.UnloadAll();
            //DDSoundUtils.UnloadAll(); // 不要

            if (DX.SetGraphMode(w, h, 32) != DX.DX_CHANGESCREEN_OK)
            {
                throw new DDError();
            }

            DX.SetDrawScreen(DX.DX_SCREEN_BACK);             // DDSubScreenUtils.CurrDrawScreenHandle にするべきだが、このフレームだけの問題なので、無難なところで DX_SCREEN_BACK にしておく。
            DX.SetDrawMode(DDConsts.DEFAULT_DX_DRAWMODE);

            DDUtils.SetMouseDispMode(mdm);

            DDGround.SystemTasks.Delay(1, DDPictureUtils.TouchGlobally);             // ウィンドウ位置調整・初回描画を優先するため、遅延する。
            //DDPictureUtils.TouchGlobally(); // old
            //DDTouch.Touch(); // old
            DDSubScreenUtils.DrawDummyScreenAll();

            LiteStatusDlg.EndDisplayDelay();
        }
Пример #2
0
        public IDisposable Section()
        {
            DDSubScreen parentSubScreen = DDSubScreenUtils.CurrDrawScreen;

            this.ChangeDrawScreen();
            return(SCommon.GetAnonyDisposable(() => DDSubScreenUtils.ChangeDrawScreen(parentSubScreen)));
        }
Пример #3
0
        private static void P2_SetScreenSize(int w, int h)
        {
            LiteStatusDlg.StartDisplay("ゲーム画面の位置とサイズを調整しています...");

            bool mdm = DDUtils.GetMouseDispMode();

            //DDDerivationUtils.UnloadAll(); // moved -> DDPictureUtils.UnloadAll
            DDPictureUtils.UnloadAll();
            DDSubScreenUtils.UnloadAll();
            DDFontUtils.UnloadAll();
            //DDSoundUtils.UnloadAll(); // 不要

            if (DX.SetGraphMode(w, h, 32) != DX.DX_CHANGESCREEN_OK)
            {
                throw new DDError();
            }

            DX.SetDrawScreen(DX.DX_SCREEN_BACK);             // DDSubScreenUtils.CurrDrawScreenHandle にするべきだが、このフレームだけの問題なので、無難なところで DX_SCREEN_BACK にしておく。
            DX.SetDrawMode(DDConsts.DEFAULT_DX_DRAWMODE);

            DDUtils.SetMouseDispMode(mdm);

            DDTouch.Touch();
            DDSubScreenUtils.DrawDummyScreenAll();

            LiteStatusDlg.EndDisplayDelay();
        }
Пример #4
0
 public static void Touch()
 {
     UnloadLocally();
     DDCCResource.ClearAll();
     DDSubScreenUtils.UnloadAll(subScreen => subScreen != DDGround.MainScreen);
     DDFontUtils.UnloadAll();
     TouchGlobally();
 }
Пример #5
0
        private int Handle = -1;         // -1 == Unloaded

        public DDSubScreen(int w, int h, bool aFlag = false)
        {
            this.W      = w;
            this.H      = h;
            this.AFlag  = aFlag;
            this.Handle = -1;

            DDSubScreenUtils.Add(this);
        }
Пример #6
0
        public IDisposable Section()
        {
#if true // ネスト対応
            DDSubScreen parentSubScreen = DDSubScreenUtils.CurrDrawScreen;
            this.ChangeDrawScreen();
            return(SCommon.GetAnonyDisposable(() => DDSubScreenUtils.ChangeDrawScreen(parentSubScreen)));
#else // old -- ネスト未対応
            this.ChangeDrawScreen();
            return(SCommon.GetAnonyDisposable(() => DDSubScreenUtils.RestoreDrawScreen()));
#endif
        }
Пример #7
0
        public void Dispose()
        {
            if (this.W == -1)             // ? Already disposed
            {
                return;
            }

            DDSubScreenUtils.Remove(this);

            this.Unload();

            this.W     = -1;
            this.H     = -1;
            this.AFlag = false;

            this.Picture = null;
        }
Пример #8
0
        public static void EachFrame()
        {
            //Ground.EL.ExecuteAllTask();

            DDGround.EL.ExecuteAllTask();
            DDGround.SystemTasks.ExecuteAllTask();
            DispDebug();
            DDMouse.PosChanged_Delay();
            DDCurtain.EachFrame();

            if (!DDSEUtils.EachFrame())
            {
                DDMusicUtils.EachFrame();
            }

            DDSubScreenUtils.ChangeDrawScreen(DX.DX_SCREEN_BACK);

            if (DDGround.RealScreenDraw_W == -1)
            {
                bool mosaicFlag =
                    DDConfig.DrawScreen_MosaicFlag &&
                    DDGround.RealScreen_W % DDConsts.Screen_W == 0 &&
                    DDGround.RealScreen_H % DDConsts.Screen_H == 0;

                if (mosaicFlag)
                {
                    DX.SetDrawMode(DX.DX_DRAWMODE_NEAREST);
                }

                if (DX.DrawExtendGraph(0, 0, DDGround.RealScreen_W, DDGround.RealScreen_H, DDGround.MainScreen.GetHandle(), 0) != 0)                 // ? 失敗
                {
                    throw new DDError();
                }

                if (mosaicFlag)
                {
                    DX.SetDrawMode(DDConsts.DEFAULT_DX_DRAWMODE);                     // restore
                }
            }
            else
            {
                if (DX.DrawBox(0, 0, DDGround.RealScreen_W, DDGround.RealScreen_H, DX.GetColor(0, 0, 0), 1) != 0)                 // ? 失敗
                {
                    throw new DDError();
                }

                bool mosaicFlag =
                    DDConfig.DrawScreen_MosaicFlag &&
                    DDGround.RealScreenDraw_W % DDConsts.Screen_W == 0 &&
                    DDGround.RealScreenDraw_H % DDConsts.Screen_H == 0;

                if (mosaicFlag)
                {
                    DX.SetDrawMode(DX.DX_DRAWMODE_NEAREST);
                }

                if (DX.DrawExtendGraph(
                        DDGround.RealScreenDraw_L,
                        DDGround.RealScreenDraw_T,
                        DDGround.RealScreenDraw_L + DDGround.RealScreenDraw_W,
                        DDGround.RealScreenDraw_T + DDGround.RealScreenDraw_H, DDGround.MainScreen.GetHandle(), 0) != 0)                 // ? 失敗
                {
                    throw new DDError();
                }

                if (mosaicFlag)
                {
                    DX.SetDrawMode(DDConsts.DEFAULT_DX_DRAWMODE);                     // restore
                }
            }

            GC.Collect(0);

            FrameProcessingMillis = (int)(DDUtils.GetCurrTime() - FrameStartTime);

            if (FrameProcessingMillis_Worst < FrameProcessingMillis || !DDUtils.CountDown(ref FrameProcessingMillis_WorstFrame))
            {
                FrameProcessingMillis_Worst      = FrameProcessingMillis;
                FrameProcessingMillis_WorstFrame = 120;
            }

            // DxLib >

            DX.ScreenFlip();

            if (DX.CheckHitKey(DX.KEY_INPUT_ESCAPE) == 1 || DX.ProcessMessage() == -1)
            {
                throw new DDCoffeeBreak();
            }

            // < DxLib

            CheckHz();

            ProcFrame++;
            DDUtils.CountDown(ref FreezeInputFrame);
            WindowIsActive = DDUtils.IsWindowActive();

            if (SCommon.IMAX < ProcFrame)             // 192.9日程度でカンスト
            {
                ProcFrame = SCommon.IMAX;             // 2bs
                throw new DDError();
            }

            DDPad.EachFrame();
            DDKey.EachFrame();
            DDInput.EachFrame();
            DDMouse.EachFrame();

            // Swap MainScreen
            {
                DDSubScreen tmp = DDGround.MainScreen;
                DDGround.MainScreen     = DDGround.LastMainScreen;
                DDGround.LastMainScreen = tmp;
            }

            DDGround.MainScreen.ChangeDrawScreen();

            // ? ALT + ENTER -> フルスクリーン切り替え
            if ((1 <= DDKey.GetInput(DX.KEY_INPUT_LALT) || 1 <= DDKey.GetInput(DX.KEY_INPUT_RALT)) && DDKey.GetInput(DX.KEY_INPUT_RETURN) == 1)
            {
                // ? 現在フルスクリーン -> フルスクリーン解除
                if (
                    DDGround.RealScreen_W == DDGround.MonitorRect.W &&
                    DDGround.RealScreen_H == DDGround.MonitorRect.H
                    )
                {
                    DDMain.SetScreenSize(DDGround.UnfullScreen_W, DDGround.UnfullScreen_H);
                }
                else                 // ? 現在フルスクリーンではない -> フルスクリーンにする
                {
                    DDGround.UnfullScreen_W = DDGround.RealScreen_W;
                    DDGround.UnfullScreen_H = DDGround.RealScreen_H;

                    DDMain.SetFullScreen();
                }
                DDEngine.FreezeInput(30);                 // エンターキー押下がゲームに影響しないように
            }

            DX.ClearDrawScreen();
        }
Пример #9
0
 public void ChangeDrawScreen()
 {
     DDSubScreenUtils.ChangeDrawScreen(this);
 }