OSDN Git Service

#36373 NowLoading画面 (#STAGEFILE) のFullHD画像対応。これに伴い、プレビュー表示や動画表示の拡大率や座標値の算出部分をリファクタしています。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 11 Jun 2016 02:56:48 +0000 (02:56 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Sat, 11 Jun 2016 02:56:48 +0000 (02:56 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@993 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelectPreimageパネル.cs
DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏AVI.cs
DTXManiaプロジェクト/コード/ステージ/08.結果/CActResultImage.cs
DTXManiaプロジェクト/コード/全体/CPreviewMagnifier.cs
実行時フォルダ/DTXManiaGR.exe

index 8a64b8f..926ae73 100644 (file)
@@ -554,14 +554,14 @@ namespace DTXMania
                                        return;\r
                                }\r
 \r
-                               float num3 = ((float)this.ct遅延表示.n現在の値) / 100f;\r
-                               float mag = 0.9f + (0.1f * num3);\r
+                               float f = ((float)this.ct遅延表示.n現在の値) / 100f;\r
+                               float mag = 0.9f + (0.1f * f);\r
 \r
                                #region [ プレビュー画像表示 ]\r
                                if (this.r表示するプレビュー画像 != null)\r
                                {\r
-                                       CPreviewMagnifier cmg = new CPreviewMagnifier();\r
-                                       cmg.GetMagnifier(this.r表示するプレビュー画像.sz画像サイズ.Width, this.r表示するプレビュー画像.sz画像サイズ.Height, mag, mag, true);\r
+                                       CPreviewMagnifier cmg = new CPreviewMagnifier(CPreviewMagnifier.EPreviewType.MusicSelect);\r
+                                       cmg.GetMagnifier(this.r表示するプレビュー画像.sz画像サイズ.Width, this.r表示するプレビュー画像.sz画像サイズ.Height, mag, mag);\r
 \r
                                        int width = cmg.width;\r
                                        int height = cmg.height;\r
@@ -570,7 +570,7 @@ namespace DTXMania
 \r
                                        x += (int)((612 - width * cmg.magX) / 2);\r
                                        y += (int)((605 - height * cmg.magY) / 2);\r
-                                       this.r表示するプレビュー画像.n透明度 = (int)(255f * num3);\r
+                                       this.r表示するプレビュー画像.n透明度 = (int)(255f * f);\r
                                        this.r表示するプレビュー画像.t2D描画(CDTXMania.Instance.Device, x, y);\r
                                }\r
                                #endregion\r
index 810f050..9b6baa8 100644 (file)
@@ -18,6 +18,8 @@ namespace DTXMania
                private long nBGMの総再生時間ms;\r
                private long nBGM再生開始時刻;\r
                private int n音符の表示位置X;\r
+               private int n背景の表示位置X;\r
+               private int n背景の表示位置Y;\r
                private CSound sd読み込み音;\r
                private string strSTAGEFILE;\r
                private string str曲タイトル;\r
@@ -154,7 +156,19 @@ namespace DTXMania
 \r
                                if (!this.b音符を表示する && this.tx背景 != null)\r
                                {\r
-                                       this.tx背景.vc拡大縮小倍率 = new Vector3(Scale.X, Scale.Y, 1f); // とりあえずFullHD化\r
+                                       if ( this.tx背景.sz画像サイズ.Width <= 640 && this.tx背景.sz画像サイズ.Height <= 480 )    // VGAサイズ以下の背景の場合は、単純拡大しFullHD化\r
+                                       {\r
+                                               this.tx背景.vc拡大縮小倍率 = new Vector3( Scale.X, Scale.Y, 1f ); // とりあえずFullHD化\r
+                                               this.n背景の表示位置X = this.n背景の表示位置Y = 0;\r
+                                       }\r
+                                       else // #36373 VGAより大きな画像をSTAGEFILEに指定した場合は、アスペクト比を維持しつつ全画面に収まるように拡大縮小し表示\r
+                                       {\r
+                                               CPreviewMagnifier cmg = new CPreviewMagnifier( CPreviewMagnifier.EPreviewType.PlayingBackground );\r
+                                               cmg.GetMagnifier(this.tx背景.sz画像サイズ.Width, this.tx背景.sz画像サイズ.Height, 1.0f, 1.0f);\r
+                                               this.tx背景.vc拡大縮小倍率 = new Vector3( cmg.magX, cmg.magY, 1f );\r
+                                               this.n背景の表示位置X = cmg.px;\r
+                                               this.n背景の表示位置Y = cmg.py;\r
+                                       }\r
                                }\r
                                if (this.b音符を表示する)\r
                                {\r
@@ -264,7 +278,7 @@ namespace DTXMania
                        #region [ 背景、音符+タイトル表示 ]\r
                        //-----------------------------\r
                        if (this.tx背景 != null)\r
-                               this.tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
+                               this.tx背景.t2D描画(CDTXMania.Instance.Device, this.n背景の表示位置X, this.n背景の表示位置Y);\r
 \r
                        if (this.b音符を表示する)\r
                        {\r
index 3403462..20d56fa 100644 (file)
@@ -130,7 +130,8 @@ namespace DTXMania
                                                                }\r
                                                                this.bFullScreenMovie = (chip.eチャンネル番号 == EChannel.MovieFull || CDTXMania.Instance.ConfigIni.bFullAVI);   // DTXVモードで、最初に途中再生で起動したときのために必要\r
                                                                this.rAVI.avi.Seek(n移動開始時刻ms - chip.n発声時刻ms);\r
-                                                               this.Start(chip.eチャンネル番号, chip.rAVI, SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, chip.n発声時刻ms);\r
+                                                               //this.Start( chip.eチャンネル番号, chip.rAVI, SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, chip.n発声時刻ms );\r
+                                                               this.Start( chip.eチャンネル番号, chip.rAVI, (int)chip.rAVI.avi.nフレーム幅, (int)chip.rAVI.avi.nフレーム高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, chip.n発声時刻ms );\r
                                                        }\r
                                                        continue;\r
                                                }\r
@@ -176,7 +177,7 @@ namespace DTXMania
                        return 0;\r
                }\r
 \r
-               public unsafe int t進行描画(int x, int y, int w, int h)\r
+               public int t進行描画(int x, int y, int w, int h)\r
                {\r
                        if (b活性化してる &&\r
                                CDTXMania.Instance.ConfigIni.bAVI &&\r
@@ -221,38 +222,30 @@ namespace DTXMania
                                        // yyagi: BGAの有無を見ないで、単純にFullScreenMovieならアス比保持で拡縮、そうでないなら縦横2倍+位置変更なし。\r
                                        // chnmr0 : 従来の大きさ以上のプレビュー動画で不都合が起きますのでここは常にアス比保持でフィッティングします。\r
 \r
-                                       float magX = 2, magY = 2;\r
                                        int xx = x, yy = y;\r
-\r
-                                       if (CDTXMania.Instance.DTX != null && CDTXMania.Instance.DTX.bUse556x710BGAAVI)\r
+                                       float magX = 2, magY = 2;\r
+                                       if ( CDTXMania.Instance.DTX != null && CDTXMania.Instance.DTX.bUse556x710BGAAVI )\r
                                        {\r
                                                magX = magY = 1;\r
                                        }\r
 \r
                                        if (bFullScreenMovie || bIsPreviewMovie)\r
                                        {\r
-                                               #region [ アスペクト比を維持した拡大縮小 ]\r
-                                               if (bFullScreenMovie)\r
-                                               {\r
-                                                       xx = 0;\r
-                                                       yy = 0;\r
-                                                       w = SampleFramework.GameWindowSize.Width;\r
-                                                       h = SampleFramework.GameWindowSize.Height;\r
-                                               }\r
+                                               CPreviewMagnifier.EPreviewType e = CPreviewMagnifier.EPreviewType.PlayingFront;\r
+                                               if ( bFullScreenMovie ) e = CPreviewMagnifier.EPreviewType.PlayingBackground;\r
+                                               if ( bIsPreviewMovie ) e = CPreviewMagnifier.EPreviewType.MusicSelect;\r
 \r
-                                               magX = (float)w / this.rAVI.avi.nフレーム幅;\r
-                                               magY = (float)h / this.rAVI.avi.nフレーム高さ;\r
-                                               if (magX > magY)\r
-                                               {\r
-                                                       magX = magY;\r
-                                                       xx += (int)((w - (this.rAVI.avi.nフレーム幅 * magY)) / 2);\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       magY = magX;\r
-                                                       yy += (int)((h - (this.rAVI.avi.nフレーム高さ * magX)) / 2);\r
-                                               }\r
-                                               #endregion\r
+                                               CPreviewMagnifier cmg = new CPreviewMagnifier( e, xx, yy );\r
+                                               cmg.GetMagnifier(\r
+                                                       (int) this.rAVI.avi.nフレーム幅,\r
+                                                       (int) this.rAVI.avi.nフレーム高さ,\r
+                                                       1.0f,\r
+                                                       1.0f\r
+                                               );\r
+                                               magX = cmg.magX;\r
+                                               magY = cmg.magY;\r
+                                               xx = cmg.px;\r
+                                               yy = cmg.py;\r
                                        }\r
 \r
                                        this.tx描画用.vc拡大縮小倍率.X = magX;\r
index 9ffc301..26aed3b 100644 (file)
@@ -136,8 +136,8 @@ namespace DTXMania
                                #region [ プレビュー画像表示 ]\r
                                else if (r表示するリザルト画像 != null)\r
                                {\r
-                                       CPreviewMagnifier cmg = new CPreviewMagnifier();\r
-                                       cmg.GetMagnifier(r表示するリザルト画像.sz画像サイズ.Width, r表示するリザルト画像.sz画像サイズ.Height, 1.0f, 1.0f, true);\r
+                                       CPreviewMagnifier cmg = new CPreviewMagnifier(CPreviewMagnifier.EPreviewType.MusicSelect);\r
+                                       cmg.GetMagnifier(r表示するリザルト画像.sz画像サイズ.Width, r表示するリザルト画像.sz画像サイズ.Height, 1.0f, 1.0f);\r
 \r
                                        r表示するリザルト画像.vc拡大縮小倍率.X = cmg.magX;\r
                                        r表示するリザルト画像.vc拡大縮小倍率.Y = cmg.magY;\r
index efc98d0..0ef47da 100644 (file)
@@ -26,22 +26,31 @@ namespace DTXMania
                /// </summary>\r
                public float magY;\r
 \r
+               public int px;\r
+               public int py;\r
+\r
                /// <summary>\r
                /// プレビュー画像向けの拡大率か(それとも、演奏画面向けの拡大率か)\r
                /// </summary>\r
-               public bool bIsPreview;\r
+               public enum EPreviewType : int\r
+               {\r
+                       MusicSelect = 0,                        // 選曲画面\r
+                       PlayingFront = 1,                       // 演奏画面(ウインドウ表示の動画)\r
+                       PlayingBackground = 2           // 演奏画面(背景全画面表示の動画)\r
+               }\r
+               public EPreviewType ePreviewType;\r
                #endregion\r
 \r
                #region [ 定数定義 ]\r
                // 配列の0,1要素はそれぞれ, Preview用, 演奏画面用\r
-               private int[] WIDTH_VGA_SET = { 204, 278 };                     // VGA版DTXManiaのプレビュー画像width値\r
-               private int[] HEIGHT_VGA_SET = { 269, 355 };                      // VGA版DTXManiaのプレビュー画像height値\r
-               private int[] WIDTH_HD_SET = { 400, 400 };                      // HD版DTXManiaのプレビュー画像width値\r
-               private int[] HEIGHT_HD_SET = { 400, 600 }; // 600は仮                                                                // HD版DTXManiaのプレビュー画像height値\r
-               private int[] WIDTH_FHD_LIMIT = { 320, 320 };                     // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値\r
-               private int[] HEIGHT_FHD_LIMIT = { 416, 416 };                      // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値\r
-               private int[] WIDTH_FHD_SET = { (int)(204 * Scale.X), (int)(278 * Scale.X) }; // FHD版DTXManiaのプレビュー画像height値\r
-               private int[] HEIGHT_FHD_SET = { (int)(269 * Scale.Y), (int)(355 * Scale.Y) };  // FHD版DTXManiaのプレビュー画像height値\r
+               private int[] WIDTH_VGA_SET = { 204, 278, 640 };                     // VGA版DTXManiaのプレビュー画像width値\r
+               private int[] HEIGHT_VGA_SET = { 269, 355, 1920 };                      // VGA版DTXManiaのプレビュー画像height値\r
+               private int[] WIDTH_HD_SET = { 400, 400, 1920 };                      // HD版DTXManiaのプレビュー画像width値\r
+               private int[] HEIGHT_HD_SET = { 400, 600, 1080 }; // 600は仮                                                          // HD版DTXManiaのプレビュー画像height値\r
+               private int[] WIDTH_FHD_LIMIT = { 320, 320, 640 };                     // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値\r
+               private int[] HEIGHT_FHD_LIMIT = { 416, 416, 480 };                      // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値\r
+               private int[] WIDTH_FHD_SET = { (int)(204 * Scale.X), (int)(278 * Scale.X), 1920 }; // FHD版DTXManiaのプレビュー画像height値\r
+               private int[] HEIGHT_FHD_SET = { (int)(269 * Scale.Y), (int)(355 * Scale.Y), 1080 };  // FHD版DTXManiaのプレビュー画像height値\r
                #endregion\r
 \r
 \r
@@ -52,6 +61,20 @@ namespace DTXMania
                public CPreviewMagnifier()\r
                {\r
                }\r
+               public CPreviewMagnifier(EPreviewType _ePreviewType)\r
+               {\r
+                       CPreviewMagnifier_initializer(_ePreviewType, 0, 0);\r
+               }\r
+               public CPreviewMagnifier( EPreviewType _ePreviewType, int _px, int _py )\r
+               {\r
+                       CPreviewMagnifier_initializer( _ePreviewType, _px, _py );\r
+               }\r
+               private void CPreviewMagnifier_initializer( EPreviewType _ePreviewType, int _px, int _py)\r
+               {\r
+                       this.ePreviewType = _ePreviewType;\r
+                       this.px = _px;\r
+                       this.py = _py;\r
+               }\r
                #endregion\r
 \r
                /// <summary>\r
@@ -61,23 +84,36 @@ namespace DTXMania
                /// <param name="height_org">元の高さ</param>\r
                /// <param name="magX_org">元の拡大率(幅)</param>\r
                /// <param name="magY_org">元の拡大率(高さ)</param>\r
-               /// <param name="bIsPreview">選曲画面(preview)用か、演奏画面用か</param>\r
                /// <remarks>出力はプロパティで得てください。</remarks>\r
-               public void GetMagnifier(int width_org, int height_org, float magX_org, float magY_org, bool bIsPreview)\r
+               public void GetMagnifier(int width_org, int height_org, float magX_org, float magY_org)\r
                {\r
-                       this.bIsPreview = bIsPreview;\r
+                       //bool bIsPreview = ( this.ePreviewType == EPreviewType.MusicSelect );\r
 \r
                        // #35820 画像サイズに関係なく、プレビュー領域に合わせる add ikanick 15.12.08\r
                        // #36176 プレビュー画像については、前仕様(204x269)画像はアスペクト比を維持する change ikanick 16.03.20\r
 \r
+                       if ( this.ePreviewType == EPreviewType.PlayingBackground )      // フル背景動画に限り、上位指定の表示座標を無視する\r
+                       {\r
+                               this.px = this.py = 0;\r
+                       }\r
+\r
+                       #region [ アスペクト比を維持した拡大縮小 ]\r
                        this.width = width_org;\r
                        this.height = height_org;\r
                        this.magX = magX_org * width_fhd_set / width_org;\r
                        this.magY = magY_org * height_fhd_set / height_org;\r
-                       if (bIsPreview && width_org <= width_vga_set && height_org <= height_vga_set)\r
+\r
+                       if ( magX > magY )\r
+                       {\r
+                               magX = magY;\r
+                               px += (int) ( ( width_fhd_set - ( width_org * magY ) ) / 2 );\r
+                       }\r
+                       else\r
                        {\r
-                               this.magX = magX_org * width_fhd_set / width_org * (Convert.ToSingle(width_vga_set) / height_vga_set);\r
+                               magY = magX;\r
+                               py += (int) ( ( height_fhd_set - ( height_org * magX ) ) / 2 );\r
                        }\r
+                       #endregion\r
                }\r
 \r
                #region [ bIsPreviewによる配列→定数読み替え ]\r
@@ -85,56 +121,56 @@ namespace DTXMania
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? WIDTH_VGA_SET[0] : WIDTH_VGA_SET[1];\r
+                               return WIDTH_VGA_SET[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int height_vga_set\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? HEIGHT_VGA_SET[0] : HEIGHT_VGA_SET[1];\r
+                               return HEIGHT_VGA_SET[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int width_hd_set\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? WIDTH_HD_SET[0] : WIDTH_HD_SET[1];\r
+                               return WIDTH_HD_SET[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int height_hd_set\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? HEIGHT_HD_SET[0] : HEIGHT_HD_SET[1];\r
+                               return HEIGHT_HD_SET[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int width_fhd_limit\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? WIDTH_FHD_LIMIT[0] : WIDTH_FHD_LIMIT[1];\r
+                               return WIDTH_FHD_LIMIT[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int height_fhd_limit\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? HEIGHT_FHD_LIMIT[0] : HEIGHT_FHD_LIMIT[1];\r
+                               return HEIGHT_FHD_LIMIT[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int width_fhd_set\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? WIDTH_FHD_SET[0] : WIDTH_FHD_SET[1];\r
+                               return WIDTH_FHD_SET[ (int)ePreviewType ];\r
                        }\r
                }\r
                private int height_fhd_set\r
                {\r
                        get\r
                        {\r
-                               return bIsPreview ? HEIGHT_FHD_SET[0] : HEIGHT_FHD_SET[1];\r
+                               return HEIGHT_FHD_SET[ (int)ePreviewType ];\r
                        }\r
                }\r
                #endregion\r
index 6b27649..2b3fdf9 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ