OSDN Git Service

#36057 コンフィグまわりのリファクタ(リソース不完全なので注意)
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 05.選曲 / CStage選曲.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.Diagnostics;\r
7 using System.IO;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CStage選曲 : CStage\r
13         {\r
14                 // プロパティ\r
15                 public int nスクロールバー相対y座標\r
16                 {\r
17                         get\r
18                         {\r
19                                 if (act曲リスト != null)\r
20                                 {\r
21                                         return act曲リスト.nスクロールバー相対y座標;\r
22                                 }\r
23                                 else\r
24                                 {\r
25                                         return 0;\r
26                                 }\r
27                         }\r
28                 }\r
29                 public bool bIsEnumeratingSongs\r
30                 {\r
31                         get\r
32                         {\r
33                                 return act曲リスト.bIsEnumeratingSongs;\r
34                         }\r
35                         set\r
36                         {\r
37                                 act曲リスト.bIsEnumeratingSongs = value;\r
38                         }\r
39                 }\r
40                 public bool bIsPlayingPremovie\r
41                 {\r
42                         get\r
43                         {\r
44                                 return this.actPreimageパネル.bIsPlayingPremovie;\r
45                         }\r
46                 }\r
47                 public bool bスクロール中\r
48                 {\r
49                         get\r
50                         {\r
51                                 return this.act曲リスト.bスクロール中;\r
52                         }\r
53                 }\r
54                 public int n確定された曲の難易度\r
55                 {\r
56                         get;\r
57                         private set;\r
58                 }\r
59                 public Cスコア r確定されたスコア\r
60                 {\r
61                         get;\r
62                         private set;\r
63                 }\r
64                 public C曲リストノード r確定された曲\r
65                 {\r
66                         get;\r
67                         private set;\r
68                 }\r
69                 public int n現在選択中の曲の難易度\r
70                 {\r
71                         get\r
72                         {\r
73                                 return this.act曲リスト.n現在選択中の曲の現在の難易度レベル;\r
74                         }\r
75                 }\r
76                 public Cスコア r現在選択中のスコア\r
77                 {\r
78                         get\r
79                         {\r
80                                 return this.act曲リスト.r現在選択中のスコア;\r
81                         }\r
82                 }\r
83                 public C曲リストノード r現在選択中の曲\r
84                 {\r
85                         get\r
86                         {\r
87                                 return this.act曲リスト.r現在選択中の曲;\r
88                         }\r
89                 }\r
90 \r
91                 // コンストラクタ\r
92                 public CStage選曲()\r
93                 {\r
94                         eステージID = CStage.Eステージ.選曲;\r
95                         eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
96                         b活性化してない = true;\r
97                         list子Activities.Add(this.actオプションパネル = new CActオプションパネル(EOptionPanelDirection.Horizontal));\r
98                         list子Activities.Add(this.actFIFO = new CActFIFOBlack());\r
99                         list子Activities.Add(this.actFIfrom結果画面 = new CActFIFOBlack());\r
100                         list子Activities.Add(this.act曲リスト = new CActSelect曲リスト());\r
101                         list子Activities.Add(this.actステータスパネル = new CActSelectステータスパネル());\r
102                         list子Activities.Add(this.act演奏履歴パネル = new CActSelect演奏履歴パネル());\r
103                         list子Activities.Add(this.actPreimageパネル = new CActSelectPreimageパネル());\r
104                         list子Activities.Add(this.actPresound = new CActSelectPresound());\r
105                         list子Activities.Add(this.actArtistComment = new CActSelectArtistComment());\r
106                         list子Activities.Add(this.actInformation = new CActSelectInformation());\r
107                         list子Activities.Add(this.actSortSongs = new CActSortSongs());\r
108                         list子Activities.Add(this.actShowCurrentPosition = new CActSelectShowCurrentPosition());\r
109                         list子Activities.Add(this.actQuickConfig = new CActSelectQuickConfig());\r
110                         list子Activities.Add(this.actAVI = new CAct演奏AVI());\r
111 \r
112                         CommandHistory = new CCommandHistory();    // #24063 2011.1.16 yyagi\r
113                         actPreimageパネル.actAVI = this.actAVI;\r
114                 }\r
115 \r
116 \r
117                 // メソッド\r
118 \r
119                 public void t選択曲変更通知()\r
120                 {\r
121                         this.actPreimageパネル.t選択曲が変更された();\r
122                         this.actPresound.t選択曲が変更された();\r
123                         this.act演奏履歴パネル.t選択曲が変更された();\r
124                         this.actステータスパネル.t選択曲が変更された();\r
125                         this.actArtistComment.t選択曲が変更された();\r
126 \r
127                         #region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)]\r
128                         //---------------------\r
129                         if (CDTXMania.Instance != null)\r
130                         {\r
131                                 var c曲リストノード = CDTXMania.Instance.stage選曲.r現在選択中の曲;\r
132                                 var cスコア = CDTXMania.Instance.stage選曲.r現在選択中のスコア;\r
133 \r
134                                 if (c曲リストノード != null && cスコア != null && c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE)\r
135                                 {\r
136                                         string str選択曲ファイル名 = cスコア.ファイル情報.ファイルの絶対パス;\r
137                                         CSetDef setDef = null;\r
138                                         int nブロック番号inSetDef = -1;\r
139                                         int n曲番号inブロック = -1;\r
140 \r
141                                         if (!string.IsNullOrEmpty(c曲リストノード.pathSetDefの絶対パス) && File.Exists(c曲リストノード.pathSetDefの絶対パス))\r
142                                         {\r
143                                                 setDef = new CSetDef(c曲リストノード.pathSetDefの絶対パス);\r
144                                                 nブロック番号inSetDef = c曲リストノード.SetDefのブロック番号;\r
145                                                 n曲番号inブロック = CDTXMania.Instance.stage選曲.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(c曲リストノード);\r
146                                         }\r
147 \r
148                                         foreach (STPlugin stPlugin in CDTXMania.Instance.listプラグイン)\r
149                                         {\r
150                                                 Directory.SetCurrentDirectory(stPlugin.strプラグインフォルダ);\r
151                                                 stPlugin.plugin.On選択曲変更(str選択曲ファイル名, setDef, nブロック番号inSetDef, n曲番号inブロック);\r
152                                                 Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
153                                         }\r
154                                 }\r
155                         }\r
156                         //---------------------\r
157                         #endregion\r
158                 }\r
159 \r
160                 // CStage 実装\r
161 \r
162                 /// <summary>\r
163                 /// 曲リストをリセットする\r
164                 /// </summary>\r
165                 /// <param name="cs"></param>\r
166                 public void Refresh(CSongs管理 cs, bool bRemakeSongTitleBar)\r
167                 {\r
168                         this.act曲リスト.Refresh(cs, bRemakeSongTitleBar);\r
169                 }\r
170 \r
171                 public override void On活性化()\r
172                 {\r
173                         Trace.TraceInformation("選曲ステージを活性化します。");\r
174                         Trace.Indent();\r
175                         try\r
176                         {\r
177                                 this.eフェードアウト完了時の戻り値 = E戻り値.継続;\r
178                                 this.bBGM再生済み = false;\r
179                                 this.ftフォント = new Font("MS PGothic", 26f * Scale.X, GraphicsUnit.Pixel);\r
180                                 for (int i = 0; i < 4; i++)\r
181                                 {\r
182                                         this.ctキー反復用[i] = new CCounter(0, 0, 0, CDTXMania.Instance.Timer);\r
183                                 }\r
184                                 this.actステータスパネル.t選択曲が変更された();  // 最大ランクを更新\r
185                                 actオプションパネル.Pos = CDTXMania.Instance.Coordinates.OptionPanelSelect;\r
186                                 base.On活性化();\r
187                         }\r
188                         finally\r
189                         {\r
190                                 Trace.TraceInformation("選曲ステージの活性化を完了しました。");\r
191                                 Trace.Unindent();\r
192                         }\r
193                 }\r
194                 public override void On非活性化()\r
195                 {\r
196                         Trace.TraceInformation("選曲ステージを非活性化します。");\r
197                         Trace.Indent();\r
198                         try\r
199                         {\r
200                                 if (this.ftフォント != null)\r
201                                 {\r
202                                         this.ftフォント.Dispose();\r
203                                         this.ftフォント = null;\r
204                                 }\r
205                                 for (int i = 0; i < 4; i++)\r
206                                 {\r
207                                         this.ctキー反復用[i] = null;\r
208                                 }\r
209                                 base.On非活性化();\r
210                         }\r
211                         finally\r
212                         {\r
213                                 Trace.TraceInformation("選曲ステージの非活性化を完了しました。");\r
214                                 Trace.Unindent();\r
215                         }\r
216                 }\r
217                 public override void OnManagedリソースの作成()\r
218                 {\r
219                         if (!base.b活性化してない)\r
220                         {\r
221                                 this.tx背景 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect background.jpg"), false);\r
222                                 this.tx上部パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenSelect header panel.png"), true);\r
223                                 this.tx下部パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenSelect footer panel.png"), true);\r
224                                 this.txコメントバー = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenSelect comment bar.png"), true);\r
225                                 this.txFLIP = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect skill number on gauge etc.png"), false);\r
226                                 base.OnManagedリソースの作成();\r
227                         }\r
228                 }\r
229                 public override void OnManagedリソースの解放()\r
230                 {\r
231                         if (!base.b活性化してない)\r
232                         {\r
233                                 TextureFactory.tテクスチャの解放(ref this.tx背景);\r
234                                 TextureFactory.tテクスチャの解放(ref this.tx上部パネル);\r
235                                 TextureFactory.tテクスチャの解放(ref this.tx下部パネル);\r
236                                 TextureFactory.tテクスチャの解放(ref this.txコメントバー);\r
237                                 TextureFactory.tテクスチャの解放(ref this.txFLIP);\r
238                                 base.OnManagedリソースの解放();\r
239                         }\r
240                 }\r
241                 public override int On進行描画()\r
242                 {\r
243                         if (!base.b活性化してない)\r
244                         {\r
245                                 #region [ 初めての進行描画 ]\r
246                                 //---------------------\r
247                                 if (base.b初めての進行描画)\r
248                                 {\r
249                                         this.ct登場時アニメ用共通 = new CCounter(0, 100, 3, CDTXMania.Instance.Timer);\r
250                                         if (CDTXMania.Instance.r直前のステージ == CDTXMania.Instance.stage結果)\r
251                                         {\r
252                                                 this.actFIfrom結果画面.tフェードイン開始();\r
253                                                 base.eフェーズID = CStage.Eフェーズ.選曲_結果画面からのフェードイン;\r
254                                         }\r
255                                         else\r
256                                         {\r
257                                                 this.actFIFO.tフェードイン開始();\r
258                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
259                                         }\r
260                                         this.t選択曲変更通知();\r
261                                         base.b初めての進行描画 = false;\r
262                                 }\r
263                                 //---------------------\r
264                                 #endregion\r
265 \r
266                                 this.ct登場時アニメ用共通.t進行();\r
267 \r
268                                 if (this.tx背景 != null)\r
269                                         this.tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
270 \r
271                                 this.actPreimageパネル.On進行描画();\r
272                                 //      this.bIsEnumeratingSongs = !this.actPreimageパネル.bIsPlayingPremovie;                               // #27060 2011.3.2 yyagi: #PREMOVIE再生中は曲検索を中断する\r
273 \r
274                                 this.act曲リスト.On進行描画();\r
275                                 int y = 0;\r
276                                 if (this.ct登場時アニメ用共通.b進行中)\r
277                                 {\r
278                                         double db登場割合 = ((double)this.ct登場時アニメ用共通.n現在の値) / 100.0; // 100が最終値\r
279                                         double dbY表示割合 = Math.Sin(Math.PI / 2 * db登場割合);\r
280                                         y = ((int)(this.tx上部パネル.sz画像サイズ.Height * dbY表示割合)) - this.tx上部パネル.sz画像サイズ.Height;\r
281                                 }\r
282                                 #region [ 上部パネル描画 ]\r
283                                 if (this.tx上部パネル != null)\r
284                                         this.tx上部パネル.t2D描画(\r
285                                                 CDTXMania.Instance.Device,\r
286                                                 0,\r
287                                                 y * Scale.Y\r
288                                         );\r
289                                 #endregion\r
290                                 this.actInformation.On進行描画();\r
291                                 #region [ 下部パネル描画 ]\r
292                                 if (this.tx下部パネル != null)\r
293                                         this.tx下部パネル.t2D描画(\r
294                                                 CDTXMania.Instance.Device,\r
295                                                 0,\r
296                                                 SampleFramework.GameWindowSize.Height - this.tx下部パネル.sz画像サイズ.Height\r
297                                         );\r
298                                 #endregion\r
299                                 this.actステータスパネル.On進行描画();\r
300                                 this.act演奏履歴パネル.On進行描画();\r
301                                 this.actPresound.On進行描画();\r
302                                 #region [  コメントバー描画 ]\r
303                                 if (this.txコメントバー != null)\r
304                                 {\r
305                                         this.txコメントバー.t2D描画(\r
306                                                 CDTXMania.Instance.Device,\r
307                                                 0xf2 * Scale.X,\r
308                                                 0xe4 * Scale.Y\r
309                                         );\r
310                                 }\r
311                                 #endregion\r
312                                 this.actArtistComment.On進行描画();\r
313                                 this.actオプションパネル.On進行描画();\r
314                                 #region [ FLIP描画 ]\r
315                                 if (this.txFLIP != null && CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass) // #24063 2011.1.16 yyagi\r
316                                 {\r
317                                         Rectangle rect = new Rectangle(\r
318                                                 (int)(31 * Scale.X),\r
319                                                 (int)(49 * Scale.Y),\r
320                                                 (int)(20 * Scale.X),\r
321                                                 (int)(11 * Scale.Y)\r
322                                         );\r
323                                         this.txFLIP.t2D描画(\r
324                                                 CDTXMania.Instance.Device,\r
325                                                 40 * Scale.X,\r
326                                                 436 * Scale.Y,\r
327                                                 rect\r
328                                         );\r
329                                 }\r
330                                 #endregion\r
331                                 this.actShowCurrentPosition.On進行描画();               // #27648 2011.3.28 yyagi\r
332 \r
333                                 #region [ フェーズ処理 ]\r
334                                 switch (base.eフェーズID)\r
335                                 {\r
336                                         case CStage.Eフェーズ.共通_フェードイン:\r
337                                                 if (this.actFIFO.On進行描画() != 0)\r
338                                                 {\r
339                                                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
340                                                 }\r
341                                                 break;\r
342 \r
343                                         case CStage.Eフェーズ.共通_フェードアウト:\r
344                                                 if (this.actFIFO.On進行描画() == 0)\r
345                                                 {\r
346                                                         break;\r
347                                                 }\r
348                                                 return (int)this.eフェードアウト完了時の戻り値;\r
349 \r
350                                         case CStage.Eフェーズ.選曲_結果画面からのフェードイン:\r
351                                                 if (this.actFIfrom結果画面.On進行描画() != 0)\r
352                                                 {\r
353                                                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
354                                                 }\r
355                                                 break;\r
356 \r
357                                         case CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト:\r
358                                                 //                                              if( this.actFOtoNowLoading.On進行描画() == 0 )\r
359                                                 //                                              {\r
360                                                 //                                                      break;\r
361                                                 //                                              }\r
362                                                 return (int)this.eフェードアウト完了時の戻り値;\r
363                                 }\r
364                                 #endregion\r
365                                 if (!this.bBGM再生済み && (base.eフェーズID == CStage.Eフェーズ.共通_通常状態))\r
366                                 {\r
367                                         CDTXMania.Instance.Skin.bgm選曲画面.n音量_次に鳴るサウンド = 100;\r
368                                         CDTXMania.Instance.Skin.bgm選曲画面.t再生する();\r
369                                         this.bBGM再生済み = true;\r
370                                 }\r
371 \r
372 \r
373                                 //Debug.WriteLine( "パンくず=" + this.r現在選択中の曲.strBreadcrumbs );\r
374 \r
375 \r
376                                 // キー入力\r
377                                 if (base.eフェーズID == CStage.Eフェーズ.共通_通常状態\r
378                                         && CDTXMania.Instance.act現在入力を占有中のプラグイン == null)\r
379                                 {\r
380                                         #region [ 簡易CONFIGでMore、またはShift+F1: 詳細CONFIG呼び出し ]\r
381                                         if (actQuickConfig.bGotoDetailConfig)\r
382                                         { // 詳細CONFIG呼び出し\r
383                                                 actQuickConfig.tDeativatePopupMenu();\r
384                                                 this.actPresound.tサウンド停止();\r
385                                                 this.eフェードアウト完了時の戻り値 = E戻り値.コンフィグ呼び出し;  // #24525 2011.3.16 yyagi: [SHIFT]-[F1]でCONFIG呼び出し\r
386                                                 this.actFIFO.tフェードアウト開始();\r
387                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
388                                                 CDTXMania.Instance.Skin.sound取消音.t再生する();\r
389                                                 return 0;\r
390                                         }\r
391                                         #endregion\r
392                                         if (!this.actSortSongs.bIsActivePopupMenu && !this.actQuickConfig.bIsActivePopupMenu)\r
393                                         {\r
394                                                 #region [ ESC ]\r
395                                                 if (\r
396                                                 CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Escape) ||\r
397                                                 (CDTXMania.Instance.Pad.bCancelPadIsPressedDGB() &&\r
398                                                 (this.act曲リスト.r現在選択中の曲 != null && this.act曲リスト.r現在選択中の曲.r親ノード == null)))\r
399                                                 {\r
400                                                         CDTXMania.Instance.Skin.sound取消音.t再生する();\r
401                                                         this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る;\r
402                                                         this.actFIFO.tフェードアウト開始();\r
403                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
404                                                         return 0;\r
405                                                 }\r
406                                                 #endregion\r
407                                                 #region [ Shift-F1: CONFIG画面 ]\r
408                                                 if ((CDTXMania.Instance.Input管理.Keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || CDTXMania.Instance.Input管理.Keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)) &&\r
409                                                         CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F1))\r
410                                                 {\r
411                                                         this.actPresound.tサウンド停止();\r
412                                                         // #24525 2011.3.16 yyagi: [SHIFT]-[F1]でCONFIG呼び出し\r
413                                                         this.eフェードアウト完了時の戻り値 = E戻り値.コンフィグ呼び出し;\r
414                                                         this.actFIFO.tフェードアウト開始();\r
415                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
416                                                         CDTXMania.Instance.Skin.sound取消音.t再生する();\r
417                                                         return 0;\r
418                                                 }\r
419                                                 #endregion\r
420                                                 #region [ Shift-F2: 未使用 ]\r
421                                                 // #24525 2011.3.16 yyagi: [SHIFT]+[F2]は廃止(将来発生するかもしれない別用途のためにキープ)\r
422                                                 /*\r
423                                                                                         if ( ( CDTXMania.Instance.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || CDTXMania.Instance.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) &&\r
424                                                                                                 CDTXMania.Instance.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.F2 ) )\r
425                                                                                         {       // [SHIFT] + [F2] CONFIGURATION\r
426                                                                                                 this.actPresound.tサウンド停止();\r
427                                                                                                 this.eフェードアウト完了時の戻り値 = E戻り値.コンフィグ呼び出し;\r
428                                                                                                 this.actFIFO.tフェードアウト開始();\r
429                                                                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
430                                                                                                 CDTXMania.Instance.Skin.sound取消音.t再生する();\r
431                                                                                                 return 0;\r
432                                                                                         }\r
433                                                 */\r
434                                                 #endregion\r
435                                                 if (this.act曲リスト.r現在選択中の曲 != null)\r
436                                                 {\r
437                                                         #region [ Right ]\r
438                                                         if (CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.RightArrow))\r
439                                                         {\r
440                                                                 if (this.act曲リスト.r現在選択中の曲 != null)\r
441                                                                 {\r
442                                                                         switch (this.act曲リスト.r現在選択中の曲.eノード種別)\r
443                                                                         {\r
444                                                                                 case C曲リストノード.Eノード種別.BOX:\r
445                                                                                         {\r
446                                                                                                 CDTXMania.Instance.Skin.sound決定音.t再生する();\r
447                                                                                                 bool bNeedChangeSkin = this.act曲リスト.tBOXに入る();\r
448                                                                                                 if (bNeedChangeSkin)\r
449                                                                                                 {\r
450                                                                                                         this.eフェードアウト完了時の戻り値 = E戻り値.スキン変更;\r
451                                                                                                         base.eフェーズID = Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
452                                                                                                 }\r
453                                                                                         }\r
454                                                                                         break;\r
455                                                                         }\r
456                                                                 }\r
457                                                         }\r
458                                                         #endregion\r
459                                                         #region [ Decide ]\r
460                                                         if (\r
461                                                                 CDTXMania.Instance.Pad.bDecidePadIsPressedDGB() ||\r
462                                                                 (CDTXMania.Instance.ConfigIni.bEnterがキー割り当てのどこにも使用されていない &&\r
463                                                                 CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Return)))\r
464                                                         {\r
465                                                                 CDTXMania.Instance.Skin.sound決定音.t再生する();\r
466                                                                 if (this.act曲リスト.r現在選択中の曲 != null)\r
467                                                                 {\r
468                                                                         switch (this.act曲リスト.r現在選択中の曲.eノード種別)\r
469                                                                         {\r
470                                                                                 case C曲リストノード.Eノード種別.SCORE:\r
471                                                                                         this.t曲を選択する();\r
472                                                                                         break;\r
473 \r
474                                                                                 case C曲リストノード.Eノード種別.SCORE_MIDI:\r
475                                                                                         this.t曲を選択する();\r
476                                                                                         break;\r
477 \r
478                                                                                 case C曲リストノード.Eノード種別.BOX:\r
479                                                                                         {\r
480                                                                                                 bool bNeedChangeSkin = this.act曲リスト.tBOXに入る();\r
481                                                                                                 if (bNeedChangeSkin)\r
482                                                                                                 {\r
483                                                                                                         this.eフェードアウト完了時の戻り値 = E戻り値.スキン変更;\r
484                                                                                                         base.eフェーズID = Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
485                                                                                                 }\r
486                                                                                         }\r
487                                                                                         break;\r
488 \r
489                                                                                 case C曲リストノード.Eノード種別.BACKBOX:\r
490                                                                                         {\r
491                                                                                                 bool bNeedChangeSkin = this.act曲リスト.tBOXを出る();\r
492                                                                                                 if (bNeedChangeSkin)\r
493                                                                                                 {\r
494                                                                                                         this.eフェードアウト完了時の戻り値 = E戻り値.スキン変更;\r
495                                                                                                         base.eフェーズID = Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
496                                                                                                 }\r
497                                                                                         }\r
498                                                                                         break;\r
499 \r
500                                                                                 case C曲リストノード.Eノード種別.RANDOM:\r
501                                                                                         this.t曲をランダム選択する();\r
502                                                                                         break;\r
503                                                                         }\r
504                                                                 }\r
505                                                         }\r
506                                                         #endregion\r
507                                                         #region [ Up ]\r
508                                                         this.ctキー反復用.Up.tキー反復(CDTXMania.Instance.Input管理.Keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.UpArrow), new CCounter.DGキー処理(this.tカーソルを上へ移動する));\r
509                                                         this.ctキー反復用.R.tキー反復(CDTXMania.Instance.Pad.b押されている(EPad.GtR) || CDTXMania.Instance.Pad.b押されている(EPad.BsR), new CCounter.DGキー処理(this.tカーソルを上へ移動する));\r
510                                                         if (CDTXMania.Instance.Pad.b押された(EPad.SD))\r
511                                                         {\r
512                                                                 this.tカーソルを上へ移動する();\r
513                                                         }\r
514                                                         #endregion\r
515                                                         #region [ Down ]\r
516                                                         this.ctキー反復用.Down.tキー反復(CDTXMania.Instance.Input管理.Keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.DownArrow), new CCounter.DGキー処理(this.tカーソルを下へ移動する));\r
517                                                         this.ctキー反復用.B.tキー反復(CDTXMania.Instance.Pad.b押されている(EPad.GtB) || CDTXMania.Instance.Pad.b押されている(EPad.BsB), new CCounter.DGキー処理(this.tカーソルを下へ移動する));\r
518                                                         if (CDTXMania.Instance.Pad.b押された(EPad.LT))\r
519                                                         {\r
520                                                                 this.tカーソルを下へ移動する();\r
521                                                         }\r
522                                                         #endregion\r
523                                                         #region [ Upstairs / Left ]\r
524                                                         if (((this.act曲リスト.r現在選択中の曲 != null) && (this.act曲リスト.r現在選択中の曲.r親ノード != null)) &&\r
525                                                                 (CDTXMania.Instance.Pad.bCancelPadIsPressedDGB() ||\r
526                                                                         CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDX.DirectInput.Key.LeftArrow)))\r
527                                                         {\r
528                                                                 this.actPresound.tサウンド停止();\r
529                                                                 CDTXMania.Instance.Skin.sound取消音.t再生する();\r
530                                                                 this.act曲リスト.tBOXを出る();\r
531                                                                 this.t選択曲変更通知();\r
532                                                         }\r
533                                                         #endregion\r
534                                                         #region [ BDx2: 簡易CONFIG ]\r
535                                                         if (CDTXMania.Instance.Pad.b押された(EPad.BD))\r
536                                                         { // [BD]x2 スクロール速度変更\r
537                                                                 CommandHistory.Add(EPart.Drums, EPadFlag.BD);\r
538                                                                 EPadFlag[] comChangeScrollSpeed = new EPadFlag[] { EPadFlag.BD, EPadFlag.BD };\r
539                                                                 if (CommandHistory.CheckCommand(comChangeScrollSpeed, EPart.Drums))\r
540                                                                 {\r
541                                                                         // Debug.WriteLine( "ドラムススクロール速度変更" );\r
542                                                                         // CDTXMania.Instance.ConfigIni.n譜面スクロール速度.Drums = ( CDTXMania.Instance.ConfigIni.n譜面スクロール速度.Drums + 1 ) % 0x10;\r
543                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
544                                                                         this.actQuickConfig.tActivatePopupMenu(EPart.Drums);\r
545                                                                 }\r
546                                                         }\r
547                                                         #endregion\r
548                                                         #region [ HHx2: 難易度変更 ]\r
549                                                         if (CDTXMania.Instance.Pad.b押された(EPad.HH) || CDTXMania.Instance.Pad.b押された(EPad.HHO))\r
550                                                         { // [HH]x2 難易度変更\r
551                                                                 CommandHistory.Add(EPart.Drums, EPadFlag.HH);\r
552                                                                 EPadFlag[] comChangeDifficulty = new EPadFlag[] { EPadFlag.HH, EPadFlag.HH };\r
553                                                                 if (CommandHistory.CheckCommand(comChangeDifficulty, EPart.Drums))\r
554                                                                 {\r
555                                                                         this.act曲リスト.t難易度レベルをひとつ進める();\r
556                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
557                                                                 }\r
558                                                         }\r
559                                                         #endregion\r
560                                                         #region [ G + PickPick Guitar: 難易度変更 ]\r
561                                                         if (CDTXMania.Instance.Pad.b押されている(EPad.GtG) && CDTXMania.Instance.Pad.b押された(EPad.GtPick))  // #24177 2011.1.17 yyagi || -> &&\r
562                                                         { // [G] + [Pick][Pick] ギター難易度変更\r
563                                                                 CommandHistory.Add(EPart.Guitar, EPadFlag.Pick | EPadFlag.G);\r
564                                                                 EPadFlag[] comChangeDifficulty = new EPadFlag[] { EPadFlag.Pick | EPadFlag.G, EPadFlag.Pick | EPadFlag.G };\r
565                                                                 if (CommandHistory.CheckCommand(comChangeDifficulty, EPart.Guitar))\r
566                                                                 {\r
567                                                                         Debug.WriteLine("ギター難易度変更");\r
568                                                                         this.act曲リスト.t難易度レベルをひとつ進める();\r
569                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
570                                                                 }\r
571                                                         }\r
572                                                         #endregion\r
573                                                         #region [ G + PickPick Bass: 難易度変更 ]\r
574                                                         if (CDTXMania.Instance.Pad.b押されている(EPad.BsG) && CDTXMania.Instance.Pad.b押された(EPad.BsPick))    // #24177 2011.1.17 yyagi || -> &&\r
575                                                         { // [G] + [Pick][Pick] ベース難易度変更\r
576                                                                 CommandHistory.Add(EPart.Bass, EPadFlag.Pick | EPadFlag.G);\r
577                                                                 EPadFlag[] comChangeDifficulty = new EPadFlag[] { EPadFlag.Pick | EPadFlag.G, EPadFlag.Pick | EPadFlag.G };\r
578                                                                 if (CommandHistory.CheckCommand(comChangeDifficulty, EPart.Bass))\r
579                                                                 {\r
580                                                                         Debug.WriteLine("ベース難易度変更");\r
581                                                                         this.act曲リスト.t難易度レベルをひとつ進める();\r
582                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
583                                                                 }\r
584                                                         }\r
585                                                         #endregion\r
586                                                         #region [ Pick G G Pick Guitar: ギターとベースを入れ替え ]\r
587                                                         if (CDTXMania.Instance.Pad.b押された(EPad.GtPick) && !CDTXMania.Instance.Pad.b押されている(EPad.GtG))\r
588                                                         { // ギター[Pick]: コマンドとしてEnqueue\r
589                                                                 CommandHistory.Add(EPart.Guitar, EPadFlag.Pick);\r
590                                                                 // Pick, G, G, Pick で、ギターとベースを入れ替え\r
591                                                                 EPadFlag[] comSwapGtBs1 = new EPadFlag[] { EPadFlag.Pick, EPadFlag.G, EPadFlag.G, EPadFlag.Pick };\r
592                                                                 if (CommandHistory.CheckCommand(comSwapGtBs1, EPart.Guitar))\r
593                                                                 {\r
594                                                                         Debug.WriteLine("ギターとベースの入れ替え1");\r
595                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
596                                                                         // ギターとベースのキーを入れ替え\r
597                                                                         //CDTXMania.Instance.ConfigIni.SwapGuitarBassKeyAssign();\r
598                                                                         CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass = !CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
599                                                                 }\r
600                                                         }\r
601                                                         #endregion\r
602                                                         #region [ Pick G G Pick Bass: ギターとベースを入れ替え ]\r
603                                                         if (CDTXMania.Instance.Pad.b押された(EPad.BsPick) && !CDTXMania.Instance.Pad.b押されている(EPad.BsG))\r
604                                                         { // ベース[Pick]: コマンドとしてEnqueue\r
605                                                                 CommandHistory.Add(EPart.Bass, EPadFlag.Pick);\r
606                                                                 // Pick, G, G, Pick で、ギターとベースを入れ替え\r
607                                                                 EPadFlag[] comSwapGtBs1 = new EPadFlag[] { EPadFlag.Pick, EPadFlag.G, EPadFlag.G, EPadFlag.Pick };\r
608                                                                 if (CommandHistory.CheckCommand(comSwapGtBs1, EPart.Bass))\r
609                                                                 {\r
610                                                                         Debug.WriteLine("ギターとベースの入れ替え2");\r
611                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
612                                                                         // ギターとベースのキーを入れ替え\r
613                                                                         //CDTXMania.Instance.ConfigIni.SwapGuitarBassKeyAssign();\r
614                                                                         CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass = !CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
615                                                                 }\r
616                                                         }\r
617                                                         #endregion\r
618                                                         #region [ G G G Guitar: ソート画面 ]\r
619                                                         if (CDTXMania.Instance.Pad.b押された(EPad.GtG))\r
620                                                         { // ギター[G]: コマンドとしてEnqueue\r
621                                                                 CommandHistory.Add(EPart.Guitar, EPadFlag.G);\r
622                                                                 // ギター G, G, G で、ソート画面に遷移\r
623                                                                 EPadFlag[] comSortGt = new EPadFlag[] { EPadFlag.G, EPadFlag.G, EPadFlag.G };\r
624                                                                 if (CommandHistory.CheckCommand(comSortGt, EPart.Guitar))\r
625                                                                 {\r
626                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
627                                                                         this.actSortSongs.tActivatePopupMenu(EPart.Guitar, ref this.act曲リスト);\r
628                                                                 }\r
629                                                         }\r
630                                                         #endregion\r
631                                                         #region [ G G G Bass: ソート画面 ]\r
632                                                         if (CDTXMania.Instance.Pad.b押された(EPad.BsG))\r
633                                                         { // ベース[G]: コマンドとしてEnqueue\r
634                                                                 CommandHistory.Add(EPart.Bass, EPadFlag.G);\r
635                                                                 // ベース G, G, G で、ソート画面に遷移\r
636                                                                 EPadFlag[] comSortBs = new EPadFlag[] { EPadFlag.G, EPadFlag.G, EPadFlag.G };\r
637                                                                 if (CommandHistory.CheckCommand(comSortBs, EPart.Bass))\r
638                                                                 {\r
639                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
640                                                                         this.actSortSongs.tActivatePopupMenu(EPart.Bass, ref this.act曲リスト);\r
641                                                                 }\r
642                                                         }\r
643                                                         #endregion\r
644                                                         #region [ BD HT Drums: ソート画面 ]\r
645                                                         if (CDTXMania.Instance.Pad.b押された(EPad.HT))\r
646                                                         { // [BD]+[HT] 未使用\r
647                                                                 //\r
648                                                                 CommandHistory.Add(EPart.Drums, EPadFlag.HT);\r
649                                                                 EPadFlag[] comSort = new EPadFlag[] { EPadFlag.BD, EPadFlag.HT };\r
650                                                                 if (CommandHistory.CheckCommand(comSort, EPart.Drums))\r
651                                                                 {\r
652                                                                         CDTXMania.Instance.Skin.sound変更音.t再生する();\r
653                                                                         this.actSortSongs.tActivatePopupMenu(EPart.Drums, ref this.act曲リスト);\r
654                                                                 }\r
655                                                         }\r
656                                                         #endregion\r
657                                                 }\r
658                                         }\r
659                                         this.actSortSongs.t進行描画();\r
660                                         this.actQuickConfig.t進行描画();\r
661                                 }\r
662                         }\r
663                         return 0;\r
664                 }\r
665                 public enum E戻り値 : int\r
666                 {\r
667                         継続,\r
668                         タイトルに戻る,\r
669                         選曲した,\r
670                         オプション呼び出し,\r
671                         コンフィグ呼び出し,\r
672                         スキン変更\r
673                 }\r
674 \r
675 \r
676                 // その他\r
677 \r
678                 #region [ private ]\r
679                 //-----------------\r
680                 [StructLayout(LayoutKind.Sequential)]\r
681                 private struct STキー反復用カウンタ\r
682                 {\r
683                         public CCounter Up;\r
684                         public CCounter Down;\r
685                         public CCounter R;\r
686                         public CCounter B;\r
687                         public CCounter this[int index]\r
688                         {\r
689                                 get\r
690                                 {\r
691                                         switch (index)\r
692                                         {\r
693                                                 case 0:\r
694                                                         return this.Up;\r
695 \r
696                                                 case 1:\r
697                                                         return this.Down;\r
698 \r
699                                                 case 2:\r
700                                                         return this.R;\r
701 \r
702                                                 case 3:\r
703                                                         return this.B;\r
704                                         }\r
705                                         throw new IndexOutOfRangeException();\r
706                                 }\r
707                                 set\r
708                                 {\r
709                                         switch (index)\r
710                                         {\r
711                                                 case 0:\r
712                                                         this.Up = value;\r
713                                                         return;\r
714 \r
715                                                 case 1:\r
716                                                         this.Down = value;\r
717                                                         return;\r
718 \r
719                                                 case 2:\r
720                                                         this.R = value;\r
721                                                         return;\r
722 \r
723                                                 case 3:\r
724                                                         this.B = value;\r
725                                                         return;\r
726                                         }\r
727                                         throw new IndexOutOfRangeException();\r
728                                 }\r
729                         }\r
730                 }\r
731                 private CActSelectArtistComment actArtistComment;\r
732                 private CActFIFOBlack actFIFO;\r
733                 private CActFIFOBlack actFIfrom結果画面;\r
734                 //              private CActFIFOBlack actFOtoNowLoading;        // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略\r
735                 private CActSelectInformation actInformation;\r
736                 private CActSelectPreimageパネル actPreimageパネル;\r
737                 private CActSelectPresound actPresound;\r
738                 private CActオプションパネル actオプションパネル;\r
739                 private CActSelectステータスパネル actステータスパネル;\r
740                 private CActSelect演奏履歴パネル act演奏履歴パネル;\r
741                 private CActSelect曲リスト act曲リスト;\r
742                 private CActSelectShowCurrentPosition actShowCurrentPosition;\r
743 \r
744                 private CActSortSongs actSortSongs;\r
745                 private CActSelectQuickConfig actQuickConfig;\r
746                 private CAct演奏AVI actAVI;\r
747 \r
748                 private bool bBGM再生済み;\r
749                 private STキー反復用カウンタ ctキー反復用;\r
750                 private CCounter ct登場時アニメ用共通;\r
751                 private E戻り値 eフェードアウト完了時の戻り値;\r
752                 private Font ftフォント;\r
753                 private CTextureAf txコメントバー;\r
754                 private CTextureAf tx下部パネル;\r
755                 private CTextureAf tx上部パネル;\r
756                 private CTexture tx背景;\r
757                 private CTexture txFLIP;\r
758 \r
759                 private struct STCommandTime    // #24063 2011.1.16 yyagi コマンド入力時刻の記録用\r
760                 {\r
761                         public EPart eInst;   // 使用楽器\r
762                         public EPadFlag ePad;   // 押されたコマンド(同時押しはOR演算で列挙する)\r
763                         public long time;       // コマンド入力時刻\r
764                 }\r
765                 private class CCommandHistory   // #24063 2011.1.16 yyagi コマンド入力履歴を保持・確認するクラス\r
766                 {\r
767                         readonly int buffersize = 16;\r
768                         private List<STCommandTime> stct;\r
769 \r
770                         public CCommandHistory()    // コンストラクタ\r
771                         {\r
772                                 stct = new List<STCommandTime>(buffersize);\r
773                         }\r
774 \r
775                         /// <summary>\r
776                         /// コマンド入力履歴へのコマンド追加\r
777                         /// </summary>\r
778                         /// <param name="_eInst">楽器の種類</param>\r
779                         /// <param name="_ePad">入力コマンド(同時押しはOR演算で列挙すること)</param>\r
780                         public void Add(EPart _eInst, EPadFlag _ePad)\r
781                         {\r
782                                 STCommandTime _stct = new STCommandTime\r
783                                 {\r
784                                         eInst = _eInst,\r
785                                         ePad = _ePad,\r
786                                         time = CDTXMania.Instance.Timer.n現在時刻\r
787                                 };\r
788 \r
789                                 if (stct.Count >= buffersize)\r
790                                 {\r
791                                         stct.RemoveAt(0);\r
792                                 }\r
793                                 stct.Add(_stct);\r
794                                 //Debug.WriteLine( "CMDHIS: 楽器=" + _stct.eInst + ", CMD=" + _stct.ePad + ", time=" + _stct.time );\r
795                         }\r
796                         public void RemoveAt(int index)\r
797                         {\r
798                                 stct.RemoveAt(index);\r
799                         }\r
800 \r
801                         /// <summary>\r
802                         /// コマンド入力に成功しているか調べる\r
803                         /// </summary>\r
804                         /// <param name="_ePad">入力が成功したか調べたいコマンド</param>\r
805                         /// <param name="_eInst">対象楽器</param>\r
806                         /// <returns>コマンド入力成功時true</returns>\r
807                         public bool CheckCommand(EPadFlag[] _ePad, EPart _eInst)\r
808                         {\r
809                                 int targetCount = _ePad.Length;\r
810                                 int stciCount = stct.Count;\r
811                                 if (stciCount < targetCount)\r
812                                 {\r
813                                         //Debug.WriteLine("NOT start checking...stciCount=" + stciCount + ", targetCount=" + targetCount);\r
814                                         return false;\r
815                                 }\r
816 \r
817                                 long curTime = CDTXMania.Instance.Timer.n現在時刻;\r
818                                 //Debug.WriteLine("Start checking...targetCount=" + targetCount);\r
819                                 for (int i = targetCount - 1, j = stciCount - 1; i >= 0; i--, j--)\r
820                                 {\r
821                                         if (_ePad[i] != stct[j].ePad)\r
822                                         {\r
823                                                 //Debug.WriteLine( "CMD解析: false targetCount=" + targetCount + ", i=" + i + ", j=" + j + ": ePad[]=" + _ePad[i] + ", stci[j] = " + stct[j].ePad );\r
824                                                 return false;\r
825                                         }\r
826                                         if (stct[j].eInst != _eInst)\r
827                                         {\r
828                                                 //Debug.WriteLine( "CMD解析: false " + i );\r
829                                                 return false;\r
830                                         }\r
831                                         if (curTime - stct[j].time > 500)\r
832                                         {\r
833                                                 //Debug.WriteLine( "CMD解析: false " + i + "; over 500ms" );\r
834                                                 return false;\r
835                                         }\r
836                                         curTime = stct[j].time;\r
837                                 }\r
838 \r
839                                 //Debug.Write( "CMD解析: 成功!(" + _ePad.Length + ") " );\r
840                                 //for ( int i = 0; i < _ePad.Length; i++ ) Debug.Write( _ePad[ i ] + ", " );\r
841                                 //Debug.WriteLine( "" );\r
842                                 //stct.RemoveRange( 0, targetCount );                   // #24396 2011.2.13 yyagi \r
843                                 stct.Clear();                 // #24396 2011.2.13 yyagi Clear all command input history in case you succeeded inputting some command\r
844 \r
845                                 return true;\r
846                         }\r
847                 }\r
848                 private CCommandHistory CommandHistory;\r
849 \r
850                 private void tカーソルを下へ移動する()\r
851                 {\r
852                         CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();\r
853                         this.act曲リスト.t次に移動();\r
854                 }\r
855                 private void tカーソルを上へ移動する()\r
856                 {\r
857                         CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();\r
858                         this.act曲リスト.t前に移動();\r
859                 }\r
860                 private void t曲をランダム選択する()\r
861                 {\r
862                         C曲リストノード song = this.act曲リスト.r現在選択中の曲;\r
863                         if ((song.stackランダム演奏番号.Count == 0) || (song.listランダム用ノードリスト == null))\r
864                         {\r
865                                 if (song.listランダム用ノードリスト == null)\r
866                                 {\r
867                                         song.listランダム用ノードリスト = this.t指定された曲が存在する場所の曲を列挙する_子リスト含む(song);\r
868                                 }\r
869                                 int count = song.listランダム用ノードリスト.Count;\r
870                                 if (count == 0)\r
871                                 {\r
872                                         return;\r
873                                 }\r
874                                 int[] numArray = new int[count];\r
875                                 for (int i = 0; i < count; i++)\r
876                                 {\r
877                                         numArray[i] = i;\r
878                                 }\r
879                                 for (int j = 0; j < (count * 1.5); j++)\r
880                                 {\r
881                                         int index = CDTXMania.Instance.Random.Next(count);\r
882                                         int num5 = CDTXMania.Instance.Random.Next(count);\r
883                                         int num6 = numArray[num5];\r
884                                         numArray[num5] = numArray[index];\r
885                                         numArray[index] = num6;\r
886                                 }\r
887                                 for (int k = 0; k < count; k++)\r
888                                 {\r
889                                         song.stackランダム演奏番号.Push(numArray[k]);\r
890                                 }\r
891                                 if (CDTXMania.Instance.ConfigIni.bLogDTX)\r
892                                 {\r
893                                         StringBuilder builder = new StringBuilder(0x400);\r
894                                         builder.Append(string.Format("ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count));\r
895                                         for (int m = 0; m < count; m++)\r
896                                         {\r
897                                                 builder.Append(string.Format("{0} ", numArray[m]));\r
898                                         }\r
899                                         Trace.TraceInformation(builder.ToString());\r
900                                 }\r
901                         }\r
902                         this.r確定された曲 = song.listランダム用ノードリスト[song.stackランダム演奏番号.Pop()];\r
903                         this.n確定された曲の難易度 = this.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(this.r確定された曲);\r
904                         this.r確定されたスコア = this.r確定された曲.arスコア[this.n確定された曲の難易度];\r
905                         this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;\r
906                         //      this.actFOtoNowLoading.tフェードアウト開始();                                  // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略\r
907                         base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
908                         if (CDTXMania.Instance.ConfigIni.bLogDTX)\r
909                         {\r
910                                 int[] numArray2 = song.stackランダム演奏番号.ToArray();\r
911                                 StringBuilder builder2 = new StringBuilder(0x400);\r
912                                 builder2.Append("ランダムインデックスリスト残り: ");\r
913                                 if (numArray2.Length > 0)\r
914                                 {\r
915                                         for (int n = 0; n < numArray2.Length; n++)\r
916                                         {\r
917                                                 builder2.Append(string.Format("{0} ", numArray2[n]));\r
918                                         }\r
919                                 }\r
920                                 else\r
921                                 {\r
922                                         builder2.Append("(なし)");\r
923                                 }\r
924                                 Trace.TraceInformation(builder2.ToString());\r
925                         }\r
926                         CDTXMania.Instance.Skin.bgm選曲画面.t停止する();\r
927                 }\r
928                 private void t曲を選択する()\r
929                 {\r
930                         this.r確定された曲 = this.act曲リスト.r現在選択中の曲;\r
931                         this.r確定されたスコア = this.act曲リスト.r現在選択中のスコア;\r
932                         this.n確定された曲の難易度 = this.act曲リスト.n現在選択中の曲の現在の難易度レベル;\r
933                         if ((this.r確定された曲 != null) && (this.r確定されたスコア != null))\r
934                         {\r
935                                 this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;\r
936                                 //      this.actFOtoNowLoading.tフェードアウト開始();                          // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略\r
937                                 base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
938                         }\r
939                         CDTXMania.Instance.Skin.bgm選曲画面.t停止する();\r
940                 }\r
941                 private List<C曲リストノード> t指定された曲が存在する場所の曲を列挙する_子リスト含む(C曲リストノード song)\r
942                 {\r
943                         List<C曲リストノード> list = new List<C曲リストノード>();\r
944                         song = song.r親ノード;\r
945                         if ((song == null) && (CDTXMania.Instance.Songs管理.list曲ルート.Count > 0))\r
946                         {\r
947                                 foreach (C曲リストノード c曲リストノード in CDTXMania.Instance.Songs管理.list曲ルート)\r
948                                 {\r
949                                         if ((c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE) || (c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI))\r
950                                         {\r
951                                                 list.Add(c曲リストノード);\r
952                                         }\r
953                                         if ((c曲リストノード.list子リスト != null) && CDTXMania.Instance.ConfigIni.bRandSubBox)\r
954                                         {\r
955                                                 this.t指定された曲の子リストの曲を列挙する_孫リスト含む(c曲リストノード, ref list);\r
956                                         }\r
957                                 }\r
958                                 return list;\r
959                         }\r
960                         this.t指定された曲の子リストの曲を列挙する_孫リスト含む(song, ref list);\r
961                         return list;\r
962                 }\r
963                 private void t指定された曲の子リストの曲を列挙する_孫リスト含む(C曲リストノード r親, ref List<C曲リストノード> list)\r
964                 {\r
965                         if ((r親 != null) && (r親.list子リスト != null))\r
966                         {\r
967                                 foreach (C曲リストノード c曲リストノード in r親.list子リスト)\r
968                                 {\r
969                                         if ((c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE) || (c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI))\r
970                                         {\r
971                                                 list.Add(c曲リストノード);\r
972                                         }\r
973                                         if ((c曲リストノード.list子リスト != null) && CDTXMania.Instance.ConfigIni.bRandSubBox)\r
974                                         {\r
975                                                 this.t指定された曲の子リストの曲を列挙する_孫リスト含む(c曲リストノード, ref list);\r
976                                         }\r
977                                 }\r
978                         }\r
979                 }\r
980                 //-----------------\r
981                 #endregion\r
982         }\r
983 }\r