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(); }
public IDisposable Section() { DDSubScreen parentSubScreen = DDSubScreenUtils.CurrDrawScreen; this.ChangeDrawScreen(); return(SCommon.GetAnonyDisposable(() => DDSubScreenUtils.ChangeDrawScreen(parentSubScreen))); }
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(); }
public static void Touch() { UnloadLocally(); DDCCResource.ClearAll(); DDSubScreenUtils.UnloadAll(subScreen => subScreen != DDGround.MainScreen); DDFontUtils.UnloadAll(); TouchGlobally(); }
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); }
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 }
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; }
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(); }
public void ChangeDrawScreen() { DDSubScreenUtils.ChangeDrawScreen(this); }