OSDN Git Service

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