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 409 - (hide annotations) (download)
Mon Aug 11 09:19:15 2014 UTC (9 years, 7 months ago) by kairera0467
File size: 125547 byte(s)
#xxxxx 曲名、アーティスト名を画像から読み込む機能を実装。(選択中の曲名・アーティスト名、リザルト画面は未対応。)
#xxxxx 6_ballを一時的に廃止。
#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.b登場アニメ全部完了 = false;
561     this.n目標のスクロルカウンタ = 0;
562     this.n現在のスクロルカウンタ = 0;
563     this.nスクロルタイマ = -1;
564    
565     // フォント作成。
566     // 曲リスト文字は2倍(面積4倍)でテクスチャに描画してから縮小表示するので、フォントサイズは2倍とする。
567    
568     FontStyle regular = FontStyle.Regular;
569     if( CDTXMania.ConfigIni.b選曲リストフォントを斜体にする ) regular |= FontStyle.Italic;
570     if( CDTXMania.ConfigIni.b選曲リストフォントを太字にする ) regular |= FontStyle.Bold;
571     this.ft曲リスト用フォント = new Font( CDTXMania.ConfigIni.str選曲リストフォント, (float) ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2 ), regular, GraphicsUnit.Pixel );
572 kairera0467 186 //this.prvFont = new CPrivateFont( new FontFamily( CDTXMania.ConfigIni.str選曲リストフォント ), 28, FontStyle.Regular );
573 kairera0467 2
574     // 現在選択中の曲がない(=はじめての活性化)なら、現在選択中の曲をルートの先頭ノードに設定する。
575    
576     if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ル.Count > 0 ) )
577     this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ル[ 0 ];
578    
579    
580     // バー情報を初期化する。
581    
582     this.tの初期化();
583    
584     base.On活性化();
585    
586     this.t選択曲が変更された(true); // #27648 2012.3.31 yyagi 選曲画面に入った直後の 現在位置/全アイテム数 の表示を正しく行うため
587     }
588     public override void On非活性化()
589     {
590     if( this.b活性化してない )
591     return;
592    
593     CDTXMania.t安全にDisposeする( ref this.ft曲リスト用フォント );
594 kairera0467 197 if( this.prvFont != null )
595     this.prvFont.Dispose();
596 kairera0467 2
597     for( int i = 0; i < 13; i++ )
598     this.ct登場アニメ用[ i ] = null;
599    
600     base.On非活性化();
601     }
602     public override void OnManagedリソスの作成()
603     {
604     if( this.b活性化してない )
605     return;
606    
607 kairera0467 186 this.txスキル数字 = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\ScreenSelect skill number on list.png" ), false );
608 ron1120 248 this.tx選曲パネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_image_panel_guitar.png"));
609    
610     if ( this.tx選曲パネル == null || CDTXMania.ConfigIni.bDrums有効 )
611     this.tx選曲パネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_image_panel.png"));
612    
613 kairera0467 186 this.txパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_music panel.png"));
614     this.tx = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_backpanel.png" ) );
615     this.tx色帯 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_ColorBar.png" ) );
616     this.txランプ用帯 = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_lamppanel.png" ));
617 kairera0467 197
618 kairera0467 186 this.txクリアランプ = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_Clearlamp.png") );
619     #region[ テクスチャの復元 ]
620     int nKeys = this.dicThumbnail.Count;
621     string[] keys = new string[ nKeys ];
622     this.dicThumbnail.Keys.CopyTo( keys, 0 );
623     foreach (var key in keys)
624     this.dicThumbnail[ key ] = this.tパスを指定してサムネイル画像を生成して返す( 0, key, this.st情報[ 0 ].e種別 );;
625 kairera0467 2
626 kairera0467 186 //ここは最初に表示される画像の復元に必要。
627     for (int i = 0; i < 13; i++)
628     {
629     this.t曲名バの生成(i, this.st情報[i].strタイトル文字列, this.st情報[i].col文字色);
630     this.tティスト名テクスチャの生成( i, this.st情報[ i ].strティスト名 );
631 kairera0467 223 this.tパネルの生成( i, this.st情報[ i ].strタイトル文字列, this.st情報[ i ].strティスト名, this.st情報[ i ].col文字色 );
632 kairera0467 186 //this.tパスを指定してサムネイル画像を生成する(i, this.stバー情報[i].strDTXフォルダのパス, this.stバー情報[i].eバー種別);
633     if( this.st情報[ i ].strDTXフォルダのパス != null )
634     {
635     if( !this.dicThumbnail.ContainsKey( this.st情報[ i ].strDTXフォルダのパス ) )
636     {
637     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
638     this.tパスを指定してサムネイル画像を生成する( i, this.st情報[ i ].strDTXフォルダのパス, this.st情報[ i ].e種別 );
639     this.dicThumbnail.Add( this.st情報[ i ].strDTXフォルダのパス, this.txTumbnail[ i ] );
640     }
641     txTumbnail[ i ] = this.dicThumbnail[ this.st情報[ i ].strDTXフォルダのパス ];
642     }
643     }
644     #endregion
645    
646    
647 kairera0467 2 int c = ( CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja" ) ? 0 : 1;
648     #region [ Songs not found画像 ]
649     try
650     {
651     using( Bitmap image = new Bitmap( 640, 128 ) )
652     using( Graphics graphics = Graphics.FromImage( image ) )
653     {
654     string[] s1 = { "曲データが見つかりません。", "Songs not found." };
655     string[] s2 = { "曲データをDTXManiaGR.exe以下の", "You need to install songs." };
656     string[] s3 = { "フォルダにインストールして下さい。", "" };
657     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 2f );
658     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 0f );
659     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 44f );
660     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 42f );
661     graphics.DrawString( s3[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 86f );
662     graphics.DrawString( s3[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 84f );
663    
664     this.txSongNotFound = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
665    
666     this.txSongNotFound.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f ); // 半分のサイズで表示する。
667     }
668     }
669     catch( CTextureCreateFailedException )
670     {
671     Trace.TraceError( "SoungNotFoundテクスチャの作成に失敗しました。" );
672     this.txSongNotFound = null;
673     }
674     #endregion
675     #region [ "曲データを検索しています"画像 ]
676     try
677     {
678 kairera0467 186 using ( Bitmap image = new Bitmap( 640, 96 ) )
679 kairera0467 2 using ( Graphics graphics = Graphics.FromImage( image ) )
680     {
681     string[] s1 = { "曲データを検索しています。", "Now enumerating songs." };
682     string[] s2 = { "そのまましばらくお待ち下さい。", "Please wait..." };
683     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 2f );
684     graphics.DrawString( s1[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 0f );
685     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.DarkGray, (float) 2f, (float) 44f );
686     graphics.DrawString( s2[c], this.ft曲リスト用フォント, Brushes.White, (float) 0f, (float) 42f );
687    
688     this.txEnumeratingSongs = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
689    
690     this.txEnumeratingSongs.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f ); // 半分のサイズで表示する。
691     }
692     }
693     catch ( CTextureCreateFailedException )
694     {
695     Trace.TraceError( "txEnumeratingSongsテクスチャの作成に失敗しました。" );
696     this.txEnumeratingSongs = null;
697     }
698     #endregion
699     #region [ 曲数表示 ]
700 ron1120 351 this.txアイテム数数字 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_skill number on gauge etc.png"), false);
701 kairera0467 2 #endregion
702 kairera0467 186
703     base.OnManagedリソスの作成();
704 kairera0467 2 }
705     public override void OnManagedリソスの解放()
706     {
707     if( this.b活性化してない )
708     return;
709    
710     CDTXMania.t安全にDisposeする( ref this.txアイテム数数字 );
711    
712 kairera0467 186 for ( int i = 0; i < 13; i++ )
713     {
714     CDTXMania.t安全にDisposeする( ref this.st情報[ i ].txタイトル名 );
715     CDTXMania.t安全にDisposeする( ref this.st情報[ i ].txティスト名 );
716     }
717 kairera0467 2
718 kairera0467 199 if( this.tx選択されている曲の曲名 != null )
719     {
720     this.tx選択されている曲の曲名.Dispose();
721 kairera0467 186 this.tx選択されている曲の曲名 = null;
722 kairera0467 199 }
723     if( this.tx選択されている曲のアティスト名 != null )
724     {
725     this.tx選択されている曲のアティスト名.Dispose();
726 kairera0467 186 this.tx選択されている曲のアティスト名 = null;
727     }
728     #region[ ジャケット画像の解放 ]
729     int nKeys = this.dicThumbnail.Count;
730     string[] keys = new string[ nKeys ];
731     this.dicThumbnail.Keys.CopyTo( keys, 0 );
732     foreach( var key in keys )
733     {
734     C共通.tDisposeする( this.dicThumbnail[ key ] );
735     this.dicThumbnail[ key ] = null;
736     }
737     #endregion
738    
739     CDTXMania.t安全にDisposeする( ref this.txスキル数字 );
740 kairera0467 2 CDTXMania.t安全にDisposeする( ref this.txEnumeratingSongs );
741     CDTXMania.t安全にDisposeする( ref this.txSongNotFound );
742 kairera0467 186 CDTXMania.t安全にDisposeする( ref this.tx選曲パネル );
743     CDTXMania.t安全にDisposeする( ref this.txパネル );
744     CDTXMania.t安全にDisposeする( ref this.txクリアランプ );
745     CDTXMania.t安全にDisposeする( ref this.tx );
746     CDTXMania.t安全にDisposeする( ref this.tx色帯 );
747     CDTXMania.t安全にDisposeする( ref this.txランプ用帯 );
748 kairera0467 2
749     base.OnManagedリソスの解放();
750     }
751     public override int On進行描画()
752     {
753     if( this.b活性化してない )
754     return 0;
755    
756     #region [ 初めての進行描画 ]
757     //-----------------
758     if( this.b初めての進行描画 )
759     {
760     for( int i = 0; i < 13; i++ )
761     this.ct登場アニメ用[ i ] = new CCounter( -i * 10, 100, 3, CDTXMania.Timer );
762    
763     this.nスクロルタイマ = CSound管理.rc演奏用タイマ.n現在時刻;
764     CDTXMania.stage選曲.t選択曲変更通知();
765    
766     base.b初めての進行描画 = false;
767     }
768     //-----------------
769     #endregion
770    
771    
772     // まだ選択中の曲が決まってなければ、曲ツリールートの最初の曲にセットする。
773    
774     if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ル.Count > 0 ) )
775     this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ル[ 0 ];
776    
777    
778     // 本ステージは、(1)登場アニメフェーズ → (2)通常フェーズ と二段階にわけて進む。
779     // 2つしかフェーズがないので CStage.eフェーズID を使ってないところがまた本末転倒。
780    
781    
782     // 進行。
783    
784     if( !this.b登場アニメ全部完了 )
785     {
786     #region [ (1) 登場アニメフェーズの進行。]
787     //-----------------
788     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
789     {
790     this.ct登場アニメ用[ i ].t進行();
791    
792     if( this.ct登場アニメ用[ i ].b終了値に達した )
793     this.ct登場アニメ用[ i ].t停止();
794     }
795    
796     // 全部の進行が終わったら、this.b登場アニメ全部完了 を true にする。
797    
798     this.b登場アニメ全部完了 = true;
799     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
800     {
801     if( this.ct登場アニメ用[ i ].b進行中 )
802     {
803     this.b登場アニメ全部完了 = false; // まだ進行中のアニメがあるなら false のまま。
804     break;
805     }
806     }
807     //-----------------
808     #endregion
809     }
810     else
811     {
812     #region [ (2) 通常フェーズの進行。]
813     //-----------------
814 kairera0467 186 long n現在時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
815 kairera0467 2
816     if( n現在時刻 < this.nスクロルタイマ ) // 念のため
817     this.nスクロルタイマ = n現在時刻;
818    
819     const int nアニメ間隔 = 2;
820     while( ( n現在時刻 - this.nスクロルタイマ ) >= nアニメ間隔 )
821     {
822     int n加速度 = 1;
823     int n残距離 = Math.Abs( (int) ( this.n目標のスクロルカウンタ - this.n現在のスクロルカウンタ ) );
824    
825     #region [ 残距離が遠いほどスクロールを速くする(=n加速度を多くする)。]
826     //-----------------
827     if( n残距離 <= 100 )
828     {
829     n加速度 = 2;
830     }
831     else if( n残距離 <= 300 )
832     {
833     n加速度 = 3;
834     }
835     else if( n残距離 <= 500 )
836     {
837     n加速度 = 4;
838     }
839     else
840     {
841     n加速度 = 8;
842     }
843     //-----------------
844     #endregion
845    
846     #region [ 加速度を加算し、現在のスクロールカウンタを目標のスクロールカウンタまで近づける。 ]
847     //-----------------
848     if( this.n現在のスクロルカウンタ < this.n目標のスクロルカウンタ ) // (A) 正の方向に未達の場合:
849     {
850     this.n現在のスクロルカウンタ += n加速度; // カウンタを正方向に移動する。
851    
852     if( this.n現在のスクロルカウンタ > this.n目標のスクロルカウンタ )
853     this.n現在のスクロルカウンタ = this.n目標のスクロルカウンタ; // 到着!スクロール停止!
854     }
855    
856     else if( this.n現在のスクロルカウンタ > this.n目標のスクロルカウンタ ) // (B) 負の方向に未達の場合:
857     {
858     this.n現在のスクロルカウンタ -= n加速度; // カウンタを負方向に移動する。
859    
860     if( this.n現在のスクロルカウンタ < this.n目標のスクロルカウンタ ) // 到着!スクロール停止!
861     this.n現在のスクロルカウンタ = this.n目標のスクロルカウンタ;
862     }
863     //-----------------
864     #endregion
865    
866     if( this.n現在のスクロルカウンタ >= 100 ) // 1行=100カウント。
867     {
868     #region [ パネルを1行上にシフトする。]
869     //-----------------
870    
871     // 選択曲と選択行を1つ下の行に移動。
872    
873     this.r現在選択中の曲 = this.r次の曲( this.r現在選択中の曲 );
874     this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 13;
875    
876     // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。
877    
878     C曲リストノ song = this.r現在選択中の曲;
879     for( int i = 0; i < 7; i++ )
880     song = this.r次の曲( song );
881    
882     int index = ( this.n現在の選択行 + 7 ) % 13; // 新しく最下部に表示されるパネルのインデックス(0~12)。
883     this.st情報[ index ].strタイトル文字列 = song.strタイトル;
884 kairera0467 186 this.st情報[ index ].strティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.ティスト名;
885 kairera0467 2 this.st情報[ index ].col文字色 = song.col文字色;
886 kairera0467 186 this.st情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
887 kairera0467 2 this.t曲名バの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].col文字色 );
888 kairera0467 186 this.tティスト名テクスチャの生成( index, this.st情報[ index ].strティスト名 );
889 kairera0467 223 this.tパネルの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].strティスト名, this.st情報[ index ].col文字色 );
890 kairera0467 2
891 kairera0467 186 if( !this.dicThumbnail.ContainsKey( this.st情報[ index ].strDTXフォルダのパス ) )
892     {
893     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
894     this.tパスを指定してサムネイル画像を生成する( index, this.st情報[ index ].strDTXフォルダのパス, this.st情報[ index ].e種別 );
895     this.dicThumbnail.Add( this.st情報[ index ].strDTXフォルダのパス, this.txTumbnail[ index ] );
896     }
897     txTumbnail[ index ] = this.dicThumbnail[ this.st情報[ index ].strDTXフォルダのパス ];
898 kairera0467 2
899 kairera0467 186
900 kairera0467 2 // stバー情報[] の内容を1行ずつずらす。
901    
902     C曲リストノ song2 = this.r現在選択中の曲;
903     for( int i = 0; i < 5; i++ )
904     song2 = this.r前の曲( song2 );
905    
906     for( int i = 0; i < 13; i++ )
907     {
908     int n = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
909     this.st情報[ n ].e種別 = this.e曲のバ種別を返す( song2 );
910     song2 = this.r次の曲( song2 );
911     }
912    
913    
914     // 新しく最下部に表示されるパネル用のスキル値を取得。
915    
916     for( int i = 0; i < 3; i++ )
917     this.st情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
918    
919     // 1行(100カウント)移動完了。
920    
921     this.n現在のスクロルカウンタ -= 100;
922     this.n目標のスクロルカウンタ -= 100;
923    
924 kairera0467 199 this.t選択曲が変更された( false ); // スクロールバー用に今何番目を選択しているかを更新
925     if( this.tx選択されている曲の曲名 != null )
926 kairera0467 186 {
927     this.tx選択されている曲の曲名.Dispose();
928 kairera0467 199 this.tx選択されている曲の曲名 = null;
929     }
930     if( this.tx選択されている曲のアティスト名 != null )
931     {
932 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
933     this.tx選択されている曲のアティスト名 = null;
934     }
935 kairera0467 2
936     if( this.n目標のスクロルカウンタ == 0 )
937     CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!
938    
939     //-----------------
940     #endregion
941     }
942     else if( this.n現在のスクロルカウンタ <= -100 )
943     {
944     #region [ パネルを1行下にシフトする。]
945     //-----------------
946    
947     // 選択曲と選択行を1つ上の行に移動。
948    
949     this.r現在選択中の曲 = this.r前の曲( this.r現在選択中の曲 );
950     this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 13 ) % 13;
951    
952     // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。
953    
954     C曲リストノ song = this.r現在選択中の曲;
955     for( int i = 0; i < 5; i++ )
956     song = this.r前の曲( song );
957    
958     int index = ( ( this.n現在の選択行 - 5 ) + 13 ) % 13; // 新しく最上部に表示されるパネルのインデックス(0~12)。
959     this.st情報[ index ].strタイトル文字列 = song.strタイトル;
960 kairera0467 186 this.st情報[ index ].strティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song) ].譜面情報.ティスト名;
961 kairera0467 2 this.st情報[ index ].col文字色 = song.col文字色;
962 kairera0467 186 this.st情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
963 kairera0467 2 this.t曲名バの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].col文字色 );
964 kairera0467 186 this.tティスト名テクスチャの生成( index, this.st情報[ index ].strティスト名 );
965 kairera0467 223 this.tパネルの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].strティスト名, this.st情報[ index ].col文字色 );
966 kairera0467 2
967 kairera0467 186 if( !this.dicThumbnail.ContainsKey( this.st情報[ index ].strDTXフォルダのパス ) )
968     {
969     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
970     this.tパスを指定してサムネイル画像を生成する( index, this.st情報[ index ].strDTXフォルダのパス, this.st情報[ index ].e種別 );
971     this.dicThumbnail.Add( this.st情報[ index ].strDTXフォルダのパス, this.txTumbnail[ index ] );
972     }
973     txTumbnail[ index ] = this.dicThumbnail[ this.st情報[ index ].strDTXフォルダのパス ];
974 kairera0467 2
975 kairera0467 186
976 kairera0467 2 // stバー情報[] の内容を1行ずつずらす。
977    
978     C曲リストノ song2 = this.r現在選択中の曲;
979     for( int i = 0; i < 5; i++ )
980     song2 = this.r前の曲( song2 );
981    
982     for( int i = 0; i < 13; i++ )
983     {
984     int n = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
985     this.st情報[ n ].e種別 = this.e曲のバ種別を返す( song2 );
986     song2 = this.r次の曲( song2 );
987     }
988    
989    
990     // 新しく最上部に表示されるパネル用のスキル値を取得。
991    
992     for( int i = 0; i < 3; i++ )
993     this.st情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
994    
995    
996     // 1行(100カウント)移動完了。
997    
998     this.n現在のスクロルカウンタ += 100;
999     this.n目標のスクロルカウンタ += 100;
1000    
1001 kairera0467 186
1002     this.t選択曲が変更された( false ); // スクロールバー用に今何番目を選択しているかを更新
1003 kairera0467 199 if( this.tx選択されている曲の曲名 != null )
1004 kairera0467 186 {
1005     this.tx選択されている曲の曲名.Dispose();
1006 kairera0467 199 this.tx選択されている曲の曲名 = null;
1007     }
1008     if( this.tx選択されている曲のアティスト名 != null )
1009     {
1010 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
1011     this.tx選択されている曲のアティスト名 = null;
1012     }
1013 kairera0467 2
1014     if( this.n目標のスクロルカウンタ == 0 )
1015     CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!
1016     //-----------------
1017     #endregion
1018     }
1019    
1020     this.nスクロルタイマ += nアニメ間隔;
1021     }
1022     //-----------------
1023     #endregion
1024     }
1025    
1026    
1027     // 描画。
1028    
1029     if( this.r現在選択中の曲 == null )
1030     {
1031     #region [ 曲が1つもないなら「Songs not found.」を表示してここで帰れ。]
1032     //-----------------
1033     if ( bIsEnumeratingSongs )
1034     {
1035     if ( this.txEnumeratingSongs != null )
1036     {
1037 kairera0467 203 this.txEnumeratingSongs.t2D描画( CDTXMania.app.Device, 530, 240 );
1038 kairera0467 2 }
1039     }
1040     else
1041     {
1042     if ( this.txSongNotFound != null )
1043 kairera0467 203 this.txSongNotFound.t2D描画( CDTXMania.app.Device, 500, 190 );
1044 kairera0467 2 }
1045     //-----------------
1046     #endregion
1047    
1048     return 0;
1049     }
1050 kairera0467 186 var bar = SlimDX.Matrix.Identity;
1051     var barL = SlimDX.Matrix.Identity;
1052     bar *= SlimDX.Matrix.RotationY(-0.415f);
1053     barL *= SlimDX.Matrix.RotationY(0.415f);
1054     bar *= SlimDX.Matrix.Translation(540f, 20f, -24f);
1055     barL *= SlimDX.Matrix.Translation(-540f, 20f, -24f);
1056     bar *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1057     barL *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1058 kairera0467 2
1059 kairera0467 186 this.tx.t3D描画(CDTXMania.app.Device, bar); //右の帯。
1060     this.tx.t3D描画(CDTXMania.app.Device, barL); //右の帯。
1061     this.tx色帯.n透明度 = 155 + this.ct登場アニメ用[10].n現在の値;
1062     this.tx色帯.t3D描画( CDTXMania.app.Device, bar );
1063     this.tx色帯.t3D描画( CDTXMania.app.Device, barL );
1064    
1065     #region [ デバッグ補助 ]
1066     //-----------------
1067     /*
1068     stマトリックス座標 = new ST中心点[] {
1069     new ST中心点() { x = -940.0000f, y = 4f, z = 320f, rotY = 0.4150f },
1070     new ST中心点() { x = -740.0000f, y = 4f, z = 230f, rotY = 0.4150f },
1071     new ST中心点() { x = -550.0000f, y = 4f, z = 150f, rotY = 0.4150f },
1072     new ST中心点() { x = -370.0000f, y = 4f, z = 70f, rotY = 0.4150f },
1073     new ST中心点() { x = -194.0000f, y = 4f, z = -6f, rotY = 0.4150f },
1074     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1075     new ST中心点() { x = 204.0000f, y = 4f, z = 0f, rotY = -0.4150f },
1076     new ST中心点() { x = 362.0000f, y = 4f, z = 70f, rotY = -0.4150f },
1077     new ST中心点() { x = 528.0000f, y = 4f, z = 146f, rotY = -0.4150f },
1078     new ST中心点() { x = 686.0000f, y = 4f, z = 212f, rotY = -0.4150f },
1079     new ST中心点() { x = 848.0000f, y = 4f, z = 282f, rotY = -0.4150f },
1080     new ST中心点() { x = 1200.0000f, y = 4f, z = 450f, rotY = -0.4150f },
1081     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1082     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1083     };
1084     */
1085     //-----------------
1086     #endregion
1087    
1088    
1089 kairera0467 2 if( !this.b登場アニメ全部完了 )
1090     {
1091     #region [ (1) 登場アニメフェーズの描画。]
1092     //-----------------
1093     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1094     {
1095     if( this.ct登場アニメ用[ i ].n現在の値 >= 0 )
1096     {
1097     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1098 kairera0467 186
1099 kairera0467 194 if( i == 6 )
1100 kairera0467 186 {
1101     #region [ ジャケット画像の描画 ]
1102     //-----------------
1103     if( this.txパネル != null )
1104     {
1105     var mat = SlimDX.Matrix.Identity;
1106 kairera0467 194 mat *= SlimDX.Matrix.Scaling( 0.62f, 0.88f, 1.0f );
1107     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[ i ].rotY - this.stマトリックス座標[i].rotY));
1108 kairera0467 186 mat *= SlimDX.Matrix.Translation(
1109 kairera0467 194 ( this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1110     ( this.stマトリックス座標[ i ].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1111     ( this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1112 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1113 kairera0467 186 }
1114 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1115 kairera0467 186 {
1116     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1117     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1118     var mat = SlimDX.Matrix.Identity;
1119     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1120     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1121     mat *= SlimDX.Matrix.Translation(
1122     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1123     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1124     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1125     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1126     }
1127     //-----------------
1128     #endregion
1129     #region [ タイトル名テクスチャを描画。]
1130     //-----------------
1131 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1132 kairera0467 186 {
1133     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1134     var mat = SlimDX.Matrix.Identity;
1135 kairera0467 194 mat *= SlimDX.Matrix.Scaling( 0.35f, 0.45f, 1.0f );
1136     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1137 kairera0467 186 mat *= SlimDX.Matrix.Translation(
1138     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1139     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1140     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1141 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1142 kairera0467 186 }
1143     if (this.st情報[nパネル番号].txティスト名 != null)
1144     {
1145     var mat = SlimDX.Matrix.Identity;
1146     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1147     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1148     mat *= SlimDX.Matrix.Translation(
1149     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1150     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1151     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1152 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1153 kairera0467 186 }
1154     //-----------------
1155     #endregion
1156 kairera0467 194 if( this.tx選曲パネル != null )
1157     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1158 kairera0467 186 }
1159     else if( i == 5 )
1160 kairera0467 2 {
1161     // (A) 選択曲パネルを描画。
1162 kairera0467 194 if( this.tx選曲パネル != null )
1163     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 531, 243, new Rectangle( 74, 80, 230, 230 ) ); //真ん中の部分は別々に描画。
1164     if( this.txランプ用帯 != null )
1165     {
1166     this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1167     this.txランプ用帯.t3D描画( CDTXMania.app.Device, barL ); //右の帯。
1168     }
1169 kairera0467 186 #region [ バーテクスチャを描画。]
1170 kairera0467 2 //-----------------
1171 kairera0467 194 if( this.txパネル != null )
1172 kairera0467 186 {
1173     var mat = SlimDX.Matrix.Identity;
1174     mat *= SlimDX.Matrix.Scaling(0.8f, 0.8f, 1.0f);
1175     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1176     mat *= SlimDX.Matrix.Translation(
1177     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1178     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1179     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1180     this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1181     }
1182 kairera0467 194 if( this.tx選曲パネル != null )
1183     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 457, 163, new Rectangle( 0, 0, 363, 368 ) );
1184 kairera0467 2 //-----------------
1185     #endregion
1186 kairera0467 186 #region [ ジャケット画像の描画 ]
1187     //-----------------
1188     for( int la = 0; la < 5 ; la++ )
1189     {
1190 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1191 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));
1192     }
1193 kairera0467 193 if( this.txTumbnail[ nパネル番号 ] != null )
1194     {
1195     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1196     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1197     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1198     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1199     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1200     }
1201 kairera0467 186 //-----------------
1202     #endregion
1203 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1204     //-----------------
1205 kairera0467 199 if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1206 kairera0467 197 this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1207 kairera0467 199 if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1208 kairera0467 197 this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1209    
1210 kairera0467 186 if( this.tx選択されている曲の曲名 != null )
1211     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1212 kairera0467 197 if( this.tx選択されている曲のアティスト名 != null )
1213 kairera0467 186 this.tx選択されている曲のアティスト名.t2D描画(CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470);
1214     //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1215     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1216     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1217     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1218 kairera0467 2 //-----------------
1219     #endregion
1220     }
1221     else
1222     {
1223     // (B) その他のパネルの描画。
1224 kairera0467 186 #region [ ジャケット画像の描画 ]
1225     //-----------------
1226 kairera0467 194 if( this.txパネル != null )
1227 kairera0467 186 {
1228     var mat = SlimDX.Matrix.Identity;
1229     mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1230     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1231     mat *= SlimDX.Matrix.Translation(
1232     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1233     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1234     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1235 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1236 kairera0467 186 }
1237 kairera0467 194 if( this.txTumbnail[ nパネル番号 ] != null )
1238 kairera0467 186 {
1239     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1240     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1241     var mat = SlimDX.Matrix.Identity;
1242     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1243     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1244     mat *= SlimDX.Matrix.Translation(
1245     (this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1246     (this.stマトリックス座標[ i ].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1247     (this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1248     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1249     }
1250     //-----------------
1251     #endregion
1252 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1253     //-----------------
1254 kairera0467 194 if( this.txランプ用帯 != null )
1255     this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1256     if( this.tx選曲パネル != null )
1257     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1258 kairera0467 186 if (this.st情報[ nパネル番号 ].txタイトル名 != null)
1259     {
1260     var mat = SlimDX.Matrix.Identity;
1261     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1262     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1263     mat *= SlimDX.Matrix.Translation(
1264     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1265     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1266     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1267 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1268 kairera0467 186 }
1269     if (this.st情報[nパネル番号].txティスト名 != null)
1270     {
1271     var mat = SlimDX.Matrix.Identity;
1272     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1273     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1274     mat *= SlimDX.Matrix.Translation(
1275     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1276     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1277     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1278 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1279 kairera0467 186 }
1280 kairera0467 2 //-----------------
1281     #endregion
1282     }
1283     }
1284     }
1285     //-----------------
1286     #endregion
1287 kairera0467 186
1288 kairera0467 2 }
1289     else
1290     {
1291 kairera0467 186
1292 kairera0467 2 #region [ (2) 通常フェーズの描画。]
1293     //-----------------
1294     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1295     {
1296     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1297     int n見た目の行番号 = i;
1298     int n次のパネル番号 = ( this.n現在のスクロルカウンタ <= 0 ) ? ( ( i + 1 ) % 13 ) : ( ( ( i - 1 ) + 13 ) % 13 );
1299     int x = this.ptの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].X - this.ptの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1300     int y = this.ptの基本座標[ n見た目の行番号 ].Y + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].Y - this.ptの基本座標[ n見た目の行番号 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1301 kairera0467 186 float fX = this.n現在のスクロルカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x - this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1302     this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x + this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1303    
1304     float fY = this.n現在のスクロルカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1305     this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1306    
1307     float fZ = this.n現在のスクロルカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z - this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1308     this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z + this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1309    
1310     if (i == 6)
1311     {
1312     #region [ ジャケット画像の描画 ]
1313     //-----------------
1314     if( this.txパネル != null )
1315     {
1316     var mat = SlimDX.Matrix.Identity;
1317     mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1318     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1319     mat *= SlimDX.Matrix.Translation(
1320     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1321     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1322     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1323 kairera0467 223 this.st情報[ nパネル番号 ].txパネル.t3D描画(CDTXMania.app.Device, mat);
1324 kairera0467 186 }
1325     if (this.txTumbnail[nパネル番号] != null)
1326     {
1327     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1328     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1329     var mat = SlimDX.Matrix.Identity;
1330     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1331     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1332     mat *= SlimDX.Matrix.Translation(
1333     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1334     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1335     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1336     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1337     }
1338     //-----------------
1339     #endregion
1340     #region [ タイトル名テクスチャを描画。]
1341     //-----------------
1342     if (this.st情報[nパネル番号].txタイトル名 != null)
1343     {
1344     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1345     var mat = SlimDX.Matrix.Identity;
1346     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1347     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1348     mat *= SlimDX.Matrix.Translation(
1349     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1350     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1351     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1352 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1353 kairera0467 186 }
1354     if (this.st情報[nパネル番号].txティスト名 != null)
1355     {
1356     var mat = SlimDX.Matrix.Identity;
1357     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1358     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1359     mat *= SlimDX.Matrix.Translation(
1360     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1361     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1362     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1363 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1364 kairera0467 186 }
1365     //-----------------
1366     #endregion
1367     }
1368     else if( ( i == 5 ) )
1369     {
1370 kairera0467 194 if( this.txランプ用帯 != null )
1371     this.txランプ用帯.t3D描画( CDTXMania.app.Device, barL ); //右の帯。
1372 kairera0467 197 //for (int la = 0; la < 5; la++)
1373 kairera0467 186 {
1374     //if( this.stバー情報[ 6 ].ar難易度ラベル[ la ] != null )
1375     {
1376 kairera0467 197 //var lamp = SlimDX.Matrix.Identity;
1377     //lamp *= SlimDX.Matrix.Translation(
1378     //( this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x ) )) * CTexture.f画面比率,
1379     //( this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y ) ) ) * CTexture.f画面比率 - 1f - la * 13f,
1380     //( this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z ) ) ) * CTexture.f画面比率);
1381 kairera0467 186
1382     //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));
1383     }
1384     }
1385 kairera0467 194 if( this.tx選曲パネル != null )
1386     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 531, 243, new Rectangle(74, 80, 230, 230)); //真ん中の部分は別々に描画。
1387 kairera0467 2 // (A) スクロールが停止しているときの選択曲バーの描画。
1388 kairera0467 186 #region [ ジャケット画像の描画 ]
1389     //-----------------
1390 kairera0467 194 if( this.txパネル != null )
1391 kairera0467 186 {
1392     var mat = SlimDX.Matrix.Identity;
1393     mat *= SlimDX.Matrix.Scaling(CTexture.f画面比率, CTexture.f画面比率, 1.0f);
1394     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1395     mat *= SlimDX.Matrix.Translation(
1396     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1397     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1398     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1399 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1400 kairera0467 186 }
1401 kairera0467 194 if( this.tx選曲パネル != null )
1402     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1403 kairera0467 2
1404 kairera0467 186 for( int la = 0; la < 5 ; la++ )
1405     {
1406 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1407 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));
1408     }
1409     if( this.txTumbnail[ nパネル番号 ] != null )
1410     {
1411     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1412     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1413     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1414     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1415     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1416     }
1417     //-----------------
1418     #endregion
1419 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1420     //-----------------
1421 kairera0467 199 if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1422 kairera0467 186 this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1423 kairera0467 199 if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1424 kairera0467 186 this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1425 kairera0467 197
1426 kairera0467 186 if( this.tx選択されている曲の曲名 != null )
1427     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1428     if( this.tx選択されている曲のアティスト名 != null )
1429     this.tx選択されている曲のアティスト名.t2D描画( CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470);
1430     //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1431     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1432     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1433     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1434 kairera0467 2 //-----------------
1435     #endregion
1436     }
1437 kairera0467 186 else if (i >= 12)
1438     {
1439     }
1440     else
1441     {
1442     // (B) スクロール中の選択曲バー、またはその他のバーの描画。
1443 kairera0467 194 if( this.txランプ用帯 != null )
1444     this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1445     if( this.tx選曲パネル != null )
1446     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 761, 233, new Rectangle(304, 70, 59, 242));
1447 kairera0467 197
1448 kairera0467 186 #region [ ジャケット画像の描画 ]
1449     //-----------------
1450 kairera0467 194 if( this.txパネル != null )
1451 kairera0467 186 {
1452     var mat = SlimDX.Matrix.Identity;
1453     mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1454     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1455     mat *= SlimDX.Matrix.Translation(
1456     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1457     (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1458     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1459 kairera0467 223 this.st情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1460 kairera0467 186 }
1461 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1462 kairera0467 186 {
1463     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1464     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1465     var mat = SlimDX.Matrix.Identity;
1466     mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1467     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1468     mat *= SlimDX.Matrix.Translation(
1469     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1470     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1471     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1472     this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1473     }
1474     //-----------------
1475     #endregion
1476     #region [ タイトル名テクスチャを描画。]
1477     //-----------------
1478 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1479 kairera0467 186 {
1480     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1481     var mat = SlimDX.Matrix.Identity;
1482     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1483     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1484     mat *= SlimDX.Matrix.Translation(
1485     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1486     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1487     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1488 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1489 kairera0467 186 }
1490 kairera0467 194 if( this.st情報[nパネル番号].txティスト名 != null )
1491 kairera0467 186 {
1492     var mat = SlimDX.Matrix.Identity;
1493     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1494     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1495     mat *= SlimDX.Matrix.Translation(
1496     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1497     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1498     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1499 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1500 kairera0467 186 }
1501     //-----------------
1502     #endregion
1503 kairera0467 2
1504 kairera0467 186 #region [ スキル値を描画。]
1505     //-----------------
1506     //if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )
1507     //this.tスキル値の描画( x + 34, y + 18, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );
1508     //-----------------
1509     #endregion
1510     }
1511 kairera0467 2 }
1512     //-----------------
1513     #endregion
1514 kairera0467 186
1515 kairera0467 2 }
1516     #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]
1517     int py;
1518     double d = 0;
1519     if ( nNumOfItems > 1 )
1520     {
1521 kairera0467 186 d = ( 336 - 8 ) / (double) ( nNumOfItems - 1 );
1522 kairera0467 2 py = (int) ( d * ( nCurrentPosition - 1 ) );
1523     }
1524     else
1525     {
1526     d = 0;
1527     py = 0;
1528     }
1529     int delta = (int) ( d * this.n現在のスクロルカウンタ / 100 );
1530 kairera0467 186 if ( py + delta <= 336 - 8 )
1531 kairera0467 2 {
1532     this.nスクロルバ相対y座標 = py + delta;
1533     }
1534     #endregion
1535    
1536     #region [ アイテム数の描画 #27648 ]
1537     tアイテム数の描画();
1538     #endregion
1539     return 0;
1540     }
1541    
1542    
1543     // その他
1544    
1545     #region [ private ]
1546     //-----------------
1547 kairera0467 186 private enum E種別 { Score, Box, Other, Random, BackBox }
1548 kairera0467 2
1549     private struct ST
1550     {
1551     public CTexture Score;
1552     public CTexture Box;
1553     public CTexture Other;
1554 kairera0467 186 public CTexture Random;
1555     public CTexture BackBox;
1556 kairera0467 2 public CTexture this[ int index ]
1557     {
1558     get
1559     {
1560     switch( index )
1561     {
1562     case 0:
1563     return this.Score;
1564    
1565     case 1:
1566     return this.Box;
1567    
1568     case 2:
1569     return this.Other;
1570 kairera0467 186
1571     case 3:
1572     return this.Random;
1573    
1574     case 4:
1575     return this.BackBox;
1576 kairera0467 2 }
1577     throw new IndexOutOfRangeException();
1578     }
1579     set
1580     {
1581     switch( index )
1582     {
1583     case 0:
1584     this.Score = value;
1585     return;
1586    
1587     case 1:
1588     this.Box = value;
1589     return;
1590    
1591     case 2:
1592     this.Other = value;
1593     return;
1594 kairera0467 186
1595     case 3:
1596     this.Random = value;
1597     return;
1598    
1599     case 4:
1600     this.BackBox = value;
1601     return;
1602 kairera0467 2 }
1603     throw new IndexOutOfRangeException();
1604     }
1605     }
1606     }
1607    
1608     private struct ST情報
1609     {
1610     public CActSelect曲リスト.E種別 e種別;
1611     public string strタイトル文字列;
1612 kairera0467 186 public string strティスト名;
1613 kairera0467 2 public CTexture txタイトル名;
1614 kairera0467 186 public CTexture txティスト名;
1615     public CTexture txパネル;
1616 kairera0467 409 public CTexture txカスタム曲名テクスチャ;
1617 kairera0467 186 public int nティスト名テクスチャの長さdot;
1618     public int nタイトル名テクスチャの長さdot;
1619 kairera0467 2 public STDGBVALUE<int> nスキル値;
1620     public Color col文字色;
1621 kairera0467 186 public string strDTXフォルダのパス;
1622     public Cスコア.ST譜面情報 ar譜面情報;
1623 kairera0467 2 }
1624    
1625     private struct ST選曲バ
1626     {
1627     public CTexture Score;
1628     public CTexture Box;
1629     public CTexture Other;
1630     public CTexture this[ int index ]
1631     {
1632     get
1633     {
1634     switch( index )
1635     {
1636     case 0:
1637     return this.Score;
1638    
1639     case 1:
1640     return this.Box;
1641    
1642     case 2:
1643     return this.Other;
1644     }
1645     throw new IndexOutOfRangeException();
1646     }
1647     set
1648     {
1649     switch( index )
1650     {
1651     case 0:
1652     this.Score = value;
1653     return;
1654    
1655     case 1:
1656     this.Box = value;
1657     return;
1658    
1659     case 2:
1660     this.Other = value;
1661     return;
1662     }
1663     throw new IndexOutOfRangeException();
1664     }
1665     }
1666     }
1667    
1668 kairera0467 186 protected struct ST中心点
1669     {
1670     public float x;
1671     public float y;
1672     public float z;
1673     public float rotY;
1674     }
1675     /// <summary>
1676     /// <para>SSTFファイル絶対パス(key)とサムネイル画像(value)との辞書。</para>
1677     /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1678     /// </summary>
1679     protected Dictionary<string, CTexture> dicThumbnail = new Dictionary<string, CTexture>();
1680    
1681     /// <summary>
1682     /// <para>SSTFファイル絶対パス(key)とプロパティ画像(value)との辞書。</para>
1683     /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1684     /// </summary>
1685     protected Dictionary<string, CTexture> dicProperty = new Dictionary<string, CTexture>();
1686    
1687     protected ST中心点[] stマトリックス座標 = new ST中心点[] {
1688     #region [ 実は円弧配置になってない。射影行列間違ってるよスターレインボウ見せる気かよ… ]
1689     //-----------------
1690     new ST中心点() { x = -940.0000f, y = 4f, z = 320f, rotY = 0.4150f },
1691     new ST中心点() { x = -740.0000f, y = 4f, z = 230f, rotY = 0.4150f },
1692     new ST中心点() { x = -550.0000f, y = 4f, z = 150f, rotY = 0.4150f },
1693     new ST中心点() { x = -370.0000f, y = 4f, z = 70f, rotY = 0.4150f },
1694     new ST中心点() { x = -194.0000f, y = 4f, z = -6f, rotY = 0.4150f },
1695     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1696     new ST中心点() { x = 204.0000f, y = 4f, z = 0f, rotY = -0.4150f },
1697     new ST中心点() { x = 362.0000f, y = 4f, z = 70f, rotY = -0.4150f },
1698     new ST中心点() { x = 528.0000f, y = 4f, z = 146f, rotY = -0.4150f },
1699     new ST中心点() { x = 686.0000f, y = 4f, z = 212f, rotY = -0.4150f },
1700     new ST中心点() { x = 848.0000f, y = 4f, z = 282f, rotY = -0.4150f },
1701     new ST中心点() { x = 1200.0000f, y = 4f, z = 450f, rotY = -0.4150f },
1702     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1703     new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1704     //-----------------
1705     #endregion
1706     };
1707    
1708     protected readonly ST中心点[] stマトリックス曲名座標 = new ST中心点[] {
1709     #region [ 実は円弧配置になってない。射影行列間違ってるよスターレインボウ見せる気かよ… ]
1710     //-----------------
1711     new ST中心点() { x = -980.0000f, y = 2f, z = 360f, rotY = 0.4000f },
1712     new ST中心点() { x = -780.0000f, y = 2f, z = 270f, rotY = 0.4000f },
1713     new ST中心点() { x = -590.0000f, y = 2f, z = 180f, rotY = 0.4000f },
1714     new ST中心点() { x = -400.0000f, y = 2f, z = 90f, rotY = 0.4000f },
1715     new ST中心点() { x = -210.0000f, y = 2f, z = 0f, rotY = 0.4000f },
1716     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1717     new ST中心点() { x = 210.0000f, y = 2f, z = 0f, rotY = -0.4000f },
1718     new ST中心点() { x = 400.0000f, y = 2f, z = 90f, rotY = -0.4f },
1719     new ST中心点() { x = 590.0000f, y = 2f, z = 180f, rotY = -0.4f },
1720     new ST中心点() { x = 780.0000f, y = 2f, z = 270f, rotY = -0.4f },
1721     new ST中心点() { x = 980.0000f, y = 2f, z = 360f, rotY = -0.4f },
1722     new ST中心点() { x = 1200.0000f, y = 2f, z = 450f, rotY = -0.4f },
1723     new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1724     new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1725     //-----------------
1726     #endregion
1727     };
1728     [StructLayout(LayoutKind.Sequential)]
1729     public struct STATUSPANEL
1730     {
1731     public string label;
1732     public int status;
1733     }
1734     public int nIndex;
1735     public STATUSPANEL[] stパネルマップ;
1736    
1737     public bool b登場アニメ全部完了;
1738 kairera0467 2 private Color color文字影 = Color.FromArgb( 0x40, 10, 10, 10 );
1739 kairera0467 186 public CCounter[] ct登場アニメ用 = new CCounter[ 13 ];
1740 kairera0467 2 private Font ft曲リスト用フォント;
1741     private long nスクロルタイマ;
1742     private int n現在のスクロルカウンタ;
1743     private int n現在の選択行;
1744     private int n目標のスクロルカウンタ;
1745 kairera0467 186 private readonly Point[] ptの基本座標 = new Point[] { new Point(0x2c4, 30), new Point(0x272, 0x51), new Point(0x242, 0x84), new Point(0x222, 0xb7), new Point(0x210, 0xea), new Point(0x1d0, 0x127), new Point(0x224, 0x183), new Point(0x242, 0x1b6), new Point(0x270, 0x1e9), new Point(0x2ae, 540), new Point(0x314, 0x24f), new Point(0x3e4, 0x282), new Point(0x500, 0x2b5) };
1746 kairera0467 2 private ST情報[] st情報 = new ST情報[ 13 ];
1747     private CTexture txSongNotFound, txEnumeratingSongs;
1748     private CTexture txスキル数字;
1749     private CTexture txアイテム数数字;
1750 kairera0467 186 private CTexture[] txTumbnail = new CTexture[13];
1751     private CTexture tx選曲パネル;
1752     private CTexture txパネル;
1753     private CTexture tx;
1754     private CTexture tx色帯;
1755     private CTexture txランプ用帯;
1756     private CTexture tx選択されている曲の曲名;
1757     private CTexture tx選択されている曲のアティスト名;
1758     private CTexture txクリアランプ;
1759     //CPrivateFont prvFont;
1760 kairera0467 223 private CPrivateFastFont prvFont;
1761 kairera0467 2
1762