OSDN Git Service

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