OSDN Git Service

#36057 コンフィグまわりのリファクタ(リソース不完全なので注意)
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 06.曲読み込み / CStage曲読み込み.cs
index 7f1ae63..933d715 100644 (file)
@@ -5,29 +5,47 @@ using System.Diagnostics;
 using System.Drawing;\r
 using System.IO;\r
 using SlimDX;\r
+using System.Drawing.Text;\r
 using FDK;\r
 \r
 namespace DTXMania\r
 {\r
        internal class CStage曲読み込み : CStage\r
        {\r
-               // コンストラクタ\r
+               private CActFIFOBlack actFO;\r
+               private bool b音符を表示する;\r
+               private Font ftタイトル表示用フォント;\r
+               private long nBGMの総再生時間ms;\r
+               private long nBGM再生開始時刻;\r
+               private int n音符の表示位置X;\r
+               private CSound sd読み込み音;\r
+               private string strSTAGEFILE;\r
+               private string str曲タイトル;\r
+               private CTexture txタイトル;\r
+               private CTexture tx音符;\r
+               private CTexture tx背景;\r
+               private DateTime timeBeginLoad;\r
+               private DateTime timeBeginLoadWAV;\r
+               private int nWAVcount;\r
+               private CTexture txFilename;\r
+               private Bitmap bitmapFilename;\r
+               private Graphics graphicsFilename;\r
+               private Font ftFilename;\r
+               private const float fFontSizeFilename = 12.0f;\r
+               private const float fFontSizeTitle = 48;\r
 \r
                public CStage曲読み込み()\r
                {\r
                        base.eステージID = CStage.Eステージ.曲読み込み;\r
                        base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
                        base.b活性化してない = true;\r
-                       base.list子Activities.Add( this.actFI = new CActFIFOBlack() );\r
-                       base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
+                       //                      base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略\r
+                       base.list子Activities.Add(this.actFO = new CActFIFOBlack());\r
                }\r
 \r
-\r
-               // CStage 実装\r
-\r
                public override void On活性化()\r
                {\r
-                       Trace.TraceInformation( "曲読み込みステージを活性化します。" );\r
+                       Trace.TraceInformation("曲読み込みステージを活性化します。");\r
                        Trace.Indent();\r
                        try\r
                        {\r
@@ -35,40 +53,40 @@ namespace DTXMania
                                this.strSTAGEFILE = "";\r
                                this.b音符を表示する = false;\r
                                this.n音符の表示位置X = 0x308;\r
-                               this.ftタイトル表示用フォント = new Font( "MS PGothic", 48f, GraphicsUnit.Pixel );\r
+                               this.ftタイトル表示用フォント = new Font("MS PGothic", fFontSizeTitle * Scale.Y, GraphicsUnit.Pixel);\r
                                this.nBGM再生開始時刻 = -1;\r
                                this.nBGMの総再生時間ms = 0;\r
-                               if( this.sd読み込み音 != null )\r
+                               if (this.sd読み込み音 != null)\r
                                {\r
-                                       CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );\r
+                                       CDTXMania.Instance.Sound管理.tサウンドを破棄する(this.sd読み込み音);\r
                                        this.sd読み込み音 = null;\r
                                }\r
 \r
-                               string strDTXファイルパス = ( CDTXMania.bコンパクトモード ) ?\r
-                                       CDTXMania.strコンパクトモードファイル : CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
-                               \r
-                               CDTX cdtx = new CDTX( strDTXファイルパス, true );\r
+                               string strDTXファイルパス = (CDTXMania.Instance.bコンパクトモード) ?\r
+                                       CDTXMania.Instance.strコンパクトモードファイル : CDTXMania.Instance.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
+\r
+                               CDTX cdtx = new CDTX(strDTXファイルパス, true);\r
                                this.str曲タイトル = cdtx.TITLE;\r
-                               if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )\r
+                               if (((cdtx.STAGEFILE != null) && (cdtx.STAGEFILE.Length > 0)) && (File.Exists(cdtx.strフォルダ名 + cdtx.STAGEFILE) && !CDTXMania.Instance.ConfigIni.bStoicMode))\r
                                {\r
                                        this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.STAGEFILE;\r
                                        this.b音符を表示する = false;\r
                                }\r
                                else\r
                                {\r
-                                       this.strSTAGEFILE = CSkin.Path( @"Graphics\\ScreenNowLoading background.jpg" );\r
+                                       this.strSTAGEFILE = CSkin.Path(@"Graphics\\ScreenNowLoading background.jpg");\r
                                        this.b音符を表示する = true;\r
                                }\r
-                               if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )\r
+                               if (((cdtx.SOUND_NOWLOADING != null) && (cdtx.SOUND_NOWLOADING.Length > 0)) && File.Exists(cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING))\r
                                {\r
-                                       string strNowLoading画像ファイルパス = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;\r
+                                       string strNowLoadingサウンドファイルパス = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;\r
                                        try\r
                                        {\r
-                                               this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( strNowLoading画像ファイルパス );\r
+                                               this.sd読み込み音 = CDTXMania.Instance.Sound管理.tサウンドを生成する(strNowLoadingサウンドファイルパス);\r
                                        }\r
                                        catch\r
                                        {\r
-                                               Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoading画像ファイルパス );\r
+                                               Trace.TraceError("#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoadingサウンドファイルパス);\r
                                        }\r
                                }\r
                                cdtx.On非活性化();\r
@@ -76,17 +94,45 @@ namespace DTXMania
                        }\r
                        finally\r
                        {\r
-                               Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );\r
+                               Trace.TraceInformation("曲読み込みステージの活性化を完了しました。");\r
                                Trace.Unindent();\r
                        }\r
                }\r
+\r
+               private void ReadGhost(string filename, List<int> list) // #35411 2015.08.19 chnmr0 add\r
+               {\r
+                       if (File.Exists(filename))\r
+                       {\r
+                               using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))\r
+                               {\r
+                                       using (BinaryReader br = new BinaryReader(fs))\r
+                                       {\r
+                                               try\r
+                                               {\r
+                                                       int cnt = br.ReadInt32();\r
+                                                       for (int i = 0; i < cnt; ++i)\r
+                                                       {\r
+                                                               short lag = br.ReadInt16();\r
+                                                               list.Add(lag);\r
+                                                       }\r
+                                               }\r
+                                               catch (EndOfStreamException)\r
+                                               {\r
+                                                       Trace.TraceInformation("ゴーストデータは正しく読み込まれませんでした。");\r
+                                                       list.Clear();\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
                public override void On非活性化()\r
                {\r
-                       Trace.TraceInformation( "曲読み込みステージを非活性化します。" );\r
+                       Trace.TraceInformation("曲読み込みステージを非活性化します。");\r
                        Trace.Indent();\r
                        try\r
                        {\r
-                               if( this.ftタイトル表示用フォント != null )\r
+                               if (this.ftタイトル表示用フォント != null)\r
                                {\r
                                        this.ftタイトル表示用フォント.Dispose();\r
                                        this.ftタイトル表示用フォント = null;\r
@@ -95,46 +141,52 @@ namespace DTXMania
                        }\r
                        finally\r
                        {\r
-                               Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );\r
+                               Trace.TraceInformation("曲読み込みステージの非活性化を完了しました。");\r
                                Trace.Unindent();\r
                        }\r
                }\r
                public override void OnManagedリソースの作成()\r
                {\r
-                       if( !base.b活性化してない )\r
+                       if (!base.b活性化してない)\r
                        {\r
-                               this.tx音符 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\\ScreenNowLoading onpu.png" ), false );\r
-                               this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );\r
-                               if( this.b音符を表示する )\r
+                               this.tx音符 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\\ScreenNowLoading onpu.png"), false);\r
+                               this.tx背景 = TextureFactory.tテクスチャの生成(this.strSTAGEFILE, false);\r
+\r
+                               if (!this.b音符を表示する && this.tx背景 != null)\r
+                               {\r
+                                       this.tx背景.vc拡大縮小倍率 = new Vector3(Scale.X, Scale.Y, 1f); // とりあえずFullHD化\r
+                               }\r
+                               if (this.b音符を表示する)\r
                                {\r
                                        try\r
                                        {\r
-                                               if( ( this.str曲タイトル != null ) && ( this.str曲タイトル.Length > 0 ) )\r
+                                               if ((this.str曲タイトル != null) && (this.str曲タイトル.Length > 0))\r
                                                {\r
-                                                       Bitmap image = new Bitmap( 1, 1 );\r
-                                                       Graphics graphics = Graphics.FromImage( image );\r
-                                                       SizeF ef = graphics.MeasureString( this.str曲タイトル, this.ftタイトル表示用フォント );\r
-                                                       Size size = new Size( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) ef.Height ) );\r
+                                                       Bitmap image = new Bitmap(1, 1);\r
+                                                       Graphics graphics = Graphics.FromImage(image);\r
+                                                       SizeF ef = graphics.MeasureString(this.str曲タイトル, this.ftタイトル表示用フォント);\r
+                                                       Size size = new Size((int)Math.Ceiling((double)ef.Width), (int)Math.Ceiling((double)ef.Height));\r
                                                        graphics.Dispose();\r
                                                        image.Dispose();\r
-                                                       image = new Bitmap( size.Width, size.Height );\r
-                                                       graphics = Graphics.FromImage( image );\r
-                                                       graphics.DrawString( this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, (float) 0f, (float) 0f );\r
+                                                       image = new Bitmap(size.Width, size.Height);\r
+                                                       graphics = Graphics.FromImage(image);\r
+                                                       graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
+                                                       graphics.DrawString(this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, (float)0f, (float)0f);\r
                                                        graphics.Dispose();\r
-                                                       this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
-                                                       this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
+                                                       this.txタイトル = new CTexture(CDTXMania.Instance.Device, image, CDTXMania.Instance.TextureFormat);\r
+                                                       this.txタイトル.vc拡大縮小倍率 = new Vector3(0.5f, 0.5f, 1f);\r
                                                        image.Dispose();\r
-                                                       this.n音符の表示位置X = ( ( 640 - ( (int) ( size.Width * this.txタイトル.vc拡大縮小倍率.X ) ) ) - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
+                                                       this.n音符の表示位置X = ((SampleFramework.GameWindowSize.Width - ((int)(size.Width * this.txタイトル.vc拡大縮小倍率.X))) - ((this.tx音符 != null) ? this.tx音符.sz画像サイズ.Width : 0)) - 2;\r
                                                }\r
                                                else\r
                                                {\r
                                                        this.txタイトル = null;\r
-                                                       this.n音符の表示位置X = ( 640 - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
+                                                       this.n音符の表示位置X = (SampleFramework.GameWindowSize.Width - ((this.tx音符 != null) ? this.tx音符.sz画像サイズ.Width : 0)) - 2;\r
                                                }\r
                                        }\r
-                                       catch( CTextureCreateFailedException )\r
+                                       catch (CTextureCreateFailedException)\r
                                        {\r
-                                               Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE } );\r
+                                               Trace.TraceError("テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE });\r
                                                this.txタイトル = null;\r
                                                this.tx背景 = null;\r
                                        }\r
@@ -148,11 +200,11 @@ namespace DTXMania
                }\r
                public override void OnManagedリソースの解放()\r
                {\r
-                       if( !base.b活性化してない )\r
+                       if (!base.b活性化してない)\r
                        {\r
-                               CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
-                               CDTXMania.tテクスチャの解放( ref this.tx音符 );\r
-                               CDTXMania.tテクスチャの解放( ref this.txタイトル );\r
+                               TextureFactory.tテクスチャの解放(ref this.tx背景);\r
+                               TextureFactory.tテクスチャの解放(ref this.tx音符);\r
+                               TextureFactory.tテクスチャの解放(ref this.txタイトル);\r
                                base.OnManagedリソースの解放();\r
                        }\r
                }\r
@@ -160,151 +212,334 @@ namespace DTXMania
                {\r
                        string str;\r
 \r
-                       if( base.b活性化してない )\r
+                       if (base.b活性化してない)\r
                                return 0;\r
 \r
                        #region [ 初めての進行描画 ]\r
                        //-----------------------------\r
-                       if( base.b初めての進行描画 )\r
+                       if (base.b初めての進行描画)\r
                        {\r
-                               Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;\r
-                               if( this.sd読み込み音 != null )\r
+                               Cスコア cスコア1 = CDTXMania.Instance.stage選曲.r確定されたスコア;\r
+                               if (this.sd読み込み音 != null)\r
                                {\r
-                                       if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )\r
+                                       if (CDTXMania.Instance.Skin.sound曲読込開始音.b排他 && (CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null))\r
                                        {\r
                                                CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();\r
                                        }\r
                                        this.sd読み込み音.t再生を開始する();\r
-                                       this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
+                                       this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;\r
                                        this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;\r
                                }\r
                                else\r
                                {\r
-                                       CDTXMania.Skin.sound曲読込開始音.t再生する();\r
-                                       this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
-                                       this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ・現在のサウンド;\r
+                                       CDTXMania.Instance.Skin.sound曲読込開始音.t再生する();\r
+                                       this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;\r
+                                       this.nBGMの総再生時間ms = CDTXMania.Instance.Skin.sound曲読込開始音.n長さ_現在のサウンド;\r
                                }\r
-                               this.actFI.tフェードイン開始();\r
+                               //                              this.actFI.tフェードイン開始();                                                 // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略\r
                                base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
                                base.b初めての進行描画 = false;\r
+\r
+                               nWAVcount = 1;\r
+                               bitmapFilename = new Bitmap(SampleFramework.GameWindowSize.Width, (int)(fFontSizeFilename * Scale.X));\r
+                               graphicsFilename = Graphics.FromImage(bitmapFilename);\r
+                               graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias;\r
+                               ftFilename = new Font("MS PGothic", fFontSizeFilename * Scale.X, FontStyle.Bold, GraphicsUnit.Pixel);\r
                        }\r
                        //-----------------------------\r
                        #endregion\r
 \r
+                       #region [ ESC押下時は選曲画面に戻る ]\r
+                       if (tキー入力())\r
+                       {\r
+                               if (this.sd読み込み音 != null)\r
+                               {\r
+                                       this.sd読み込み音.tサウンドを停止する();\r
+                                       this.sd読み込み音.t解放する();\r
+                               }\r
+                               return (int)E曲読込画面の戻り値.読込中止;\r
+                       }\r
+                       #endregion\r
+\r
                        #region [ 背景、音符+タイトル表示 ]\r
                        //-----------------------------\r
-                       if( this.tx背景 != null )\r
-                               this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
+                       if (this.tx背景 != null)\r
+                               this.tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
 \r
-                       if( this.b音符を表示する )\r
+                       if (this.b音符を表示する)\r
                        {\r
-                               int y = 480 - 45;\r
-                               if( this.tx音符 != null )\r
+                               int y = SampleFramework.GameWindowSize.Height - (int)(fFontSizeTitle * Scale.Y) + (int)(3 * Scale.X);   // 480 - 45;\r
+                               if (this.tx音符 != null)\r
                                {\r
-                                       this.tx音符.t2D描画( CDTXMania.app.Device, this.n音符の表示位置X, y );\r
+                                       this.tx音符.t2D描画(\r
+                                               CDTXMania.Instance.Device,\r
+                                               this.n音符の表示位置X,\r
+                                               y\r
+                                       );\r
                                }\r
-                               if( this.txタイトル != null )\r
+                               if (this.txタイトル != null)\r
                                {\r
-                                       this.txタイトル.t2D描画( CDTXMania.app.Device, (int) ( 640 - ( this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X ) ), y );\r
+                                       this.txタイトル.t2D描画(\r
+                                               CDTXMania.Instance.Device,\r
+                                               (int)(SampleFramework.GameWindowSize.Width - (this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X)),\r
+                                               y\r
+                                       );\r
                                }\r
                        }\r
                        //-----------------------------\r
                        #endregion\r
 \r
-                       switch( base.eフェーズID )\r
+                       switch (base.eフェーズID)\r
                        {\r
                                case CStage.Eフェーズ.共通_フェードイン:\r
-                                       if( this.actFI.On進行描画() != 0 )\r
-                                               base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;\r
-                                       return 0;\r
+                                       //                                      if( this.actFI.On進行描画() != 0 )                                  // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略\r
+                                       // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。\r
+                                       // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。\r
+                                       base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;\r
+                                       return (int)E曲読込画面の戻り値.継続;\r
 \r
                                case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:\r
                                        {\r
+                                               timeBeginLoad = DateTime.Now;\r
+                                               TimeSpan span;\r
                                                str = null;\r
-                                               if( !CDTXMania.bコンパクトモード )\r
-                                                       str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
+                                               if (!CDTXMania.Instance.bコンパクトモード)\r
+                                                       str = CDTXMania.Instance.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
                                                else\r
-                                                       str = CDTXMania.strコンパクトモードファイル;\r
+                                                       str = CDTXMania.Instance.strコンパクトモードファイル;\r
 \r
-                                               CScoreIni ini = new CScoreIni( str + ".score.ini" );\r
-                                               ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
+                                               CScoreIni ini = new CScoreIni(str + ".score.ini");\r
 \r
-                                               if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )\r
-                                                       CDTXMania.DTX.On非活性化();\r
+                                               if ((CDTXMania.Instance.DTX != null) && CDTXMania.Instance.DTX.b活性化してる)\r
+                                                       CDTXMania.Instance.DTX.On非活性化();\r
 \r
-                                               CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );\r
-                                               Trace.TraceInformation( "----曲情報-----------------" );\r
-                                               Trace.TraceInformation( "TITLE: {0}", new object[] { CDTXMania.DTX.TITLE } );\r
-                                               Trace.TraceInformation( "FILE: {0}", new object[] { CDTXMania.DTX.strファイル名の絶対パス } );\r
-                                               Trace.TraceInformation( "---------------------------" );\r
+                                               CDTXMania.Instance.DTX = new CDTX(str, false, ((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0, ini.stファイル.BGMAdjust);\r
+                                               Trace.TraceInformation("----曲情報-----------------");\r
+                                               Trace.TraceInformation("TITLE: {0}", CDTXMania.Instance.DTX.TITLE);\r
+                                               Trace.TraceInformation("FILE: {0}", CDTXMania.Instance.DTX.strファイル名の絶対パス);\r
+                                               Trace.TraceInformation("---------------------------");\r
 \r
-                                               if( CDTXMania.bコンパクトモード )\r
-                                                       CDTXMania.DTX.MIDIレベル = 1;\r
-                                               else\r
-                                                       CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;\r
+                                               // #35411 2015.08.19 chnmr0 add\r
+                                               // Read ghost data by config\r
+                                               // It does not exist a ghost file for 'perfect' actually\r
+                                               STDGBSValue<string> inst = new STDGBSValue<string>();\r
+                                               inst.Drums = "dr";\r
+                                               inst.Guitar = "gt";\r
+                                               inst.Bass = "bs";\r
+                                               if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)\r
+                                               {\r
+                                                       inst.Guitar = "bs";\r
+                                                       inst.Bass = "gt";\r
+                                               }\r
+\r
+                                               for (EPart einst = EPart.Drums; einst <= EPart.Bass; ++einst)\r
+                                               {\r
+                                                       bool readAutoGhostCond = CDTXMania.Instance.ConfigIni.bIsAutoPlay(einst);\r
+\r
+                                                       CDTXMania.Instance.DTX.listTargetGhsotLag[einst] = null;\r
+                                                       CDTXMania.Instance.DTX.listAutoGhostLag[einst] = null;\r
 \r
-                                               CDTXMania.DTX.tWAVの読み込み();\r
-                                               CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );\r
-                                               CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );\r
+                                                       if (readAutoGhostCond)\r
+                                                       {\r
+                                                               string[] prefix = { "perfect", "lastplay", "hiskill", "hiscore", "online" };\r
+                                                               int indPrefix = (int)CDTXMania.Instance.ConfigIni.eAutoGhost[einst].Value;\r
+                                                               string filename = CDTXMania.Instance.DTX.strフォルダ名 + "\\" + CDTXMania.Instance.DTX.strファイル名 + "." + prefix[indPrefix] + "." + inst[einst] + ".ghost";\r
+                                                               if (File.Exists(filename))\r
+                                                               {\r
+                                                                       CDTXMania.Instance.DTX.listAutoGhostLag[einst] = new List<int>();\r
+                                                                       ReadGhost(filename, CDTXMania.Instance.DTX.listAutoGhostLag[einst]);\r
+                                                               }\r
+                                                       }\r
 \r
-                                               if( CDTXMania.ConfigIni.bギタレボモード )\r
-                                                       CDTXMania.stage演奏ギター画面.On活性化();\r
+                                                       if (CDTXMania.Instance.ConfigIni.eTargetGhost[einst].Value != ETargetGhostData.None)\r
+                                                       {\r
+                                                               string[] prefix = { "none", "perfect", "lastplay", "hiskill", "hiscore", "online" };\r
+                                                               int indPrefix = (int)CDTXMania.Instance.ConfigIni.eTargetGhost[einst].Value;\r
+                                                               string filename = CDTXMania.Instance.DTX.strフォルダ名 + "\\" + CDTXMania.Instance.DTX.strファイル名 + "." + prefix[indPrefix] + "." + inst[einst] + ".ghost";\r
+                                                               if (File.Exists(filename))\r
+                                                               {\r
+                                                                       CDTXMania.Instance.DTX.listTargetGhsotLag[einst] = new List<int>();\r
+                                                                       ReadGhost(filename, CDTXMania.Instance.DTX.listTargetGhsotLag[einst]);\r
+                                                               }\r
+                                                               else if (CDTXMania.Instance.ConfigIni.eTargetGhost[einst] == ETargetGhostData.Perfect)\r
+                                                               {\r
+                                                                       // All perfect\r
+                                                                       CDTXMania.Instance.DTX.listTargetGhsotLag[einst] = new List<int>();\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               // #35411 2015.08.19 chnmr0 add ゴースト機能のためList chip 読み込み後楽器パート出現順インデックスを割り振る\r
+                                               STDGBSValue<int> curCount = new STDGBSValue<int>();\r
+                                               foreach (CChip chip in CDTXMania.Instance.DTX.listChip)\r
+                                               {\r
+                                                       if (chip.e楽器パート != EPart.Unknown)\r
+                                                       {\r
+                                                               chip.n楽器パートでの出現順 = curCount[chip.e楽器パート]++;\r
+                                                       }\r
+                                               }\r
+\r
+                                               span = (TimeSpan)(DateTime.Now - timeBeginLoad);\r
+                                               Trace.TraceInformation("DTX読込所要時間:           {0}", span.ToString());\r
+\r
+                                               if (CDTXMania.Instance.bコンパクトモード)\r
+                                                       CDTXMania.Instance.DTX.MIDIレベル = 1;\r
                                                else\r
-                                                       CDTXMania.stage演奏ドラム画面.On活性化();\r
+                                                       CDTXMania.Instance.DTX.MIDIレベル = (CDTXMania.Instance.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI) ? CDTXMania.Instance.stage選曲.n現在選択中の曲の難易度 : 0;\r
+\r
+                                               base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む;\r
+                                               timeBeginLoadWAV = DateTime.Now;\r
+                                               return (int)E曲読込画面の戻り値.継続;\r
+                                       }\r
+\r
+                               case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む:\r
+                                       {\r
+                                               if (nWAVcount == 1 && CDTXMania.Instance.DTX.listWAV.Count > 0)     // #28934 2012.7.7 yyagi (added checking Count)\r
+                                               {\r
+                                                       ShowProgressByFilename(CDTXMania.Instance.DTX.listWAV[nWAVcount].strファイル名);\r
+                                               }\r
+                                               int looptime = (CDTXMania.Instance.ConfigIni.bVSyncWait) ? 3 : 1;\r
+                                               if (CDTXMania.Instance.ConfigIni.bLoadSoundSpeed) looptime = CDTXMania.Instance.DTX.listWAV.Count / 20 + 1; // #xxxxx ikanick 2016.2.21 ロード高速化 垂直同期の有無に関わらず、1フレームに5%ぐらいずつロードする\r
+                                               for (int i = 0; i < looptime && nWAVcount <= CDTXMania.Instance.DTX.listWAV.Count; i++)\r
+                                               {\r
+                                                       if (CDTXMania.Instance.DTX.listWAV[nWAVcount].listこのWAVを使用するチャンネル番号の集合.Count > 0) // #28674 2012.5.8 yyagi\r
+                                                       {\r
+                                                               CDTXMania.Instance.DTX.tWAVの読み込み(CDTXMania.Instance.DTX.listWAV[nWAVcount]);\r
+                                                       }\r
+                                                       nWAVcount++;\r
+                                               }\r
+                                               if (nWAVcount <= CDTXMania.Instance.DTX.listWAV.Count)\r
+                                               {\r
+                                                       double f進捗率 = nWAVcount * 100.0f / CDTXMania.Instance.DTX.listWAV.Count;\r
+                                                       ShowProgressByFilename("" + f進捗率.ToString("0.0") + "% " + nWAVcount + "/" + CDTXMania.Instance.DTX.listWAV.Count + " " + CDTXMania.Instance.DTX.listWAV[nWAVcount].strファイル名);\r
+                                               }\r
+                                               if (nWAVcount > CDTXMania.Instance.DTX.listWAV.Count)\r
+                                               {\r
+                                                       TimeSpan span = (TimeSpan)(DateTime.Now - timeBeginLoadWAV);\r
+                                                       Trace.TraceInformation("WAV読込所要時間({0,4}):     {1}", CDTXMania.Instance.DTX.listWAV.Count, span.ToString());\r
+                                                       timeBeginLoadWAV = DateTime.Now;\r
+\r
+                                                       if (CDTXMania.Instance.ConfigIni.bDynamicBassMixerManagement)\r
+                                                       {\r
+                                                               CDTXMania.Instance.DTX.PlanToAddMixerChannel();\r
+                                                       }\r
+                                                       CDTXMania.Instance.DTX.tギターとベースのランダム化(EPart.Guitar, CDTXMania.Instance.ConfigIni.eRandom.Guitar);\r
+                                                       CDTXMania.Instance.DTX.tギターとベースのランダム化(EPart.Bass, CDTXMania.Instance.ConfigIni.eRandom.Bass);\r
 \r
-                                               if( CDTXMania.ConfigIni.bBGA有効 )\r
-                                                       CDTXMania.DTX.tBMP_BMPTEXの読み込み();\r
+                                                       CDTXMania.Instance.stage演奏画面.On活性化();\r
 \r
-                                               if( CDTXMania.ConfigIni.bAVI有効 )\r
-                                                       CDTXMania.DTX.tAVIの読み込み();\r
+                                                       span = (TimeSpan)(DateTime.Now - timeBeginLoadWAV);\r
+                                                       Trace.TraceInformation("WAV/譜面後処理時間({0,4}):  {1}", (CDTXMania.Instance.DTX.listBMP.Count + CDTXMania.Instance.DTX.listBMPTEX.Count + CDTXMania.Instance.DTX.listAVI.Count), span.ToString());\r
+\r
+                                                       base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む;\r
+                                               }\r
+                                               return (int)E曲読込画面の戻り値.継続;\r
+                                       }\r
+\r
+                               case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む:\r
+                                       {\r
+                                               TimeSpan span;\r
+                                               DateTime timeBeginLoadBMPAVI = DateTime.Now;\r
+                                               if (CDTXMania.Instance.ConfigIni.bBGA)\r
+                                                       CDTXMania.Instance.DTX.tBMP_BMPTEXの読み込み();\r
 \r
-                                               CDTXMania.Timer.t更新();\r
+                                               if (CDTXMania.Instance.ConfigIni.bAVI)\r
+                                                       CDTXMania.Instance.DTX.tAVIの読み込み();\r
+                                               span = (TimeSpan)(DateTime.Now - timeBeginLoadBMPAVI);\r
+                                               Trace.TraceInformation("BMP/AVI読込所要時間({0,4}): {1}", (CDTXMania.Instance.DTX.listBMP.Count + CDTXMania.Instance.DTX.listBMPTEX.Count + CDTXMania.Instance.DTX.listAVI.Count), span.ToString());\r
+\r
+                                               span = (TimeSpan)(DateTime.Now - timeBeginLoad);\r
+                                               Trace.TraceInformation("総読込時間:                {0}", span.ToString());\r
+\r
+                                               if (bitmapFilename != null)\r
+                                               {\r
+                                                       bitmapFilename.Dispose();\r
+                                                       bitmapFilename = null;\r
+                                               }\r
+                                               if (graphicsFilename != null)\r
+                                               {\r
+                                                       graphicsFilename.Dispose();\r
+                                                       graphicsFilename = null;\r
+                                               }\r
+                                               if (ftFilename != null)\r
+                                               {\r
+                                                       ftFilename.Dispose();\r
+                                                       ftFilename = null;\r
+                                               }\r
+                                               CDTXMania.Instance.Timer.t更新();\r
                                                base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;\r
-                                               return 0;\r
+                                               return (int)E曲読込画面の戻り値.継続;\r
                                        }\r
 \r
                                case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:\r
                                        {\r
-                                               long nCurrentTime = CDTXMania.Timer.n現在時刻;\r
-\r
-                                               if( nCurrentTime < this.nBGM再生開始時刻 )\r
+                                               long nCurrentTime = CDTXMania.Instance.Timer.n現在時刻;\r
+                                               if (nCurrentTime < this.nBGM再生開始時刻)\r
                                                        this.nBGM再生開始時刻 = nCurrentTime;\r
 \r
-                                               if( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )\r
+                                               //                                              if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )\r
+                                               if ((nCurrentTime - this.nBGM再生開始時刻) >= (this.nBGMの総再生時間ms))  // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間\r
                                                {\r
-                                                       this.actFO.tフェードアウト開始();\r
+                                                       if (!CDTXMania.Instance.DTXVmode.Enabled)\r
+                                                       {\r
+                                                               this.actFO.tフェードアウト開始();\r
+                                                       }\r
                                                        base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
                                                }\r
-                                               return 0;\r
+                                               return (int)E曲読込画面の戻り値.継続;\r
                                        }\r
 \r
                                case CStage.Eフェーズ.共通_フェードアウト:\r
-                                       if( this.actFO.On進行描画() == 0 )\r
+                                       if (this.actFO.On進行描画() == 0 && !CDTXMania.Instance.DTXVmode.Enabled)   // DTXVモード時は、フェードアウト省略\r
                                                return 0;\r
-                                       return 1;\r
+\r
+                                       if (txFilename != null)\r
+                                       {\r
+                                               txFilename.Dispose();\r
+                                       }\r
+                                       if (this.sd読み込み音 != null)\r
+                                       {\r
+                                               this.sd読み込み音.t解放する();\r
+                                       }\r
+                                       return (int)E曲読込画面の戻り値.読込完了;\r
                        }\r
-                       return 0;\r
+                       return (int)E曲読込画面の戻り値.継続;\r
                }\r
 \r
-               \r
-               // その他\r
+               /// <summary>\r
+               /// ESC押下時、trueを返す\r
+               /// </summary>\r
+               /// <returns></returns>\r
+               protected bool tキー入力()\r
+               {\r
+                       IInputDevice keyboard = CDTXMania.Instance.Input管理.Keyboard;\r
+                       if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Escape))    // escape (exit)\r
+                       {\r
+                               return true;\r
+                       }\r
+                       return false;\r
+               }\r
+\r
+\r
+               private void ShowProgressByFilename(string strファイル名と進捗)\r
+               {\r
+                       if (graphicsFilename != null && ftFilename != null)\r
+                       {\r
+                               graphicsFilename.Clear(Color.Transparent);\r
+                               graphicsFilename.DrawString(strファイル名と進捗, ftFilename, Brushes.White, new RectangleF(0, 0, SampleFramework.GameWindowSize.Width, fFontSizeFilename * Scale.X));\r
+                               if (txFilename != null)\r
+                               {\r
+                                       txFilename.Dispose();\r
+                               }\r
+                               txFilename = new CTexture(CDTXMania.Instance.Device, bitmapFilename, CDTXMania.Instance.TextureFormat);\r
+                               txFilename.vc拡大縮小倍率 = new Vector3(0.5f, 0.5f, 1f);\r
+                               txFilename.t2D描画(\r
+                                       CDTXMania.Instance.Device,\r
+                                       0,\r
+                                       (SampleFramework.GameWindowSize.Height - (int)(txFilename.szテクスチャサイズ.Height * 0.5))\r
+                               );\r
+                       }\r
+               }\r
 \r
-               #region [ private ]\r
-               //-----------------\r
-               private CActFIFOBlack actFI;\r
-               private CActFIFOBlack actFO;\r
-               private bool b音符を表示する;\r
-               private Font ftタイトル表示用フォント;\r
-               private long nBGMの総再生時間ms;\r
-               private long nBGM再生開始時刻;\r
-               private int n音符の表示位置X;\r
-               private CSound sd読み込み音;\r
-               private string strSTAGEFILE;\r
-               private string str曲タイトル;\r
-               private CTexture txタイトル;\r
-               private CTexture tx音符;\r
-               private CTexture tx背景;\r
-               //-----------------\r
-               #endregion\r
        }\r
 }\r