2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
6 using System.Diagnostics;
\r
12 internal class CStage選曲 : CStage
\r
20 return this.act曲リスト.bスクロール中;
\r
23 public int n確定された曲の難易度
\r
28 public Cスコア r確定されたスコア
\r
33 public C曲リストノード r確定された曲
\r
38 public int n現在選択中の曲の難易度
\r
42 return this.act曲リスト.n現在選択中の曲の現在の難易度レベル;
\r
45 public Cスコア r現在選択中のスコア
\r
49 return this.act曲リスト.r現在選択中のスコア;
\r
52 public C曲リストノード r現在選択中の曲
\r
56 return this.act曲リスト.r現在選択中の曲;
\r
64 base.eステージID = CStage.Eステージ.選曲;
\r
65 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
66 base.b活性化してない = true;
\r
67 base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );
\r
68 base.list子Activities.Add( this.actFIFO = new CActFIFOBlack() );
\r
69 base.list子Activities.Add( this.actFIfrom結果画面 = new CActFIFOBlack() );
\r
70 base.list子Activities.Add( this.actFOtoNowLoading = new CActFIFOBlack() );
\r
71 base.list子Activities.Add( this.act曲リスト = new CActSelect曲リスト() );
\r
72 base.list子Activities.Add( this.actステータスパネル = new CActSelectステータスパネル() );
\r
73 base.list子Activities.Add( this.act演奏履歴パネル = new CActSelect演奏履歴パネル() );
\r
74 base.list子Activities.Add( this.actPreimageパネル = new CActSelectPreimageパネル() );
\r
75 base.list子Activities.Add( this.actPresound = new CActSelectPresound() );
\r
76 base.list子Activities.Add( this.actArtistComment = new CActSelectArtistComment() );
\r
77 base.list子Activities.Add( this.actInformation = new CActSelectInformation() );
\r
83 public void t選択曲変更通知()
\r
85 this.actPreimageパネル.t選択曲が変更された();
\r
86 this.actPresound.t選択曲が変更された();
\r
87 this.act演奏履歴パネル.t選択曲が変更された();
\r
88 this.actステータスパネル.t選択曲が変更された();
\r
89 this.actArtistComment.t選択曲が変更された();
\r
91 #region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)]
\r
92 //---------------------
\r
93 if( CDTXMania.app != null )
\r
95 var c曲リストノード = CDTXMania.stage選曲.r現在選択中の曲;
\r
96 var cスコア = CDTXMania.stage選曲.r現在選択中のスコア;
\r
98 if( c曲リストノード != null && cスコア != null && c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE )
\r
100 string str選択曲ファイル名 = cスコア.ファイル情報.ファイルの絶対パス;
\r
101 CSetDef setDef = null;
\r
102 int nブロック番号inSetDef = -1;
\r
103 int n曲番号inブロック = -1;
\r
105 if( !string.IsNullOrEmpty( c曲リストノード.pathSetDefの絶対パス ) && File.Exists( c曲リストノード.pathSetDefの絶対パス ) )
\r
107 setDef = new CSetDef( c曲リストノード.pathSetDefの絶対パス );
\r
108 nブロック番号inSetDef = c曲リストノード.SetDefのブロック番号;
\r
109 n曲番号inブロック = CDTXMania.stage選曲.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( c曲リストノード );
\r
112 foreach( CDTXMania.STPlugin stPlugin in CDTXMania.app.listプラグイン )
\r
114 Directory.SetCurrentDirectory( stPlugin.strプラグインフォルダ );
\r
115 stPlugin.plugin.On選択曲変更( str選択曲ファイル名, setDef, nブロック番号inSetDef, n曲番号inブロック );
\r
116 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
120 //---------------------
\r
127 public override void On活性化()
\r
129 Trace.TraceInformation( "選曲ステージを活性化します。" );
\r
133 this.eフェードアウト完了時の戻り値 = E戻り値.継続;
\r
134 this.bBGM再生済み = false;
\r
135 this.n前回Bassを踏んだ時刻 = -1;
\r
136 this.n前回HHを叩いた時刻 = -1;
\r
137 this.n前回ギターをPickした時刻 = -1;
\r
138 this.n前回ベースをPickした時刻 = -1;
\r
139 this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );
\r
140 for( int i = 0; i < 4; i++ )
\r
141 this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );
\r
145 this.actステータスパネル.t選択曲が変更された(); // 最大ランクを更新
\r
149 Trace.TraceInformation( "選曲ステージの活性化を完了しました。" );
\r
153 public override void On非活性化()
\r
155 Trace.TraceInformation( "選曲ステージを非活性化します。" );
\r
159 if( this.ftフォント != null )
\r
161 this.ftフォント.Dispose();
\r
162 this.ftフォント = null;
\r
164 for( int i = 0; i < 4; i++ )
\r
166 this.ctキー反復用[ i ] = null;
\r
172 Trace.TraceInformation( "選曲ステージの非活性化を完了しました。" );
\r
176 public override void OnManagedリソースの作成()
\r
178 if( !base.b活性化してない )
\r
180 this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect background.jpg" ), false );
\r
181 this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect header panel.png" ), true );
\r
182 this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect footer panel.png" ), true );
\r
183 this.txコメントバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect comment bar.png" ), true );
\r
184 base.OnManagedリソースの作成();
\r
187 public override void OnManagedリソースの解放()
\r
189 if( !base.b活性化してない )
\r
191 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
192 CDTXMania.tテクスチャの解放( ref this.tx上部パネル );
\r
193 CDTXMania.tテクスチャの解放( ref this.tx下部パネル );
\r
194 CDTXMania.tテクスチャの解放( ref this.txコメントバー );
\r
195 base.OnManagedリソースの解放();
\r
198 public override int On進行描画()
\r
200 if( !base.b活性化してない )
\r
202 #region [ 初めての進行描画 ]
\r
203 //---------------------
\r
204 if( base.b初めての進行描画 )
\r
206 this.ct登場時アニメ用共通 = new CCounter( 0, 100, 3, CDTXMania.Timer );
\r
207 if( CDTXMania.r直前のステージ == CDTXMania.stage結果 )
\r
209 this.actFIfrom結果画面.tフェードイン開始();
\r
210 base.eフェーズID = CStage.Eフェーズ.選曲_結果画面からのフェードイン;
\r
214 this.actFIFO.tフェードイン開始();
\r
215 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
218 base.b初めての進行描画 = false;
\r
220 //---------------------
\r
223 this.ct登場時アニメ用共通.t進行();
\r
225 if( this.tx背景 != null )
\r
226 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
228 this.actPreimageパネル.On進行描画();
\r
229 this.act曲リスト.On進行描画();
\r
231 if( this.ct登場時アニメ用共通.b進行中 )
\r
233 double num2 = ( (double) this.ct登場時アニメ用共通.n現在の値 ) / 100.0;
\r
234 double num3 = Math.Sin( 1.5707963267948966 * num2 );
\r
235 y = ( (int) ( this.tx上部パネル.sz画像サイズ.Height * num3 ) ) - this.tx上部パネル.sz画像サイズ.Height;
\r
237 if( this.tx上部パネル != null )
\r
238 this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, y );
\r
240 this.actInformation.On進行描画();
\r
241 if( this.tx下部パネル != null )
\r
242 this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.sz画像サイズ.Height );
\r
244 this.actステータスパネル.On進行描画();
\r
245 this.act演奏履歴パネル.On進行描画();
\r
246 this.actPresound.On進行描画();
\r
247 if( this.txコメントバー != null )
\r
249 this.txコメントバー.t2D描画( CDTXMania.app.Device, 0xf2, 0xe4 );
\r
251 this.actArtistComment.On進行描画();
\r
252 this.actオプションパネル.On進行描画();
\r
253 switch( base.eフェーズID )
\r
255 case CStage.Eフェーズ.共通_フェードイン:
\r
256 if( this.actFIFO.On進行描画() != 0 )
\r
258 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
262 case CStage.Eフェーズ.共通_フェードアウト:
\r
263 if( this.actFIFO.On進行描画() == 0 )
\r
267 return (int) this.eフェードアウト完了時の戻り値;
\r
269 case CStage.Eフェーズ.選曲_結果画面からのフェードイン:
\r
270 if( this.actFIfrom結果画面.On進行描画() != 0 )
\r
272 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
276 case CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト:
\r
277 if( this.actFOtoNowLoading.On進行描画() == 0 )
\r
281 return (int) this.eフェードアウト完了時の戻り値;
\r
283 if( !this.bBGM再生済み && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
285 CDTXMania.Skin.bgm選曲画面.n音量・次に鳴るサウンド = 100;
\r
286 CDTXMania.Skin.bgm選曲画面.t再生する();
\r
287 this.bBGM再生済み = true;
\r
292 if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態
\r
293 && CDTXMania.act現在入力を占有中のプラグイン == null )
\r
295 if( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) || ( ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) && ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード == null ) ) ) )
\r
297 CDTXMania.Skin.sound取消音.t再生する();
\r
298 this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る;
\r
299 this.actFIFO.tフェードアウト開始();
\r
300 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
303 if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x36 ) )
\r
305 this.actPresound.tサウンド停止();
\r
306 this.eフェードアウト完了時の戻り値 = E戻り値.オプション呼び出し;
\r
307 this.actFIFO.tフェードアウト開始();
\r
308 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
309 CDTXMania.Skin.sound取消音.t再生する();
\r
312 if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x37 ) )
\r
314 this.actPresound.tサウンド停止();
\r
315 this.eフェードアウト完了時の戻り値 = E戻り値.コンフィグ呼び出し;
\r
316 this.actFIFO.tフェードアウト開始();
\r
317 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
318 CDTXMania.Skin.sound取消音.t再生する();
\r
321 if( this.act曲リスト.r現在選択中の曲 != null )
\r
323 if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) )
\r
325 CDTXMania.Skin.sound決定音.t再生する();
\r
326 if( this.act曲リスト.r現在選択中の曲 != null )
\r
328 switch( this.act曲リスト.r現在選択中の曲.eノード種別 )
\r
330 case C曲リストノード.Eノード種別.SCORE:
\r
334 case C曲リストノード.Eノード種別.SCORE_MIDI:
\r
338 case C曲リストノード.Eノード種別.BOX:
\r
339 this.act曲リスト.tBOXに入る();
\r
342 case C曲リストノード.Eノード種別.BACKBOX:
\r
343 this.act曲リスト.tBOXを出る();
\r
346 case C曲リストノード.Eノード種別.RANDOM:
\r
347 this.t曲をランダム選択する();
\r
352 this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
\r
353 this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
\r
354 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )
\r
356 this.tカーソルを上へ移動する();
\r
358 this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
\r
359 this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
\r
360 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )
\r
362 this.tカーソルを下へ移動する();
\r
364 if( ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード != null ) ) && ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )
\r
366 this.actPresound.tサウンド停止();
\r
367 CDTXMania.Skin.sound取消音.t再生する();
\r
368 this.act曲リスト.tBOXを出る();
\r
371 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.BD ) )
\r
373 if( ( this.n前回Bassを踏んだ時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回Bassを踏んだ時刻 ) < 400 ) )
\r
375 CDTXMania.ConfigIni.n譜面スクロール速度.Drums = ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 ) % 0x10;
\r
376 CDTXMania.Skin.sound変更音.t再生する();
\r
377 this.n前回Bassを踏んだ時刻 = -1;
\r
381 this.n前回Bassを踏んだ時刻 = CDTXMania.Timer.n現在時刻;
\r
384 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HH ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HHO ) )
\r
386 if( ( this.n前回HHを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HHを叩いた時刻 ) < 500 ) )
\r
388 this.act曲リスト.t難易度レベルをひとつ進める();
\r
389 CDTXMania.Skin.sound変更音.t再生する();
\r
390 this.n前回HHを叩いた時刻 = -1;
\r
394 this.n前回HHを叩いた時刻 = CDTXMania.Timer.n現在時刻;
\r
397 if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HT ) )
\r
399 if( ( this.n前回ギターをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ギターをPickした時刻 ) < 500 ) )
\r
401 this.act曲リスト.t難易度レベルをひとつ進める();
\r
402 CDTXMania.Skin.sound変更音.t再生する();
\r
403 this.n前回ギターをPickした時刻 = -1;
\r
407 this.n前回ギターをPickした時刻 = CDTXMania.Timer.n現在時刻;
\r
410 if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HT ) )
\r
412 if( ( this.n前回ベースをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ベースをPickした時刻 ) < 500 ) )
\r
414 this.act曲リスト.t難易度レベルをひとつ進める();
\r
415 CDTXMania.Skin.sound変更音.t再生する();
\r
416 this.n前回ベースをPickした時刻 = -1;
\r
420 this.n前回ベースをPickした時刻 = CDTXMania.Timer.n現在時刻;
\r
423 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HT ) )
\r
425 if( ( this.n前回HTを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HTを叩いた時刻 ) < 400 ) )
\r
427 this.n前回HTを叩いた時刻 = -1;
\r
431 this.n前回HTを叩いた時刻 = CDTXMania.Timer.n現在時刻;
\r
439 public enum E戻り値 : int
\r
451 #region [ private ]
\r
452 //-----------------
\r
453 [StructLayout( LayoutKind.Sequential )]
\r
454 private struct STキー反復用カウンタ
\r
456 public CCounter Up;
\r
457 public CCounter Down;
\r
460 public CCounter this[ int index ]
\r
478 throw new IndexOutOfRangeException();
\r
500 throw new IndexOutOfRangeException();
\r
505 private CActSelectArtistComment actArtistComment;
\r
506 private CActFIFOBlack actFIFO;
\r
507 private CActFIFOBlack actFIfrom結果画面;
\r
508 private CActFIFOBlack actFOtoNowLoading;
\r
509 private CActSelectInformation actInformation;
\r
510 private CActSelectPreimageパネル actPreimageパネル;
\r
511 private CActSelectPresound actPresound;
\r
512 private CActオプションパネル actオプションパネル;
\r
513 private CActSelectステータスパネル actステータスパネル;
\r
514 private CActSelect演奏履歴パネル act演奏履歴パネル;
\r
515 private CActSelect曲リスト act曲リスト;
\r
516 private bool bBGM再生済み;
\r
517 private STキー反復用カウンタ ctキー反復用;
\r
518 private CCounter ct登場時アニメ用共通;
\r
519 private E戻り値 eフェードアウト完了時の戻り値;
\r
520 private Font ftフォント;
\r
521 private long n前回Bassを踏んだ時刻;
\r
522 private long n前回HHを叩いた時刻;
\r
523 private long n前回HTを叩いた時刻;
\r
524 private long n前回ギターをPickした時刻;
\r
525 private long n前回ベースをPickした時刻;
\r
526 private CTexture txコメントバー;
\r
527 private CTexture tx下部パネル;
\r
528 private CTexture tx上部パネル;
\r
529 private CTexture tx背景;
\r
531 private void tカーソルを下へ移動する()
\r
533 CDTXMania.Skin.soundカーソル移動音.t再生する();
\r
534 this.act曲リスト.t次に移動();
\r
536 private void tカーソルを上へ移動する()
\r
538 CDTXMania.Skin.soundカーソル移動音.t再生する();
\r
539 this.act曲リスト.t前に移動();
\r
541 private void t曲をランダム選択する()
\r
543 C曲リストノード song = this.act曲リスト.r現在選択中の曲;
\r
544 if( ( song.stackランダム演奏番号.Count == 0 ) || ( song.listランダム用ノードリスト == null ) )
\r
546 if( song.listランダム用ノードリスト == null )
\r
548 song.listランダム用ノードリスト = this.t指定された曲が存在する場所の曲を列挙する・子リスト含む( song );
\r
550 int count = song.listランダム用ノードリスト.Count;
\r
555 int[] numArray = new int[ count ];
\r
556 for( int i = 0; i < count; i++ )
\r
560 for( int j = 0; j < ( count * 1.5 ); j++ )
\r
562 int index = CDTXMania.Random.Next( count );
\r
563 int num5 = CDTXMania.Random.Next( count );
\r
564 int num6 = numArray[ num5 ];
\r
565 numArray[ num5 ] = numArray[ index ];
\r
566 numArray[ index ] = num6;
\r
568 for( int k = 0; k < count; k++ )
\r
570 song.stackランダム演奏番号.Push( numArray[ k ] );
\r
572 if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )
\r
574 StringBuilder builder = new StringBuilder( 0x400 );
\r
575 builder.Append( string.Format( "ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count ) );
\r
576 for( int m = 0; m < count; m++ )
\r
578 builder.Append( string.Format( "{0} ", numArray[ m ] ) );
\r
580 Trace.TraceInformation( builder.ToString() );
\r
583 this.r確定された曲 = song.listランダム用ノードリスト[ song.stackランダム演奏番号.Pop() ];
\r
584 this.n確定された曲の難易度 = this.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( this.r確定された曲 );
\r
585 this.r確定されたスコア = this.r確定された曲.arスコア[ this.n確定された曲の難易度 ];
\r
586 this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;
\r
587 this.actFOtoNowLoading.tフェードアウト開始();
\r
588 base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;
\r
589 if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )
\r
591 int[] numArray2 = song.stackランダム演奏番号.ToArray();
\r
592 StringBuilder builder2 = new StringBuilder( 0x400 );
\r
593 builder2.Append( "ランダムインデックスリスト残り: " );
\r
594 if( numArray2.Length > 0 )
\r
596 for( int n = 0; n < numArray2.Length; n++ )
\r
598 builder2.Append( string.Format( "{0} ", numArray2[ n ] ) );
\r
603 builder2.Append( "(なし)" );
\r
605 Trace.TraceInformation( builder2.ToString() );
\r
608 private void t曲を選択する()
\r
610 this.r確定された曲 = this.act曲リスト.r現在選択中の曲;
\r
611 this.r確定されたスコア = this.act曲リスト.r現在選択中のスコア;
\r
612 this.n確定された曲の難易度 = this.act曲リスト.n現在選択中の曲の現在の難易度レベル;
\r
613 if( ( this.r確定された曲 != null ) && ( this.r確定されたスコア != null ) )
\r
615 this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;
\r
616 this.actFOtoNowLoading.tフェードアウト開始();
\r
617 base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;
\r
620 private List<C曲リストノード> t指定された曲が存在する場所の曲を列挙する・子リスト含む( C曲リストノード song )
\r
622 List<C曲リストノード> list = new List<C曲リストノード>();
\r
624 if( ( song == null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )
\r
626 foreach( C曲リストノード c曲リストノード in CDTXMania.Songs管理.list曲ルート )
\r
628 if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )
\r
630 list.Add( c曲リストノード );
\r
632 if( ( c曲リストノード.list子リスト != null ) && CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする )
\r
634 this.t指定された曲の子リストの曲を列挙する・孫リスト含む( c曲リストノード, ref list );
\r
639 this.t指定された曲の子リストの曲を列挙する・孫リスト含む( song, ref list );
\r
642 private void t指定された曲の子リストの曲を列挙する・孫リスト含む( C曲リストノード r親, ref List<C曲リストノード> list )
\r
644 if( ( r親 != null ) && ( r親.list子リスト != null ) )
\r
646 foreach( C曲リストノード c曲リストノード in r親.list子リスト )
\r
648 if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )
\r
650 list.Add( c曲リストノード );
\r
652 if( ( c曲リストノード.list子リスト != null ) && CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする )
\r
654 this.t指定された曲の子リストの曲を列挙する・孫リスト含む( c曲リストノード, ref list );
\r
659 //-----------------
\r