Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/DTXManiaプロジェクト/コード/ステージ/05.選曲/CStage選曲.cs

Parent Directory Parent Directory | Revision Log Revision Log


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

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26