OSDN Git Service

[DTXC] rev87のダミー修正の解除。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 05.選曲 / CStage選曲.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.Diagnostics;\r
7 using System.IO;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CStage選曲 : CStage\r
13         {\r
14                 // プロパティ\r
15 \r
16                 public bool bスクロール中\r
17                 {\r
18                         get\r
19                         {\r
20                                 return this.act曲リスト.bスクロール中;\r
21                         }\r
22                 }\r
23                 public int n確定された曲の難易度\r
24                 {\r
25                         get;\r
26                         private set;\r
27                 }\r
28                 public Cスコア r確定されたスコア\r
29                 {\r
30                         get;\r
31                         private set;\r
32                 }\r
33                 public C曲リストノード r確定された曲 \r
34                 {\r
35                         get;\r
36                         private set;\r
37                 }\r
38                 public int n現在選択中の曲の難易度\r
39                 {\r
40                         get\r
41                         {\r
42                                 return this.act曲リスト.n現在選択中の曲の現在の難易度レベル;\r
43                         }\r
44                 }\r
45                 public Cスコア r現在選択中のスコア\r
46                 {\r
47                         get\r
48                         {\r
49                                 return this.act曲リスト.r現在選択中のスコア;\r
50                         }\r
51                 }\r
52                 public C曲リストノード r現在選択中の曲\r
53                 {\r
54                         get\r
55                         {\r
56                                 return this.act曲リスト.r現在選択中の曲;\r
57                         }\r
58                 }\r
59 \r
60 \r
61                 // コンストラクタ\r
62                 public CStage選曲()\r
63                 {\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
78                 }\r
79                 \r
80                 \r
81                 // メソッド\r
82 \r
83                 public void t選択曲変更通知()\r
84                 {\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
90 \r
91                         #region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)]\r
92                         //---------------------\r
93                         if( CDTXMania.app != null )\r
94                         {\r
95                                 var c曲リストノード = CDTXMania.stage選曲.r現在選択中の曲;\r
96                                 var cスコア = CDTXMania.stage選曲.r現在選択中のスコア;\r
97 \r
98                                 if( c曲リストノード != null && cスコア != null && c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE )\r
99                                 {\r
100                                         string str選択曲ファイル名 = cスコア.ファイル情報.ファイルの絶対パス;\r
101                                         CSetDef setDef = null;\r
102                                         int nブロック番号inSetDef = -1;\r
103                                         int n曲番号inブロック = -1;\r
104 \r
105                                         if( !string.IsNullOrEmpty( c曲リストノード.pathSetDefの絶対パス ) && File.Exists( c曲リストノード.pathSetDefの絶対パス ) )\r
106                                         {\r
107                                                 setDef = new CSetDef( c曲リストノード.pathSetDefの絶対パス );\r
108                                                 nブロック番号inSetDef = c曲リストノード.SetDefのブロック番号;\r
109                                                 n曲番号inブロック = CDTXMania.stage選曲.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( c曲リストノード );\r
110                                         }\r
111 \r
112                                         foreach( CDTXMania.STPlugin stPlugin in CDTXMania.app.listプラグイン )\r
113                                         {\r
114                                                 Directory.SetCurrentDirectory( stPlugin.strプラグインフォルダ );\r
115                                                 stPlugin.plugin.On選択曲変更( str選択曲ファイル名, setDef, nブロック番号inSetDef, n曲番号inブロック );\r
116                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
117                                         }\r
118                                 }\r
119                         }\r
120                         //---------------------\r
121                         #endregion\r
122                 }\r
123 \r
124 \r
125                 // CStage 実装\r
126 \r
127                 public override void On活性化()\r
128                 {\r
129                         Trace.TraceInformation( "選曲ステージを活性化します。" );\r
130                         Trace.Indent();\r
131                         try\r
132                         {\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
142 \r
143                                 base.On活性化();\r
144 \r
145                                 this.actステータスパネル.t選択曲が変更された();        // 最大ランクを更新\r
146                         }\r
147                         finally\r
148                         {\r
149                                 Trace.TraceInformation( "選曲ステージの活性化を完了しました。" );\r
150                                 Trace.Unindent();\r
151                         }\r
152                 }\r
153                 public override void On非活性化()\r
154                 {\r
155                         Trace.TraceInformation( "選曲ステージを非活性化します。" );\r
156                         Trace.Indent();\r
157                         try\r
158                         {\r
159                                 if( this.ftフォント != null )\r
160                                 {\r
161                                         this.ftフォント.Dispose();\r
162                                         this.ftフォント = null;\r
163                                 }\r
164                                 for( int i = 0; i < 4; i++ )\r
165                                 {\r
166                                         this.ctキー反復用[ i ] = null;\r
167                                 }\r
168                                 base.On非活性化();\r
169                         }\r
170                         finally\r
171                         {\r
172                                 Trace.TraceInformation( "選曲ステージの非活性化を完了しました。" );\r
173                                 Trace.Unindent();\r
174                         }\r
175                 }\r
176                 public override void OnManagedリソースの作成()\r
177                 {\r
178                         if( !base.b活性化してない )\r
179                         {\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
185                         }\r
186                 }\r
187                 public override void OnManagedリソースの解放()\r
188                 {\r
189                         if( !base.b活性化してない )\r
190                         {\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
196                         }\r
197                 }\r
198                 public override int On進行描画()\r
199                 {\r
200                         if( !base.b活性化してない )\r
201                         {\r
202                                 #region [ 初めての進行描画 ]\r
203                                 //---------------------\r
204                                 if( base.b初めての進行描画 )\r
205                                 {\r
206                                         this.ct登場時アニメ用共通 = new CCounter( 0, 100, 3, CDTXMania.Timer );\r
207                                         if( CDTXMania.r直前のステージ == CDTXMania.stage結果 )\r
208                                         {\r
209                                                 this.actFIfrom結果画面.tフェードイン開始();\r
210                                                 base.eフェーズID = CStage.Eフェーズ.選曲_結果画面からのフェードイン;\r
211                                         }\r
212                                         else\r
213                                         {\r
214                                                 this.actFIFO.tフェードイン開始();\r
215                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
216                                         }\r
217                                         this.t選択曲変更通知();\r
218                                         base.b初めての進行描画 = false;\r
219                                 }\r
220                                 //---------------------\r
221                                 #endregion\r
222 \r
223                                 this.ct登場時アニメ用共通.t進行();\r
224 \r
225                                 if( this.tx背景 != null )\r
226                                         this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
227 \r
228                                 this.actPreimageパネル.On進行描画();\r
229                                 this.act曲リスト.On進行描画();\r
230                                 int y = 0;\r
231                                 if( this.ct登場時アニメ用共通.b進行中 )\r
232                                 {\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
236                                 }\r
237                                 if( this.tx上部パネル != null )\r
238                                                 this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, y );\r
239 \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
243 \r
244                                 this.actステータスパネル.On進行描画();\r
245                                 this.act演奏履歴パネル.On進行描画();\r
246                                 this.actPresound.On進行描画();\r
247                                 if( this.txコメントバー != null )\r
248                                 {\r
249                                         this.txコメントバー.t2D描画( CDTXMania.app.Device, 0xf2, 0xe4 );\r
250                                 }\r
251                                 this.actArtistComment.On進行描画();\r
252                                 this.actオプションパネル.On進行描画();\r
253                                 switch( base.eフェーズID )\r
254                                 {\r
255                                         case CStage.Eフェーズ.共通_フェードイン:\r
256                                                 if( this.actFIFO.On進行描画() != 0 )\r
257                                                 {\r
258                                                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
259                                                 }\r
260                                                 break;\r
261 \r
262                                         case CStage.Eフェーズ.共通_フェードアウト:\r
263                                                 if( this.actFIFO.On進行描画() == 0 )\r
264                                                 {\r
265                                                         break;\r
266                                                 }\r
267                                                 return (int) this.eフェードアウト完了時の戻り値;\r
268 \r
269                                         case CStage.Eフェーズ.選曲_結果画面からのフェードイン:\r
270                                                 if( this.actFIfrom結果画面.On進行描画() != 0 )\r
271                                                 {\r
272                                                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
273                                                 }\r
274                                                 break;\r
275 \r
276                                         case CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト:\r
277                                                 if( this.actFOtoNowLoading.On進行描画() == 0 )\r
278                                                 {\r
279                                                         break;\r
280                                                 }\r
281                                                 return (int) this.eフェードアウト完了時の戻り値;\r
282                                 }\r
283                                 if( !this.bBGM再生済み && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
284                                 {\r
285                                         CDTXMania.Skin.bgm選曲画面.n音量・次に鳴るサウンド = 100;\r
286                                         CDTXMania.Skin.bgm選曲画面.t再生する();\r
287                                         this.bBGM再生済み = true;\r
288                                 }\r
289 \r
290                                 // キー入力\r
291 \r
292                                 if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 \r
293                                         && CDTXMania.act現在入力を占有中のプラグイン == null )\r
294                                 {\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
296                                         {\r
297                                                 CDTXMania.Skin.sound取消音.t再生する();\r
298                                                 this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る;\r
299                                                 this.actFIFO.tフェードアウト開始();\r
300                                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
301                                                 return 0;\r
302                                         }\r
303                                         if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x36 ) )\r
304                                         {\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
310                                                 return 0;\r
311                                         }\r
312                                         if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x37 ) )\r
313                                         {\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
319                                                 return 0;\r
320                                         }\r
321                                         if( this.act曲リスト.r現在選択中の曲 != null )\r
322                                         {\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
324                                                 {\r
325                                                         CDTXMania.Skin.sound決定音.t再生する();\r
326                                                         if( this.act曲リスト.r現在選択中の曲 != null )\r
327                                                         {\r
328                                                                 switch( this.act曲リスト.r現在選択中の曲.eノード種別 )\r
329                                                                 {\r
330                                                                         case C曲リストノード.Eノード種別.SCORE:\r
331                                                                                 this.t曲を選択する();\r
332                                                                                 break;\r
333 \r
334                                                                         case C曲リストノード.Eノード種別.SCORE_MIDI:\r
335                                                                                 this.t曲を選択する();\r
336                                                                                 break;\r
337 \r
338                                                                         case C曲リストノード.Eノード種別.BOX:\r
339                                                                                 this.act曲リスト.tBOXに入る();\r
340                                                                                 break;\r
341 \r
342                                                                         case C曲リストノード.Eノード種別.BACKBOX:\r
343                                                                                 this.act曲リスト.tBOXを出る();\r
344                                                                                 break;\r
345 \r
346                                                                         case C曲リストノード.Eノード種別.RANDOM:\r
347                                                                                 this.t曲をランダム選択する();\r
348                                                                                 break;\r
349                                                                 }\r
350                                                         }\r
351                                                 }\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
355                                                 {\r
356                                                         this.tカーソルを上へ移動する();\r
357                                                 }\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
361                                                 {\r
362                                                         this.tカーソルを下へ移動する();\r
363                                                 }\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
365                                                 {\r
366                                                         this.actPresound.tサウンド停止();\r
367                                                         CDTXMania.Skin.sound取消音.t再生する();\r
368                                                         this.act曲リスト.tBOXを出る();\r
369                                                         this.t選択曲変更通知();\r
370                                                 }\r
371                                                 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.BD ) )\r
372                                                 {\r
373                                                         if( ( this.n前回Bassを踏んだ時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回Bassを踏んだ時刻 ) < 400 ) )\r
374                                                         {\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
378                                                         }\r
379                                                         else\r
380                                                         {\r
381                                                                 this.n前回Bassを踏んだ時刻 = CDTXMania.Timer.n現在時刻;\r
382                                                         }\r
383                                                 }\r
384                                                 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HH ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HHO ) )\r
385                                                 {\r
386                                                         if( ( this.n前回HHを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HHを叩いた時刻 ) < 500 ) )\r
387                                                         {\r
388                                                                 this.act曲リスト.t難易度レベルをひとつ進める();\r
389                                                                 CDTXMania.Skin.sound変更音.t再生する();\r
390                                                                 this.n前回HHを叩いた時刻 = -1;\r
391                                                         }\r
392                                                         else\r
393                                                         {\r
394                                                                 this.n前回HHを叩いた時刻 = CDTXMania.Timer.n現在時刻;\r
395                                                         }\r
396                                                 }\r
397                                                 if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HT ) )\r
398                                                 {\r
399                                                         if( ( this.n前回ギターをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ギターをPickした時刻 ) < 500 ) )\r
400                                                         {\r
401                                                                 this.act曲リスト.t難易度レベルをひとつ進める();\r
402                                                                 CDTXMania.Skin.sound変更音.t再生する();\r
403                                                                 this.n前回ギターをPickした時刻 = -1;\r
404                                                         }\r
405                                                         else\r
406                                                         {\r
407                                                                 this.n前回ギターをPickした時刻 = CDTXMania.Timer.n現在時刻;\r
408                                                         }\r
409                                                 }\r
410                                                 if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HT ) )\r
411                                                 {\r
412                                                         if( ( this.n前回ベースをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ベースをPickした時刻 ) < 500 ) )\r
413                                                         {\r
414                                                                 this.act曲リスト.t難易度レベルをひとつ進める();\r
415                                                                 CDTXMania.Skin.sound変更音.t再生する();\r
416                                                                 this.n前回ベースをPickした時刻 = -1;\r
417                                                         }\r
418                                                         else\r
419                                                         {\r
420                                                                 this.n前回ベースをPickした時刻 = CDTXMania.Timer.n現在時刻;\r
421                                                         }\r
422                                                 }\r
423                                                 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HT ) )\r
424                                                 {\r
425                                                         if( ( this.n前回HTを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HTを叩いた時刻 ) < 400 ) )\r
426                                                         {\r
427                                                                 this.n前回HTを叩いた時刻 = -1;\r
428                                                         }\r
429                                                         else\r
430                                                         {\r
431                                                                 this.n前回HTを叩いた時刻 = CDTXMania.Timer.n現在時刻;\r
432                                                         }\r
433                                                 }\r
434                                         }\r
435                                 }\r
436                         }\r
437                         return 0;\r
438                 }\r
439                 public enum E戻り値 : int\r
440                 {\r
441                         継続,\r
442                         タイトルに戻る,\r
443                         選曲した,\r
444                         オプション呼び出し,\r
445                         コンフィグ呼び出し\r
446                 }\r
447                 \r
448 \r
449                 // その他\r
450 \r
451                 #region [ private ]\r
452                 //-----------------\r
453                 [StructLayout( LayoutKind.Sequential )]\r
454                 private struct STキー反復用カウンタ\r
455                 {\r
456                         public CCounter Up;\r
457                         public CCounter Down;\r
458                         public CCounter R;\r
459                         public CCounter B;\r
460                         public CCounter this[ int index ]\r
461                         {\r
462                                 get\r
463                                 {\r
464                                         switch( index )\r
465                                         {\r
466                                                 case 0:\r
467                                                         return this.Up;\r
468 \r
469                                                 case 1:\r
470                                                         return this.Down;\r
471 \r
472                                                 case 2:\r
473                                                         return this.R;\r
474 \r
475                                                 case 3:\r
476                                                         return this.B;\r
477                                         }\r
478                                         throw new IndexOutOfRangeException();\r
479                                 }\r
480                                 set\r
481                                 {\r
482                                         switch( index )\r
483                                         {\r
484                                                 case 0:\r
485                                                         this.Up = value;\r
486                                                         return;\r
487 \r
488                                                 case 1:\r
489                                                         this.Down = value;\r
490                                                         return;\r
491 \r
492                                                 case 2:\r
493                                                         this.R = value;\r
494                                                         return;\r
495 \r
496                                                 case 3:\r
497                                                         this.B = value;\r
498                                                         return;\r
499                                         }\r
500                                         throw new IndexOutOfRangeException();\r
501                                 }\r
502                         }\r
503                 }\r
504 \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
530 \r
531                 private void tカーソルを下へ移動する()\r
532                 {\r
533                         CDTXMania.Skin.soundカーソル移動音.t再生する();\r
534                         this.act曲リスト.t次に移動();\r
535                 }\r
536                 private void tカーソルを上へ移動する()\r
537                 {\r
538                         CDTXMania.Skin.soundカーソル移動音.t再生する();\r
539                         this.act曲リスト.t前に移動();\r
540                 }\r
541                 private void t曲をランダム選択する()\r
542                 {\r
543                         C曲リストノード song = this.act曲リスト.r現在選択中の曲;\r
544                         if( ( song.stackランダム演奏番号.Count == 0 ) || ( song.listランダム用ノードリスト == null ) )\r
545                         {\r
546                                 if( song.listランダム用ノードリスト == null )\r
547                                 {\r
548                                         song.listランダム用ノードリスト = this.t指定された曲が存在する場所の曲を列挙する・子リスト含む( song );\r
549                                 }\r
550                                 int count = song.listランダム用ノードリスト.Count;\r
551                                 if( count == 0 )\r
552                                 {\r
553                                         return;\r
554                                 }\r
555                                 int[] numArray = new int[ count ];\r
556                                 for( int i = 0; i < count; i++ )\r
557                                 {\r
558                                         numArray[ i ] = i;\r
559                                 }\r
560                                 for( int j = 0; j < ( count * 1.5 ); j++ )\r
561                                 {\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
567                                 }\r
568                                 for( int k = 0; k < count; k++ )\r
569                                 {\r
570                                         song.stackランダム演奏番号.Push( numArray[ k ] );\r
571                                 }\r
572                                 if( CDTXMania.ConfigIni.bLogDTX詳細ログ出力 )\r
573                                 {\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
577                                         {\r
578                                                 builder.Append( string.Format( "{0} ", numArray[ m ] ) );\r
579                                         }\r
580                                         Trace.TraceInformation( builder.ToString() );\r
581                                 }\r
582                         }\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
590                         {\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
595                                 {\r
596                                         for( int n = 0; n < numArray2.Length; n++ )\r
597                                         {\r
598                                                 builder2.Append( string.Format( "{0} ", numArray2[ n ] ) );\r
599                                         }\r
600                                 }\r
601                                 else\r
602                                 {\r
603                                         builder2.Append( "(なし)" );\r
604                                 }\r
605                                 Trace.TraceInformation( builder2.ToString() );\r
606                         }\r
607                 }\r
608                 private void t曲を選択する()\r
609                 {\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
614                         {\r
615                                 this.eフェードアウト完了時の戻り値 = E戻り値.選曲した;\r
616                                 this.actFOtoNowLoading.tフェードアウト開始();\r
617                                 base.eフェーズID = CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト;\r
618                         }\r
619                 }\r
620                 private List<C曲リストノード> t指定された曲が存在する場所の曲を列挙する・子リスト含む( C曲リストノード song )\r
621                 {\r
622                         List<C曲リストノード> list = new List<C曲リストノード>();\r
623                         song = song.r親ノード;\r
624                         if( ( song == null ) && ( CDTXMania.Songs管理.list曲ルート.Count > 0 ) )\r
625                         {\r
626                                 foreach( C曲リストノード c曲リストノード in CDTXMania.Songs管理.list曲ルート )\r
627                                 {\r
628                                         if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
629                                         {\r
630                                                 list.Add( c曲リストノード );\r
631                                         }\r
632                                         if( ( c曲リストノード.list子リスト != null ) && CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする )\r
633                                         {\r
634                                                 this.t指定された曲の子リストの曲を列挙する・孫リスト含む( c曲リストノード, ref list );\r
635                                         }\r
636                                 }\r
637                                 return list;\r
638                         }\r
639                         this.t指定された曲の子リストの曲を列挙する・孫リスト含む( song, ref list );\r
640                         return list;\r
641                 }\r
642                 private void t指定された曲の子リストの曲を列挙する・孫リスト含む( C曲リストノード r親, ref List<C曲リストノード> list )\r
643                 {\r
644                         if( ( r親 != null ) && ( r親.list子リスト != null ) )\r
645                         {\r
646                                 foreach( C曲リストノード c曲リストノード in r親.list子リスト )\r
647                                 {\r
648                                         if( ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE ) || ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) )\r
649                                         {\r
650                                                 list.Add( c曲リストノード );\r
651                                         }\r
652                                         if( ( c曲リストノード.list子リスト != null ) && CDTXMania.ConfigIni.bランダムセレクトで子BOXを検索対象とする )\r
653                                         {\r
654                                                 this.t指定された曲の子リストの曲を列挙する・孫リスト含む( c曲リストノード, ref list );\r
655                                         }\r
656                                 }\r
657                         }\r
658                 }\r
659                 //-----------------\r
660                 #endregion\r
661         }\r
662 }\r