OSDN Git Service

#36043 CChipのチャンネル番号の型をEch定義へ変更。それにともなう必要な変更。CChipをCDTXの外へ。CDTXを入力関数をまとめたCDTXInput...
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 06.曲読み込み / CStage曲読み込み.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Diagnostics;\r
5 using System.Drawing;\r
6 using System.IO;\r
7 using SlimDX;\r
8 using System.Drawing.Text;\r
9 using FDK;\r
10 \r
11 namespace DTXMania\r
12 {\r
13         internal class CStage曲読み込み : CStage\r
14         {\r
15                 // コンストラクタ\r
16 \r
17                 public CStage曲読み込み()\r
18                 {\r
19                         base.eステージID = CStage.Eステージ.曲読み込み;\r
20                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
21                         base.b活性化してない = true;\r
22 //                      base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略\r
23                         base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
24                 }\r
25 \r
26 \r
27                 // CStage 実装\r
28 \r
29                 public override void On活性化()\r
30                 {\r
31                         Trace.TraceInformation( "曲読み込みステージを活性化します。" );\r
32                         Trace.Indent();\r
33                         try\r
34                         {\r
35                                 this.str曲タイトル = "";\r
36                                 this.strSTAGEFILE = "";\r
37                                 this.b音符を表示する = false;\r
38                                 this.n音符の表示位置X = 0x308;\r
39                                 this.ftタイトル表示用フォント = new Font( "MS PGothic", fFontSizeTitle * Scale.Y, GraphicsUnit.Pixel );\r
40                                 this.nBGM再生開始時刻 = -1;\r
41                                 this.nBGMの総再生時間ms = 0;\r
42                                 if( this.sd読み込み音 != null )\r
43                                 {\r
44                                         CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );\r
45                                         this.sd読み込み音 = null;\r
46                                 }\r
47 \r
48                                 string strDTXファイルパス = ( CDTXMania.bコンパクトモード ) ?\r
49                                         CDTXMania.strコンパクトモードファイル : CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
50                                 \r
51                                 CDTX cdtx = new CDTX( strDTXファイルパス, true );\r
52                                 this.str曲タイトル = cdtx.TITLE;\r
53                                 if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )\r
54                                 {\r
55                                         this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.STAGEFILE;\r
56                                         this.b音符を表示する = false;\r
57                                 }\r
58                                 else\r
59                                 {\r
60                                         this.strSTAGEFILE = CSkin.Path( @"Graphics\\ScreenNowLoading background.jpg" );\r
61                                         this.b音符を表示する = true;\r
62                                 }\r
63                                 if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )\r
64                                 {\r
65                                         string strNowLoadingサウンドファイルパス = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;\r
66                                         try\r
67                                         {\r
68                                                 this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( strNowLoadingサウンドファイルパス );\r
69                                         }\r
70                                         catch\r
71                                         {\r
72                                                 Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoadingサウンドファイルパス );\r
73                                         }\r
74                                 }\r
75 \r
76                 // #35411 2015.08.19 chnmr0 add\r
77                 // Read ghost data by config\r
78                 // It does not exist a ghost file for 'perfect' actually\r
79                 string [] inst = {"dr", "gt", "bs"};\r
80                                 if( CDTXMania.ConfigIni.bIsSwappedGuitarBass )\r
81                                 {\r
82                                         inst[1] = "bs";\r
83                                         inst[2] = "gt";\r
84                                 }\r
85                 \r
86                 for(int instIndex = 0; instIndex < inst.Length; ++instIndex)\r
87                 {\r
88                     bool readAutoGhostCond = false;\r
89                     readAutoGhostCond |= instIndex == 0 ? CDTXMania.ConfigIni.bドラムが全部オートプレイである : false;\r
90                     readAutoGhostCond |= instIndex == 1 ? CDTXMania.ConfigIni.bギターが全部オートプレイである : false;\r
91                     readAutoGhostCond |= instIndex == 2 ? CDTXMania.ConfigIni.bベースが全部オートプレイである : false;\r
92 \r
93                     CDTXMania.listTargetGhsotLag[instIndex] = null;\r
94                     CDTXMania.listAutoGhostLag[instIndex] = null;\r
95 \r
96                     if ( readAutoGhostCond )\r
97                     {\r
98                         string[] prefix = { "perfect", "lastplay", "hiskill", "hiscore", "online" };\r
99                         int indPrefix = (int)CDTXMania.ConfigIni.eAutoGhost[instIndex];\r
100                         string filename = cdtx.strフォルダ名 + "\\" + cdtx.strファイル名 + "." + prefix[indPrefix] + "." + inst[instIndex] + ".ghost";\r
101                         if ( File.Exists(filename) )\r
102                         {\r
103                             CDTXMania.listAutoGhostLag[instIndex] = new List<int>();\r
104                             ReadGhost(filename, CDTXMania.listAutoGhostLag[instIndex]);\r
105                         }\r
106                     }\r
107 \r
108                     if( CDTXMania.ConfigIni.eTargetGhost[instIndex] != ETargetGhostData.NONE )\r
109                     {\r
110                         string[] prefix = { "none", "perfect", "lastplay", "hiskill", "hiscore", "online" };\r
111                         int indPrefix = (int)CDTXMania.ConfigIni.eTargetGhost[instIndex];\r
112                         string filename = cdtx.strフォルダ名 + "\\" + cdtx.strファイル名 + "." + prefix[indPrefix] + "." + inst[instIndex] + ".ghost";\r
113                         if (File.Exists(filename))\r
114                         {\r
115                             CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();\r
116                             ReadGhost(filename, CDTXMania.listTargetGhsotLag[instIndex]);\r
117                         }\r
118                         else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )\r
119                         {\r
120                             // All perfect\r
121                             CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();\r
122                         }\r
123                     }\r
124                 }\r
125 \r
126                                 cdtx.On非活性化();\r
127                                 base.On活性化();\r
128                         }\r
129                         finally\r
130                         {\r
131                                 Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );\r
132                                 Trace.Unindent();\r
133                         }\r
134                 }\r
135 \r
136         private void ReadGhost(string filename, List<int> list) // #35411 2015.08.19 chnmr0 add\r
137         {\r
138             if (File.Exists(filename))\r
139             {\r
140                 using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))\r
141                 {\r
142                     using (BinaryReader br = new BinaryReader(fs))\r
143                     {\r
144                         try\r
145                         {\r
146                             int cnt = br.ReadInt32();\r
147                             for (int i = 0; i < cnt; ++i)\r
148                             {\r
149                                 short lag = br.ReadInt16();\r
150                                 list.Add(lag);\r
151                             }\r
152                         }\r
153                         catch( EndOfStreamException )\r
154                         {\r
155                             Trace.TraceInformation("ゴーストデータは正しく読み込まれませんでした。");\r
156                             list.Clear();\r
157                         }\r
158                     }\r
159                 }\r
160             }\r
161         }\r
162 \r
163                 public override void On非活性化()\r
164                 {\r
165                         Trace.TraceInformation( "曲読み込みステージを非活性化します。" );\r
166                         Trace.Indent();\r
167                         try\r
168                         {\r
169                                 if( this.ftタイトル表示用フォント != null )\r
170                                 {\r
171                                         this.ftタイトル表示用フォント.Dispose();\r
172                                         this.ftタイトル表示用フォント = null;\r
173                                 }\r
174                                 base.On非活性化();\r
175                         }\r
176                         finally\r
177                         {\r
178                                 Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );\r
179                                 Trace.Unindent();\r
180                         }\r
181                 }\r
182                 public override void OnManagedリソースの作成()\r
183                 {\r
184                         if( !base.b活性化してない )\r
185                         {\r
186                                 this.tx音符 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\\ScreenNowLoading onpu.png" ), false );\r
187                                 this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );\r
188 \r
189                                 if ( !this.b音符を表示する && this.tx背景 != null )\r
190                                 {\r
191                                         this.tx背景.vc拡大縮小倍率 = new Vector3( Scale.X, Scale.Y, 1f );       // とりあえずFullHD化\r
192                                 }\r
193                                 if ( this.b音符を表示する )\r
194                                 {\r
195                                         try\r
196                                         {\r
197                                                 if( ( this.str曲タイトル != null ) && ( this.str曲タイトル.Length > 0 ) )\r
198                                                 {\r
199                                                         Bitmap image = new Bitmap( 1, 1 );\r
200                                                         Graphics graphics = Graphics.FromImage( image );\r
201                                                         SizeF ef = graphics.MeasureString( this.str曲タイトル, this.ftタイトル表示用フォント );\r
202                                                         Size size = new Size( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) ef.Height ) );\r
203                                                         graphics.Dispose();\r
204                                                         image.Dispose();\r
205                                                         image = new Bitmap( size.Width, size.Height );\r
206                                                         graphics = Graphics.FromImage( image );\r
207                                                         graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
208                                                         graphics.DrawString( this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, ( float ) 0f, ( float ) 0f );\r
209                                                         graphics.Dispose();\r
210                                                         this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
211                                                         this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
212                                                         image.Dispose();\r
213                                                         this.n音符の表示位置X = ( ( SampleFramework.GameWindowSize.Width - ( (int) ( size.Width * this.txタイトル.vc拡大縮小倍率.X ) ) ) - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
214                                                 }\r
215                                                 else\r
216                                                 {\r
217                                                         this.txタイトル = null;\r
218                                                         this.n音符の表示位置X = ( SampleFramework.GameWindowSize.Width - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
219                                                 }\r
220                                         }\r
221                                         catch( CTextureCreateFailedException )\r
222                                         {\r
223                                                 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE } );\r
224                                                 this.txタイトル = null;\r
225                                                 this.tx背景 = null;\r
226                                         }\r
227                                 }\r
228                                 else\r
229                                 {\r
230                                         this.txタイトル = null;\r
231                                 }\r
232                                 base.OnManagedリソースの作成();\r
233                         }\r
234                 }\r
235                 public override void OnManagedリソースの解放()\r
236                 {\r
237                         if( !base.b活性化してない )\r
238                         {\r
239                                 CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
240                                 CDTXMania.tテクスチャの解放( ref this.tx音符 );\r
241                                 CDTXMania.tテクスチャの解放( ref this.txタイトル );\r
242                                 base.OnManagedリソースの解放();\r
243                         }\r
244                 }\r
245                 public override int On進行描画()\r
246                 {\r
247                         string str;\r
248 \r
249                         if( base.b活性化してない )\r
250                                 return 0;\r
251 \r
252                         #region [ 初めての進行描画 ]\r
253                         //-----------------------------\r
254                         if( base.b初めての進行描画 )\r
255                         {\r
256                                 Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;\r
257                                 if( this.sd読み込み音 != null )\r
258                                 {\r
259                                         if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )\r
260                                         {\r
261                                                 CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();\r
262                                         }\r
263                                         this.sd読み込み音.t再生を開始する();\r
264                                         this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;\r
265                                         this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;\r
266                                 }\r
267                                 else\r
268                                 {\r
269                                         CDTXMania.Skin.sound曲読込開始音.t再生する();\r
270                                         this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;\r
271                                         this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ_現在のサウンド;\r
272                                 }\r
273 //                              this.actFI.tフェードイン開始();                                                 // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略\r
274                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
275                                 base.b初めての進行描画 = false;\r
276 \r
277                                 nWAVcount = 1;\r
278                                 bitmapFilename = new Bitmap( SampleFramework.GameWindowSize.Width, (int)(fFontSizeFilename * Scale.X) );\r
279                                 graphicsFilename = Graphics.FromImage( bitmapFilename );\r
280                                 graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias;\r
281                                 ftFilename = new Font( "MS PGothic", fFontSizeFilename * Scale.X, FontStyle.Bold, GraphicsUnit.Pixel );\r
282                         }\r
283                         //-----------------------------\r
284                         #endregion\r
285 \r
286                         #region [ ESC押下時は選曲画面に戻る ]\r
287                         if ( tキー入力() )\r
288                         {\r
289                                 if ( this.sd読み込み音 != null )\r
290                                 {\r
291                                         this.sd読み込み音.tサウンドを停止する();\r
292                                         this.sd読み込み音.t解放する();\r
293                                 }\r
294                                 return (int) E曲読込画面の戻り値.読込中止;\r
295                         }\r
296                         #endregion\r
297 \r
298                         #region [ 背景、音符+タイトル表示 ]\r
299                         //-----------------------------\r
300                         if( this.tx背景 != null )\r
301                                 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
302 \r
303                         if ( this.b音符を表示する )\r
304                         {\r
305                                 int y = SampleFramework.GameWindowSize.Height - (int) ( fFontSizeTitle * Scale.Y ) + (int) ( 3 * Scale.X );     // 480 - 45;\r
306                                 if ( this.tx音符 != null )\r
307                                 {\r
308                                         this.tx音符.t2D描画(\r
309                                                 CDTXMania.app.Device,\r
310                                                 this.n音符の表示位置X,\r
311                                                 y\r
312                                         );\r
313                                 }\r
314                                 if ( this.txタイトル != null )\r
315                                 {\r
316                                         this.txタイトル.t2D描画(\r
317                                                 CDTXMania.app.Device,\r
318                                                 (int) ( SampleFramework.GameWindowSize.Width - ( this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X ) ),\r
319                                                 y\r
320                                         );\r
321                                 }\r
322                         }\r
323                         //-----------------------------\r
324                         #endregion\r
325 \r
326                         switch( base.eフェーズID )\r
327                         {\r
328                                 case CStage.Eフェーズ.共通_フェードイン:\r
329 //                                      if( this.actFI.On進行描画() != 0 )                                  // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略\r
330                                                                                                                                                 // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。\r
331                                                                                                                                                 // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。\r
332                                                 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;\r
333                                         return (int) E曲読込画面の戻り値.継続;\r
334 \r
335                                 case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:\r
336                                         {\r
337                                                 timeBeginLoad = DateTime.Now;\r
338                                                 TimeSpan span;\r
339                                                 str = null;\r
340                                                 if( !CDTXMania.bコンパクトモード )\r
341                                                         str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
342                                                 else\r
343                                                         str = CDTXMania.strコンパクトモードファイル;\r
344 \r
345                                                 CScoreIni ini = new CScoreIni( str + ".score.ini" );\r
346                                                 ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
347 \r
348                                                 if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )\r
349                                                         CDTXMania.DTX.On非活性化();\r
350 \r
351                                                 CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );\r
352                                                 Trace.TraceInformation( "----曲情報-----------------" );\r
353                                                 Trace.TraceInformation( "TITLE: {0}", CDTXMania.DTX.TITLE );\r
354                                                 Trace.TraceInformation( "FILE: {0}",  CDTXMania.DTX.strファイル名の絶対パス );\r
355                                                 Trace.TraceInformation( "---------------------------" );\r
356 \r
357                         // #35411 2015.08.19 chnmr0 add ゴースト機能のためList chip 読み込み後楽器パート出現順インデックスを割り振る\r
358                         int[] curCount = new int[(int)E楽器パート.UNKNOWN];\r
359                         for (int i = 0; i < curCount.Length; ++i)\r
360                         {\r
361                             curCount[i] = 0;\r
362                         }\r
363                         foreach (CChip chip in CDTXMania.DTX.listChip)\r
364                         {\r
365                             if (chip.e楽器パート != E楽器パート.UNKNOWN)\r
366                             {\r
367                                 chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;\r
368                             }\r
369                         }\r
370 \r
371                                                 span = (TimeSpan) ( DateTime.Now - timeBeginLoad );\r
372                                                 Trace.TraceInformation( "DTX読込所要時間:           {0}", span.ToString() );\r
373 \r
374                                                 if ( CDTXMania.bコンパクトモード )\r
375                                                         CDTXMania.DTX.MIDIレベル = 1;\r
376                                                 else\r
377                                                         CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;\r
378 \r
379                                                 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む;\r
380                                                 timeBeginLoadWAV = DateTime.Now;\r
381                                                 return (int) E曲読込画面の戻り値.継続;\r
382                                         }\r
383 \r
384                                 case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む:\r
385                                         {\r
386                                                 if ( nWAVcount == 1 && CDTXMania.DTX.listWAV.Count > 0 )                        // #28934 2012.7.7 yyagi (added checking Count)\r
387                                                 {\r
388                                                         ShowProgressByFilename( CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );\r
389                                                 }\r
390                                                 int looptime = ( CDTXMania.ConfigIni.b垂直帰線待ちを行う ) ? 3 : 1; \r
391                                                 if ( CDTXMania.ConfigIni.b曲読み込みを高速化する ) looptime = CDTXMania.DTX.listWAV.Count / 20 + 1; // #xxxxx ikanick 2016.2.21 ロード高速化 垂直同期の有無に関わらず、1フレームに5%ぐらいずつロードする\r
392                                                 for ( int i = 0; i < looptime && nWAVcount <= CDTXMania.DTX.listWAV.Count; i++ )\r
393                                                 {\r
394                                                         if ( CDTXMania.DTX.listWAV[ nWAVcount ].listこのWAVを使用するチャンネル番号の集合.Count > 0 )  // #28674 2012.5.8 yyagi\r
395                                                         {\r
396                                                                 CDTXMania.DTX.tWAVの読み込み( CDTXMania.DTX.listWAV[ nWAVcount ] );\r
397                                                         }\r
398                                                         nWAVcount++;\r
399                                                 }\r
400                                                 if ( nWAVcount <= CDTXMania.DTX.listWAV.Count )\r
401                                                 {\r
402                                                         double f進捗率 = nWAVcount * 100.0f / CDTXMania.DTX.listWAV.Count;\r
403                                                         ShowProgressByFilename( "" + f進捗率.ToString("0.0") + "% " + nWAVcount + "/" + CDTXMania.DTX.listWAV.Count + " " + CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );\r
404                                                 }\r
405                                                 if ( nWAVcount > CDTXMania.DTX.listWAV.Count )\r
406                                                 {\r
407                                                         TimeSpan span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadWAV );\r
408                                                         Trace.TraceInformation( "WAV読込所要時間({0,4}):     {1}", CDTXMania.DTX.listWAV.Count, span.ToString() );\r
409                                                         timeBeginLoadWAV = DateTime.Now;\r
410 \r
411                                                         if ( CDTXMania.ConfigIni.bDynamicBassMixerManagement )\r
412                                                         {\r
413                                                                 CDTXMania.DTX.PlanToAddMixerChannel();\r
414                                                         }\r
415                                                         CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );\r
416                                                         CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );\r
417 \r
418                                                         if ( CDTXMania.ConfigIni.bギタレボモード )\r
419                                                                 CDTXMania.stage演奏ギター画面.On活性化();\r
420                                                         else\r
421                                                                 CDTXMania.stage演奏ドラム画面.On活性化();\r
422 \r
423                                                         span = (TimeSpan) ( DateTime.Now - timeBeginLoadWAV );\r
424                                                         Trace.TraceInformation( "WAV/譜面後処理時間({0,4}):  {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );\r
425 \r
426                                                         base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む;\r
427                                                 }\r
428                                                 return (int) E曲読込画面の戻り値.継続;\r
429                                         }\r
430 \r
431                                 case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む:\r
432                                         {\r
433                                                 TimeSpan span;\r
434                                                 DateTime timeBeginLoadBMPAVI = DateTime.Now;\r
435                                                 if ( CDTXMania.ConfigIni.bBGA有効 )\r
436                                                         CDTXMania.DTX.tBMP_BMPTEXの読み込み();\r
437 \r
438                                                 if ( CDTXMania.ConfigIni.bAVI有効 )\r
439                                                         CDTXMania.DTX.tAVIの読み込み();\r
440                                                 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadBMPAVI );\r
441                                                 Trace.TraceInformation( "BMP/AVI読込所要時間({0,4}): {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );\r
442 \r
443                                                 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoad );\r
444                                                 Trace.TraceInformation( "総読込時間:                {0}", span.ToString() );\r
445 \r
446                                                 if ( bitmapFilename != null )\r
447                                                 {\r
448                                                         bitmapFilename.Dispose();\r
449                                                         bitmapFilename = null;\r
450                                                 }\r
451                                                 if ( graphicsFilename != null )\r
452                                                 {\r
453                                                         graphicsFilename.Dispose();\r
454                                                         graphicsFilename = null;\r
455                                                 }\r
456                                                 if ( ftFilename != null )\r
457                                                 {\r
458                                                         ftFilename.Dispose();\r
459                                                         ftFilename = null;\r
460                                                 }\r
461                                                 CDTXMania.Timer.t更新();\r
462                                                 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;\r
463                                                 return (int) E曲読込画面の戻り値.継続;\r
464                                         }\r
465 \r
466                                 case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:\r
467                                         {\r
468                                                 long nCurrentTime = CDTXMania.Timer.n現在時刻;\r
469                                                 if( nCurrentTime < this.nBGM再生開始時刻 )\r
470                                                         this.nBGM再生開始時刻 = nCurrentTime;\r
471 \r
472 //                                              if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )\r
473                                                 if ( ( nCurrentTime - this.nBGM再生開始時刻 ) >= ( this.nBGMの総再生時間ms ) )      // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間\r
474                                                 {\r
475                                                         if ( !CDTXMania.DTXVmode.Enabled )\r
476                                                         {\r
477                                                                 this.actFO.tフェードアウト開始();\r
478                                                         }\r
479                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
480                                                 }\r
481                                                 return (int) E曲読込画面の戻り値.継続;\r
482                                         }\r
483 \r
484                                 case CStage.Eフェーズ.共通_フェードアウト:\r
485                                         if ( this.actFO.On進行描画() == 0 && !CDTXMania.DTXVmode.Enabled )          // DTXVモード時は、フェードアウト省略\r
486                                                 return 0;\r
487 \r
488                                         if ( txFilename != null )\r
489                                         {\r
490                                                 txFilename.Dispose();\r
491                                         }\r
492                                         if ( this.sd読み込み音 != null )\r
493                                         {\r
494                                                 this.sd読み込み音.t解放する();\r
495                                         }\r
496                                         return (int) E曲読込画面の戻り値.読込完了;\r
497                         }\r
498                         return (int) E曲読込画面の戻り値.継続;\r
499                 }\r
500 \r
501                 /// <summary>\r
502                 /// ESC押下時、trueを返す\r
503                 /// </summary>\r
504                 /// <returns></returns>\r
505                 protected bool tキー入力()\r
506                 {\r
507                         IInputDevice keyboard = CDTXMania.Input管理.Keyboard;\r
508                         if      ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) )              // escape (exit)\r
509                         {\r
510                                 return true;\r
511                         }\r
512                         return false;\r
513                 }\r
514 \r
515 \r
516                 private void ShowProgressByFilename(string strファイル名と進捗 )\r
517                 {\r
518                         if ( graphicsFilename != null && ftFilename != null )\r
519                         {\r
520                                 graphicsFilename.Clear( Color.Transparent );\r
521                                 graphicsFilename.DrawString( strファイル名と進捗, ftFilename, Brushes.White, new RectangleF( 0, 0, SampleFramework.GameWindowSize.Width, fFontSizeFilename * Scale.X ) );\r
522                                 if ( txFilename != null )\r
523                                 {\r
524                                         txFilename.Dispose();\r
525                                 }\r
526                                 txFilename = new CTexture( CDTXMania.app.Device, bitmapFilename, CDTXMania.TextureFormat );\r
527                                 txFilename.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
528                                 txFilename.t2D描画(\r
529                                         CDTXMania.app.Device,\r
530                                         0,\r
531                                         ( SampleFramework.GameWindowSize.Height - (int) ( txFilename.szテクスチャサイズ.Height * 0.5 ) )\r
532                                 );\r
533                         }\r
534                 }\r
535 \r
536                 // その他\r
537 \r
538                 #region [ private ]\r
539                 //-----------------\r
540 //              private CActFIFOBlack actFI;\r
541                 private CActFIFOBlack actFO;\r
542                 private bool b音符を表示する;\r
543                 private Font ftタイトル表示用フォント;\r
544                 private long nBGMの総再生時間ms;\r
545                 private long nBGM再生開始時刻;\r
546                 private int n音符の表示位置X;\r
547                 private CSound sd読み込み音;\r
548                 private string strSTAGEFILE;\r
549                 private string str曲タイトル;\r
550                 private CTexture txタイトル;\r
551                 private CTexture tx音符;\r
552                 private CTexture tx背景;\r
553                 private DateTime timeBeginLoad;\r
554                 private DateTime timeBeginLoadWAV;\r
555                 private int nWAVcount;\r
556                 private CTexture txFilename;\r
557                 private Bitmap bitmapFilename;\r
558                 private Graphics graphicsFilename;\r
559                 private Font ftFilename;\r
560                 private const float fFontSizeFilename = 12.0f;\r
561                 private const float fFontSizeTitle = 48;\r
562                 //-----------------\r
563                 #endregion\r
564         }\r
565 }\r