Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 351 - (hide annotations) (download)
Fri Feb 21 06:41:44 2014 UTC (10 years, 1 month ago) by ron1120
File size: 128278 byte(s)
#xxxxx XG版にて選曲中のフォルダ内の曲数表示。
#xxxxx 不要ファイルの削除。
#xxxxx プレイ中、リバース時に判定ラインを上げ下げすると不具合が起こるため、リバース時は判定ラインの操作ができないように変更。
1 kairera0467 2 using System;
2     using System.Collections.Generic;
3     using System.Text;
4     using System.Globalization;
5     using System.Runtime.InteropServices;
6     using System.Drawing;
7     using System.Drawing.Imaging;
8     using System.Diagnostics;
9     using System.Drawing.Text;
10 kairera0467 186 using System.IO;
11 kairera0467 2 using SlimDX;
12     using FDK;
13    
14     namespace DTXMania
15     {
16 kairera0467 186 //ここをXG風にする際に使ったコードはSSTから拝借、改造している。
17 kairera0467 2 internal class CActSelect曲リスト : CActivity
18     {
19 kairera0467 186
20 kairera0467 2 // プロパティ
21    
22     public bool bIsEnumeratingSongs
23     {
24     get;
25     set;
26     }
27     public bool bスクロル中
28     {
29     get
30     {
31     if( this.n目標のスクロルカウンタ == 0 )
32     {
33     return ( this.n現在のスクロルカウンタ != 0 );
34     }
35     return true;
36     }
37     }
38     public int n現在のアンカ難易度レベル
39     {
40     get;
41     private set;
42     }
43     public int n現在選択中の曲の現在の難易度レベル
44     {
45     get
46     {
47     return this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( this.r現在選択中の曲 );
48     }
49     }
50     public Cスコア r現在選択中のスコア
51     {
52     get
53     {
54     if( this.r現在選択中の曲 != null )
55     {
56     return this.r現在選択中の曲.arスコア[ this.n現在選択中の曲の現在の難易度レベル ];
57     }
58     return null;
59     }
60     }
61     public C曲リストノ r現在選択中の曲
62     {
63     get;
64     private set;
65     }
66    
67     public int nスクロルバ相対y座標
68     {
69     get;
70     private set;
71     }
72    
73     // t選択曲が変更された()内で使う、直前の選曲の保持
74     // (前と同じ曲なら選択曲変更に掛かる再計算を省略して高速化するため)
75     private C曲リストノ song_last = null;
76    
77    
78     // コンストラクタ
79    
80     public CActSelect曲リスト()
81     {
82     this.r現在選択中の曲 = null;
83     this.n現在のアンカ難易度レベル = 0;
84     base.b活性化してない = true;
85     this.bIsEnumeratingSongs = false;
86 kairera0467 186
87    
88     this.stパネルマップ = null;
89     this.stパネルマップ = new STATUSPANEL[12]; // yyagi: 以下、手抜きの初期化でスマン
90     string[] labels = new string[12] {
91     "DTXMANIA", //0
92     "DEBUT", //1
93     "NOVICE", //2
94     "REGULAR", //3
95     "EXPERT", //4
96     "MASTER", //5
97     "BASIC", //6
98     "ADVANCED", //7
99     "EXTREME", //8
100     "RAW", //9
101     "RWS", //10
102     "REAL" //11
103     };
104     int[] status = new int[12] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
105    
106     for (int i = 0; i < 12; i++)
107     {
108     this.stパネルマップ[i] = default(STATUSPANEL);
109     this.stパネルマップ[i].status = status[i];
110     this.stパネルマップ[i].label = labels[i];
111     }
112 kairera0467 2 }
113    
114    
115     // メソッド
116    
117     public int n現在のアンカ難易度レベルに最も近い難易度レベルを返す( C曲リストノ song )
118     {
119     // 事前チェック。
120    
121     if( song == null )
122     return this.n現在のアンカ難易度レベル; // 曲がまったくないよ
123    
124     if( song.arスコア[ this.n現在のアンカ難易度レベル ] != null )
125     return this.n現在のアンカ難易度レベル; // 難易度ぴったりの曲があったよ
126    
127     if( ( song.eド種別 == C曲リストノ.Eド種別.BOX ) || ( song.eド種別 == C曲リストノ.Eド種別.BACKBOX ) )
128     return 0; // BOX と BACKBOX は関係無いよ
129    
130    
131     // 現在のアンカレベルから、難易度上向きに検索開始。
132    
133     int n最も近いレベル = this.n現在のアンカ難易度レベル;
134    
135     for( int i = 0; i < 5; i++ )
136     {
137     if( song.arスコア[ n最も近いレベル ] != null )
138     break; // 曲があった。
139    
140     n最も近いレベル = ( n最も近いレベル + 1 ) % 5; // 曲がなかったので次の難易度レベルへGo。(5以上になったら0に戻る。)
141     }
142    
143    
144     // 見つかった曲がアンカより下のレベルだった場合……
145     // アンカから下向きに検索すれば、もっとアンカに近い曲があるんじゃね?
146    
147     if( n最も近いレベル < this.n現在のアンカ難易度レベル )
148     {
149     // 現在のアンカレベルから、難易度下向きに検索開始。
150    
151     n最も近いレベル = this.n現在のアンカ難易度レベル;
152    
153     for( int i = 0; i < 5; i++ )
154     {
155     if( song.arスコア[ n最も近いレベル ] != null )
156     break; // 曲があった。
157    
158     n最も近いレベル = ( ( n最も近いレベル - 1 ) + 5 ) % 5; // 曲がなかったので次の難易度レベルへGo。(0未満になったら4に戻る。)
159     }
160     }
161    
162     return n最も近いレベル;
163     }
164     public C曲リストノ r指定された曲が存在するリストの先頭の曲( C曲リストノ song )
165     {
166     List<C曲リストノ> songList = GetSongListWithinMe( song );
167     return ( songList == null ) ? null : songList[ 0 ];
168     }
169     public C曲リストノ r指定された曲が存在するリストの末尾の曲( C曲リストノ song )
170     {
171     List<C曲リストノ> songList = GetSongListWithinMe( song );
172     return ( songList == null ) ? null : songList[ songList.Count - 1 ];
173     }
174    
175     private List<C曲リストノ> GetSongListWithinMe( C曲リストノ song )
176     {
177     if ( song.r親ノ == null ) // root階層のノートだったら
178     {
179     return CDTXMania.Songs管理.list曲ル; // rootのリストを返す
180     }
181     else
182     {
183     if ( ( song.r親ノ.list子リスト != null ) && ( song.r親ノ.list子リスト.Count > 0 ) )
184     {
185     return song.r親ノ.list子リスト;
186     }
187     else
188     {
189     return null;
190     }
191     }
192     }
193    
194    
195     public delegate void DGSortFunc( List<C曲リストノ> songList, E楽器パ eInst, int order, params object[] p);
196 kairera0467 186 /// <summary>
197     /// 主にCSong管理.cs内にあるソート機能を、delegateで呼び出す。
198     /// </summary>
199     /// <param name="sf">ソート用に呼び出すメソッド</param>
200     /// <param name="eInst">ソート基準とする楽器</param>
201     /// <param name="order">-1=降順, 1=昇順</param>
202 kairera0467 2 public void t曲リストのソ( DGSortFunc sf, E楽器パ eInst, int order, params object[] p )
203     {
204     List<C曲リストノ> songList = GetSongListWithinMe( this.r現在選択中の曲 );
205     if ( songList == null )
206     {
207 kairera0467 186 // 何もしない;
208 kairera0467 2 }
209     else
210     {
211 kairera0467 186 // CDTXMania.Songs管理.t曲リストのソート3_演奏回数の多い順( songList, eInst, order );
212 kairera0467 2 sf( songList, eInst, order, p );
213 kairera0467 186 // this.r現在選択中の曲 = CDTXMania
214 kairera0467 2 this.t現在選択中の曲を元に曲バを再構成する();
215     }
216     }
217    
218     public bool tBOXに入る()
219     {
220 kairera0467 186 //Trace.TraceInformation( "box enter" );
221     //Trace.TraceInformation( "Skin現在Current : " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
222     //Trace.TraceInformation( "Skin現在System : " + CSkin.strSystemSkinSubfolderFullName );
223     //Trace.TraceInformation( "Skin現在BoxDef : " + CSkin.strBoxDefSkinSubfolderFullName );
224     //Trace.TraceInformation( "Skin現在: " + CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) ) );
225     //Trace.TraceInformation( "Skin現pt: " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
226     //Trace.TraceInformation( "Skin指定: " + CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) );
227     //Trace.TraceInformation( "Skinpath: " + this.r現在選択中の曲.strSkinPath );
228 kairera0467 2 bool ret = false;
229     if ( CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( false ) ) != CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath )
230     && CSkin.bUseBoxDefSkin )
231     {
232     ret = true;
233 kairera0467 186 // BOXに入るときは、スキン変更発生時のみboxdefスキン設定の更新を行う
234     CDTXMania.Skin.SetCurrentSkinSubfolderFullName(
235     CDTXMania.Skin.GetSkinSubfolderFullNameFromSkinName( CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) ), false );
236 kairera0467 2 }
237    
238 kairera0467 186 //Trace.TraceInformation( "Skin変更: " + CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) ) );
239     //Trace.TraceInformation( "Skin変更Current : "+ CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
240     //Trace.TraceInformation( "Skin変更System : "+ CSkin.strSystemSkinSubfolderFullName );
241     //Trace.TraceInformation( "Skin変更BoxDef : "+ CSkin.strBoxDefSkinSubfolderFullName );
242     if( this.tx選択されている曲の曲名 != null )
243     {
244     this.tx選択されている曲の曲名.Dispose();
245 kairera0467 197 this.tx選択されている曲の曲名 = null;
246     }
247     if( this.tx選択されている曲のアティスト名 != null )
248     {
249 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
250     this.tx選択されている曲のアティスト名 = null;
251     }
252 kairera0467 2 if( ( this.r現在選択中の曲.list子リスト != null ) && ( this.r現在選択中の曲.list子リスト.Count > 0 ) )
253     {
254     this.r現在選択中の曲 = this.r現在選択中の曲.list子リスト[ 0 ];
255     this.t現在選択中の曲を元に曲バを再構成する();
256     this.t選択曲が変更された(false); // #27648 項目数変更を反映させる
257     }
258     return ret;
259     }
260     public bool tBOXを出る()
261     {
262 kairera0467 186 //Trace.TraceInformation( "box exit" );
263     //Trace.TraceInformation( "Skin現在Current : " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
264     //Trace.TraceInformation( "Skin現在System : " + CSkin.strSystemSkinSubfolderFullName );
265     //Trace.TraceInformation( "Skin現在BoxDef : " + CSkin.strBoxDefSkinSubfolderFullName );
266     //Trace.TraceInformation( "Skin現在: " + CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) ) );
267     //Trace.TraceInformation( "Skin現pt: " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
268     //Trace.TraceInformation( "Skin指定: " + CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) );
269     //Trace.TraceInformation( "Skinpath: " + this.r現在選択中の曲.strSkinPath );
270 kairera0467 2 bool ret = false;
271     if ( CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( false ) ) != CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath )
272     && CSkin.bUseBoxDefSkin )
273     {
274     ret = true;
275     }
276 kairera0467 186 // スキン変更が発生しなくても、boxdef圏外に出る場合は、boxdefスキン設定の更新が必要
277     // (ユーザーがboxdefスキンをConfig指定している場合への対応のために必要)
278     // tBoxに入る()とは処理が微妙に異なるので注意
279 kairera0467 2 CDTXMania.Skin.SetCurrentSkinSubfolderFullName(
280     ( this.r現在選択中の曲.strSkinPath == "" ) ? "" : CDTXMania.Skin.GetSkinSubfolderFullNameFromSkinName( CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) ), false );
281 kairera0467 186 //Trace.TraceInformation( "SKIN変更: " + CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) ) );
282     //Trace.TraceInformation( "SKIN変更Current : "+ CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
283     //Trace.TraceInformation( "SKIN変更System : "+ CSkin.strSystemSkinSubfolderFullName );
284     //Trace.TraceInformation( "SKIN変更BoxDef : "+ CSkin.strBoxDefSkinSubfolderFullName );
285     if( this.tx選択されている曲の曲名 != null )
286     {
287     this.tx選択されている曲の曲名.Dispose();
288 kairera0467 197 this.tx選択されている曲の曲名 = null;
289     }
290     if( this.tx選択されている曲のアティスト名 != null )
291     {
292 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
293     this.tx選択されている曲のアティスト名 = null;
294     }
295     if ( this.r現在選択中の曲.r親ノ != null )
296 kairera0467 2 {
297     this.r現在選択中の曲 = this.r現在選択中の曲.r親ノ;
298     this.t現在選択中の曲を元に曲バを再構成する();
299     this.t選択曲が変更された(false); // #27648 項目数変更を反映させる
300     }
301     return ret;
302     }
303     public void t現在選択中の曲を元に曲バを再構成する()
304     {
305     this.tの初期化();
306     for( int i = 0; i < 13; i++ )
307     {
308     this.t曲名バの生成( i, this.st情報[ i ].strタイトル文字列, this.st情報[ i ].col文字色 );
309 kairera0467 186 this.tティスト名テクスチャの生成( i, this.st情報[ i ].strティスト名 );
310 kairera0467 223 this.tパネルの生成( i, this.st情報[ i ].strタイトル文字列, this.st情報[ i ].strティスト名, this.st情報[ i ].col文字色 );
311 kairera0467 186 if( !this.dicThumbnail.ContainsKey( this.st情報[ i ].strDTXフォルダのパス ) )
312     {
313     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
314     this.tパスを指定してサムネイル画像を生成する( i, this.st情報[ i ].strDTXフォルダのパス, this.st情報[ i ].e種別 );
315     this.dicThumbnail.Add( this.st情報[ i ].strDTXフォルダのパス, this.txTumbnail[ i ] );
316     }
317     txTumbnail[ i ] = this.dicThumbnail[ this.st情報[ i ].strDTXフォルダのパス ];
318 kairera0467 2 }
319     }
320     public void t次に移動()
321     {
322     if( this.r現在選択中の曲 != null )
323     {
324     this.n目標のスクロルカウンタ += 100;
325     }
326     }
327     public void t前に移動()
328     {
329     if( this.r現在選択中の曲 != null )
330     {
331     this.n目標のスクロルカウンタ -= 100;
332     }
333     }
334     public void t難易度レベルをひとつ進める()
335     {
336     if( ( this.r現在選択中の曲 == null ) || ( this.r現在選択中の曲.nスコア数 <= 1 ) )
337     return; // 曲にスコアが0~1個しかないなら進める意味なし。
338    
339    
340     // 難易度レベルを+1し、現在選曲中のスコアを変更する。
341    
342     this.n現在のアンカ難易度レベル = this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( this.r現在選択中の曲 );
343    
344     for( int i = 0; i < 5; i++ )
345     {
346     this.n現在のアンカ難易度レベル = ( this.n現在のアンカ難易度レベル + 1 ) % 5; // 5以上になったら0に戻る。
347     if( this.r現在選択中の曲.arスコア[ this.n現在のアンカ難易度レベル ] != null ) // 曲が存在してるならここで終了。存在してないなら次のレベルへGo。
348     break;
349     }
350    
351    
352     // 曲毎に表示しているスキル値を、新しい難易度レベルに合わせて取得し直す。(表示されている13曲全部。)
353    
354     C曲リストノ song = this.r現在選択中の曲;
355     for( int i = 0; i < 5; i++ )
356     song = this.r前の曲( song );
357    
358     for( int i = this.n現在の選択行 - 5; i < ( ( this.n現在の選択行 - 5 ) + 13 ); i++ )
359     {
360     int index = ( i + 13 ) % 13;
361     for( int m = 0; m < 3; m++ )
362     {
363     this.st情報[ index ].nスキル値[ m ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ m ];
364     }
365     song = this.r次の曲( song );
366     }
367    
368 kairera0467 186 this.tラベル名からステタスパネルを決定する( this.r現在選択中の曲.ar難易度ラベル[ this.n現在選択中の曲の現在の難易度レベル ] );
369 kairera0467 2
370 kairera0467 186 switch( this.nIndex )
371     {
372     case 2:
373     CDTXMania.Skin.soundNovice.t再生する();
374     string strnov = CSkin.Path( @"Sounds\Novice.ogg" );
375     if( !File.Exists( strnov ) )
376     CDTXMania.Skin.sound変更音.t再生する();
377     break;
378    
379     case 3:
380     CDTXMania.Skin.soundRegular.t再生する();
381     string strreg = CSkin.Path( @"Sounds\Regular.ogg" );
382     if( !File.Exists( strreg ) )
383     CDTXMania.Skin.sound変更音.t再生する();
384     break;
385    
386     case 4:
387     CDTXMania.Skin.soundExpert.t再生する();
388     string strexp = CSkin.Path( @"Sounds\Expert.ogg" );
389     if( !File.Exists( strexp ) )
390     CDTXMania.Skin.sound変更音.t再生する();
391     break;
392    
393     case 5:
394     CDTXMania.Skin.soundMaster.t再生する();
395     string strmas = CSkin.Path( @"Sounds\Master.ogg" );
396     if( !File.Exists( strmas ) )
397     CDTXMania.Skin.sound変更音.t再生する();
398     break;
399    
400     case 6:
401     CDTXMania.Skin.soundBasic.t再生する();
402     string strbsc = CSkin.Path( @"Sounds\Basic.ogg" );
403     if( !File.Exists( strbsc ) )
404     CDTXMania.Skin.sound変更音.t再生する();
405     break;
406    
407     case 7:
408     CDTXMania.Skin.soundAdvanced.t再生する();
409     string stradv = CSkin.Path( @"Sounds\Advanced.ogg" );
410     if( !File.Exists( stradv ) )
411     CDTXMania.Skin.sound変更音.t再生する();
412     break;
413    
414     case 8:
415     CDTXMania.Skin.soundExtreme.t再生する();
416     string strext = CSkin.Path( @"Sounds\Extreme.ogg" );
417     if( !File.Exists( strext ) )
418     CDTXMania.Skin.sound変更音.t再生する();
419     break;
420    
421     default:
422     CDTXMania.Skin.sound変更音.t再生する();
423     break;
424     }
425    
426 kairera0467 2 // 選曲ステージに変更通知を発出し、関係Activityの対応を行ってもらう。
427    
428     CDTXMania.stage選曲.t選択曲変更通知();
429     }
430    
431 kairera0467 186
432     public void tラベル名からステタスパネルを決定する(string strラベル名)
433     {
434     if (string.IsNullOrEmpty(strラベル名))
435     {
436     this.nIndex = 0;
437     }
438     else
439     {
440     STATUSPANEL[] array = this.stパネルマップ;
441     for (int i = 0; i < array.Length; i++)
442     {
443     STATUSPANEL sTATUSPANEL = array[i];
444     if (strラベル名.Equals(sTATUSPANEL.label, StringComparison.CurrentCultureIgnoreCase))
445     {
446     this.nIndex = sTATUSPANEL.status;
447     return;
448     }
449     this.nIndex++;
450     }
451     }
452     }
453 kairera0467 2
454     /// <summary>
455     /// 曲リストをリセットする
456     /// </summary>
457     /// <param name="cs"></param>
458     public void Refresh(CSongs管理 cs, bool bRemakeSongTitleBar ) // #26070 2012.2.28 yyagi
459     {
460     // this.On非活性化();
461    
462     if ( cs != null && cs.list曲ル.Count > 0 ) // 新しい曲リストを検索して、1曲以上あった
463     {
464     CDTXMania.Songs管理 = cs;
465    
466     if ( this.r現在選択中の曲 != null ) // r現在選択中の曲==null とは、「最初songlist.dbが無かった or 検索したが1曲もない」
467     {
468     this.r現在選択中の曲 = searchCurrentBreadcrumbsPosition( CDTXMania.Songs管理.list曲ル, this.r現在選択中の曲.strBreadcrumbs );
469     if ( bRemakeSongTitleBar ) // 選曲画面以外に居るときには再構成しない (非活性化しているときに実行すると例外となる)
470     {
471     this.t現在選択中の曲を元に曲バを再構成する();
472     }
473     #if false // list子リストの中まではmatchしてくれないので、検索ロジックは手書きで実装 (searchCurrentBreadcrumbs())
474     string bc = this.r現在選択中の曲.strBreadcrumbs;
475     Predicate<C曲リストノ> match = delegate( C曲リストノ c )
476     {
477     return ( c.strBreadcrumbs.Equals( bc ) );
478     };
479     int nMatched = CDTXMania.Songs管理.list曲ル.FindIndex( match );
480    
481     this.r現在選択中の曲 = ( nMatched == -1 ) ? null : CDTXMania.Songs管理.list曲ル[ nMatched ];
482     this.t現在選択中の曲を元に曲バを再構成する();
483     #endif
484     return;
485     }
486     }
487     this.On非活性化();
488     this.r現在選択中の曲 = null;
489     this.On活性化();
490     }
491    
492    
493     /// <summary>
494     /// 現在選曲している位置を検索する
495     /// (曲一覧クラスを新しいものに入れ替える際に用いる)
496     /// </summary>
497     /// <param name="ln">検索対象のList</param>
498     /// <param name="bc">検索するパンくずリスト(文字列)</param>
499     /// <returns></returns>
500     private C曲リストノ searchCurrentBreadcrumbsPosition( List<C曲リストノ> ln, string bc )
501     {
502     foreach (C曲リストノ n in ln)
503     {
504     if ( n.strBreadcrumbs == bc )
505     {
506     return n;
507     }
508     else if ( n.list子リスト != null && n.list子リスト.Count > 0 ) // 子リストが存在するなら、再帰で探す
509     {
510     C曲リストノ r = searchCurrentBreadcrumbsPosition( n.list子リスト, bc );
511     if ( r != null ) return r;
512     }
513     }
514     return null;
515     }
516    
517     /// <summary>
518     /// BOXのアイテム数と、今何番目を選択しているかをセットする
519     /// </summary>
520     public void t選択曲が変更された( bool bForce ) // #27648
521     {
522     C曲リストノ song = CDTXMania.stage選曲.r現在選択中の曲;
523     if ( song == null )
524     return;
525     if ( song == song_last && bForce == false )
526     return;
527    
528     song_last = song;
529     List<C曲リストノ> list = ( song.r親ノ != null ) ? song.r親ノ.list子リスト : CDTXMania.Songs管理.list曲ル;
530     int index = list.IndexOf( song ) + 1;
531     if ( index <= 0 )
532     {
533     nCurrentPosition = nNumOfItems = 0;
534     }
535     else
536     {
537     nCurrentPosition = index;
538     nNumOfItems = list.Count;
539     }
540 kairera0467 199
541     if( this.tx選択されている曲の曲名 != null )
542     {
543     this.tx選択されている曲の曲名.Dispose();
544     this.tx選択されている曲の曲名 = null;
545     }
546     if( this.tx選択されている曲のアティスト名 != null )
547     {
548     this.tx選択されている曲のアティスト名.Dispose();
549     this.tx選択されている曲のアティスト名 = null;
550     }
551 kairera0467 2 }
552    
553     // CActivity 実装
554    
555     public override void On活性化()
556     {
557     if( this.b活性化してる )
558     return;
559    
560     this.e楽器パ = E楽器パ.DRUMS;
561     this.b登場アニメ全部完了 = false;
562     this.n目標のスクロルカウンタ = 0;
563     this.n現在のスクロルカウンタ = 0;
564     this.nスクロルタイマ = -1;
565    
566     // フォント作成。
567     // 曲リスト文字は2倍(面積4倍)でテクスチャに描画してから縮小表示するので、フォントサイズは2倍とする。
568    
569     FontStyle regular = FontStyle.Regular;
570     if( CDTXMania.ConfigIni.b選曲リストフォントを斜体にする ) regular |= FontStyle.Italic;
571     if( CDTXMania.ConfigIni.b選曲リストフォントを太字にする ) regular |= FontStyle.Bold;
572     this.ft曲リスト用フォント = new Font( CDTXMania.ConfigIni.str選曲リストフォント, (float) ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2 ), regular, GraphicsUnit.Pixel );
573 kairera0467 186 //this.prvFont = new CPrivateFont( new FontFamily( CDTXMania.ConfigIni.str選曲リストフォント ), 28, FontStyle.Regular );
574 kairera0467 2
575     // 現在選択中の曲がない(=はじめての活性化)なら、現在選択中の曲をルートの先頭ノードに設定する。
576    
577     if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ル.Count > 0 ) )
578     this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ル[ 0 ];
579    
580    
581     // バー情報を初期化する。
582    
583     this.tの初期化();
584    
585     base.On活性化();
586    
587     this.t選択曲が変更された(true); // #27648 2012.3.31 yyagi 選曲画面に入った直後の 現在位置/全アイテム数 の表示を正しく行うため
588     }
589     public override void On非活性化()
590     {
591     if( this.b活性化してない )
592     return;
593    
594     CDTXMania.t安全にDisposeする( ref this.ft曲リスト用フォント );
595 kairera0467 197 if( this.prvFont != null )
596     this.prvFont.Dispose();
597 kairera0467 2
598     for( int i = 0; i < 13; i++ )
599     this.ct登場アニメ用[ i ] = null;
600    
601     base.On非活性化();
602     }
603     public override void OnManagedリソスの作成()
604     {
605     if( this.b活性化してない )
606     return;
607    
608     this.tx曲名バ.Score = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar score.png" ), false );
609     this.tx曲名バ.Box = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar box.png" ), false );
610     this.tx曲名バ.Other = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar other.png" ), false );
611     this.tx選曲バ.Score = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar score selected.png" ), false );
612     this.tx選曲バ.Box = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar box selected.png" ), false );
613     this.tx選曲バ.Other = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar other selected.png" ), false );
614 kairera0467 186 this.txスキル数字 = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\ScreenSelect skill number on list.png" ), false );
615 ron1120 248 this.tx選曲パネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_image_panel_guitar.png"));
616    
617     if ( this.tx選曲パネル == null || CDTXMania.ConfigIni.bDrums有効 )
618     this.tx選曲パネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_image_panel.png"));
619    
620 kairera0467 186 this.txパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_music panel.png"));
621     //this.txジャケットボックスクローズ = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_preimage backbox.png") );
622     //this.txジャケットランダム = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_preimage random.png") );
623     this.tx = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_backpanel.png" ) );
624     this.tx色帯 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_ColorBar.png" ) );
625     this.txランプ用帯 = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_lamppanel.png" ));
626 kairera0467 197
627 kairera0467 186 this.txクリアランプ = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_Clearlamp.png") );
628     #region[ テクスチャの復元 ]
629     int nKeys = this.dicThumbnail.Count;
630     string[] keys = new string[ nKeys ];
631     this.dicThumbnail.Keys.CopyTo( keys, 0 );
632     foreach (var key in keys)
633     this.dicThumbnail[ key ] = this.tパスを指定してサムネイル画像を生成して返す( 0, key, this.st情報[ 0 ].e種別 );;
634 kairera0467 2
635 kairera0467 186 //ここは最初に表示される画像の復元に必要。
636     for (int i = 0; i < 13; i++)
637     {
638     this.t曲名バの生成(i, this.st情報[i].strタイトル文字列, this.st情報[i].col文字色);
639     this.tティスト名テクスチャの生成( i, this.st情報[ i ].strティスト名 );
640 kairera0467 223 this.tパネルの生成( i, this.st情報[ i ].strタイトル文字列, this.st情報[ i ].strティスト名, this.st情報[ i ].col文字色 );
641 kairera0467 186 //this.tパスを指定してサムネイル画像を生成する(i, this.stバー情報[i].strDTXフォルダのパス, this.stバー情報[i].eバー種別);
642     if( this.st情報[ i ].strDTXフォルダのパス != null )
643     {
644     if( !this.dicThumbnail.ContainsKey( this.st情報[ i ].strDTXフォルダのパス ) )
645     {
646     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
647     this.tパスを指定してサムネイル画像を生成する( i, this.st情報[ i ].strDTXフォルダのパス, this.st情報[ i ].e種別 );
648     this.dicThumbnail.Add( this.st情報[ i ].strDTXフォルダのパス, this.txTumbnail[ i ] );
649     }
650     txTumbnail[ i ] = this.dicThumbnail[ this.st情報[ i ].strDTXフォルダのパス ];
651     }
652     }
653     #endregion
654    
655    
656 kairera0467 2 int c = ( CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja" ) ? 0 : 1;
657     #region [ Songs not found画像 ]
658     try
659     {
660     using( Bitmap image = new Bitmap( 640, 128 ) )
661     using( Graphics graphics = Graphics.FromImage( image ) )
662     {
663     string[] s1 = { "曲データが見つかりません。", "Songs not found." };
664     string[] s2 = { "曲データをDTXManiaGR.exe以下の", "You need to install songs." };
665     string[] s3 = { "フォルダにインストールして下さい。", "" };
666     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 2f );
667     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 0f );
668     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 44f );
669     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 42f );
670     graphics.DrawString( s3[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 86f );
671     graphics.DrawString( s3[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 84f );
672    
673     this.txSongNotFound = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
674    
675     this.txSongNotFound.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f ); // 半分のサイズで表示する。
676     }
677     }
678     catch( CTextureCreateFailedException )
679     {
680     Trace.TraceError( "SoungNotFoundテクスチャの作成に失敗しました。" );
681     this.txSongNotFound = null;
682     }
683     #endregion
684     #region [ "曲データを検索しています"画像 ]
685     try
686     {
687 kairera0467 186 using ( Bitmap image = new Bitmap( 640, 96 ) )
688 kairera0467 2 using ( Graphics graphics = Graphics.FromImage( image ) )
689     {
690     string[] s1 = { "曲データを検索しています。", "Now enumerating songs." };
691     string[] s2 = { "そのまましばらくお待ち下さい。", "Please wait..." };
692     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 2f );
693     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 0f );
694     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 44f );
695     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 42f );
696    
697     this.txEnumeratingSongs = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
698    
699     this.txEnumeratingSongs.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f ); // 半分のサイズで表示する。
700     }
701     }
702     catch ( CTextureCreateFailedException )
703     {
704     Trace.TraceError( "txEnumeratingSongsテクスチャの作成に失敗しました。" );
705     this.txEnumeratingSongs = null;
706     }
707     #endregion
708     #region [ 曲数表示 ]
709 ron1120 351 this.txアイテム数数字 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_skill number on gauge etc.png"), false);
710 kairera0467 2 #endregion
711 kairera0467 186
712     base.OnManagedリソスの作成();
713 kairera0467 2 }
714     public override void OnManagedリソスの解放()
715     {
716     if( this.b活性化してない )
717     return;
718    
719     CDTXMania.t安全にDisposeする( ref this.txアイテム数数字 );
720    
721 kairera0467 186 for ( int i = 0; i < 13; i++ )
722     {
723     CDTXMania.t安全にDisposeする( ref this.st情報[ i ].txタイトル名 );
724     CDTXMania.t安全にDisposeする( ref this.st情報[ i ].txティスト名 );
725     }
726 kairera0467 2
727 kairera0467 199 if( this.tx選択されている曲の曲名 != null )
728     {
729     this.tx選択されている曲の曲名.Dispose();
730 kairera0467 186 this.tx選択されている曲の曲名 = null;
731 kairera0467 199 }
732     if( this.tx選択されている曲のアティスト名 != null )
733     {
734     this.tx選択されている曲のアティスト名.Dispose();
735 kairera0467 186 this.tx選択されている曲のアティスト名 = null;
736     }
737     #region[ ジャケット画像の解放 ]
738     int nKeys = this.dicThumbnail.Count;
739     string[] keys = new string[ nKeys ];
740     this.dicThumbnail.Keys.CopyTo( keys, 0 );
741     foreach( var key in keys )
742     {
743     C共通.tDisposeする( this.dicThumbnail[ key ] );
744     this.dicThumbnail[ key ] = null;
745     }
746     #endregion
747    
748     CDTXMania.t安全にDisposeする( ref this.txスキル数字 );
749 kairera0467 2 CDTXMania.t安全にDisposeする( ref this.txEnumeratingSongs );
750     CDTXMania.t安全にDisposeする( ref this.txSongNotFound );
751     CDTXMania.t安全にDisposeする( ref this.tx曲名バ.Score );
752     CDTXMania.t安全にDisposeする( ref this.tx曲名バ.Box );
753     CDTXMania.t安全にDisposeする( ref this.tx曲名バ.Other );
754     CDTXMania.t安全にDisposeする( ref this.tx選曲バ.Score );
755     CDTXMania.t安全にDisposeする( ref this.tx選曲バ.Box );
756     CDTXMania.t安全にDisposeする( ref this.tx選曲バ.Other );
757 kairera0467 186 CDTXMania.t安全にDisposeする( ref this.tx選曲パネル );
758     CDTXMania.t安全にDisposeする( ref this.txパネル );
759     CDTXMania.t安全にDisposeする( ref this.txクリアランプ );
760     //CDTXMania.t安全にDisposeする( ref this.txジャケットボックスクローズ );
761     //CDTXMania.t安全にDisposeする( ref this.txジャケットランダム );
762     CDTXMania.t安全にDisposeする( ref this.tx );
763     CDTXMania.t安全にDisposeする( ref this.tx色帯 );
764     CDTXMania.t安全にDisposeする( ref this.txランプ用帯 );
765 kairera0467 2
766     base.OnManagedリソスの解放();
767     }
768     public override int On進行描画()
769     {
770     if( this.b活性化してない )
771     return 0;
772    
773     #region [ 初めての進行描画 ]
774     //-----------------
775     if( this.b初めての進行描画 )
776     {
777     for( int i = 0; i < 13; i++ )
778     this.ct登場アニメ用[ i ] = new CCounter( -i * 10, 100, 3, CDTXMania.Timer );
779    
780     this.nスクロルタイマ = CSound管理.rc演奏用タイマ.n現在時刻;
781     CDTXMania.stage選曲.t選択曲変更通知();
782    
783     base.b初めての進行描画 = false;
784     }
785     //-----------------
786     #endregion
787    
788    
789     // まだ選択中の曲が決まってなければ、曲ツリールートの最初の曲にセットする。
790    
791     if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ル.Count > 0 ) )
792     this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ル[ 0 ];
793    
794    
795     // 本ステージは、(1)登場アニメフェーズ → (2)通常フェーズ と二段階にわけて進む。
796     // 2つしかフェーズがないので CStage.eフェーズID を使ってないところがまた本末転倒。
797    
798    
799     // 進行。
800    
801     if( !this.b登場アニメ全部完了 )
802     {
803     #region [ (1) 登場アニメフェーズの進行。]
804     //-----------------
805     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
806     {
807     this.ct登場アニメ用[ i ].t進行();
808    
809     if( this.ct登場アニメ用[ i ].b終了値に達した )
810     this.ct登場アニメ用[ i ].t停止();
811     }
812    
813     // 全部の進行が終わったら、this.b登場アニメ全部完了 を true にする。
814    
815     this.b登場アニメ全部完了 = true;
816     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
817     {
818     if( this.ct登場アニメ用[ i ].b進行中 )
819     {
820     this.b登場アニメ全部完了 = false; // まだ進行中のアニメがあるなら false のまま。
821     break;
822     }
823     }
824     //-----------------
825     #endregion
826     }
827     else
828     {
829     #region [ (2) 通常フェーズの進行。]
830     //-----------------
831 kairera0467 186 long n現在時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
832 kairera0467 2
833     if( n現在時刻 < this.nスクロルタイマ ) // 念のため
834     this.nスクロルタイマ = n現在時刻;
835    
836     const int nアニメ間隔 = 2;
837     while( ( n現在時刻 - this.nスクロルタイマ ) >= nアニメ間隔 )
838     {
839     int n加速度 = 1;
840     int n残距離 = Math.Abs( (int) ( this.n目標のスクロルカウンタ - this.n現在のスクロルカウンタ ) );
841    
842     #region [ 残距離が遠いほどスクロールを速くする(=n加速度を多くする)。]
843     //-----------------
844     if( n残距離 <= 100 )
845     {
846     n加速度 = 2;
847     }
848     else if( n残距離 <= 300 )
849     {
850     n加速度 = 3;
851     }
852     else if( n残距離 <= 500 )
853     {
854     n加速度 = 4;
855     }
856     else
857     {
858     n加速度 = 8;
859     }
860     //-----------------
861     #endregion
862    
863     #region [ 加速度を加算し、現在のスクロールカウンタを目標のスクロールカウンタまで近づける。 ]
864     //-----------------
865     if( this.n現在のスクロルカウンタ < this.n目標のスクロルカウンタ ) // (A) 正の方向に未達の場合:
866     {
867     this.n現在のスクロルカウンタ += n加速度; // カウンタを正方向に移動する。
868    
869     if( this.n現在のスクロルカウンタ > this.n目標のスクロルカウンタ )
870     this.n現在のスクロルカウンタ = this.n目標のスクロルカウンタ; // 到着!スクロール停止!
871     }
872    
873     else if( this.n現在のスクロルカウンタ > this.n目標のスクロルカウンタ ) // (B) 負の方向に未達の場合:
874     {
875     this.n現在のスクロルカウンタ -= n加速度; // カウンタを負方向に移動する。
876    
877     if( this.n現在のスクロルカウンタ < this.n目標のスクロルカウンタ ) // 到着!スクロール停止!
878     this.n現在のスクロルカウンタ = this.n目標のスクロルカウンタ;
879     }
880     //-----------------
881     #endregion
882    
883     if( this.n現在のスクロルカウンタ >= 100 ) // 1行=100カウント。
884     {
885     #region [ パネルを1行上にシフトする。]
886     //-----------------
887    
888     // 選択曲と選択行を1つ下の行に移動。
889    
890     this.r現在選択中の曲 = this.r次の曲( this.r現在選択中の曲 );
891     this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 13;
892    
893     // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。
894    
895     C曲リストノ song = this.r現在選択中の曲;
896     for( int i = 0; i < 7; i++ )
897     song = this.r次の曲( song );
898    
899     int index = ( this.n現在の選択行 + 7 ) % 13; // 新しく最下部に表示されるパネルのインデックス(0~12)。
900     this.st情報[ index ].strタイトル文字列 = song.strタイトル;
901 kairera0467 186 this.st情報[ index ].strティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.ティスト名;
902 kairera0467 2 this.st情報[ index ].col文字色 = song.col文字色;
903 kairera0467 186 this.st情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
904 kairera0467 2 this.t曲名バの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].col文字色 );
905 kairera0467 186 this.tティスト名テクスチャの生成( index, this.st情報[ index ].strティスト名 );
906 kairera0467 223 this.tパネルの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].strティスト名, this.st情報[ index ].col文字色 );
907 kairera0467 2
908 kairera0467 186 if( !this.dicThumbnail.ContainsKey( this.st情報[ index ].strDTXフォルダのパス ) )
909     {
910     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
911     this.tパスを指定してサムネイル画像を生成する( index, this.st情報[ index ].strDTXフォルダのパス, this.st情報[ index ].e種別 );
912     this.dicThumbnail.Add( this.st情報[ index ].strDTXフォルダのパス, this.txTumbnail[ index ] );
913     }
914     txTumbnail[ index ] = this.dicThumbnail[ this.st情報[ index ].strDTXフォルダのパス ];
915 kairera0467 2
916 kairera0467 186
917 kairera0467 2 // stバー情報[] の内容を1行ずつずらす。
918    
919     C曲リストノ song2 = this.r現在選択中の曲;
920     for( int i = 0; i < 5; i++ )
921     song2 = this.r前の曲( song2 );
922    
923     for( int i = 0; i < 13; i++ )
924     {
925     int n = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
926     this.st情報[ n ].e種別 = this.e曲のバ種別を返す( song2 );
927     song2 = this.r次の曲( song2 );
928     }
929    
930    
931     // 新しく最下部に表示されるパネル用のスキル値を取得。
932    
933     for( int i = 0; i < 3; i++ )
934     this.st情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
935    
936     // 1行(100カウント)移動完了。
937    
938     this.n現在のスクロルカウンタ -= 100;
939     this.n目標のスクロルカウンタ -= 100;
940    
941 kairera0467 199 this.t選択曲が変更された( false ); // スクロールバー用に今何番目を選択しているかを更新
942     if( this.tx選択されている曲の曲名 != null )
943 kairera0467 186 {
944     this.tx選択されている曲の曲名.Dispose();
945 kairera0467 199 this.tx選択されている曲の曲名 = null;
946     }
947     if( this.tx選択されている曲のアティスト名 != null )
948     {
949 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
950     this.tx選択されている曲のアティスト名 = null;
951     }
952 kairera0467 2
953     if( this.n目標のスクロルカウンタ == 0 )
954     CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!
955    
956     //-----------------
957     #endregion
958     }
959     else if( this.n現在のスクロルカウンタ <= -100 )
960     {
961     #region [ パネルを1行下にシフトする。]
962     //-----------------
963    
964     // 選択曲と選択行を1つ上の行に移動。
965    
966     this.r現在選択中の曲 = this.r前の曲( this.r現在選択中の曲 );
967     this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 13 ) % 13;
968    
969     // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。
970    
971     C曲リストノ song = this.r現在選択中の曲;
972     for( int i = 0; i < 5; i++ )
973     song = this.r前の曲( song );
974    
975     int index = ( ( this.n現在の選択行 - 5 ) + 13 ) % 13; // 新しく最上部に表示されるパネルのインデックス(0~12)。
976     this.st情報[ index ].strタイトル文字列 = song.strタイトル;
977 kairera0467 186 this.st情報[ index ].strティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song) ].譜面情報.ティスト名;
978 kairera0467 2 this.st情報[ index ].col文字色 = song.col文字色;
979 kairera0467 186 this.st情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
980 kairera0467 2 this.t曲名バの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].col文字色 );
981 kairera0467 186 this.tティスト名テクスチャの生成( index, this.st情報[ index ].strティスト名 );
982 kairera0467 223 this.tパネルの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].strティスト名, this.st情報[ index ].col文字色 );
983 kairera0467 2
984 kairera0467 186 if( !this.dicThumbnail.ContainsKey( this.st情報[ index ].strDTXフォルダのパス ) )
985     {
986     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
987     this.tパスを指定してサムネイル画像を生成する( index, this.st情報[ index ].strDTXフォルダのパス, this.st情報[ index ].e種別 );
988     this.dicThumbnail.Add( this.st情報[ index ].strDTXフォルダのパス, this.txTumbnail[ index ] );
989     }
990     txTumbnail[ index ] = this.dicThumbnail[ this.st情報[ index ].strDTXフォルダのパス ];
991 kairera0467 2
992 kairera0467 186
993 kairera0467 2 // stバー情報[] の内容を1行ずつずらす。
994    
995     C曲リストノ song2 = this.r現在選択中の曲;
996     for( int i = 0; i < 5; i++ )
997     song2 = this.r前の曲( song2 );
998    
999     for( int i = 0; i < 13; i++ )
1000     {
1001     int n = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1002     this.st情報[ n ].e種別 = this.e曲のバ種別を返す( song2 );
1003     song2 = this.r次の曲( song2 );
1004     }
1005    
1006    
1007     // 新しく最上部に表示されるパネル用のスキル値を取得。
1008    
1009     for( int i = 0; i < 3; i++ )
1010     this.st情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
1011    
1012    
1013     // 1行(100カウント)移動完了。
1014    
1015     this.n現在のスクロルカウンタ += 100;
1016     this.n目標のスクロルカウンタ += 100;
1017    
1018 kairera0467 186
1019     this.t選択曲が変更された( false ); // スクロールバー用に今何番目を選択しているかを更新
1020 kairera0467 199 if( this.tx選択されている曲の曲名 != null )
1021 kairera0467 186 {
1022     this.tx選択されている曲の曲名.Dispose();
1023 kairera0467 199 this.tx選択されている曲の曲名 = null;
1024     }
1025     if( this.tx選択されている曲のアティスト名 != null )
1026     {
1027 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
1028     this.tx選択されている曲のアティスト名 = null;
1029     }
1030 kairera0467 2
1031     if( this.n目標のスクロルカウンタ == 0 )
1032     CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!
1033     //-----------------
1034     #endregion
1035     }
1036    
1037     this.nスクロルタイマ += nアニメ間隔;
1038     }
1039     //-----------------
1040     #endregion
1041     }
1042    
1043    
1044     // 描画。
1045    
1046     if( this.r現在選択中の曲 == null )
1047     {
1048     #region [ 曲が1つもないなら「Songs not found.」を表示してここで帰れ。]
1049     //-----------------
1050     if ( bIsEnumeratingSongs )
1051     {
1052     if ( this.txEnumeratingSongs != null )
1053     {
1054 kairera0467 203 this.txEnumeratingSongs.t2D描画( CDTXMania.app.Device, 530, 240 );
1055 kairera0467 2 }
1056     }
1057     else
1058     {
1059     if ( this.txSongNotFound != null )
1060 kairera0467 203 this.txSongNotFound.t2D描画( CDTXMania.app.Device, 500, 190 );
1061 kairera0467 2 }
1062     //-----------------
1063     #endregion
1064    
1065     return 0;
1066     }
1067 kairera0467 186 var bar = SlimDX.Matrix.Identity;
1068     var barL = SlimDX.Matrix.Identity;
1069     bar *= SlimDX.Matrix.RotationY(-0.415f);
1070     barL *= SlimDX.Matrix.RotationY(0.415f);
1071     bar *= SlimDX.Matrix.Translation(540f, 20f, -24f);
1072     barL *= SlimDX.Matrix.Translation(-540f, 20f, -24f);
1073     bar *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1074     barL *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1075 kairera0467 2
1076 kairera0467 186 this.tx.t3D描画(CDTXMania.app.Device, bar); //右の帯。
1077     this.tx.t3D描画(CDTXMania.app.Device, barL); //右の帯。
1078     this.tx色帯.n透明度 = 155 + this.ct登場アニメ用[10].n現在の値;
1079     this.tx色帯.t3D描画( CDTXMania.app.Device, bar );
1080     this.tx色帯.t3D描画( CDTXMania.app.Device, barL );
1081    
1082     #region [ デバッグ補助 ]
1083     //-----------------
1084     /*
1085     stマトリックス座標 = new ST中心点[] {
1086     new ST中心点() { x = -940.0000f, y = 4f, z = 320f, rotY = 0.4150f },
1087     new ST中心点() { x = -740.0000f, y = 4f, z = 230f, rotY = 0.4150f },
1088     new ST中心点() { x = -550.0000f, y = 4f, z = 150f, rotY = 0.4150f },
1089     new ST中心点() { x = -370.0000f, y = 4f, z = 70f, rotY = 0.4150f },
1090     new ST中心点() { x = -194.0000f, y = 4f, z = -6f, rotY = 0.4150f },
1091     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1092     new ST中心点() { x = 204.0000f, y = 4f, z = 0f, rotY = -0.4150f },
1093     new ST中心点() { x = 362.0000f, y = 4f, z = 70f, rotY = -0.4150f },
1094     new ST中心点() { x = 528.0000f, y = 4f, z = 146f, rotY = -0.4150f },
1095     new ST中心点() { x = 686.0000f, y = 4f, z = 212f, rotY = -0.4150f },
1096     new ST中心点() { x = 848.0000f, y = 4f, z = 282f, rotY = -0.4150f },
1097     new ST中心点() { x = 1200.0000f, y = 4f, z = 450f, rotY = -0.4150f },
1098     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1099     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1100     };
1101     */
1102     //-----------------
1103     #endregion
1104    
1105    
1106 kairera0467 2 if( !this.b登場アニメ全部完了 )
1107     {
1108     #region [ (1) 登場アニメフェーズの描画。]
1109     //-----------------
1110     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1111     {
1112     if( this.ct登場アニメ用[ i ].n現在の値 >= 0 )
1113     {
1114     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1115 kairera0467 186
1116 kairera0467 194 if( i == 6 )
1117 kairera0467 186 {
1118     #region [ ジャケット画像の描画 ]
1119     //-----------------
1120     if( this.txパネル != null )
1121     {
1122     var mat = SlimDX.Matrix.Identity;
1123 kairera0467 194 mat *= SlimDX.Matrix.Scaling( 0.62f, 0.88f, 1.0f );
1124     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[ i ].rotY - this.stマトリックス座標[i].rotY));
1125 kairera0467 186 mat *= SlimDX.Matrix.Translation(
1126 kairera0467 194 ( this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1127     ( this.stマトリックス座標[ i ].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1128     ( this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1129 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1130 kairera0467 186 }
1131 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1132 kairera0467 186 {
1133     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1134     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1135     var mat = SlimDX.Matrix.Identity;
1136     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1137     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1138     mat *= SlimDX.Matrix.Translation(
1139     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1140     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1141     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1142     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1143     }
1144     //-----------------
1145     #endregion
1146     #region [ タイトル名テクスチャを描画。]
1147     //-----------------
1148 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1149 kairera0467 186 {
1150     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1151     var mat = SlimDX.Matrix.Identity;
1152 kairera0467 194 mat *= SlimDX.Matrix.Scaling( 0.35f, 0.45f, 1.0f );
1153     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1154 kairera0467 186 mat *= SlimDX.Matrix.Translation(
1155     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1156     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1157     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1158 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1159 kairera0467 186 }
1160     if (this.st情報[nパネル番号].txティスト名 != null)
1161     {
1162     var mat = SlimDX.Matrix.Identity;
1163     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1164     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1165     mat *= SlimDX.Matrix.Translation(
1166     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1167     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1168     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1169 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1170 kairera0467 186 }
1171     //-----------------
1172     #endregion
1173 kairera0467 194 if( this.tx選曲パネル != null )
1174     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1175 kairera0467 186 }
1176     else if( i == 5 )
1177 kairera0467 2 {
1178     // (A) 選択曲パネルを描画。
1179 kairera0467 194 if( this.tx選曲パネル != null )
1180     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 531, 243, new Rectangle( 74, 80, 230, 230 ) ); //真ん中の部分は別々に描画。
1181     if( this.txランプ用帯 != null )
1182     {
1183     this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1184     this.txランプ用帯.t3D描画( CDTXMania.app.Device, barL ); //右の帯。
1185     }
1186 kairera0467 186 #region [ バーテクスチャを描画。]
1187 kairera0467 2 //-----------------
1188 kairera0467 194 if( this.txパネル != null )
1189 kairera0467 186 {
1190     var mat = SlimDX.Matrix.Identity;
1191     mat *= SlimDX.Matrix.Scaling(0.8f, 0.8f, 1.0f);
1192     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1193     mat *= SlimDX.Matrix.Translation(
1194     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1195     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1196     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1197     this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1198     }
1199 kairera0467 194 if( this.tx選曲パネル != null )
1200     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 457, 163, new Rectangle( 0, 0, 363, 368 ) );
1201 kairera0467 2 //-----------------
1202     #endregion
1203 kairera0467 186 #region [ ジャケット画像の描画 ]
1204     //-----------------
1205     for( int la = 0; la < 5 ; la++ )
1206     {
1207 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1208 kairera0467 186 this.txクリアランプ.t2D描画(CDTXMania.app.Device, 506, 292 - la * 13, new Rectangle((CDTXMania.stage選曲.r現在選択中の曲.arスコア[la].譜面情報.最大スキル.Drums != 0 ? 11 + la * 11 : 0), ( CDTXMania.stage選曲.r現在選択中の曲.arスコア[la].譜面情報.フルコンボ.Drums ? 10 : 0), 11, 10));
1209     }
1210 kairera0467 193 if( this.txTumbnail[ nパネル番号 ] != null )
1211     {
1212     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1213     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1214     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1215     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1216     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1217     }
1218 kairera0467 186 //-----------------
1219     #endregion
1220 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1221     //-----------------
1222 kairera0467 199 if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1223 kairera0467 197 this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1224 kairera0467 199 if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1225 kairera0467 197 this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1226    
1227 kairera0467 186 if( this.tx選択されている曲の曲名 != null )
1228     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1229 kairera0467 197 if( this.tx選択されている曲のアティスト名 != null )
1230 kairera0467 186 this.tx選択されている曲のアティスト名.t2D描画(CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470);
1231     //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1232     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1233     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1234     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1235 kairera0467 2 //-----------------
1236     #endregion
1237     }
1238     else
1239     {
1240     // (B) その他のパネルの描画。
1241 kairera0467 186 #region [ ジャケット画像の描画 ]
1242     //-----------------
1243 kairera0467 194 if( this.txパネル != null )
1244 kairera0467 186 {
1245     var mat = SlimDX.Matrix.Identity;
1246     mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1247     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1248     mat *= SlimDX.Matrix.Translation(
1249     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1250     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1251     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1252 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1253 kairera0467 186 }
1254 kairera0467 194 if( this.txTumbnail[ nパネル番号 ] != null )
1255 kairera0467 186 {
1256     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1257     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1258     var mat = SlimDX.Matrix.Identity;
1259     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1260     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1261     mat *= SlimDX.Matrix.Translation(
1262     (this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1263     (this.stマトリックス座標[ i ].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1264     (this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1265     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1266     }
1267     //-----------------
1268     #endregion
1269 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1270     //-----------------
1271 kairera0467 194 if( this.txランプ用帯 != null )
1272     this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1273     if( this.tx選曲パネル != null )
1274     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1275 kairera0467 186 if (this.st情報[ nパネル番号 ].txタイトル名 != null)
1276     {
1277     var mat = SlimDX.Matrix.Identity;
1278     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1279     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1280     mat *= SlimDX.Matrix.Translation(
1281     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1282     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1283     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1284 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1285 kairera0467 186 }
1286     if (this.st情報[nパネル番号].txティスト名 != null)
1287     {
1288     var mat = SlimDX.Matrix.Identity;
1289     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1290     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1291     mat *= SlimDX.Matrix.Translation(
1292     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1293     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1294     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1295 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1296 kairera0467 186 }
1297 kairera0467 2 //-----------------
1298     #endregion
1299     }
1300     }
1301     }
1302     //-----------------
1303     #endregion
1304 kairera0467 186
1305 kairera0467 2 }
1306     else
1307     {
1308 kairera0467 186
1309 kairera0467 2 #region [ (2) 通常フェーズの描画。]
1310     //-----------------
1311     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1312     {
1313     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1314     int n見た目の行番号 = i;
1315     int n次のパネル番号 = ( this.n現在のスクロルカウンタ <= 0 ) ? ( ( i + 1 ) % 13 ) : ( ( ( i - 1 ) + 13 ) % 13 );
1316     int x = this.ptの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].X - this.ptの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1317     int y = this.ptの基本座標[ n見た目の行番号 ].Y + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].Y - this.ptの基本座標[ n見た目の行番号 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1318 kairera0467 186 float fX = this.n現在のスクロルカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x - this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1319     this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x + this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1320    
1321     float fY = this.n現在のスクロルカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1322     this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1323    
1324     float fZ = this.n現在のスクロルカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z - this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1325     this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z + this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1326    
1327     if (i == 6)
1328     {
1329     #region [ ジャケット画像の描画 ]
1330     //-----------------
1331     if( this.txパネル != null )
1332     {
1333     var mat = SlimDX.Matrix.Identity;
1334     mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1335     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1336     mat *= SlimDX.Matrix.Translation(
1337     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1338     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1339     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1340 kairera0467 223 this.st情報[ nパネル番号 ].txパネル.t3D描画(CDTXMania.app.Device, mat);
1341 kairera0467 186 }
1342     if (this.txTumbnail[nパネル番号] != null)
1343     {
1344     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1345     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1346     var mat = SlimDX.Matrix.Identity;
1347     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1348     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1349     mat *= SlimDX.Matrix.Translation(
1350     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1351     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1352     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1353     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1354     }
1355     //-----------------
1356     #endregion
1357     #region [ タイトル名テクスチャを描画。]
1358     //-----------------
1359     if (this.st情報[nパネル番号].txタイトル名 != null)
1360     {
1361     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1362     var mat = SlimDX.Matrix.Identity;
1363     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1364     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1365     mat *= SlimDX.Matrix.Translation(
1366     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1367     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1368     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1369 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1370 kairera0467 186 }
1371     if (this.st情報[nパネル番号].txティスト名 != null)
1372     {
1373     var mat = SlimDX.Matrix.Identity;
1374     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1375     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1376     mat *= SlimDX.Matrix.Translation(
1377     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1378     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1379     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1380 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1381 kairera0467 186 }
1382     //-----------------
1383     #endregion
1384     }
1385     else if( ( i == 5 ) )
1386     {
1387 kairera0467 194 if( this.txランプ用帯 != null )
1388     this.txランプ用帯.t3D描画( CDTXMania.app.Device, barL ); //右の帯。
1389 kairera0467 197 //for (int la = 0; la < 5; la++)
1390 kairera0467 186 {
1391     //if( this.stバー情報[ 6 ].ar難易度ラベル[ la ] != null )
1392     {
1393 kairera0467 197 //var lamp = SlimDX.Matrix.Identity;
1394     //lamp *= SlimDX.Matrix.Translation(
1395     //( this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x ) )) * CTexture.f画面比率,
1396     //( this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y ) ) ) * CTexture.f画面比率 - 1f - la * 13f,
1397     //( this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z ) ) ) * CTexture.f画面比率);
1398 kairera0467 186
1399     //this.txクリアランプ.t3D描画( CDTXMania.app.Device, lamp, new Rectangle((CDTXMania.stage選曲.r現在選択中の曲.arスコア[la].譜面情報.最大スキル.Drums != 0 ? 11 + la * 11 : 0), (CDTXMania.stage選曲.r現在選択中の曲.arスコア[la].譜面情報.フルコンボ.Drums ? 10 : 0), 11, 10));
1400     }
1401     }
1402 kairera0467 194 if( this.tx選曲パネル != null )
1403     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 531, 243, new Rectangle(74, 80, 230, 230)); //真ん中の部分は別々に描画。
1404 kairera0467 2 // (A) スクロールが停止しているときの選択曲バーの描画。
1405 kairera0467 186 #region [ ジャケット画像の描画 ]
1406     //-----------------
1407 kairera0467 194 if( this.txパネル != null )
1408 kairera0467 186 {
1409     var mat = SlimDX.Matrix.Identity;
1410     mat *= SlimDX.Matrix.Scaling(CTexture.f画面比率, CTexture.f画面比率, 1.0f);
1411     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1412     mat *= SlimDX.Matrix.Translation(
1413     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1414     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1415     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1416 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1417 kairera0467 186 }
1418 kairera0467 194 if( this.tx選曲パネル != null )
1419     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1420 kairera0467 2
1421 kairera0467 186 for( int la = 0; la < 5 ; la++ )
1422     {
1423 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1424 kairera0467 186 this.txクリアランプ.t2D描画(CDTXMania.app.Device, 506, 292 - la * 13, new Rectangle((CDTXMania.stage選曲.r現在選択中の曲.arスコア[la].譜面情報.最大スキル.Drums != 0 ? 11 + la * 11 : 0), ( CDTXMania.stage選曲.r現在選択中の曲.arスコア[la].譜面情報.フルコンボ.Drums ? 10 : 0), 11, 10));
1425     }
1426     if( this.txTumbnail[ nパネル番号 ] != null )
1427     {
1428     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1429     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1430     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1431     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1432     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1433     }
1434     //-----------------
1435     #endregion
1436 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1437     //-----------------
1438 kairera0467 199 if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1439 kairera0467 186 this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1440 kairera0467 199 if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1441 kairera0467 186 this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1442 kairera0467 197
1443 kairera0467 186 if( this.tx選択されている曲の曲名 != null )
1444     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1445     if( this.tx選択されている曲のアティスト名 != null )
1446     this.tx選択されている曲のアティスト名.t2D描画( CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470);
1447     //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1448     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1449     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1450     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1451 kairera0467 2 //-----------------
1452     #endregion
1453     }
1454 kairera0467 186 else if (i >= 12)
1455     {
1456     }
1457     else
1458     {
1459     // (B) スクロール中の選択曲バー、またはその他のバーの描画。
1460 kairera0467 194 if( this.txランプ用帯 != null )
1461     this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1462     if( this.tx選曲パネル != null )
1463     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 761, 233, new Rectangle(304, 70, 59, 242));
1464 kairera0467 197
1465 kairera0467 186 #region [ ジャケット画像の描画 ]
1466     //-----------------
1467 kairera0467 194 if( this.txパネル != null )
1468 kairera0467 186 {
1469     var mat = SlimDX.Matrix.Identity;
1470     mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1471     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1472     mat *= SlimDX.Matrix.Translation(
1473     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1474     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1475     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1476 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1477 kairera0467 186 }
1478 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1479 kairera0467 186 {
1480     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1481     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1482     var mat = SlimDX.Matrix.Identity;
1483     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1484     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1485     mat *= SlimDX.Matrix.Translation(
1486     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1487     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1488     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1489     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1490     }
1491     //-----------------
1492     #endregion
1493     #region [ タイトル名テクスチャを描画。]
1494     //-----------------
1495 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1496 kairera0467 186 {
1497     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1498     var mat = SlimDX.Matrix.Identity;
1499     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1500     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1501     mat *= SlimDX.Matrix.Translation(
1502     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1503     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1504     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1505 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1506 kairera0467 186 }
1507 kairera0467 194 if( this.st情報[nパネル番号].txティスト名 != null )
1508 kairera0467 186 {
1509     var mat = SlimDX.Matrix.Identity;
1510     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1511     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1512     mat *= SlimDX.Matrix.Translation(
1513     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1514     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1515     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1516 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1517 kairera0467 186 }
1518     //-----------------
1519     #endregion
1520 kairera0467 2
1521 kairera0467 186 #region [ スキル値を描画。]
1522     //-----------------
1523     //if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )
1524     //this.tスキル値の描画( x + 34, y + 18, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );
1525     //-----------------
1526     #endregion
1527     }
1528 kairera0467 2 }
1529     //-----------------
1530     #endregion
1531 kairera0467 186
1532 kairera0467 2 }
1533     #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]
1534     int py;
1535     double d = 0;
1536     if ( nNumOfItems > 1 )
1537     {
1538 kairera0467 186 d = ( 336 - 8 ) / (double) ( nNumOfItems - 1 );
1539 kairera0467 2 py = (int) ( d * ( nCurrentPosition - 1 ) );
1540     }
1541     else
1542     {
1543     d = 0;
1544     py = 0;
1545     }
1546     int delta = (int) ( d * this.n現在のスクロルカウンタ / 100 );
1547 kairera0467 186 if ( py + delta <= 336 - 8 )
1548 kairera0467 2 {
1549     this.nスクロルバ相対y座標 = py + delta;
1550     }
1551     #endregion
1552    
1553     #region [ アイテム数の描画 #27648 ]
1554     tアイテム数の描画();
1555     #endregion
1556     return 0;
1557     }
1558    
1559    
1560     // その他
1561    
1562     #region [ private ]
1563     //-----------------
1564 kairera0467 186 private enum E種別 { Score, Box, Other, Random, BackBox }
1565 kairera0467 2
1566     private struct ST
1567     {
1568     public CTexture Score;
1569     public CTexture Box;
1570     public CTexture Other;
1571 kairera0467 186 public CTexture Random;
1572     public CTexture BackBox;
1573 kairera0467 2 public CTexture this[ int index ]
1574     {
1575     get
1576     {
1577     switch( index )
1578     {
1579     case 0:
1580     return this.Score;
1581    
1582     case 1:
1583     return this.Box;
1584    
1585     case 2:
1586     return this.Other;
1587 kairera0467 186
1588     case 3:
1589     return this.Random;
1590    
1591     case 4:
1592     return this.BackBox;
1593 kairera0467 2 }
1594     throw new IndexOutOfRangeException();
1595     }
1596     set
1597     {
1598     switch( index )
1599     {
1600     case 0:
1601     this.Score = value;
1602     return;
1603    
1604     case 1:
1605     this.Box = value;
1606     return;
1607    
1608     case 2:
1609     this.Other = value;
1610     return;
1611 kairera0467 186
1612     case 3:
1613     this.Random = value;
1614     return;
1615    
1616     case 4:
1617     this.BackBox = value;
1618     return;
1619 kairera0467 2 }
1620     throw new IndexOutOfRangeException();
1621     }
1622     }
1623     }
1624    
1625     private struct ST情報
1626     {
1627     public CActSelect曲リスト.E種別 e種別;
1628     public string strタイトル文字列;
1629 kairera0467 186 public string strティスト名;
1630 kairera0467 2 public CTexture txタイトル名;
1631 kairera0467 186 public CTexture txティスト名;
1632     public CTexture txパネル;
1633     public int nティスト名テクスチャの長さdot;
1634     public int nタイトル名テクスチャの長さdot;
1635 kairera0467 2 public STDGBVALUE<int> nスキル値;
1636     public Color col文字色;
1637 kairera0467 186 public string strDTXフォルダのパス;
1638     public string[] ar難易度ラベル;
1639     public Cスコア.ST譜面情報 ar譜面情報;
1640 kairera0467 2 }
1641    
1642     private struct ST選曲バ
1643     {
1644     public CTexture Score;
1645     public CTexture Box;
1646     public CTexture Other;
1647     public CTexture this[ int index ]
1648     {
1649     get
1650     {
1651     switch( index )
1652     {
1653     case 0:
1654     return this.Score;
1655    
1656     case 1:
1657     return this.Box;
1658    
1659     case 2:
1660     return this.Other;
1661     }
1662     throw new IndexOutOfRangeException();
1663     }
1664     set
1665     {
1666     switch( index )
1667     {
1668     case 0:
1669     this.Score = value;
1670     return;
1671    
1672     case 1:
1673     this.Box = value;
1674     return;
1675    
1676     case 2:
1677     this.Other = value;
1678     return;
1679     }
1680     throw new IndexOutOfRangeException();
1681     }
1682     }
1683     }
1684    
1685 kairera0467 186 protected struct ST中心点
1686     {
1687     public float x;
1688     public float y;
1689     public float z;
1690     public float rotY;
1691     }
1692     /// <summary>
1693     /// <para>SSTFファイル絶対パス(key)とサムネイル画像(value)との辞書。</para>
1694     /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1695     /// </summary>
1696     protected Dictionary<string, CTexture> dicThumbnail = new Dictionary<string, CTexture>();
1697    
1698     /// <summary>
1699     /// <para>SSTFファイル絶対パス(key)とプロパティ画像(value)との辞書。</para>
1700     /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1701     /// </summary>
1702     protected Dictionary<string, CTexture> dicProperty = new Dictionary<string, CTexture>();
1703    
1704     protected ST中心点[] stマトリックス座標 = new ST中心点[] {
1705     #region [ 実は円弧配置になってない。射影行列間違ってるよスターレインボウ見せる気かよ… ]
1706     //-----------------
1707     new ST中心点() { x = -940.0000f, y = 4f, z = 320f, rotY = 0.4150f },
1708     new ST中心点() { x = -740.0000f, y = 4f, z = 230f, rotY = 0.4150f },
1709     new ST中心点() { x = -550.0000f, y = 4f, z = 150f, rotY = 0.4150f },
1710     new ST中心点() { x = -370.0000f, y = 4f, z = 70f, rotY = 0.4150f },
1711     new ST中心点() { x = -194.0000f, y = 4f, z = -6f, rotY = 0.4150f },
1712     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1713     new ST中心点() { x = 204.0000f, y = 4f, z = 0f, rotY = -0.4150f },
1714     new ST中心点() { x = 362.0000f, y = 4f, z = 70f, rotY = -0.4150f },
1715     new ST中心点() { x = 528.0000f, y = 4f, z = 146f, rotY = -0.4150f },
1716     new ST中心点() { x = 686.0000f, y = 4f, z = 212f, rotY = -0.4150f },
1717     new ST中心点() { x = 848.0000f, y = 4f, z = 282f, rotY = -0.4150f },
1718     new ST中心点() { x = 1200.0000f, y = 4f, z = 450f, rotY = -0.4150f },
1719     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1720     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1721     //-----------------
1722     #endregion
1723     };
1724    
1725     protected readonly ST中心点[] stマトリックス曲名座標 = new ST中心点[] {
1726     #region [ 実は円弧配置になってない。射影行列間違ってるよスターレインボウ見せる気かよ… ]
1727     //-----------------
1728     new ST中心点() { x = -980.0000f, y = 2f, z = 360f, rotY = 0.4000f },
1729     new ST中心点() { x = -780.0000f, y = 2f, z = 270f, rotY = 0.4000f },
1730     new ST中心点() { x = -590.0000f, y = 2f, z = 180f, rotY = 0.4000f },
1731     new ST中心点() { x = -400.0000f, y = 2f, z = 90f, rotY = 0.4000f },
1732     new ST中心点() { x = -210.0000f, y = 2f, z = 0f, rotY = 0.4000f },
1733     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1734     new ST中心点() { x = 210.0000f, y = 2f, z = 0f, rotY = -0.4000f },
1735     new ST中心点() { x = 400.0000f, y = 2f, z = 90f, rotY = -0.4f },
1736     new ST中心点() { x = 590.0000f, y = 2f, z = 180f, rotY = -0.4f },
1737     new ST中心点() { x = 780.0000f, y = 2f, z = 270f, rotY = -0.4f },
1738     new ST中心点() { x = 980.0000f, y = 2f, z = 360f, rotY = -0.4f },
1739     new ST中心点() { x = 1200.0000f, y = 2f, z = 450f, rotY = -0.4f },
1740     new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1741     new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1742     //-----------------
1743     #endregion
1744     };
1745     [StructLayout(LayoutKind.Sequential)]
1746     public struct STATUSPANEL
1747     {
1748     public string label;
1749     public int status;
1750     }
1751     public int nIndex;
1752     public STATUSPANEL[] stパネルマップ;
1753    
1754     public bool b登場アニメ全部完了;
1755 kairera0467 2 private Color color文字影 = Color.FromArgb( 0x40, 10, 10, 10 );
1756 kairera0467 186 public CCounter[] ct登場アニメ用 = new CCounter[ 13 ];
1757 kairera0467 2 private E楽器パ e楽器パ;
1758