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 497 - (hide annotations) (download)
Sun Nov 1 06:19:51 2015 UTC (8 years, 5 months ago) by kairera0467
File size: 141719 byte(s)
#35379 座標調整など
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 411 if( !this.dicThumbnail.ContainsKey( this.st情報[ i ].strPreimageのパス ) )
312 kairera0467 186 {
313     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
314 kairera0467 411 this.tパスを指定してサムネイル画像を生成する( i, this.st情報[ i ].strPreimageのパス, this.st情報[ i ].e種別 );
315     this.dicThumbnail.Add( this.st情報[ i ].strPreimageのパス, this.txTumbnail[ i ] );
316 kairera0467 186 }
317 kairera0467 411 txTumbnail[ i ] = this.dicThumbnail[ this.st情報[ i ].strPreimageのパス ];
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 494 this.tx選曲パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_image_panel_guitar.png" ) );
608 ron1120 248
609     if ( this.tx選曲パネル == null || CDTXMania.ConfigIni.bDrums有効 )
610     this.tx選曲パネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_image_panel.png"));
611    
612 kairera0467 186 this.txパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_music panel.png"));
613 kairera0467 494 //this.tx帯 = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\5_backpanel.png" ) );
614     this.txパネル帯 = CDTXMania.tテクスチャの生成Af( CSkin.Path( @"Graphics\5_Backbar.png" ) );
615     //this.tx色帯 = CDTXMania.tテクスチャの生成Af( 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 kairera0467 411 if( this.st情報[ i ].strPreimageのパス != null )
634 kairera0467 186 {
635 kairera0467 411 if( !this.dicThumbnail.ContainsKey( this.st情報[ i ].strPreimageのパス ) )
636 kairera0467 186 {
637     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
638 kairera0467 411 this.tパスを指定してサムネイル画像を生成する( i, this.st情報[ i ].strPreimageのパス, this.st情報[ i ].e種別 );
639     this.dicThumbnail.Add( this.st情報[ i ].strPreimageのパス, this.txTumbnail[ i ] );
640 kairera0467 186 }
641 kairera0467 411 txTumbnail[ i ] = this.dicThumbnail[ this.st情報[ i ].strPreimageのパス ];
642 kairera0467 186 }
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 kairera0467 412 CDTXMania.t安全にDisposeする( ref this.st情報[ i ].txカスタム曲名テクスチャ );
717     CDTXMania.t安全にDisposeする( ref this.st情報[ i ].txカスタムアティスト名テクスチャ );
718 kairera0467 186 }
719 kairera0467 2
720 kairera0467 199 if( this.tx選択されている曲の曲名 != null )
721     {
722     this.tx選択されている曲の曲名.Dispose();
723 kairera0467 186 this.tx選択されている曲の曲名 = null;
724 kairera0467 199 }
725     if( this.tx選択されている曲のアティスト名 != null )
726     {
727     this.tx選択されている曲のアティスト名.Dispose();
728 kairera0467 186 this.tx選択されている曲のアティスト名 = null;
729     }
730     #region[ ジャケット画像の解放 ]
731     int nKeys = this.dicThumbnail.Count;
732     string[] keys = new string[ nKeys ];
733     this.dicThumbnail.Keys.CopyTo( keys, 0 );
734     foreach( var key in keys )
735     {
736     C共通.tDisposeする( this.dicThumbnail[ key ] );
737     this.dicThumbnail[ key ] = null;
738     }
739     #endregion
740    
741 kairera0467 2 CDTXMania.t安全にDisposeする( ref this.txEnumeratingSongs );
742     CDTXMania.t安全にDisposeする( ref this.txSongNotFound );
743 kairera0467 186 CDTXMania.t安全にDisposeする( ref this.tx選曲パネル );
744     CDTXMania.t安全にDisposeする( ref this.txパネル );
745     CDTXMania.t安全にDisposeする( ref this.txクリアランプ );
746 kairera0467 494 //CDTXMania.t安全にDisposeする( ref this.tx帯 );
747     CDTXMania.t安全にDisposeする( ref this.txパネル帯 );
748     //CDTXMania.t安全にDisposeする( ref this.tx色帯 );
749     //CDTXMania.t安全にDisposeする( ref this.txランプ用帯 );
750 kairera0467 2
751     base.OnManagedリソスの解放();
752     }
753     public override int On進行描画()
754     {
755     if( this.b活性化してない )
756     return 0;
757    
758     #region [ 初めての進行描画 ]
759     //-----------------
760     if( this.b初めての進行描画 )
761     {
762     for( int i = 0; i < 13; i++ )
763     this.ct登場アニメ用[ i ] = new CCounter( -i * 10, 100, 3, CDTXMania.Timer );
764    
765     this.nスクロルタイマ = CSound管理.rc演奏用タイマ.n現在時刻;
766     CDTXMania.stage選曲.t選択曲変更通知();
767    
768     base.b初めての進行描画 = false;
769     }
770     //-----------------
771     #endregion
772    
773    
774     // まだ選択中の曲が決まってなければ、曲ツリールートの最初の曲にセットする。
775    
776     if( ( this.r現在選択中の曲 == null ) && ( CDTXMania.Songs管理.list曲ル.Count > 0 ) )
777     this.r現在選択中の曲 = CDTXMania.Songs管理.list曲ル[ 0 ];
778    
779    
780     // 本ステージは、(1)登場アニメフェーズ → (2)通常フェーズ と二段階にわけて進む。
781     // 2つしかフェーズがないので CStage.eフェーズID を使ってないところがまた本末転倒。
782    
783    
784     // 進行。
785    
786     if( !this.b登場アニメ全部完了 )
787     {
788     #region [ (1) 登場アニメフェーズの進行。]
789     //-----------------
790     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
791     {
792     this.ct登場アニメ用[ i ].t進行();
793    
794     if( this.ct登場アニメ用[ i ].b終了値に達した )
795     this.ct登場アニメ用[ i ].t停止();
796     }
797    
798     // 全部の進行が終わったら、this.b登場アニメ全部完了 を true にする。
799    
800     this.b登場アニメ全部完了 = true;
801     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
802     {
803     if( this.ct登場アニメ用[ i ].b進行中 )
804     {
805     this.b登場アニメ全部完了 = false; // まだ進行中のアニメがあるなら false のまま。
806     break;
807     }
808     }
809     //-----------------
810     #endregion
811     }
812     else
813     {
814     #region [ (2) 通常フェーズの進行。]
815     //-----------------
816 kairera0467 186 long n現在時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
817 kairera0467 2
818     if( n現在時刻 < this.nスクロルタイマ ) // 念のため
819     this.nスクロルタイマ = n現在時刻;
820    
821     const int nアニメ間隔 = 2;
822     while( ( n現在時刻 - this.nスクロルタイマ ) >= nアニメ間隔 )
823     {
824     int n加速度 = 1;
825     int n残距離 = Math.Abs( (int) ( this.n目標のスクロルカウンタ - this.n現在のスクロルカウンタ ) );
826    
827     #region [ 残距離が遠いほどスクロールを速くする(=n加速度を多くする)。]
828     //-----------------
829     if( n残距離 <= 100 )
830     {
831     n加速度 = 2;
832     }
833     else if( n残距離 <= 300 )
834     {
835     n加速度 = 3;
836     }
837     else if( n残距離 <= 500 )
838     {
839     n加速度 = 4;
840     }
841     else
842     {
843     n加速度 = 8;
844     }
845     //-----------------
846     #endregion
847    
848     #region [ 加速度を加算し、現在のスクロールカウンタを目標のスクロールカウンタまで近づける。 ]
849     //-----------------
850     if( this.n現在のスクロルカウンタ < this.n目標のスクロルカウンタ ) // (A) 正の方向に未達の場合:
851     {
852     this.n現在のスクロルカウンタ += n加速度; // カウンタを正方向に移動する。
853    
854     if( this.n現在のスクロルカウンタ > this.n目標のスクロルカウンタ )
855     this.n現在のスクロルカウンタ = this.n目標のスクロルカウンタ; // 到着!スクロール停止!
856     }
857    
858     else if( this.n現在のスクロルカウンタ > this.n目標のスクロルカウンタ ) // (B) 負の方向に未達の場合:
859     {
860     this.n現在のスクロルカウンタ -= n加速度; // カウンタを負方向に移動する。
861    
862     if( this.n現在のスクロルカウンタ < this.n目標のスクロルカウンタ ) // 到着!スクロール停止!
863     this.n現在のスクロルカウンタ = this.n目標のスクロルカウンタ;
864     }
865     //-----------------
866     #endregion
867    
868     if( this.n現在のスクロルカウンタ >= 100 ) // 1行=100カウント。
869     {
870     #region [ パネルを1行上にシフトする。]
871     //-----------------
872    
873     // 選択曲と選択行を1つ下の行に移動。
874    
875     this.r現在選択中の曲 = this.r次の曲( this.r現在選択中の曲 );
876     this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 13;
877    
878     // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。
879    
880     C曲リストノ song = this.r現在選択中の曲;
881     for( int i = 0; i < 7; i++ )
882     song = this.r次の曲( song );
883    
884     int index = ( this.n現在の選択行 + 7 ) % 13; // 新しく最下部に表示されるパネルのインデックス(0~12)。
885     this.st情報[ index ].strタイトル文字列 = song.strタイトル;
886 kairera0467 186 this.st情報[ index ].strティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.ティスト名;
887 kairera0467 2 this.st情報[ index ].col文字色 = song.col文字色;
888 kairera0467 411 this.st情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス;
889     this.st情報[ index ].strPreimageのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
890 kairera0467 2 this.t曲名バの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].col文字色 );
891 kairera0467 186 this.tティスト名テクスチャの生成( index, this.st情報[ index ].strティスト名 );
892 kairera0467 223 this.tパネルの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].strティスト名, this.st情報[ index ].col文字色 );
893 kairera0467 2
894 kairera0467 411 if( !this.dicThumbnail.ContainsKey( this.st情報[ index ].strPreimageのパス ) )
895 kairera0467 186 {
896     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
897 kairera0467 411 this.tパスを指定してサムネイル画像を生成する( index, this.st情報[ index ].strPreimageのパス, this.st情報[ index ].e種別 );
898     this.dicThumbnail.Add( this.st情報[ index ].strPreimageのパス, this.txTumbnail[ index ] );
899 kairera0467 186 }
900 kairera0467 411 txTumbnail[ index ] = this.dicThumbnail[ this.st情報[ index ].strPreimageのパス ];
901 kairera0467 2
902 kairera0467 186
903 kairera0467 2 // stバー情報[] の内容を1行ずつずらす。
904    
905     C曲リストノ song2 = this.r現在選択中の曲;
906     for( int i = 0; i < 5; i++ )
907     song2 = this.r前の曲( song2 );
908    
909     for( int i = 0; i < 13; i++ )
910     {
911     int n = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
912     this.st情報[ n ].e種別 = this.e曲のバ種別を返す( song2 );
913     song2 = this.r次の曲( song2 );
914     }
915    
916    
917     // 新しく最下部に表示されるパネル用のスキル値を取得。
918    
919     for( int i = 0; i < 3; i++ )
920     this.st情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
921    
922     // 1行(100カウント)移動完了。
923    
924     this.n現在のスクロルカウンタ -= 100;
925     this.n目標のスクロルカウンタ -= 100;
926    
927 kairera0467 199 this.t選択曲が変更された( false ); // スクロールバー用に今何番目を選択しているかを更新
928     if( this.tx選択されている曲の曲名 != null )
929 kairera0467 186 {
930     this.tx選択されている曲の曲名.Dispose();
931 kairera0467 199 this.tx選択されている曲の曲名 = null;
932     }
933     if( this.tx選択されている曲のアティスト名 != null )
934     {
935 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
936     this.tx選択されている曲のアティスト名 = null;
937     }
938 kairera0467 2
939     if( this.n目標のスクロルカウンタ == 0 )
940     CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!
941    
942     //-----------------
943     #endregion
944     }
945     else if( this.n現在のスクロルカウンタ <= -100 )
946     {
947     #region [ パネルを1行下にシフトする。]
948     //-----------------
949    
950     // 選択曲と選択行を1つ上の行に移動。
951    
952     this.r現在選択中の曲 = this.r前の曲( this.r現在選択中の曲 );
953     this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 13 ) % 13;
954    
955     // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。
956    
957     C曲リストノ song = this.r現在選択中の曲;
958     for( int i = 0; i < 5; i++ )
959     song = this.r前の曲( song );
960    
961     int index = ( ( this.n現在の選択行 - 5 ) + 13 ) % 13; // 新しく最上部に表示されるパネルのインデックス(0~12)。
962     this.st情報[ index ].strタイトル文字列 = song.strタイトル;
963 kairera0467 186 this.st情報[ index ].strティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song) ].譜面情報.ティスト名;
964 kairera0467 2 this.st情報[ index ].col文字色 = song.col文字色;
965 kairera0467 411 this.st情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス;
966     this.st情報[ index ].strPreimageのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
967 kairera0467 2 this.t曲名バの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].col文字色 );
968 kairera0467 186 this.tティスト名テクスチャの生成( index, this.st情報[ index ].strティスト名 );
969 kairera0467 223 this.tパネルの生成( index, this.st情報[ index ].strタイトル文字列, this.st情報[ index ].strティスト名, this.st情報[ index ].col文字色 );
970 kairera0467 2
971 kairera0467 411 if( !this.dicThumbnail.ContainsKey( this.st情報[ index ].strPreimageのパス ) )
972 kairera0467 186 {
973     //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
974 kairera0467 411 this.tパスを指定してサムネイル画像を生成する( index, this.st情報[ index ].strPreimageのパス, this.st情報[ index ].e種別 );
975     this.dicThumbnail.Add( this.st情報[ index ].strPreimageのパス, this.txTumbnail[ index ] );
976 kairera0467 186 }
977 kairera0467 411 txTumbnail[ index ] = this.dicThumbnail[ this.st情報[ index ].strPreimageのパス ];
978 kairera0467 2
979 kairera0467 186
980 kairera0467 2 // stバー情報[] の内容を1行ずつずらす。
981    
982     C曲リストノ song2 = this.r現在選択中の曲;
983     for( int i = 0; i < 5; i++ )
984     song2 = this.r前の曲( song2 );
985    
986     for( int i = 0; i < 13; i++ )
987     {
988     int n = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
989     this.st情報[ n ].e種別 = this.e曲のバ種別を返す( song2 );
990     song2 = this.r次の曲( song2 );
991     }
992    
993    
994     // 新しく最上部に表示されるパネル用のスキル値を取得。
995    
996     for( int i = 0; i < 3; i++ )
997     this.st情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
998    
999    
1000     // 1行(100カウント)移動完了。
1001    
1002     this.n現在のスクロルカウンタ += 100;
1003     this.n目標のスクロルカウンタ += 100;
1004    
1005 kairera0467 186
1006     this.t選択曲が変更された( false ); // スクロールバー用に今何番目を選択しているかを更新
1007 kairera0467 199 if( this.tx選択されている曲の曲名 != null )
1008 kairera0467 186 {
1009     this.tx選択されている曲の曲名.Dispose();
1010 kairera0467 199 this.tx選択されている曲の曲名 = null;
1011     }
1012     if( this.tx選択されている曲のアティスト名 != null )
1013     {
1014 kairera0467 186 this.tx選択されている曲のアティスト名.Dispose();
1015     this.tx選択されている曲のアティスト名 = null;
1016     }
1017 kairera0467 2
1018     if( this.n目標のスクロルカウンタ == 0 )
1019     CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!
1020     //-----------------
1021     #endregion
1022     }
1023    
1024     this.nスクロルタイマ += nアニメ間隔;
1025     }
1026     //-----------------
1027     #endregion
1028     }
1029    
1030    
1031     // 描画。
1032    
1033     if( this.r現在選択中の曲 == null )
1034     {
1035     #region [ 曲が1つもないなら「Songs not found.」を表示してここで帰れ。]
1036     //-----------------
1037     if ( bIsEnumeratingSongs )
1038     {
1039     if ( this.txEnumeratingSongs != null )
1040     {
1041 kairera0467 203 this.txEnumeratingSongs.t2D描画( CDTXMania.app.Device, 530, 240 );
1042 kairera0467 2 }
1043     }
1044     else
1045     {
1046     if ( this.txSongNotFound != null )
1047 kairera0467 203 this.txSongNotFound.t2D描画( CDTXMania.app.Device, 500, 190 );
1048 kairera0467 2 }
1049     //-----------------
1050     #endregion
1051    
1052     return 0;
1053     }
1054 kairera0467 186 var bar = SlimDX.Matrix.Identity;
1055 kairera0467 494
1056 kairera0467 186 var barL = SlimDX.Matrix.Identity;
1057 kairera0467 2
1058 kairera0467 494 Matrix[] barC = new Matrix[2];
1059     Matrix[] barLa = new Matrix[2];
1060     Matrix[] barU = new Matrix[2];
1061 kairera0467 186
1062 kairera0467 494 #region[ビルボードの実験コード。「ここでするなよ...」とか言わないであげて...]
1063     //Z座標はプラス方向にすると動かなくなるので注意。
1064    
1065     //共通
1066     Vector3 VecCam = new Vector3( 0.0f, 0.0f, -1.0f ); //Zをマイナス方向にしないと描画されない(?)
1067     Vector3 VecTarg = new Vector3( 0.0f, 0.0f, 0.0f );
1068     Vector3 VecUp = new Vector3( 0.0f, 1.0f, 0.0f );
1069    
1070     bar *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1071     barL *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1072    
1073     bar *= SlimDX.Matrix.RotationYawPitchRoll( -0.40f, 0.0f, 0.0f ); ////通常のRotationと何が違うのかわからない(Axisから倍率を抜いただけ?)
1074     barL *= SlimDX.Matrix.RotationYawPitchRoll( 0.40f, 0.0f, 0.0f );
1075    
1076    
1077     //bar *= SlimDX.Matrix.PerspectiveFovLH( C変換.DegreeToRadian(45), 1280.0f/720.0f, 1.0f, 500000.0f ); //カメラの視野角など調整
1078    
1079     //ワールド変換とか意味ワカンネ
1080     #endregion
1081    
1082     //bar *= SlimDX.Matrix.RotationY(-0.415f);
1083     //barL *= SlimDX.Matrix.RotationY(0.415f);
1084     //bar *= SlimDX.Matrix.Translation(540f, 20f, -24f);
1085     bar *= SlimDX.Matrix.Translation(600f, 121f, 190f);
1086     barL *= SlimDX.Matrix.Translation(-600f, 121f, 190f);
1087     //barL *= SlimDX.Matrix.Translation(-540f, 20f, -24f);
1088     //bar *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1089     //bar *= SlimDX.Matrix.Scaling( 1.0f, 1.0f, 1.0f );
1090     //barL *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1091    
1092     //bar *= SlimDX.Matrix.RotationAxis( new Vector3( 0f, -0.415f, 0f ), 0.5f );
1093    
1094     for( int i = 0; i < 2; i++ )
1095     {
1096     float fRate = 1.0f;
1097     if( i == 0 ) fRate = -1.0f;
1098    
1099     barC[ i ] = Matrix.Identity;
1100     barC[ i ] *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1101     barC[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( -0.41f * fRate, 0.0f, 0.0f );
1102     barC[ i ] *= SlimDX.Matrix.Translation( 592f * fRate, 148f, 186f);
1103    
1104     barLa[ i ] = Matrix.Identity;
1105     barLa[ i ] *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1106     barLa[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( -0.41f * fRate, 0.0f, 0.0f );
1107     barLa[ i ] *= SlimDX.Matrix.Translation( 592f * fRate, 100f, 186f);
1108    
1109     barU[ i ] = Matrix.Identity;
1110     barU[ i ] *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1111     barU[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( -0.41f * fRate, 0.0f, 0.0f );
1112     barU[ i ] *= SlimDX.Matrix.Translation( 592f * fRate, -106f, 186f);
1113     }
1114    
1115    
1116     this.txパネル帯.t3D描画( CDTXMania.app.Device, barU[ 0 ], new Rectangle( 2, 74, 1000, 30 ) );
1117     this.txパネル帯.t3D描画( CDTXMania.app.Device, barU[ 1 ], new Rectangle( 2, 74, 1000, 30 ) );
1118     this.txパネル帯.t3D描画( CDTXMania.app.Device, bar, new Rectangle( 2, 38, 1000, 30 ) ); //右の帯。
1119     this.txパネル帯.t3D描画( CDTXMania.app.Device, barL, new Rectangle( 2, 38, 1000, 30 ) ); //左の帯。
1120     //this.tx帯.t3D描画(CDTXMania.app.Device, barL); //左の帯。
1121     //this.txパネル帯.n透明度 = 155 + this.ct登場アニメ用[10].n現在の値;
1122     this.txパネル帯.t3D描画( CDTXMania.app.Device, barC[ 0 ], new Rectangle( 2, 2, 1000, 30 ) );
1123     this.txパネル帯.t3D描画( CDTXMania.app.Device, barC[ 1 ], new Rectangle( 2, 2, 1000, 30 ) );
1124    
1125 kairera0467 186 #region [ デバッグ補助 ]
1126     //-----------------
1127     /*
1128     stマトリックス座標 = new ST中心点[] {
1129 kairera0467 431 new ST中心点() { x = -980.0000f, y = 4f, z = 350f, rotY = 0.4000f },
1130     new ST中心点() { x = -780.0000f, y = 4f, z = 264f, rotY = 0.4000f },
1131     new ST中心点() { x = -590.0000f, y = 4f, z = 174f, rotY = 0.4000f },
1132     new ST中心点() { x = -400.0000f, y = 4f, z = 92f, rotY = 0.4000f },
1133     new ST中心点() { x = -210.0000f, y = 4f, z = 10f, rotY = 0.4000f },
1134 kairera0467 186 new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1135 kairera0467 431 new ST中心点() { x = 210.0000f, y = 2f, z = 10f, rotY = -0.4000f },
1136     new ST中心点() { x = 400.0000f, y = 2f, z = 92f, rotY = -0.4f },
1137     new ST中心点() { x = 590.0000f, y = 2f, z = 174f, rotY = -0.4f },
1138     new ST中心点() { x = 780.0000f, y = 2f, z = 264f, rotY = -0.4f },
1139     new ST中心点() { x = 980.0000f, y = 2f, z = 350f, rotY = -0.4f },
1140     new ST中心点() { x = 1200.0000f, y = 2f, z = 450f, rotY = -0.4f },
1141     new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1142     new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1143 kairera0467 186 };
1144     */
1145     //-----------------
1146     #endregion
1147    
1148 kairera0467 494 #region[ ジャケット画像のMatrix配列 ]
1149     //パネル1枚1枚にMatrixを割り当ててみる。
1150     //とりあえず構造の最適化無しで地味に作ってみる。
1151     Matrix[] matSongPanel = new SlimDX.Matrix[ 13 ];
1152     Matrix[] matJacket = new SlimDX.Matrix[ 13 ];
1153     ST中心点[] st3D座標 = new ST中心点[] {
1154     #region [ 計算なんてしていない。 ]
1155     //-----------------
1156     new ST中心点() { x = -820.0000f, y = 8f, z = 264f, rotY = 0.410f },
1157     new ST中心点() { x = -666.0000f, y = 8f, z = 198f, rotY = 0.410f },
1158     new ST中心点() { x = -506.0000f, y = 8f, z = 127f, rotY = 0.410f },
1159     new ST中心点() { x = -350.0000f, y = 8f, z = 60f, rotY = 0.410f },
1160     new ST中心点() { x = -194.0000f, y = 8f, z = -6f, rotY = 0.410f },
1161 kairera0467 497 new ST中心点() { x = 6.00002622683f, y = 8f, z = 0f, rotY = 0.0f },
1162 kairera0467 494 new ST中心点() { x = 208.0000f, y = 8f, z = 0f, rotY = -0.410f },
1163     new ST中心点() { x = 362.0000f, y = 8f, z = 66f, rotY = -0.410f },
1164     new ST中心点() { x = 518.0000f, y = 8f, z = 132f, rotY = -0.410f },
1165     new ST中心点() { x = 676.0000f, y = 8f, z = 200.0f, rotY = -0.410f },
1166     new ST中心点() { x = 837.0000f, y = 8f, z = 270.0f, rotY = -0.410f },
1167 kairera0467 497 new ST中心点() { x = 1100.0000f, y = 8f, z = 340.0f, rotY = -0.410f },
1168     new ST中心点() { x = 1500.0000f, y = 8f, z = 450.0f, rotY = -0.410f },
1169     new ST中心点() { x = 1500.0000f, y = 8f, z = 340.0f, rotY = -0.410f },
1170 kairera0467 494 //-----------------
1171     #endregion
1172     };
1173 kairera0467 186
1174 kairera0467 494 for( int i = 0; i < 13; i++ )
1175     {
1176     matSongPanel[ i ] = Matrix.Identity;
1177     matSongPanel[ i ] *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1178     matSongPanel[ i ] *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1179 kairera0467 497 //matSongPanel[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1180     //matSongPanel[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1181 kairera0467 494
1182    
1183     matJacket[ i ] = Matrix.Identity;
1184     matJacket[ i ] *= SlimDX.Matrix.LookAtLH( VecCam, VecTarg, VecUp );
1185     //matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f ); //ジャケット画像は計算順序を変える。
1186    
1187     //matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, 0f, st3D座標[ i ].z );
1188     }
1189     #endregion
1190    
1191    
1192    
1193 kairera0467 2 if( !this.b登場アニメ全部完了 )
1194     {
1195     #region [ (1) 登場アニメフェーズの描画。]
1196     //-----------------
1197     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1198     {
1199     if( this.ct登場アニメ用[ i ].n現在の値 >= 0 )
1200     {
1201     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1202 kairera0467 186
1203 kairera0467 194 if( i == 6 )
1204 kairera0467 186 {
1205     #region [ ジャケット画像の描画 ]
1206     //-----------------
1207 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1208 kairera0467 186 {
1209 kairera0467 497 matSongPanel[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1210     matSongPanel[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1211 kairera0467 494 this.st情報[ nパネル番号 ].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1212 kairera0467 186 }
1213 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1214 kairera0467 186 {
1215     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1216     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1217 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1218     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1219     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1220     //mat *= SlimDX.Matrix.Translation(
1221     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1222     // (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1223     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1224     //this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1225    
1226     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1227     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1228 kairera0467 497 matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y - 1.5f, st3D座標[ i ].z );
1229 kairera0467 494
1230     this.txTumbnail[ nパネル番号 ].t3D描画(CDTXMania.app.Device, matJacket[ i ] );
1231 kairera0467 186 }
1232     //-----------------
1233     #endregion
1234     #region [ タイトル名テクスチャを描画。]
1235     //-----------------
1236 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1237 kairera0467 186 {
1238     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1239     var mat = SlimDX.Matrix.Identity;
1240 kairera0467 194 mat *= SlimDX.Matrix.Scaling( 0.35f, 0.45f, 1.0f );
1241     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1242 kairera0467 186 mat *= SlimDX.Matrix.Translation(
1243     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1244     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1245     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1246 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1247 kairera0467 186 }
1248     if (this.st情報[nパネル番号].txティスト名 != null)
1249     {
1250     var mat = SlimDX.Matrix.Identity;
1251     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1252     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1253     mat *= SlimDX.Matrix.Translation(
1254     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1255     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1256     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1257 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1258 kairera0467 186 }
1259     //-----------------
1260     #endregion
1261 kairera0467 194 if( this.tx選曲パネル != null )
1262     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1263 kairera0467 186 }
1264     else if( i == 5 )
1265 kairera0467 2 {
1266     // (A) 選択曲パネルを描画。
1267 kairera0467 194 if( this.tx選曲パネル != null )
1268     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 531, 243, new Rectangle( 74, 80, 230, 230 ) ); //真ん中の部分は別々に描画。
1269 kairera0467 494 if( this.txパネル帯 != null )
1270 kairera0467 194 {
1271 kairera0467 494 this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 0 ], new Rectangle( 2, 110, 1000, 20 ) );
1272 kairera0467 194 }
1273 kairera0467 186 #region [ バーテクスチャを描画。]
1274 kairera0467 2 //-----------------
1275 kairera0467 194 if( this.txパネル != null )
1276 kairera0467 186 {
1277 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1278     //mat *= SlimDX.Matrix.Scaling(0.8f, 0.8f, 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 + 2 + (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     //this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1285 kairera0467 186 }
1286 kairera0467 194 if( this.tx選曲パネル != null )
1287     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 457, 163, new Rectangle( 0, 0, 363, 368 ) );
1288 kairera0467 2 //-----------------
1289     #endregion
1290 kairera0467 186 #region [ ジャケット画像の描画 ]
1291     //-----------------
1292     for( int la = 0; la < 5 ; la++ )
1293     {
1294 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1295 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));
1296     }
1297 kairera0467 193 if( this.txTumbnail[ nパネル番号 ] != null )
1298     {
1299     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1300     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1301     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1302     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1303     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1304     }
1305 kairera0467 186 //-----------------
1306     #endregion
1307 kairera0467 412 #region [ タイトル名テクスチャを描画。]
1308     //-----------------
1309     if( File.Exists( this.st情報[ nパネル番号 ].strDTXフォルダのパス + "TitleTexture.png" ) && this.tx選択されている曲の曲名 == null )
1310     {
1311     this.tx選択されている曲の曲名 = this.tカスタム曲名の生成( nパネル番号 );
1312     }
1313     else
1314     {
1315     if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1316     this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1317     }
1318     if( File.Exists( this.st情報[ nパネル番号 ].strDTXフォルダのパス + "ArtistTexture.png" ) && this.tx選択されている曲のアティスト名 == null )
1319     {
1320     this.tx選択されている曲のアティスト名 = this.tカスタムアティスト名テクスチャの生成( nパネル番号 );
1321 kairera0467 197
1322 kairera0467 412 this.tx選択されている曲のアティスト名.t2D描画(CDTXMania.app.Device, 552, 470);
1323     }
1324     else
1325     {
1326     if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1327     this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1328    
1329     if( this.tx選択されている曲のアティスト名 != null )
1330     this.tx選択されている曲のアティスト名.t2D描画( CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470);
1331     }
1332    
1333     if( this.tx選択されている曲の曲名 != null )
1334     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1335    
1336 kairera0467 186 //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1337     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1338     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1339     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1340 kairera0467 2 //-----------------
1341     #endregion
1342     }
1343     else
1344     {
1345     // (B) その他のパネルの描画。
1346 kairera0467 494 if( this.txパネル帯 != null )
1347     this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 1 ], new Rectangle( 2, 110, 1000, 20 ) );
1348    
1349 kairera0467 186 #region [ ジャケット画像の描画 ]
1350     //-----------------
1351 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1352 kairera0467 186 {
1353 kairera0467 497 matSongPanel[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1354     matSongPanel[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1355     this.st情報[ nパネル番号 ].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1356 kairera0467 186 }
1357 kairera0467 494 if( this.txTumbnail[nパネル番号] != null )
1358 kairera0467 186 {
1359 kairera0467 494 float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1360 kairera0467 186 float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1361 kairera0467 494
1362     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1363     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1364 kairera0467 497 matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y - 1.5f, st3D座標[ i ].z );
1365 kairera0467 494 //matJacket[ i ] *= SlimDX.Matrix.Translation( fX, fY - 1.5f, fZ );
1366    
1367     this.txTumbnail[nパネル番号].t3D描画( CDTXMania.app.Device, matJacket[ i ] );
1368 kairera0467 186 }
1369     //-----------------
1370     #endregion
1371 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1372     //-----------------
1373 kairera0467 194 if( this.tx選曲パネル != null )
1374     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1375 kairera0467 186 if (this.st情報[ nパネル番号 ].txタイトル名 != null)
1376     {
1377 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1378     //mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1379     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1380     //mat *= SlimDX.Matrix.Translation(
1381     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1382     // (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1383     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1384 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1385 kairera0467 186 }
1386     if (this.st情報[nパネル番号].txティスト名 != null)
1387     {
1388 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1389     //mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1390     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1391     //mat *= SlimDX.Matrix.Translation(
1392     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1393     // (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1394     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1395 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1396 kairera0467 186 }
1397 kairera0467 2 //-----------------
1398     #endregion
1399     }
1400     }
1401     }
1402     //-----------------
1403     #endregion
1404 kairera0467 186
1405 kairera0467 2 }
1406     else
1407     {
1408 kairera0467 497 //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.白, this.n現在のスクロールカウンタ.ToString() );
1409 kairera0467 2 #region [ (2) 通常フェーズの描画。]
1410     //-----------------
1411     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1412     {
1413     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1414     int n見た目の行番号 = i;
1415     int n次のパネル番号 = ( this.n現在のスクロルカウンタ <= 0 ) ? ( ( i + 1 ) % 13 ) : ( ( ( i - 1 ) + 13 ) % 13 );
1416     int x = this.ptの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].X - this.ptの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1417     int y = this.ptの基本座標[ n見た目の行番号 ].Y + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].Y - this.ptの基本座標[ n見た目の行番号 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1418 kairera0467 494 //float fX = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x - this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) ) :
1419     // this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x + this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) );
1420 kairera0467 186
1421 kairera0467 494 //float fY = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) ) :
1422     // this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) );
1423 kairera0467 186
1424 kairera0467 494 //float fZ = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z - this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) ) :
1425     // this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z + this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) );
1426    
1427 kairera0467 497 float fX = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].x + ( ( ( st3D座標[ n次のパネル番号 ].x - st3D座標[ n見た目の行番号 ].x ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1428     st3D座標[ n見た目の行番号 ].x + ( ( ( st3D座標[ n次のパネル番号 ].x - st3D座標[ n見た目の行番号 ].x ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1429 kairera0467 186
1430 kairera0467 497 float fY = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].y + ( ( ( st3D座標[ n次のパネル番号 ].y + st3D座標[ n見た目の行番号 ].y ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1431     st3D座標[ n見た目の行番号 ].y + ( ( ( st3D座標[ n次のパネル番号 ].y + st3D座標[ n見た目の行番号 ].y ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1432 kairera0467 494
1433 kairera0467 497 float fZ = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].z + ( ( ( st3D座標[ n次のパネル番号 ].z - st3D座標[ n見た目の行番号 ].z ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1434     st3D座標[ n見た目の行番号 ].z + ( ( ( st3D座標[ n次のパネル番号 ].z - st3D座標[ n見た目の行番号 ].z ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1435 kairera0467 494
1436 kairera0467 497 float fR = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].rotY + ( ( ( st3D座標[ n次のパネル番号 ].rotY - st3D座標[ n見た目の行番号 ].rotY ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1437     st3D座標[ n見た目の行番号 ].rotY + ( ( ( st3D座標[ n次のパネル番号 ].rotY - st3D座標[ n見た目の行番号 ].rotY ) * ( Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1438    
1439    
1440 kairera0467 186 if (i == 6)
1441     {
1442     #region [ ジャケット画像の描画 ]
1443     //-----------------
1444 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1445 kairera0467 186 {
1446 kairera0467 497 //matSongPanel[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1447     matSongPanel[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( fR, 0.0f, 0.0f );
1448     matSongPanel[ i ] *= SlimDX.Matrix.Translation( fX, st3D座標[ i ].y, fZ );
1449 kairera0467 494 this.st情報[ nパネル番号 ].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1450 kairera0467 186 }
1451 kairera0467 494 if (this.txTumbnail[ nパネル番号 ] != null)
1452 kairera0467 186 {
1453     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1454     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1455 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1456     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1457    
1458     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1459 kairera0467 497 //matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1460     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( fR, 0.0f, 0.0f );
1461     //matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1462     matJacket[ i ] *= SlimDX.Matrix.Translation( fX, st3D座標[ i ].y - 1.5f, fZ );
1463 kairera0467 494
1464     this.txTumbnail[ nパネル番号 ].t3D描画(CDTXMania.app.Device, matJacket[ i ] );
1465 kairera0467 186 }
1466     //-----------------
1467     #endregion
1468     #region [ タイトル名テクスチャを描画。]
1469     //-----------------
1470     if (this.st情報[nパネル番号].txタイトル名 != null)
1471     {
1472     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1473     var mat = SlimDX.Matrix.Identity;
1474     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1475     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1476     mat *= SlimDX.Matrix.Translation(
1477     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1478     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1479     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1480 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1481 kairera0467 186 }
1482     if (this.st情報[nパネル番号].txティスト名 != null)
1483     {
1484     var mat = SlimDX.Matrix.Identity;
1485     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1486     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1487     mat *= SlimDX.Matrix.Translation(
1488     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1489     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1490     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1491 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1492 kairera0467 186 }
1493     //-----------------
1494     #endregion
1495     }
1496     else if( ( i == 5 ) )
1497     {
1498 kairera0467 412
1499 kairera0467 494 if( this.txパネル帯 != null )
1500     {
1501     this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 0 ], new Rectangle( 2, 110, 1000, 20 ) );
1502     }
1503 kairera0467 197 //for (int la = 0; la < 5; la++)
1504 kairera0467 186 {
1505     //if( this.stバー情報[ 6 ].ar難易度ラベル[ la ] != null )
1506     {
1507 kairera0467 197 //var lamp = SlimDX.Matrix.Identity;
1508     //lamp *= SlimDX.Matrix.Translation(
1509     //( this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x ) )) * CTexture.f画面比率,
1510     //( this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y ) ) ) * CTexture.f画面比率 - 1f - la * 13f,
1511     //( this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z ) ) ) * CTexture.f画面比率);
1512 kairera0467 186
1513     //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));
1514     }
1515     }
1516 kairera0467 497 //if( this.tx選曲パネル != null )
1517     // this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 531, 243, new Rectangle(74, 80, 230, 230)); //真ん中の部分は別々に描画。
1518 kairera0467 2 // (A) スクロールが停止しているときの選択曲バーの描画。
1519 kairera0467 186 #region [ ジャケット画像の描画 ]
1520     //-----------------
1521 kairera0467 497 //if( this.tx選曲パネル != null )
1522     // this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1523 kairera0467 2
1524 kairera0467 497 //for( int la = 0; la < 5 ; la++ )
1525     //{
1526     // if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1527     // 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));
1528     //}
1529     //if( this.txTumbnail[ nパネル番号 ] != null )
1530     //{
1531     // float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1532     // float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1533     // this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1534     // this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1535     // this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1536     //}
1537 kairera0467 186 //-----------------
1538     #endregion
1539 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1540     //-----------------
1541 kairera0467 197
1542 kairera0467 497 //if( File.Exists( this.stバー情報[ nパネル番号 ].strDTXフォルダのパス + "TitleTexture.png" ) && this.tx選択されている曲の曲名 == null )
1543     //{
1544     // this.tx選択されている曲の曲名 = this.tカスタム曲名の生成( nパネル番号 );
1545     //}
1546     //else
1547     //{
1548     // if( this.stバー情報[ nパネル番号 ].strタイトル文字列 != "" && this.stバー情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1549     // this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.stバー情報[ nパネル番号 ].strタイトル文字列 );
1550     //}
1551     //if( File.Exists( this.stバー情報[ nパネル番号 ].strDTXフォルダのパス + "ArtistTexture.png" ) && this.tx選択されている曲のアーティスト名 == null )
1552     //{
1553     // this.tx選択されている曲のアーティスト名 = this.tカスタムアーティスト名テクスチャの生成( nパネル番号 );
1554 kairera0467 412
1555 kairera0467 497 // if (this.tx選択されている曲のアーティスト名 != null)
1556     // this.tx選択されている曲のアーティスト名.t2D描画(CDTXMania.app.Device, 552, 470);
1557     //}
1558     //else
1559     //{
1560     // if( this.stバー情報[ nパネル番号 ].strアーティスト名 != "" && this.stバー情報[ nパネル番号 ].strアーティスト名 != null && this.tx選択されている曲のアーティスト名 == null )
1561     // this.tx選択されている曲のアーティスト名 = this.t指定された文字テクスチャを生成する( this.stバー情報[ nパネル番号 ].strアーティスト名 );
1562 kairera0467 412
1563    
1564 kairera0467 497 //}
1565 kairera0467 412
1566 kairera0467 497 //if( this.tx選択されている曲の曲名 != null )
1567     // this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1568     //if( this.tx選択されている曲のアーティスト名 != null )
1569     // this.tx選択されている曲のアーティスト名.t2D描画( CDTXMania.app.Device, 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 470 );
1570 kairera0467 412
1571 kairera0467 186 //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1572     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1573     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1574     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1575 kairera0467 2 //-----------------
1576     #endregion
1577     }
1578 kairera0467 497 else if (i > 10)
1579 kairera0467 186 {
1580     }
1581     else
1582     {
1583     // (B) スクロール中の選択曲バー、またはその他のバーの描画。
1584 kairera0467 494 if( this.txパネル帯 != null )
1585     this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 1 ], new Rectangle( 2, 110, 1000, 20 ) );
1586     //this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1587 kairera0467 194 if( this.tx選曲パネル != null )
1588     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 761, 233, new Rectangle(304, 70, 59, 242));
1589 kairera0467 197
1590 kairera0467 186 #region [ ジャケット画像の描画 ]
1591     //-----------------
1592 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1593 kairera0467 186 {
1594 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1595     //mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1596     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1597     //mat *= SlimDX.Matrix.Translation(
1598     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1599     // (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1600     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1601     //this.stバー情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1602 kairera0467 497 matSongPanel[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1603     matSongPanel[ i ] *= SlimDX.Matrix.Translation( fX, st3D座標[ i ].y, fZ );
1604 kairera0467 494 this.st情報[nパネル番号].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1605 kairera0467 186 }
1606 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1607 kairera0467 186 {
1608     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1609     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1610 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1611     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1612     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1613     //mat *= SlimDX.Matrix.Translation(
1614     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1615     // (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1616     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1617     //this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1618    
1619     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1620     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1621 kairera0467 497 //matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1622     matJacket[ i ] *= SlimDX.Matrix.Translation( fX, st3D座標[ i ].y - 1.5f, fZ );
1623 kairera0467 494
1624     this.txTumbnail[nパネル番号].t3D描画( CDTXMania.app.Device, matJacket[ i ] );
1625 kairera0467 186 }
1626     //-----------------
1627     #endregion
1628     }
1629 kairera0467 2 }
1630 kairera0467 497
1631     //選択中の曲
1632     int n選択曲のパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + 5 ) + 13 ) % 13;
1633    
1634     #region[ 中央パネル ]
1635     if( this.tx選曲パネル != null )
1636     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1637     #endregion
1638     #region[ クリアランプ ]
1639     for( int la = 0; la < 5 ; la++ )
1640     {
1641     if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1642     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));
1643     }
1644     #endregion
1645     #region[ ジャケット画像 ]
1646     if ( this.txTumbnail[ n選択曲のパネル番号 ] != null )
1647     {
1648     float f拡大率 = (float)218.0 / this.txTumbnail[ n選択曲のパネル番号 ].szテクスチャサイズ.Width;
1649     float f拡大率2 = (float)218.0 / this.txTumbnail[ n選択曲のパネル番号 ].szテクスチャサイズ.Height;
1650     this.txTumbnail[ n選択曲のパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1651     this.txTumbnail[ n選択曲のパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1652     this.txTumbnail[ n選択曲のパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1653     }
1654     #endregion
1655     #region[ タイトル・アーティスト名 ]
1656     if( File.Exists( this.st情報[ n選択曲のパネル番号 ].strDTXフォルダのパス + "TitleTexture.png" ) && this.tx選択されている曲の曲名 == null )
1657     {
1658     this.tx選択されている曲の曲名 = this.tカスタム曲名の生成( n選択曲のパネル番号 );
1659     }
1660     else
1661     {
1662     if( this.st情報[ n選択曲のパネル番号 ].strタイトル文字列 != "" && this.st情報[ n選択曲のパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1663     this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ n選択曲のパネル番号 ].strタイトル文字列 );
1664     }
1665     if( File.Exists( this.st情報[ n選択曲のパネル番号 ].strDTXフォルダのパス + "ArtistTexture.png" ) && this.tx選択されている曲のアティスト名 == null )
1666     {
1667     this.tx選択されている曲のアティスト名 = this.tカスタムアティスト名テクスチャの生成( n選択曲のパネル番号 );
1668     if (this.tx選択されている曲のアティスト名 != null)
1669     this.tx選択されている曲のアティスト名.t2D描画(CDTXMania.app.Device, 552, 470);
1670     }
1671     else
1672     {
1673     if( this.st情報[ n選択曲のパネル番号 ].strティスト名 != "" && this.st情報[ n選択曲のパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1674     this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ n選択曲のパネル番号 ].strティスト名 );
1675     }
1676    
1677     if( this.tx選択されている曲の曲名 != null )
1678     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1679     if( this.tx選択されている曲のアティスト名 != null )
1680     this.tx選択されている曲のアティスト名.t2D描画( CDTXMania.app.Device, 770 - this.st情報[ n選択曲のパネル番号 ].nティスト名テクスチャの長さdot, 470 );
1681     #endregion
1682    
1683     //-----------------
1684 kairera0467 2 #endregion
1685 kairera0467 186
1686 kairera0467 2 }
1687     #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]
1688     int py;
1689     double d = 0;
1690     if ( nNumOfItems > 1 )
1691     {
1692 kairera0467 186 d = ( 336 - 8 ) / (double) ( nNumOfItems - 1 );
1693 kairera0467 2 py = (int) ( d * ( nCurrentPosition - 1 ) );
1694     }
1695     else
1696     {
1697     d = 0;
1698     py = 0;
1699     }
1700     int delta = (int) ( d * this.n現在のスクロルカウンタ / 100 );
1701 kairera0467 186 if ( py + delta <= 336 - 8 )
1702 kairera0467 2 {
1703     this.nスクロルバ相対y座標 = py + delta;
1704     }
1705     #endregion
1706    
1707     #region [ アイテム数の描画 #27648 ]
1708     tアイテム数の描画();
1709     #endregion
1710     return 0;
1711     }
1712    
1713    
1714     // その他
1715    
1716     #region [ private ]
1717     //-----------------
1718 kairera0467 186 private enum E種別 { Score, Box, Other, Random, BackBox }
1719 kairera0467 2
1720     private struct ST
1721     {
1722     public CTexture Score;
1723     public CTexture Box;
1724     public CTexture Other;
1725 kairera0467 186 public CTexture Random;
1726     public CTexture BackBox;
1727 kairera0467 2 public CTexture this[ int index ]
1728     {
1729     get
1730     {
1731     switch( index )
1732     {
1733     case 0:
1734     return this.Score;
1735    
1736     case 1:
1737     return this.Box;
1738    
1739     case 2:
1740     return this.Other;
1741 kairera0467 186
1742     case 3:
1743     return this.Random;
1744    
1745     case 4:
1746     return this.BackBox;
1747 kairera0467 2 }
1748     throw new IndexOutOfRangeException();
1749     }
1750     set
1751     {
1752     switch( index )
1753     {
1754     case 0:
1755     this.Score = value;
1756     return;
1757    
1758     case 1:
1759     this.Box = value;
1760     return;
1761    
1762     case 2:
1763     this.Other = value;
1764     return;
1765 kairera0467 186
1766     case 3:
1767     this.Random = value;
1768     return;
1769    
1770     case 4:
1771     this.BackBox = value;
1772     return;
1773 kairera0467 2 }
1774     throw new IndexOutOfRangeException();
1775     }
1776     }
1777     }
1778    
1779     private struct ST情報
1780     {
1781     public CActSelect曲リスト.E種別 e種別;
1782     public string strタイトル文字列;
1783 kairera0467 186 public string strティスト名;
1784 kairera0467 2 public CTexture txタイトル名;
1785 kairera0467 186 public CTexture txティスト名;
1786     public CTexture txパネル;
1787 kairera0467 409 public CTexture txカスタム曲名テクスチャ;
1788 kairera0467 412 public CTexture txカスタムアティスト名テクスチャ;
1789 kairera0467 186 public int nティスト名テクスチャの長さdot;
1790     public int nタイトル名テクスチャの長さdot;
1791 kairera0467 2 public STDGBVALUE<int> nスキル値;
1792     public Color col文字色;
1793 kairera0467 186 public string strDTXフォルダのパス;
1794 kairera0467 411 public string strPreimageのパス;
1795 kairera0467 186 public Cスコア.ST譜面情報 ar譜面情報;
1796 kairera0467 2 }
1797    
1798     private struct ST選曲バ
1799     {
1800     public CTexture Score;
1801     public CTexture Box;
1802     public CTexture Other;
1803     public CTexture this[ int index ]
1804     {
1805     get
1806     {
1807     switch( index )
1808     {
1809     case 0:
1810     return this.Score;
1811    
1812     case 1:
1813     return this.Box;
1814    
1815     case 2:
1816     return this.Other;
1817     }
1818     throw new IndexOutOfRangeException();
1819     }
1820     set
1821     {
1822     switch( index )
1823     {
1824     case 0:
1825     this.Score = value;
1826     return;
1827    
1828     case 1:
1829     this.Box = value;
1830     return;
1831    
1832     case 2:
1833     this.Other = value;
1834     return;
1835     }
1836     throw new IndexOutOfRangeException();
1837     }
1838     }
1839     }
1840    
1841 kairera0467 186 protected struct ST中心点
1842     {
1843     public float x;
1844     public float y;
1845     public float z;
1846     public float rotY;
1847     }
1848     /// <summary>
1849     /// <para>SSTFファイル絶対パス(key)とサムネイル画像(value)との辞書。</para>
1850     /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1851     /// </summary>
1852     protected Dictionary<string, CTexture> dicThumbnail = new Dictionary<string, CTexture>();
1853    
1854     /// <summary>
1855     /// <para>SSTFファイル絶対パス(key)とプロパティ画像(value)との辞書。</para>
1856     /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1857     /// </summary>
1858     protected Dictionary<string, CTexture> dicProperty = new Dictionary<string, CTexture>();
1859    
1860     protected ST中心点[] stマトリックス座標 = new ST中心点[] {