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 496 - (hide annotations) (download)
Fri Oct 2 14:16:19 2015 UTC (8 years, 6 months ago) by kairera0467
File size: 147924 byte(s)
#35379 選曲画面の曲名、アーティスト名文字生成、演奏画面のステータスパネルの文字生成の過程でDisposeしていなかった部分を修正。
#xxxxx 演奏終了時のFullCombo演出がExcellentになっていたのを修正。
#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 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     new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1162     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     new ST中心点() { x = 1200.0000f, y = 8f, z = 450f, rotY = -0.410f },
1168     new ST中心点() { x = 1500.0000f, y = 8f, z = -289.5575f, rotY = -0.9279888f },
1169     new ST中心点() { x = 1500.0000f, y = 8f, z = -289.5575f, rotY = -0.9279888f },
1170     //-----------------
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     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    
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 494 //var mat = SlimDX.Matrix.Identity;
1210     //mat *= SlimDX.Matrix.Scaling( 0.62f, 0.88f, 1.0f );
1211     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[ i ].rotY - this.stマトリックス座標[i].rotY));
1212     //mat *= SlimDX.Matrix.Translation(
1213     // ( this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1214     // ( this.stマトリックス座標[ i ].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1215     // ( this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1216     //this.stバー情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1217    
1218     this.st情報[ nパネル番号 ].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1219 kairera0467 186 }
1220 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1221 kairera0467 186 {
1222     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1223     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1224 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1225     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1226     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1227     //mat *= SlimDX.Matrix.Translation(
1228     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1229     // (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1230     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1231     //this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1232    
1233     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1234     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1235     matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1236    
1237     this.txTumbnail[ nパネル番号 ].t3D描画(CDTXMania.app.Device, matJacket[ i ] );
1238 kairera0467 186 }
1239     //-----------------
1240     #endregion
1241     #region [ タイトル名テクスチャを描画。]
1242     //-----------------
1243 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1244 kairera0467 186 {
1245     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1246     var mat = SlimDX.Matrix.Identity;
1247 kairera0467 194 mat *= SlimDX.Matrix.Scaling( 0.35f, 0.45f, 1.0f );
1248     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[ i ].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1249 kairera0467 186 mat *= SlimDX.Matrix.Translation(
1250     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1251     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1252     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1253 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1254 kairera0467 186 }
1255     if (this.st情報[nパネル番号].txティスト名 != null)
1256     {
1257     var mat = SlimDX.Matrix.Identity;
1258     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1259     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1260     mat *= SlimDX.Matrix.Translation(
1261     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1262     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1263     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1264 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1265 kairera0467 186 }
1266     //-----------------
1267     #endregion
1268 kairera0467 194 if( this.tx選曲パネル != null )
1269     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1270 kairera0467 186 }
1271     else if( i == 5 )
1272 kairera0467 2 {
1273     // (A) 選択曲パネルを描画。
1274 kairera0467 194 if( this.tx選曲パネル != null )
1275     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 531, 243, new Rectangle( 74, 80, 230, 230 ) ); //真ん中の部分は別々に描画。
1276 kairera0467 494 if( this.txパネル帯 != null )
1277 kairera0467 194 {
1278 kairera0467 494 this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 0 ], new Rectangle( 2, 110, 1000, 20 ) );
1279 kairera0467 194 }
1280 kairera0467 186 #region [ バーテクスチャを描画。]
1281 kairera0467 2 //-----------------
1282 kairera0467 194 if( this.txパネル != null )
1283 kairera0467 186 {
1284 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1285     //mat *= SlimDX.Matrix.Scaling(0.8f, 0.8f, 1.0f);
1286     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1287     //mat *= SlimDX.Matrix.Translation(
1288     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1289     // (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1290     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1291     //this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1292 kairera0467 186 }
1293 kairera0467 194 if( this.tx選曲パネル != null )
1294     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 457, 163, new Rectangle( 0, 0, 363, 368 ) );
1295 kairera0467 2 //-----------------
1296     #endregion
1297 kairera0467 186 #region [ ジャケット画像の描画 ]
1298     //-----------------
1299     for( int la = 0; la < 5 ; la++ )
1300     {
1301 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1302 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));
1303     }
1304 kairera0467 193 if( this.txTumbnail[ nパネル番号 ] != null )
1305     {
1306     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1307     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1308     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1309     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1310     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1311     }
1312 kairera0467 186 //-----------------
1313     #endregion
1314 kairera0467 412 #region [ タイトル名テクスチャを描画。]
1315     //-----------------
1316     if( File.Exists( this.st情報[ nパネル番号 ].strDTXフォルダのパス + "TitleTexture.png" ) && this.tx選択されている曲の曲名 == null )
1317     {
1318     this.tx選択されている曲の曲名 = this.tカスタム曲名の生成( nパネル番号 );
1319     }
1320     else
1321     {
1322     if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1323     this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1324     }
1325     if( File.Exists( this.st情報[ nパネル番号 ].strDTXフォルダのパス + "ArtistTexture.png" ) && this.tx選択されている曲のアティスト名 == null )
1326     {
1327     this.tx選択されている曲のアティスト名 = this.tカスタムアティスト名テクスチャの生成( nパネル番号 );
1328 kairera0467 197
1329 kairera0467 412 this.tx選択されている曲のアティスト名.t2D描画(CDTXMania.app.Device, 552, 470);
1330     }
1331     else
1332     {
1333     if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1334     this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1335    
1336     if( this.tx選択されている曲のアティスト名 != null )
1337     this.tx選択されている曲のアティスト名.t2D描画( CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470);
1338     }
1339    
1340     if( this.tx選択されている曲の曲名 != null )
1341     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1342    
1343 kairera0467 186 //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1344     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1345     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1346     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1347 kairera0467 2 //-----------------
1348     #endregion
1349     }
1350     else
1351     {
1352     // (B) その他のパネルの描画。
1353 kairera0467 494 if( this.txパネル帯 != null )
1354     this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 1 ], new Rectangle( 2, 110, 1000, 20 ) );
1355    
1356 kairera0467 186 #region [ ジャケット画像の描画 ]
1357     //-----------------
1358 kairera0467 494 //if( this.stバー情報[ nパネル番号 ].txパネル != null )
1359     //{
1360     // var mat = SlimDX.Matrix.Identity;
1361     // mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1362     // mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1363     // mat *= SlimDX.Matrix.Translation(
1364     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1365     // (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1366     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1367     // this.stバー情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1368     //}
1369     //if( this.txTumbnail[ nパネル番号 ] != null )
1370     //{
1371     // float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1372     // float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1373     // var mat = SlimDX.Matrix.Identity;
1374     // mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1375     // mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1376     // mat *= SlimDX.Matrix.Translation(
1377     // (this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1378     // (this.stマトリックス座標[ i ].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1379     // (this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1380     // this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1381     //}
1382 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1383 kairera0467 186 {
1384 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1385     //mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1386     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1387     //mat *= SlimDX.Matrix.Translation(
1388     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1389     // (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1390     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1391     //this.stバー情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1392    
1393     this.st情報[nパネル番号].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1394 kairera0467 186 }
1395 kairera0467 494 if( this.txTumbnail[nパネル番号] != null )
1396 kairera0467 186 {
1397 kairera0467 494 float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1398 kairera0467 186 float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1399 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1400     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1401     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1402     //mat *= SlimDX.Matrix.Translation(
1403     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1404     // (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1405     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1406     //this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1407    
1408     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1409     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1410     matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1411     //matJacket[ i ] *= SlimDX.Matrix.Translation( fX, fY - 1.5f, fZ );
1412    
1413     this.txTumbnail[nパネル番号].t3D描画( CDTXMania.app.Device, matJacket[ i ] );
1414 kairera0467 186 }
1415     //-----------------
1416     #endregion
1417 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1418     //-----------------
1419 kairera0467 194 if( this.tx選曲パネル != null )
1420     this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1421 kairera0467 186 if (this.st情報[ nパネル番号 ].txタイトル名 != null)
1422     {
1423 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1424     //mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1425     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1426     //mat *= SlimDX.Matrix.Translation(
1427     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1428     // (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1429     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1430 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1431 kairera0467 186 }
1432     if (this.st情報[nパネル番号].txティスト名 != null)
1433     {
1434 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1435     //mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1436     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1437     //mat *= SlimDX.Matrix.Translation(
1438     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1439     // (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1440     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1441 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1442 kairera0467 186 }
1443 kairera0467 2 //-----------------
1444     #endregion
1445     }
1446     }
1447     }
1448     //-----------------
1449     #endregion
1450 kairera0467 186
1451 kairera0467 2 }
1452     else
1453     {
1454 kairera0467 186
1455 kairera0467 2 #region [ (2) 通常フェーズの描画。]
1456     //-----------------
1457     for( int i = 0; i < 13; i++ ) // パネルは全13枚。
1458     {
1459     int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1460     int n見た目の行番号 = i;
1461     int n次のパネル番号 = ( this.n現在のスクロルカウンタ <= 0 ) ? ( ( i + 1 ) % 13 ) : ( ( ( i - 1 ) + 13 ) % 13 );
1462     int x = this.ptの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].X - this.ptの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1463     int y = this.ptの基本座標[ n見た目の行番号 ].Y + ( (int) ( ( this.ptの基本座標[ n次のパネル番号 ].Y - this.ptの基本座標[ n見た目の行番号 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロルカウンタ ) ) / 100.0 ) ) );
1464 kairera0467 494 //float fX = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x - this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) ) :
1465     // this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x + this.stマトリックス座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) );
1466 kairera0467 186
1467 kairera0467 494 //float fY = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) ) :
1468     // this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) );
1469 kairera0467 186
1470 kairera0467 494 //float fZ = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z - this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) ) :
1471     // this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z + this.stマトリックス座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロールカウンタ ) ) / 100.0f ) );
1472    
1473     float fX = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].x + ( ( ( st3D座標[ n次のパネル番号 ].x + st3D座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1474     st3D座標[ n見た目の行番号 ].x + ( ( ( st3D座標[ n次のパネル番号 ].x + st3D座標[ n見た目の行番号 ].x ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1475 kairera0467 186
1476 kairera0467 494 float fY = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].y + ( ( ( st3D座標[ n次のパネル番号 ].y + st3D座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1477     st3D座標[ n見た目の行番号 ].y + ( ( ( st3D座標[ n次のパネル番号 ].y + st3D座標[ n見た目の行番号 ].y ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1478    
1479     float fZ = this.n現在のスクロルカウンタ <= 0 ? st3D座標[ n見た目の行番号 ].z + ( ( ( st3D座標[ n次のパネル番号 ].z + st3D座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) ) :
1480     st3D座標[ n見た目の行番号 ].z + ( ( ( st3D座標[ n次のパネル番号 ].z + st3D座標[ n見た目の行番号 ].z ) * ( ( this.n現在のスクロルカウンタ ) ) / 100.0f ) );
1481    
1482    
1483 kairera0467 186 if (i == 6)
1484     {
1485     #region [ ジャケット画像の描画 ]
1486     //-----------------
1487 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1488 kairera0467 186 {
1489 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1490     //mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1491     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1492     //mat *= SlimDX.Matrix.Translation(
1493     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1494     // (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1495     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1496     //this.stバー情報[ nパネル番号 ].txパネル.t3D描画( CDTXMania.app.Device, mat );
1497     this.st情報[ nパネル番号 ].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1498 kairera0467 186 }
1499 kairera0467 494 if (this.txTumbnail[ nパネル番号 ] != null)
1500 kairera0467 186 {
1501     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1502     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1503 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1504     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1505    
1506    
1507     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1508     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1509     matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1510     //matJacket[ i ] *= SlimDX.Matrix.Translation( fX, fY - 1.5f, fZ );
1511    
1512    
1513     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1514     //mat *= SlimDX.Matrix.Translation(
1515     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1516     // (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1517     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1518     //this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1519     this.txTumbnail[ nパネル番号 ].t3D描画(CDTXMania.app.Device, matJacket[ i ] );
1520 kairera0467 186 }
1521     //-----------------
1522     #endregion
1523     #region [ タイトル名テクスチャを描画。]
1524     //-----------------
1525     if (this.st情報[nパネル番号].txタイトル名 != null)
1526     {
1527     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1528     var mat = SlimDX.Matrix.Identity;
1529     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1530     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1531     mat *= SlimDX.Matrix.Translation(
1532     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1533     (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1534     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1535 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1536 kairera0467 186 }
1537     if (this.st情報[nパネル番号].txティスト名 != null)
1538     {
1539     var mat = SlimDX.Matrix.Identity;
1540     mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1541     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1542     mat *= SlimDX.Matrix.Translation(
1543     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1544     (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1545     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1546 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1547 kairera0467 186 }
1548     //-----------------
1549     #endregion
1550     }
1551     else if( ( i == 5 ) )
1552     {
1553 kairera0467 412
1554 kairera0467 494 if( this.txパネル帯 != null )
1555     {
1556     this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 0 ], new Rectangle( 2, 110, 1000, 20 ) );
1557     }
1558 kairera0467 197 //for (int la = 0; la < 5; la++)
1559 kairera0467 186 {
1560     //if( this.stバー情報[ 6 ].ar難易度ラベル[ la ] != null )
1561     {
1562 kairera0467 197 //var lamp = SlimDX.Matrix.Identity;
1563     //lamp *= SlimDX.Matrix.Translation(
1564     //( this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x ) )) * CTexture.f画面比率,
1565     //( this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y ) ) ) * CTexture.f画面比率 - 1f - la * 13f,
1566     //( this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z ) ) ) * CTexture.f画面比率);
1567 kairera0467 186
1568     //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));
1569     }
1570     }
1571 kairera0467 194 if( this.tx選曲パネル != null )
1572     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 531, 243, new Rectangle(74, 80, 230, 230)); //真ん中の部分は別々に描画。
1573 kairera0467 2 // (A) スクロールが停止しているときの選択曲バーの描画。
1574 kairera0467 186 #region [ ジャケット画像の描画 ]
1575     //-----------------
1576 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1577 kairera0467 186 {
1578     var mat = SlimDX.Matrix.Identity;
1579     mat *= SlimDX.Matrix.Scaling(CTexture.f画面比率, CTexture.f画面比率, 1.0f);
1580     mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1581     mat *= SlimDX.Matrix.Translation(
1582     (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1583     (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1584     (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1585 kairera0467 494 //this.stバー情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1586 kairera0467 186 }
1587 kairera0467 194 if( this.tx選曲パネル != null )
1588     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1589 kairera0467 2
1590 kairera0467 186 for( int la = 0; la < 5 ; la++ )
1591     {
1592 kairera0467 197 if( this.txクリアランプ != null && CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null && CDTXMania.stage選曲.r現在選択中の曲.arスコア[ la ] != null )
1593 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));
1594     }
1595     if( this.txTumbnail[ nパネル番号 ] != null )
1596     {
1597     float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1598     float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1599     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1600     this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1601     this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1602     }
1603     //-----------------
1604     #endregion
1605 kairera0467 2 #region [ タイトル名テクスチャを描画。]
1606     //-----------------
1607 kairera0467 197
1608 kairera0467 412 if( File.Exists( this.st情報[ nパネル番号 ].strDTXフォルダのパス + "TitleTexture.png" ) && this.tx選択されている曲の曲名 == null )
1609     {
1610     this.tx選択されている曲の曲名 = this.tカスタム曲名の生成( nパネル番号 );
1611     }
1612     else
1613     {
1614     if( this.st情報[ nパネル番号 ].strタイトル文字列 != "" && this.st情報[ nパネル番号 ].strタイトル文字列 != null && this.tx選択されている曲の曲名 == null )
1615     this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strタイトル文字列 );
1616     }
1617     if( File.Exists( this.st情報[ nパネル番号 ].strDTXフォルダのパス + "ArtistTexture.png" ) && this.tx選択されている曲のアティスト名 == null )
1618     {
1619     this.tx選択されている曲のアティスト名 = this.tカスタムアティスト名テクスチャの生成( nパネル番号 );
1620    
1621     if (this.tx選択されている曲のアティスト名 != null)
1622     this.tx選択されている曲のアティスト名.t2D描画(CDTXMania.app.Device, 552, 470);
1623     }
1624     else
1625     {
1626     if( this.st情報[ nパネル番号 ].strティスト名 != "" && this.st情報[ nパネル番号 ].strティスト名 != null && this.tx選択されている曲のアティスト名 == null )
1627     this.tx選択されている曲のアティスト名 = this.t指定された文字テクスチャを生成する( this.st情報[ nパネル番号 ].strティスト名 );
1628    
1629    
1630     }
1631    
1632 kairera0467 186 if( this.tx選択されている曲の曲名 != null )
1633     this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1634     if( this.tx選択されている曲のアティスト名 != null )
1635 kairera0467 412 this.tx選択されている曲のアティスト名.t2D描画( CDTXMania.app.Device, 770 - this.st情報[ nパネル番号 ].nティスト名テクスチャの長さdot, 470 );
1636    
1637 kairera0467 186 //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1638     // this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1639     //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1640     // this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1641 kairera0467 2 //-----------------
1642     #endregion
1643     }
1644 kairera0467 186 else if (i >= 12)
1645     {
1646     }
1647     else
1648     {
1649     // (B) スクロール中の選択曲バー、またはその他のバーの描画。
1650 kairera0467 494 if( this.txパネル帯 != null )
1651     this.txパネル帯.t3D描画( CDTXMania.app.Device, barLa[ 1 ], new Rectangle( 2, 110, 1000, 20 ) );
1652     //this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar ); //右の帯。
1653 kairera0467 194 if( this.tx選曲パネル != null )
1654     this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 761, 233, new Rectangle(304, 70, 59, 242));
1655 kairera0467 197
1656 kairera0467 186 #region [ ジャケット画像の描画 ]
1657     //-----------------
1658 kairera0467 412 if( this.st情報[ nパネル番号 ].txパネル != null )
1659 kairera0467 186 {
1660 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1661     //mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1662     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1663     //mat *= SlimDX.Matrix.Translation(
1664     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1665     // (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1666     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1667     //this.stバー情報[nパネル番号].txパネル.t3D描画(CDTXMania.app.Device, mat);
1668    
1669     this.st情報[nパネル番号].txパネル.t3D描画( CDTXMania.app.Device, matSongPanel[ i ] );
1670 kairera0467 186 }
1671 kairera0467 194 if( this.txTumbnail[nパネル番号] != null )
1672 kairera0467 186 {
1673     float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1674     float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1675 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1676     //mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1677     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1678     //mat *= SlimDX.Matrix.Translation(
1679     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1680     // (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1681     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1682     //this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1683    
1684     matJacket[ i ] *= SlimDX.Matrix.Scaling( f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f );
1685     matJacket[ i ] *= SlimDX.Matrix.RotationYawPitchRoll( st3D座標[ i ].rotY, 0.0f, 0.0f );
1686     matJacket[ i ] *= SlimDX.Matrix.Translation( st3D座標[ i ].x, st3D座標[ i ].y, st3D座標[ i ].z );
1687     //matJacket[ i ] *= SlimDX.Matrix.Translation( fX, fY - 1.5f, fZ );
1688    
1689     this.txTumbnail[nパネル番号].t3D描画( CDTXMania.app.Device, matJacket[ i ] );
1690 kairera0467 186 }
1691     //-----------------
1692     #endregion
1693     #region [ タイトル名テクスチャを描画。]
1694     //-----------------
1695 kairera0467 194 if( this.st情報[nパネル番号].txタイトル名 != null )
1696 kairera0467 186 {
1697     //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1698 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1699     //mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1700     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1701     //mat *= SlimDX.Matrix.Translation(
1702     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1703     // (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1704     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1705 kairera0467 223 //this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1706 kairera0467 186 }
1707 kairera0467 194 if( this.st情報[nパネル番号].txティスト名 != null )
1708 kairera0467 186 {
1709 kairera0467 494 //var mat = SlimDX.Matrix.Identity;
1710     //mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1711     //mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1712     //mat *= SlimDX.Matrix.Translation(
1713     // (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1714     // (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1715     // (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1716 kairera0467 223 //this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1717 kairera0467 186 }
1718     //-----------------
1719     #endregion
1720 kairera0467 2
1721 kairera0467 186 #region [ スキル値を描画。]
1722     //-----------------
1723     //if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )
1724     //this.tスキル値の描画( x + 34, y + 18, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );
1725     //-----------------
1726     #endregion
1727     }
1728 kairera0467 2 }
1729     //-----------------
1730     #endregion
1731 kairera0467 186
1732 kairera0467 2 }
1733     #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]
1734     int py;
1735     double d = 0;
1736     if ( nNumOfItems > 1 )
1737     {
1738 kairera0467 186 d = ( 336 - 8 ) / (double) ( nNumOfItems - 1 );
1739 kairera0467 2 py = (int) ( d * ( nCurrentPosition - 1 ) );
1740     }
1741     else
1742     {
1743     d = 0;
1744     py = 0;
1745     }
1746     int delta = (int) ( d * this.n現在のスクロルカウンタ / 100 );
1747 kairera0467 186 if ( py + delta <= 336 - 8 )
1748 kairera0467 2 {
1749     this.nスクロルバ相対y座標 = py + delta;
1750     }
1751     #endregion
1752    
1753     #region [ アイテム数の描画 #27648 ]
1754     tアイテム数の描画();
1755     #endregion
1756     return 0;
1757     }
1758    
1759    
1760     // その他
1761    
1762     #region [ private ]
1763     //-----------------
1764 kairera0467 186 private enum E種別 { Score, Box, Other, Random, BackBox }
1765 kairera0467 2
1766     private struct ST
1767     {
1768     public CTexture Score;
1769     public CTexture Box;
1770     public CTexture Other;
1771 kairera0467 186 public CTexture Random;
1772     public CTexture BackBox;
1773 kairera0467 2 public CTexture this[ int index ]
1774     {
1775     get
1776     {
1777     switch( index )
1778     {
1779     case 0:
1780     return this.Score;
1781    
1782     case 1:
1783     return this.Box;
1784    
1785     case 2:
1786     return this.Other;
1787 kairera0467 186
1788     case 3:
1789     return this.Random;
1790    
1791     case 4:
1792     return this.BackBox;
1793 kairera0467 2 }
1794     throw new IndexOutOfRangeException();
1795     }
1796     set
1797     {
1798     switch( index )
1799     {
1800     case 0:
1801     this.Score = value;
1802     return;
1803    
1804     case 1:
1805     this.Box = value;
1806     return;
1807    
1808     case 2:
1809     this.Other = value;
1810     return;
1811 kairera0467 186
1812     case 3:
1813     this.Random = value;
1814     return;
1815    
1816     case 4:
1817     this.BackBox = value;
1818     return;
1819 kairera0467 2 }
1820     throw new IndexOutOfRangeException();
1821     }
1822     }
1823     }
1824    
1825     private struct ST情報
1826     {
1827     public CActSelect曲リスト.E種別 e種別;
1828     public string strタイトル文字列;
1829 kairera0467 186 public string strティスト名;
1830 kairera0467 2 public CTexture txタイトル名;
1831 kairera0467 186 public CTexture txティスト名;
1832     public CTexture txパネル;
1833 kairera0467 409 public CTexture txカスタム曲名テクスチャ;
1834 kairera0467 412 public CTexture txカスタムアティスト名テクスチャ;
1835 kairera0467 186 public int nティスト名テクスチャの長さdot;
1836     public int nタイトル名テクスチャの長さdot;
1837 kairera0467 2 public STDGBVALUE<int> nスキル値;
1838     public Color col文字色;
1839 kairera0467 186 public string strDTXフォルダのパス;
1840 kairera0467 411 public string strPreimageのパス;
1841 kairera0467 186 public Cスコア.ST譜面情報 ar譜面情報;
1842 kairera0467 2 }
1843    
1844     private struct ST選曲バ
1845     {
1846     public CTexture Score;
1847     public CTexture Box;
1848     public CTexture Other;
1849     public CTexture this[ int index ]
1850     {
1851     get
1852     {
1853     switch( index )
1854     {
1855     case 0:
1856     return this.Score;
1857    
1858     case 1:
1859     return this.Box;
1860    
1861     case 2:
1862     return this.Other;
1863     }
1864     throw new IndexOutOfRangeException();
1865     }
1866     set