OSDN Git Service

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