OSDN Git Service

#27060 #27060ブランチの内容をtrunkに取り込む前段階として、trunkの内容を#27060ブランチにマージ。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
index 87e15b8..d636a87 100644 (file)
@@ -8,6 +8,7 @@ using System.Diagnostics;
 using System.Runtime.InteropServices;\r
 using System.IO;\r
 using System.Threading;\r
+using System.Runtime.Serialization.Formatters.Binary;\r
 using SlimDX;\r
 using SlimDX.Direct3D9;\r
 using FDK;\r
@@ -153,8 +154,19 @@ namespace DTXMania
                public static CSongs管理 Songs管理 \r
                {\r
                        get;\r
+                       set;    // 2012.1.26 yyagi private解除 CStage起動でのdesirialize読み込みのため\r
+               }\r
+               public static CEnumSongs EnumSongs\r
+               {\r
+                       get;\r
+                       private set;\r
+               }\r
+               public static CActEnumSongs actEnumSongs\r
+               {\r
+                       get;\r
                        private set;\r
                }\r
+\r
                public static CSound管理 Sound管理\r
                {\r
                        get; \r
@@ -267,6 +279,7 @@ namespace DTXMania
                        set;\r
                }\r
 \r
+\r
                // コンストラクタ\r
 \r
                public CDTXMania()\r
@@ -458,9 +471,85 @@ namespace DTXMania
                                //---------------------\r
                                #endregion\r
 \r
+\r
                                CScoreIni scoreIni = null;\r
 \r
-                               switch( r現在のステージ.eステージID )\r
+                               #region [ 曲検索スレッドの起動/終了 ]                                       // ここに"Enumerating Songs..."表示を集約\r
+                               actEnumSongs.On進行描画();                                                          // "Enumerating Songs..."アイコンの描画\r
+                               switch ( r現在のステージ.eステージID )\r
+                               {\r
+                                       case CStage.Eステージ.タイトル:\r
+                                       case CStage.Eステージ.コンフィグ:\r
+                                       case CStage.Eステージ.選曲:\r
+                                       case CStage.Eステージ.曲読み込み:\r
+                                               if ( EnumSongs != null )\r
+                                               {\r
+                                                       #region [ (特定条件時) 曲検索スレッドの起動・開始 ]\r
+                                                       if ( r現在のステージ.eステージID == CStage.Eステージ.タイトル &&\r
+                                                                r直前のステージ.eステージID == CStage.Eステージ.起動 &&\r
+                                                                this.n進行描画の戻り値 == (int) CStageタイトル.E戻り値.継続 &&\r
+                                                                !EnumSongs.IsSongListEnumStarted )\r
+                                                       {\r
+                                                               actEnumSongs.On活性化();\r
+                                                               CDTXMania.stage選曲.bIsEnumeratingSongs = true;\r
+                                                               EnumSongs.Init( CDTXMania.Songs管理.listSongsDB, CDTXMania.Songs管理.nSongsDBから取得できたスコア数 );   // songs.db情報と、取得した曲数を、新インスタンスにも与える\r
+                                                               EnumSongs.StartEnumFromDisk();          // 曲検索スレッドの起動・開始\r
+                                                       }\r
+                                                       #endregion\r
+                                                       \r
+                                                       #region [ 曲検索の中断と再開 ]\r
+                                                       if ( r現在のステージ.eステージID == CStage.Eステージ.選曲 && !EnumSongs.IsSongListEnumCompletelyDone )\r
+                                                       {\r
+                                                               switch ( this.n進行描画の戻り値 )\r
+                                                               {\r
+                                                                       case 0:         // 何もない\r
+                                                                               //if ( CDTXMania.stage選曲.bIsEnumeratingSongs )\r
+                                                                               if ( !CDTXMania.stage選曲.bIsPlayingPremovie )\r
+                                                                               {\r
+                                                                                       EnumSongs.Resume();                                             // #27060 2012.2.6 yyagi 中止していたバックグランド曲検索を再開\r
+                                                                                       EnumSongs.IsSlowdown = false;\r
+                                                                               }\r
+                                                                               else\r
+                                                                               {\r
+                                                                                       // EnumSongs.Suspend();                                 // #27060 2012.3.2 yyagi #PREMOVIE再生中は曲検索を低速化\r
+                                                                                       EnumSongs.IsSlowdown = true;\r
+                                                                               }\r
+                                                                               actEnumSongs.On活性化();\r
+                                                                               break;\r
+\r
+                                                                       case 2:         // 曲決定\r
+                                                                               EnumSongs.Suspend();                                            // #27060 バックグラウンドの曲検索を一時停止\r
+                                                                               actEnumSongs.On非活性化();\r
+                                                                               break;\r
+                                                               }\r
+                                                       }\r
+                                                       #endregion\r
+\r
+                                                       #region [ 曲探索中断待ち待機 ]\r
+                                                       if ( r現在のステージ.eステージID == CStage.Eステージ.曲読み込み && !EnumSongs.IsSongListEnumCompletelyDone )\r
+                                                       {\r
+                                                               EnumSongs.WaitUntilSuspended();                                                                 // 念のため、曲検索が一時中断されるまで待機\r
+                                                       }\r
+                                                       #endregion\r
+\r
+                                                       #region [ 曲検索が完了したら、実際の曲リストに反映する ]\r
+                                                       // CStage選曲.On活性化() に回した方がいいかな?\r
+                                                       if ( EnumSongs.IsSongListEnumerated )\r
+                                                       {\r
+                                                               actEnumSongs.On非活性化();\r
+                                                               CDTXMania.stage選曲.bIsEnumeratingSongs = false;\r
+\r
+                                                               bool bRemakeSongTitleBar = ( r現在のステージ.eステージID == CStage.Eステージ.選曲 ) ? true : false;\r
+                                                               CDTXMania.stage選曲.Refresh( EnumSongs.Songs管理, bRemakeSongTitleBar );\r
+                                                               EnumSongs.SongListEnumCompletelyDone();\r
+                                                       }\r
+                                                       #endregion\r
+                                               }\r
+                                               break;\r
+                               }\r
+                               #endregion\r
+\r
+                               switch ( r現在のステージ.eステージID )\r
                                {\r
                                        case CStage.Eステージ.何もしない:\r
                                                break;\r
@@ -520,6 +609,7 @@ namespace DTXMania
                                                                #endregion\r
                                                                break;\r
 \r
+                                                       #region [ OPTION: 廃止済 ]\r
 //                                                     case 2:                                                                 // #24525 OPTIONとCONFIGの統合に伴い、OPTIONは廃止\r
 //                                                             #region [ *** ]\r
 //                                                             //-----------------------------\r
@@ -531,7 +621,8 @@ namespace DTXMania
 //                                                             r現在のステージ = stageオプション;\r
 //                                                             //-----------------------------\r
 //                                                             #endregion\r
-//                                                             break;\r
+                                                       //                                                              break;\r
+                                                       #endregion\r
 \r
                                                        case (int)CStageタイトル.E戻り値.CONFIG:\r
                                                                #region [ *** ]\r
@@ -1500,11 +1591,14 @@ for (int i = 0; i < 3; i++) {
                        try\r
                        {\r
                                Songs管理 = new CSongs管理();\r
+//                             Songs管理_裏読 = new CSongs管理();\r
+                               EnumSongs = new CEnumSongs();\r
+                               actEnumSongs = new CActEnumSongs();\r
                                Trace.TraceInformation( "曲リストの初期化を完了しました。" );\r
                        }\r
-                       catch( Exception exception4 )\r
+                       catch( Exception e )\r
                        {\r
-                               Trace.TraceError( exception4.Message );\r
+                               Trace.TraceError( e.Message );\r
                                Trace.TraceError( "曲リストの初期化に失敗しました。" );\r
                        }\r
                        finally\r
@@ -1538,6 +1632,7 @@ for (int i = 0; i < 3; i++) {
                        stage結果 = new CStage結果();\r
                        stage終了 = new CStage終了();\r
                        this.listトップレベルActivities = new List<CActivity>();\r
+                       this.listトップレベルActivities.Add( actEnumSongs );\r
                        this.listトップレベルActivities.Add( act文字コンソール );\r
                        this.listトップレベルActivities.Add( stage起動 );\r
                        this.listトップレベルActivities.Add( stageタイトル );\r
@@ -1619,6 +1714,30 @@ for (int i = 0; i < 3; i++) {
                        {\r
                                Trace.TraceInformation( "----------------------" );\r
                                Trace.TraceInformation( "■ アプリケーションの終了" );\r
+                               #region [ 曲検索の終了処理 ]\r
+                               //---------------------\r
+                               if ( actEnumSongs != null )\r
+                               {\r
+                                       Trace.TraceInformation( "曲検索actの終了処理を行います。" );\r
+                                       Trace.Indent();\r
+                                       try\r
+                                       {\r
+                                               actEnumSongs.On非活性化();\r
+                                               actEnumSongs= null;\r
+                                               Trace.TraceInformation( "曲検索actの終了処理を完了しました。" );\r
+                                       }\r
+                                       catch ( Exception e )\r
+                                       {\r
+                                               Trace.TraceError( e.Message );\r
+                                               Trace.TraceError( "曲検索actの終了処理に失敗しました。" );\r
+                                       }\r
+                                       finally\r
+                                       {\r
+                                               Trace.Unindent();\r
+                                       }\r
+                               }\r
+                               //---------------------\r
+                               #endregion\r
                                #region [ 現在のステージの終了処理 ]\r
                                //---------------------\r
                                if( CDTXMania.r現在のステージ != null && CDTXMania.r現在のステージ.b活性化してる )          // #25398 2011.06.07 MODIFY FROM\r
@@ -2073,6 +2192,10 @@ for (int i = 0; i < 3; i++) {
                //        }\r
                //    }\r
                //}\r
+\r
+       \r
+               \r
+               //-----------------\r
                #endregion\r
        }\r
 }\r