OSDN Git Service

#28195 ESCでCONFIGを抜けたときに、スキンサウンドが切り替わらない問題を修正。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 3 May 2012 15:52:39 +0000 (15:52 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 3 May 2012 15:52:39 +0000 (15:52 +0000)
#28195 スキンフォルダの条件を変更。System/ 直下にある任意のフォルダを対象とする。SkinFiles.***の適用は中止。
#28195 スキンフォルダ内にタイトル画面相当のファイルがない場合は、スキンフォルダ対象に含めないようにした。
#28195 CONFIG画面に入るときに都度スキンフォルダの検索をしていたのを止め、起動時のみ検索するようにした。

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@392 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs
DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CStageコンフィグ.cs
DTXManiaプロジェクト/コード/全体/CSkin.cs

index 61ece0a..c81d81b 100644 (file)
@@ -995,7 +995,7 @@ namespace DTXMania
                                string skinName = ( string ) ( ( ( CItemList ) this.list項目リスト[ this.n現在の選択項目 ] ).obj現在値() );\r
                                string path;\r
                                path = System.IO.Path.Combine( CDTXMania.strEXEのあるフォルダ, "System" );\r
-                               path = System.IO.Path.Combine( path, "SkinFiles." + skinName );\r
+                               path = System.IO.Path.Combine( path, CSkin.PrefixSkinFolder + skinName );\r
                                path = System.IO.Path.Combine( path, @"Graphics\ScreenTitle background.jpg" );\r
                                Bitmap bmSrc = new Bitmap( path );\r
                                Bitmap bmDest = new Bitmap( bmSrc.Width / 4, bmSrc.Height / 4 );\r
@@ -1219,13 +1219,14 @@ namespace DTXMania
                        this.eメニュー種別 = Eメニュー種別.Unknown;\r
 \r
                        #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]\r
-                       CDTXMania.Skin.ReloadSkinPaths();                                       // CONFIGに入るタイミングで、スキンフォルダを再検索\r
-                       skinSubFolders = CDTXMania.Skin.strSkinSubfolders;\r
+                       //CDTXMania.Skin.ReloadSkinPaths();                                     // CONFIGに入るタイミングで、スキンフォルダを再検索\r
+                       skinSubFolders = (string[])CDTXMania.Skin.strSkinSubfolders.Clone();    // skinSubFoldersへの書き換えが元に及ばないよう、Clone()する\r
+                       skinSubFolder_org = CSkin.strSkinSubfolder;\r
                        nSkinIndex = Array.BinarySearch( skinSubFolders, CSkin.strSkinSubfolder );\r
                        nSkinSampleIndex = -1;\r
                        for ( int i = 0; i < skinSubFolders.Length; i++ )       // "SkinFiles."を削除\r
                        {\r
-                               skinSubFolders[ i ] = skinSubFolders[ i ].Substring( "SkinFiles.".Length );\r
+                               skinSubFolders[ i ] = skinSubFolders[ i ].Substring( CSkin.PrefixSkinFolder.Length );\r
                        }\r
                        #endregion\r
 \r
@@ -1251,6 +1252,13 @@ namespace DTXMania
                        this.ct三角矢印アニメ = null;\r
                        \r
                        base.On非活性化();\r
+\r
+                       if ( CSkin.strSkinSubfolder != this.skinSubFolder_org )\r
+                       {\r
+                               CDTXMania.Skin.PrepareReloadSkin();             // #28195 2012.5.2 yyagi CONFIG脱出時にSkin更新\r
+                               CDTXMania.Skin.ReloadSkin();                    //\r
+                       }\r
+\r
                }\r
                public override void OnManagedリソースの作成()\r
                {\r
@@ -1668,6 +1676,7 @@ namespace DTXMania
 \r
                private CTexture txSkinSample1;                         // #28195 2012.5.2 yyagi\r
                private string[] skinSubFolders;                        //\r
+               private string skinSubFolder_org;                       //\r
                private int nSkinSampleIndex;                           //\r
                private int nSkinIndex;                                         //\r
 \r
@@ -1820,8 +1829,8 @@ namespace DTXMania
 \r
                        CDTXMania.ConfigIni.nRisky = this.iSystemRisky.n現在の値;                                           // #23559 2911.7.27 yyagi\r
 \r
-                       CDTXMania.ConfigIni.strSkinSubfolder = "SkinFiles." + (string)this.iSystemSkinSubfolder.list項目値[ nSkinIndex ];    // #28195 2012.5.2 yyagi\r
-                       CSkin.strSkinSubfolder = CDTXMania.ConfigIni.strSkinSubfolder;\r
+                       CDTXMania.ConfigIni.strSkinSubfolder = CSkin.PrefixSkinFolder + ( string ) this.iSystemSkinSubfolder.list項目値[ nSkinIndex ];       // #28195 2012.5.2 yyagi\r
+                       CSkin.strSkinSubfolder = CDTXMania.ConfigIni.strSkinSubfolder;                                                                                                                                  //\r
                }\r
                private void tConfigIniへ記録する・Bass()\r
                {\r
index 5b906cc..4d7cf62 100644 (file)
@@ -270,11 +270,6 @@ namespace DTXMania
                                        {\r
                                                break;\r
                                        }\r
-                                       if ( CSkin.strSkinSubfolder != this.strSkinSubfolder )\r
-                                       {\r
-                                               CDTXMania.Skin.PrepareReloadSkin();             // #28195 2012.5.2 yyagi CONFIG脱出時にSkin更新\r
-                                               CDTXMania.Skin.ReloadSkin();                    //\r
-                                       }\r
                                        return 1;\r
                        }\r
                        //---------------------\r
index b523141..f289dcd 100644 (file)
@@ -31,7 +31,7 @@ namespace DTXMania
 \r
        internal class CSkin : IDisposable\r
        {\r
-               public static string PrefixSkinFolder = "SkinFiles.";\r
+               public static string PrefixSkinFolder = "";             // "SkinFiles.";\r
 \r
                // クラス\r
 \r
@@ -423,6 +423,7 @@ namespace DTXMania
                /// あらかじめstrSkinSubfolderを適切に設定しておくこと。\r
                /// その後、ReloadSkinPaths()を実行し、strSkinSubfolderの正当性を確認した上で、本メソッドを呼び出すこと。\r
                /// 本メソッド呼び出し後に、ReloadSkin()を実行することで、システムサウンドを読み込み直す。\r
+               /// ReloadSkin()の内容は本メソッド内に含めないこと。起動時はReloadSkin()相当の処理をCEnumSongsで行っているため。\r
                /// </summary>\r
                public void PrepareReloadSkin()\r
                {\r
@@ -494,15 +495,27 @@ namespace DTXMania
                        string path;\r
                        #region [ まず System/SkinFiles.*** をenumerateする ]\r
                        path = System.IO.Path.Combine( CDTXMania.strEXEのあるフォルダ, "System" );\r
-                       strSkinSubfolders = System.IO.Directory.GetDirectories( path, PrefixSkinFolder + "*" );\r
+                       string[] tempSkinSubfolders = System.IO.Directory.GetDirectories( path, PrefixSkinFolder + "*" );\r
+                       strSkinSubfolders = new string[ tempSkinSubfolders.Length ];\r
+                       int size = 0;\r
                        for ( int i = 0; i < strSkinSubfolders.Length; i++ )\r
                        {\r
-                               string[] spl = strSkinSubfolders[ i ].Split( System.IO.Path.DirectorySeparatorChar );\r
-                               strSkinSubfolders[ i ] = spl[ spl.Length - 1 ];         // subfolder名から、~~/System/ までの部分を削除\r
+                               #region [ 検出したフォルダがスキンフォルダかどうか確認する]\r
+                               string filePathTitle;\r
+                               filePathTitle = System.IO.Path.Combine( tempSkinSubfolders[i], @"Graphics\ScreenTitle background.jpg" );\r
+                               if ( !File.Exists( filePathTitle ) )\r
+                                       continue;\r
+                               #endregion\r
+                               #region [ スキンフォルダと確認できたものを、strSKinSubfoldersに入れる ]\r
+                               string[] spl = tempSkinSubfolders[ i ].Split( System.IO.Path.DirectorySeparatorChar );\r
+                               strSkinSubfolders[ size++ ] = spl[ spl.Length - 1 ];            // subfolder名から、~~/System/ までの部分を削除\r
                                Trace.TraceInformation( "SkinPath検出: {0}", strSkinSubfolders[ i ] );\r
+                               #endregion\r
                        }\r
+                       Array.Resize( ref strSkinSubfolders, size );\r
                        Array.Sort( strSkinSubfolders );        // BinarySearch実行前にSortが必要\r
                        #endregion\r
+\r
                        #region [ 次に、カレントのSkinパスが存在するか調べる。あれば終了。]\r
                        if ( Array.BinarySearch( strSkinSubfolders, strSkinSubfolder, StringComparer.InvariantCultureIgnoreCase ) >= 0 )\r
                                return;\r