Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 121 by kairera0467, Tue Jun 25 10:40:45 2013 UTC revision 186 by kairera0467, Sun Dec 15 11:02:39 2013 UTC
# Line 7  using System.Drawing; Line 7  using System.Drawing;
7  using System.Drawing.Imaging;  using System.Drawing.Imaging;
8  using System.Diagnostics;  using System.Diagnostics;
9  using System.Drawing.Text;  using System.Drawing.Text;
10    using System.IO;
11  using SlimDX;  using SlimDX;
12  using FDK;  using FDK;
13    
14  namespace DTXMania  namespace DTXMania
15  {  {
16        //ここをXG風にする際に使ったコードはSSTから拝借、改造している。
17          internal class CActSelect曲リスト : CActivity          internal class CActSelect曲リスト : CActivity
18          {          {
19    
20                  // プロパティ                  // プロパティ
21    
22                  public bool bIsEnumeratingSongs                  public bool bIsEnumeratingSongs
# Line 81  namespace DTXMania Line 83  namespace DTXMania
83                          this.n現在のアンカ難易度レベル = 0;                          this.n現在のアンカ難易度レベル = 0;
84                          base.b活性化してない = true;                          base.b活性化してない = true;
85                          this.bIsEnumeratingSongs = false;                          this.bIsEnumeratingSongs = false;
86    
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                  }                  }
113    
114    
# Line 165  namespace DTXMania Line 193  namespace DTXMania
193    
194    
195                  public delegate void DGSortFunc( List<C曲リストノード> songList, E楽器パート eInst, int order, params object[] p);                  public delegate void DGSortFunc( List<C曲リストノード> songList, E楽器パート eInst, int order, params object[] p);
196                    /// <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                  public void t曲リストのソート( DGSortFunc sf, E楽器パート eInst, int order, params object[] p )                  public void t曲リストのソート( DGSortFunc sf, E楽器パート eInst, int order, params object[] p )
203                  {                  {
204                          List<C曲リストノード> songList = GetSongListWithinMe( this.r現在選択中の曲 );                          List<C曲リストノード> songList = GetSongListWithinMe( this.r現在選択中の曲 );
205                          if ( songList == null )                          if ( songList == null )
206                          {                          {
207                                    // 何もしない;
208                          }                          }
209                          else                          else
210                          {                          {
211    //                              CDTXMania.Songs管理.t曲リストのソート3_演奏回数の多い順( songList, eInst, order );
212                                  sf( songList, eInst, order, p );                                  sf( songList, eInst, order, p );
213    //                              this.r現在選択中の曲 = CDTXMania
214                                  this.t現在選択中の曲を元に曲バーを再構成する();                                  this.t現在選択中の曲を元に曲バーを再構成する();
215                          }                          }
216                  }                  }
217    
218                  public bool tBOXに入る()                  public bool tBOXに入る()
219                  {                  {
220    //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                          bool ret = false;                          bool ret = false;
229                          if ( CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( false ) ) != CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath )                          if ( CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( false ) ) != CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath )
230                                  && CSkin.bUseBoxDefSkin )                                  && CSkin.bUseBoxDefSkin )
231                          {                          {
232                                  ret = true;                                  ret = true;
233                  // BOXに入るときは、スキン変更発生時のみboxdefスキン設定の更新を行う                                  // BOXに入るときは、スキン変更発生時のみboxdefスキン設定の更新を行う
234                  CDTXMania.Skin.SetCurrentSkinSubfolderFullName(                                  CDTXMania.Skin.SetCurrentSkinSubfolderFullName(
235                                  CDTXMania.Skin.GetSkinSubfolderFullNameFromSkinName( CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) ), false );                                          CDTXMania.Skin.GetSkinSubfolderFullNameFromSkinName( CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) ), false );
236                          }                          }
237    
238    //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                    this.tx選択されている曲のアーティスト名.Dispose();
246                    this.tx選択されている曲の曲名 = null;
247                    this.tx選択されている曲のアーティスト名 = null;
248                }
249                          if( ( this.r現在選択中の曲.list子リスト != null ) && ( this.r現在選択中の曲.list子リスト.Count > 0 ) )                          if( ( this.r現在選択中の曲.list子リスト != null ) && ( this.r現在選択中の曲.list子リスト.Count > 0 ) )
250                          {                          {
251                                  this.r現在選択中の曲 = this.r現在選択中の曲.list子リスト[ 0 ];                                  this.r現在選択中の曲 = this.r現在選択中の曲.list子リスト[ 0 ];
# Line 201  namespace DTXMania Line 256  namespace DTXMania
256                  }                  }
257                  public bool tBOXを出る()                  public bool tBOXを出る()
258                  {                  {
259    //Trace.TraceInformation( "box exit" );
260    //Trace.TraceInformation( "Skin現在Current : " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
261    //Trace.TraceInformation( "Skin現在System  : " + CSkin.strSystemSkinSubfolderFullName );
262    //Trace.TraceInformation( "Skin現在BoxDef  : " + CSkin.strBoxDefSkinSubfolderFullName );
263    //Trace.TraceInformation( "Skin現在: " + CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) ) );
264    //Trace.TraceInformation( "Skin現pt: " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
265    //Trace.TraceInformation( "Skin指定: " + CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) );
266    //Trace.TraceInformation( "Skinpath: " + this.r現在選択中の曲.strSkinPath );
267                          bool ret = false;                          bool ret = false;
268                          if ( CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( false ) ) != CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath )                          if ( CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( false ) ) != CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath )
269                                  && CSkin.bUseBoxDefSkin )                                  && CSkin.bUseBoxDefSkin )
270                          {                          {
271                                  ret = true;                                  ret = true;
272                          }                          }
273                            // スキン変更が発生しなくても、boxdef圏外に出る場合は、boxdefスキン設定の更新が必要
274                            // (ユーザーがboxdefスキンをConfig指定している場合への対応のために必要)
275                            // tBoxに入る()とは処理が微妙に異なるので注意
276                          CDTXMania.Skin.SetCurrentSkinSubfolderFullName(                          CDTXMania.Skin.SetCurrentSkinSubfolderFullName(
277                                  ( this.r現在選択中の曲.strSkinPath == "" ) ? "" : CDTXMania.Skin.GetSkinSubfolderFullNameFromSkinName( CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) ), false );                                  ( this.r現在選択中の曲.strSkinPath == "" ) ? "" : CDTXMania.Skin.GetSkinSubfolderFullNameFromSkinName( CSkin.GetSkinName( this.r現在選択中の曲.strSkinPath ) ), false );
278                          if ( this.r現在選択中の曲.r親ノード != null )  //Trace.TraceInformation( "SKIN変更: " + CSkin.GetSkinName( CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) ) );
279    //Trace.TraceInformation( "SKIN変更Current : "+  CDTXMania.Skin.GetCurrentSkinSubfolderFullName(false) );
280    //Trace.TraceInformation( "SKIN変更System  : "+  CSkin.strSystemSkinSubfolderFullName );
281    //Trace.TraceInformation( "SKIN変更BoxDef  : "+  CSkin.strBoxDefSkinSubfolderFullName );
282                if( this.tx選択されている曲の曲名 != null )
283                {  
284                    this.tx選択されている曲の曲名.Dispose();
285                    this.tx選択されている曲のアーティスト名.Dispose();
286                    this.tx選択されている曲の曲名 = null;
287                    this.tx選択されている曲のアーティスト名 = null;
288                }
289                if ( this.r現在選択中の曲.r親ノード != null )
290                          {                          {
291                                  this.r現在選択中の曲 = this.r現在選択中の曲.r親ノード;                                  this.r現在選択中の曲 = this.r現在選択中の曲.r親ノード;
292                                  this.t現在選択中の曲を元に曲バーを再構成する();                                  this.t現在選択中の曲を元に曲バーを再構成する();
# Line 223  namespace DTXMania Line 300  namespace DTXMania
300                          for( int i = 0; i < 13; i++ )                          for( int i = 0; i < 13; i++ )
301                          {                          {
302                                  this.t曲名バーの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].col文字色 );                                  this.t曲名バーの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].col文字色 );
303                    this.tアーティスト名テクスチャの生成( i, this.stバー情報[ i ].strアーティスト名 );
304                    //this.tパネルの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].strアーティスト名, this.stバー情報[ i ].col文字色 );
305                    if( !this.dicThumbnail.ContainsKey( this.stバー情報[ i ].strDTXフォルダのパス ) )
306                                {
307                                //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
308                        this.tパスを指定してサムネイル画像を生成する( i, this.stバー情報[ i ].strDTXフォルダのパス, this.stバー情報[ i ].eバー種別  );
309                                        this.dicThumbnail.Add( this.stバー情報[ i ].strDTXフォルダのパス, this.txTumbnail[ i ] );
310                                    }
311                    txTumbnail[ i ] = this.dicThumbnail[ this.stバー情報[ i ].strDTXフォルダのパス ];
312                          }                          }
313                  }                  }
314                  public void t次に移動()                  public void t次に移動()
# Line 273  namespace DTXMania Line 359  namespace DTXMania
359                                  song = this.r次の曲( song );                                  song = this.r次の曲( song );
360                          }                          }
361    
362                this.tラベル名からステータスパネルを決定する( this.r現在選択中の曲.ar難易度ラベル[ this.n現在選択中の曲の現在の難易度レベル ] );
363    
364                switch( this.nIndex  )
365                {
366                    case 2:
367                        CDTXMania.Skin.soundNovice.t再生する();
368                        string strnov = CSkin.Path( @"Sounds\Novice.ogg" );
369                        if( !File.Exists( strnov ) )
370                            CDTXMania.Skin.sound変更音.t再生する();
371                        break;
372    
373                    case 3:
374                        CDTXMania.Skin.soundRegular.t再生する();
375                        string strreg = CSkin.Path( @"Sounds\Regular.ogg" );
376                        if( !File.Exists( strreg ) )
377                            CDTXMania.Skin.sound変更音.t再生する();
378                        break;
379    
380                    case 4:
381                        CDTXMania.Skin.soundExpert.t再生する();
382                        string strexp = CSkin.Path( @"Sounds\Expert.ogg" );
383                        if( !File.Exists( strexp ) )
384                            CDTXMania.Skin.sound変更音.t再生する();
385                        break;
386    
387                    case 5:
388                        CDTXMania.Skin.soundMaster.t再生する();
389                        string strmas = CSkin.Path( @"Sounds\Master.ogg" );
390                        if( !File.Exists( strmas ) )
391                            CDTXMania.Skin.sound変更音.t再生する();
392                        break;
393                    
394                    case 6:
395                        CDTXMania.Skin.soundBasic.t再生する();
396                        string strbsc = CSkin.Path( @"Sounds\Basic.ogg" );
397                        if( !File.Exists( strbsc ) )
398                            CDTXMania.Skin.sound変更音.t再生する();
399                        break;
400    
401                    case 7:
402                        CDTXMania.Skin.soundAdvanced.t再生する();
403                        string stradv = CSkin.Path( @"Sounds\Advanced.ogg" );
404                        if( !File.Exists( stradv ) )
405                            CDTXMania.Skin.sound変更音.t再生する();
406                        break;
407    
408                    case 8:
409                        CDTXMania.Skin.soundExtreme.t再生する();
410                        string strext = CSkin.Path( @"Sounds\Extreme.ogg" );
411                        if( !File.Exists( strext ) )
412                            CDTXMania.Skin.sound変更音.t再生する();
413                        break;
414    
415                    default:
416                        CDTXMania.Skin.sound変更音.t再生する();
417                        break;
418                }
419    
420                          // 選曲ステージに変更通知を発出し、関係Activityの対応を行ってもらう。                          // 選曲ステージに変更通知を発出し、関係Activityの対応を行ってもらう。
421    
422                          CDTXMania.stage選曲.t選択曲変更通知();                          CDTXMania.stage選曲.t選択曲変更通知();
423                  }                  }
424    
425            
426            public void tラベル名からステータスパネルを決定する(string strラベル名)
427            {
428                if (string.IsNullOrEmpty(strラベル名))
429                {
430                    this.nIndex = 0;
431                }
432                else
433                {
434                    STATUSPANEL[] array = this.stパネルマップ;
435                    for (int i = 0; i < array.Length; i++)
436                    {
437                        STATUSPANEL sTATUSPANEL = array[i];
438                        if (strラベル名.Equals(sTATUSPANEL.label, StringComparison.CurrentCultureIgnoreCase))
439                        {
440                            this.nIndex = sTATUSPANEL.status;
441                            return;
442                        }
443                        this.nIndex++;
444                    }
445                }
446            }
447    
448                  /// <summary>                  /// <summary>
449                  /// 曲リストをリセットする                  /// 曲リストをリセットする
# Line 388  namespace DTXMania Line 553  namespace DTXMania
553                          if( CDTXMania.ConfigIni.b選曲リストフォントを斜体にする ) regular |= FontStyle.Italic;                          if( CDTXMania.ConfigIni.b選曲リストフォントを斜体にする ) regular |= FontStyle.Italic;
554                          if( CDTXMania.ConfigIni.b選曲リストフォントを太字にする ) regular |= FontStyle.Bold;                          if( CDTXMania.ConfigIni.b選曲リストフォントを太字にする ) regular |= FontStyle.Bold;
555                          this.ft曲リスト用フォント = new Font( CDTXMania.ConfigIni.str選曲リストフォント, (float) ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2 ), regular, GraphicsUnit.Pixel );                          this.ft曲リスト用フォント = new Font( CDTXMania.ConfigIni.str選曲リストフォント, (float) ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2 ), regular, GraphicsUnit.Pixel );
556                                        //this.prvFont = new CPrivateFont( new FontFamily( CDTXMania.ConfigIni.str選曲リストフォント ), 28, FontStyle.Regular );
557    
558                          // 現在選択中の曲がない(=はじめての活性化)なら、現在選択中の曲をルートの先頭ノードに設定する。                          // 現在選択中の曲がない(=はじめての活性化)なら、現在選択中の曲をルートの先頭ノードに設定する。
559    
# Line 410  namespace DTXMania Line 575  namespace DTXMania
575                                  return;                                  return;
576    
577                          CDTXMania.t安全にDisposeする( ref this.ft曲リスト用フォント );                          CDTXMania.t安全にDisposeする( ref this.ft曲リスト用フォント );
578                this.prvFont.Dispose();
579    
580                          for( int i = 0; i < 13; i++ )                          for( int i = 0; i < 13; i++ )
581                                  this.ct登場アニメ用[ i ] = null;                                  this.ct登場アニメ用[ i ] = null;
# Line 427  namespace DTXMania Line 593  namespace DTXMania
593                          this.tx選曲バー.Score = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar score selected.png" ), false );                          this.tx選曲バー.Score = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar score selected.png" ), false );
594                          this.tx選曲バー.Box = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar box selected.png" ), false );                          this.tx選曲バー.Box = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar box selected.png" ), false );
595                          this.tx選曲バー.Other = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar other selected.png" ), false );                          this.tx選曲バー.Other = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_bar other selected.png" ), false );
596              this.txスキル数字 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect skill number on list.png"), false);              this.txスキル数字 = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\ScreenSelect skill number on list.png" ), false );
597                          for( int i = 0; i < 13; i++ )              this.tx選曲パネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_image_panel.png"));
598                                  this.t曲名バーの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].col文字色 );              this.txパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_music panel.png"));
599                //this.txジャケットボックスクローズ = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_preimage backbox.png") );
600                //this.txジャケットランダム = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_preimage random.png") );
601                this.tx帯 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_backpanel.png" ) );
602                this.tx色帯 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\5_ColorBar.png" ) );
603                this.txランプ用帯 = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_lamppanel.png" ));
604                this.txクリアランプ = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\5_Clearlamp.png") );
605                #region[ テクスチャの復元 ]
606                int nKeys = this.dicThumbnail.Count;
607                string[] keys = new string[ nKeys ];
608                this.dicThumbnail.Keys.CopyTo( keys, 0 );
609                foreach (var key in keys)
610                    this.dicThumbnail[ key ] = this.tパスを指定してサムネイル画像を生成して返す( 0, key, this.stバー情報[ 0 ].eバー種別  );;
611    
612                //ここは最初に表示される画像の復元に必要。
613                for (int i = 0; i < 13; i++)
614                {
615                    this.t曲名バーの生成(i, this.stバー情報[i].strタイトル文字列, this.stバー情報[i].col文字色);
616                    this.tアーティスト名テクスチャの生成( i, this.stバー情報[ i ].strアーティスト名 );
617                    //this.tパネルの生成( i, this.stバー情報[ i ].strタイトル文字列, this.stバー情報[ i ].strアーティスト名, this.stバー情報[ i ].col文字色 );
618                    //this.tパスを指定してサムネイル画像を生成する(i, this.stバー情報[i].strDTXフォルダのパス, this.stバー情報[i].eバー種別);
619                    if( this.stバー情報[ i ].strDTXフォルダのパス != null )
620                    {
621                        if( !this.dicThumbnail.ContainsKey( this.stバー情報[ i ].strDTXフォルダのパス ) )
622                                    {
623                                        //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
624                            this.tパスを指定してサムネイル画像を生成する( i, this.stバー情報[ i ].strDTXフォルダのパス, this.stバー情報[ i ].eバー種別  );
625                                            this.dicThumbnail.Add( this.stバー情報[ i ].strDTXフォルダのパス, this.txTumbnail[ i ] );
626                                        }
627                        txTumbnail[ i ] = this.dicThumbnail[ this.stバー情報[ i ].strDTXフォルダのパス ];
628                    }
629                }
630                #endregion
631    
632    
633                          int c = ( CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja" ) ? 0 : 1;                          int c = ( CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja" ) ? 0 : 1;
634                          #region [ Songs not found画像 ]                          #region [ Songs not found画像 ]
# Line 462  namespace DTXMania Line 661  namespace DTXMania
661                          #region [ "曲データを検索しています"画像 ]                          #region [ "曲データを検索しています"画像 ]
662                          try                          try
663                          {                          {
664                                  using ( Bitmap image = new Bitmap( 1280, 200 ) )                                  using ( Bitmap image = new Bitmap( 640, 96 ) )
665                                  using ( Graphics graphics = Graphics.FromImage( image ) )                                  using ( Graphics graphics = Graphics.FromImage( image ) )
666                                  {                                  {
667                                          string[] s1 = { "曲データを検索しています。", "Now enumerating songs." };                                          string[] s1 = { "曲データを検索しています。", "Now enumerating songs." };
# Line 484  namespace DTXMania Line 683  namespace DTXMania
683                          }                          }
684                          #endregion                          #endregion
685                          #region [ 曲数表示 ]                          #region [ 曲数表示 ]
686              this.txアイテム数数字 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_skill number on gauge etc.png"), false);                          this.txアイテム数数字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on gauge etc.png" ), false );
687                          #endregion                          #endregion
688                          base.OnManagedリソースの作成();  
689                base.OnManagedリソースの作成();
690                  }                  }
691                  public override void OnManagedリソースの解放()                  public override void OnManagedリソースの解放()
692                  {                  {
# Line 495  namespace DTXMania Line 695  namespace DTXMania
695    
696                          CDTXMania.t安全にDisposeする( ref this.txアイテム数数字 );                          CDTXMania.t安全にDisposeする( ref this.txアイテム数数字 );
697    
698                          for( int i = 0; i < 13; i++ )              for ( int i = 0; i < 13; i++ )
699                                  CDTXMania.t安全にDisposeする( ref this.stバー情報[ i ].txタイトル名 );              {
700                    CDTXMania.t安全にDisposeする( ref this.stバー情報[ i ].txタイトル名 );
701                    CDTXMania.t安全にDisposeする( ref this.stバー情報[ i ].txアーティスト名 );
702                }
703    
704                if( this.tx選択されている曲の曲名 != null )
705                {  
706                    this.tx選択されている曲の曲名.Dispose();
707                    this.tx選択されている曲のアーティスト名.Dispose();
708                    this.tx選択されている曲の曲名 = null;
709                    this.tx選択されている曲のアーティスト名 = null;
710                }
711                #region[ ジャケット画像の解放 ]
712                int nKeys = this.dicThumbnail.Count;
713                            string[] keys = new string[ nKeys ];
714                            this.dicThumbnail.Keys.CopyTo( keys, 0 );
715                            foreach( var key in keys )
716                            {
717                                    C共通.tDisposeする( this.dicThumbnail[ key ] );
718                                    this.dicThumbnail[ key ] = null;
719                }
720                #endregion
721    
722                          CDTXMania.t安全にDisposeする( ref this.txスキル数字 );              CDTXMania.t安全にDisposeする( ref this.txスキル数字 );
723                          CDTXMania.t安全にDisposeする( ref this.txEnumeratingSongs );                          CDTXMania.t安全にDisposeする( ref this.txEnumeratingSongs );
724                          CDTXMania.t安全にDisposeする( ref this.txSongNotFound );                          CDTXMania.t安全にDisposeする( ref this.txSongNotFound );
725                          CDTXMania.t安全にDisposeする( ref this.tx曲名バー.Score );                          CDTXMania.t安全にDisposeする( ref this.tx曲名バー.Score );
# Line 507  namespace DTXMania Line 728  namespace DTXMania
728                          CDTXMania.t安全にDisposeする( ref this.tx選曲バー.Score );                          CDTXMania.t安全にDisposeする( ref this.tx選曲バー.Score );
729                          CDTXMania.t安全にDisposeする( ref this.tx選曲バー.Box );                          CDTXMania.t安全にDisposeする( ref this.tx選曲バー.Box );
730                          CDTXMania.t安全にDisposeする( ref this.tx選曲バー.Other );                          CDTXMania.t安全にDisposeする( ref this.tx選曲バー.Other );
731                CDTXMania.t安全にDisposeする( ref this.tx選曲パネル );
732                CDTXMania.t安全にDisposeする( ref this.txパネル );
733                CDTXMania.t安全にDisposeする( ref this.txクリアランプ );
734                //CDTXMania.t安全にDisposeする( ref this.txジャケットボックスクローズ );
735                //CDTXMania.t安全にDisposeする( ref this.txジャケットランダム );
736                CDTXMania.t安全にDisposeする( ref this.tx帯 );
737                CDTXMania.t安全にDisposeする( ref this.tx色帯 );
738                CDTXMania.t安全にDisposeする( ref this.txランプ用帯 );
739    
740                          base.OnManagedリソースの解放();                          base.OnManagedリソースの解放();
741                  }                  }
# Line 566  namespace DTXMania Line 795  namespace DTXMania
795                                                  break;                                                  break;
796                                          }                                          }
797                                  }                                  }
   
   
798                                  //-----------------                                  //-----------------
799                                  #endregion                                  #endregion
800                          }                          }
# Line 575  namespace DTXMania Line 802  namespace DTXMania
802                          {                          {
803                                  #region [ (2) 通常フェーズの進行。]                                  #region [ (2) 通常フェーズの進行。]
804                                  //-----------------                                  //-----------------
805                                  long n現在時刻 = CDTXMania.Timer.n現在時刻;                                  long n現在時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
806                                                                    
807                                  if( n現在時刻 < this.nスクロールタイマ )    // 念のため                                  if( n現在時刻 < this.nスクロールタイマ )    // 念のため
808                                          this.nスクロールタイマ = n現在時刻;                                          this.nスクロールタイマ = n現在時刻;
# Line 637  namespace DTXMania Line 864  namespace DTXMania
864                                                  this.r現在選択中の曲 = this.r次の曲( this.r現在選択中の曲 );                                                  this.r現在選択中の曲 = this.r次の曲( this.r現在選択中の曲 );
865                                                  this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 13;                                                  this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % 13;
866    
   
867                                                  // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。                                                  // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。
868    
869                                                  C曲リストノード song = this.r現在選択中の曲;                                                  C曲リストノード song = this.r現在選択中の曲;
# Line 646  namespace DTXMania Line 872  namespace DTXMania
872    
873                                                  int index = ( this.n現在の選択行 + 7 ) % 13;      // 新しく最下部に表示されるパネルのインデックス(0~12)。                                                  int index = ( this.n現在の選択行 + 7 ) % 13;      // 新しく最下部に表示されるパネルのインデックス(0~12)。
874                                                  this.stバー情報[ index ].strタイトル文字列 = song.strタイトル;                                                  this.stバー情報[ index ].strタイトル文字列 = song.strタイトル;
875                            this.stバー情報[ index ].strアーティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.アーティスト名;
876                                                  this.stバー情報[ index ].col文字色 = song.col文字色;                                                  this.stバー情報[ index ].col文字色 = song.col文字色;
877                            this.stバー情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
878                                                  this.t曲名バーの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].col文字色 );                                                  this.t曲名バーの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].col文字色 );
879                            this.tアーティスト名テクスチャの生成( index, this.stバー情報[ index ].strアーティスト名 );
880                            //this.tパネルの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].strアーティスト名, this.stバー情報[ index ].col文字色 );
881    
882                            if( !this.dicThumbnail.ContainsKey( this.stバー情報[ index ].strDTXフォルダのパス ) )
883                                            {
884                                                    //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
885                                this.tパスを指定してサムネイル画像を生成する( index, this.stバー情報[ index ].strDTXフォルダのパス, this.stバー情報[ index ].eバー種別  );
886                                                    this.dicThumbnail.Add( this.stバー情報[ index ].strDTXフォルダのパス, this.txTumbnail[ index ] );
887                                            }
888                            txTumbnail[ index ] = this.dicThumbnail[ this.stバー情報[ index ].strDTXフォルダのパス ];
889    
890    
891                                                  // stバー情報[] の内容を1行ずつずらす。                                                  // stバー情報[] の内容を1行ずつずらす。
# Line 669  namespace DTXMania Line 907  namespace DTXMania
907                                                  for( int i = 0; i < 3; i++ )                                                  for( int i = 0; i < 3; i++ )
908                                                          this.stバー情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];                                                          this.stバー情報[ index ].nスキル値[ i ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ i ];
909    
   
910                                                  // 1行(100カウント)移動完了。                                                  // 1行(100カウント)移動完了。
911    
912                                                  this.n現在のスクロールカウンタ -= 100;                                                  this.n現在のスクロールカウンタ -= 100;
913                                                  this.n目標のスクロールカウンタ -= 100;                                                  this.n目標のスクロールカウンタ -= 100;
914    
915                                                  this.t選択曲が変更された(false);                               // スクロールバー用に今何番目を選択しているかを更新                                                  this.t選択曲が変更された(false);                               // スクロールバー用に今何番目を選択しているかを更新
916                            if( this.tx選択されている曲の曲名 != null && this.tx選択されている曲のアーティスト名 != null )
917                            {
918                                this.tx選択されている曲の曲名.Dispose();
919                                this.tx選択されている曲のアーティスト名.Dispose();
920                                this.tx選択されている曲の曲名 = null;
921                                this.tx選択されている曲のアーティスト名 = null;
922                            }
923    
924                                                  if( this.n目標のスクロールカウンタ == 0 )                                                  if( this.n目標のスクロールカウンタ == 0 )
925                                                          CDTXMania.stage選曲.t選択曲変更通知();         // スクロール完了=選択曲変更!                                                          CDTXMania.stage選曲.t選択曲変更通知();         // スクロール完了=選択曲変更!
# Line 693  namespace DTXMania Line 937  namespace DTXMania
937                                                  this.r現在選択中の曲 = this.r前の曲( this.r現在選択中の曲 );                                                  this.r現在選択中の曲 = this.r前の曲( this.r現在選択中の曲 );
938                                                  this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 13 ) % 13;                                                  this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + 13 ) % 13;
939    
   
940                                                  // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。                                                  // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。
941    
942                                                  C曲リストノード song = this.r現在選択中の曲;                                                  C曲リストノード song = this.r現在選択中の曲;
# Line 702  namespace DTXMania Line 945  namespace DTXMania
945    
946                                                  int index = ( ( this.n現在の選択行 - 5 ) + 13 ) % 13;     // 新しく最上部に表示されるパネルのインデックス(0~12)。                                                  int index = ( ( this.n現在の選択行 - 5 ) + 13 ) % 13;     // 新しく最上部に表示されるパネルのインデックス(0~12)。
947                                                  this.stバー情報[ index ].strタイトル文字列 = song.strタイトル;                                                  this.stバー情報[ index ].strタイトル文字列 = song.strタイトル;
948                            this.stバー情報[ index ].strアーティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song) ].譜面情報.アーティスト名;
949                                                  this.stバー情報[ index ].col文字色 = song.col文字色;                                                  this.stバー情報[ index ].col文字色 = song.col文字色;
950                            this.stバー情報[ index ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
951                                                  this.t曲名バーの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].col文字色 );                                                  this.t曲名バーの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].col文字色 );
952                            this.tアーティスト名テクスチャの生成( index, this.stバー情報[ index ].strアーティスト名 );
953                            //this.tパネルの生成( index, this.stバー情報[ index ].strタイトル文字列, this.stバー情報[ index ].strアーティスト名, this.stバー情報[ index ].col文字色 );
954    
955                            if( !this.dicThumbnail.ContainsKey( this.stバー情報[ index ].strDTXフォルダのパス ) )
956                                            {
957                                                    //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
958                                this.tパスを指定してサムネイル画像を生成する( index, this.stバー情報[ index ].strDTXフォルダのパス, this.stバー情報[ index ].eバー種別  );
959                                                    this.dicThumbnail.Add( this.stバー情報[ index ].strDTXフォルダのパス, this.txTumbnail[ index ] );
960                                            }
961                            txTumbnail[ index ] = this.dicThumbnail[ this.stバー情報[ index ].strDTXフォルダのパス ];
962    
963    
964                                                  // stバー情報[] の内容を1行ずつずらす。                                                  // stバー情報[] の内容を1行ずつずらす。
# Line 731  namespace DTXMania Line 986  namespace DTXMania
986                                                  this.n現在のスクロールカウンタ += 100;                                                  this.n現在のスクロールカウンタ += 100;
987                                                  this.n目標のスクロールカウンタ += 100;                                                  this.n目標のスクロールカウンタ += 100;
988    
989                                                  this.t選択曲が変更された(false);                               // スクロールバー用に今何番目を選択しているかを更新  
990                                                    this.t選択曲が変更された( false );                             // スクロールバー用に今何番目を選択しているかを更新
991                            if( this.tx選択されている曲の曲名 != null && this.tx選択されている曲のアーティスト名 != null )
992                            {
993                                this.tx選択されている曲の曲名.Dispose();
994                                this.tx選択されている曲のアーティスト名.Dispose();
995                                this.tx選択されている曲の曲名 = null;
996                                this.tx選択されている曲のアーティスト名 = null;
997                            }
998                                                                                                    
999                                                  if( this.n目標のスクロールカウンタ == 0 )                                                  if( this.n目標のスクロールカウンタ == 0 )
1000                                                          CDTXMania.stage選曲.t選択曲変更通知();         // スクロール完了=選択曲変更!                                                          CDTXMania.stage選曲.t選択曲変更通知();         // スクロール完了=選択曲変更!
# Line 762  namespace DTXMania Line 1025  namespace DTXMania
1025                                  else                                  else
1026                                  {                                  {
1027                                          if ( this.txSongNotFound != null )                                          if ( this.txSongNotFound != null )
1028                                                  this.txSongNotFound.t2D描画( CDTXMania.app.Device, 640, 400 );                                                  this.txSongNotFound.t2D描画( CDTXMania.app.Device, 320, 160 );
1029                                  }                                  }
1030                                  //-----------------                                  //-----------------
1031                                  #endregion                                  #endregion
1032    
1033                                  return 0;                                  return 0;
1034                          }                          }
1035                var bar = SlimDX.Matrix.Identity;
1036                var barL = SlimDX.Matrix.Identity;
1037                bar *= SlimDX.Matrix.RotationY(-0.415f);
1038                barL *= SlimDX.Matrix.RotationY(0.415f);
1039                bar *= SlimDX.Matrix.Translation(540f, 20f, -24f);
1040                barL *= SlimDX.Matrix.Translation(-540f, 20f, -24f);
1041                bar *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1042                barL *= SlimDX.Matrix.Scaling(1.0f, 0.65f, 1.0f);
1043    
1044                this.tx帯.t3D描画(CDTXMania.app.Device, bar);   //右の帯。
1045                this.tx帯.t3D描画(CDTXMania.app.Device, barL);   //右の帯。
1046                this.tx色帯.n透明度 = 155 + this.ct登場アニメ用[10].n現在の値;
1047                this.tx色帯.t3D描画( CDTXMania.app.Device, bar );
1048                this.tx色帯.t3D描画( CDTXMania.app.Device, barL );
1049    
1050                            #region [ デバッグ補助 ]
1051                            //-----------------
1052                /*
1053                stマトリックス座標 = new ST中心点[] {            
1054                new ST中心点() { x = -940.0000f, y = 4f, z = 320f, rotY = 0.4150f },
1055                            new ST中心点() { x = -740.0000f, y = 4f, z = 230f, rotY = 0.4150f },
1056                new ST中心点() { x = -550.0000f, y = 4f, z = 150f, rotY = 0.4150f },
1057                            new ST中心点() { x = -370.0000f, y = 4f, z = 70f, rotY = 0.4150f },
1058                            new ST中心点() { x = -194.0000f,     y = 4f, z = -6f, rotY = 0.4150f },
1059                            new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1060                            new ST中心点() { x = 204.0000f, y = 4f, z = 0f, rotY = -0.4150f },
1061                new ST中心点() { x = 362.0000f, y = 4f, z = 70f, rotY = -0.4150f },
1062                new ST中心点() { x = 528.0000f, y = 4f, z = 146f, rotY = -0.4150f },
1063                new ST中心点() { x = 686.0000f, y = 4f, z = 212f, rotY = -0.4150f },
1064                new ST中心点() { x = 848.0000f, y = 4f, z = 282f, rotY = -0.4150f },
1065                new ST中心点() { x = 1200.0000f, y = 4f, z = 450f, rotY = -0.4150f },
1066                new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1067                new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1068                    };
1069                */
1070                //-----------------
1071                            #endregion
1072    
1073    
1074                          if( !this.b登場アニメ全部完了 )                          if( !this.b登場アニメ全部完了 )
1075                          {                          {
# Line 778  namespace DTXMania Line 1079  namespace DTXMania
1079                                  {                                  {
1080                                          if( this.ct登場アニメ用[ i ].n現在の値 >= 0 )                                          if( this.ct登場アニメ用[ i ].n現在の値 >= 0 )
1081                                          {                                          {
                                                 double db割合0to1 = ( (double) this.ct登場アニメ用[ i ].n現在の値 ) / 100.0;  
                                                 double db回転率 = Math.Sin( Math.PI * 3 / 5 * db割合0to1 );  
1082                                                  int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;                                                  int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1083                                                    
1084                                                  if( i == 5 )                          if (i == 6)
1085                            {
1086                                #region [ ジャケット画像の描画 ]
1087                                //-----------------
1088                                if( this.txパネル != null )
1089                                {
1090                                    var mat = SlimDX.Matrix.Identity;
1091                                    mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1092                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1093                                    mat *= SlimDX.Matrix.Translation(
1094                                        (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1095                                        (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1096                                        (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1097                                    this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1098                                }
1099                                if (this.txTumbnail[nパネル番号] != null)
1100                                {
1101                                    float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1102                                    float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1103                                    var mat = SlimDX.Matrix.Identity;
1104                                    mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1105                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1106                                    mat *= SlimDX.Matrix.Translation(
1107                                        (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1108                                        (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1109                                        (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1110                                    this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1111                                }
1112                                //-----------------
1113                                #endregion
1114                                #region [ タイトル名テクスチャを描画。]
1115                                //-----------------
1116                                if (this.stバー情報[nパネル番号].txタイトル名 != null)
1117                                {
1118                                    //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1119                                    var mat = SlimDX.Matrix.Identity;
1120                                    mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1121                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1122                                    mat *= SlimDX.Matrix.Translation(
1123                                        (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1124                                        (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1125                                        (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1126                                    this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1127                                }
1128                                if (this.stバー情報[nパネル番号].txアーティスト名 != null)
1129                                {
1130                                    var mat = SlimDX.Matrix.Identity;
1131                                    mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1132                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1133                                    mat *= SlimDX.Matrix.Translation(
1134                                        (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1135                                        (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1136                                        (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1137                                    this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1138                                }
1139                                //-----------------
1140                                #endregion
1141                                this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 761, 233, new Rectangle(304, 70, 59, 242));
1142                            }
1143                            else if( i == 5 )
1144                                                  {                                                  {
1145                                                          // (A) 選択曲パネルを描画。                                                          // (A) 選択曲パネルを描画。
1146                                this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 531, 243, new Rectangle(74, 80, 230, 230)); //真ん中の部分は別々に描画。
1147                                                          #region [ バーテクスチャを描画。]                              this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar );   //右の帯。
1148                                this.txランプ用帯.t3D描画( CDTXMania.app.Device, barL );   //右の帯。
1149                                #region [ バーテクスチャを描画。]
1150                                                          //-----------------                                                          //-----------------
1151                                                          int width = (int) ( 425.0 / Math.Sin( Math.PI * 3 / 5 ) );                              if (this.txパネル != null)
1152                                                          int x = 410 - ( (int) ( width * db回転率 ) );                              {
1153                                                          int y = 300;                                  var mat = SlimDX.Matrix.Identity;
1154                                                          this.tバーの描画( 410, 270, this.stバー情報[ nパネル番号 ].eバー種別, true );                                  mat *= SlimDX.Matrix.Scaling(0.8f, 0.8f, 1.0f);
1155                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1156                                    mat *= SlimDX.Matrix.Translation(
1157                                        (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1158                                        (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1159                                        (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1160                                    this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1161                                }
1162                                this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1163                                                          //-----------------                                                          //-----------------
1164                                                          #endregion                                                          #endregion
1165                                #region [ ジャケット画像の描画 ]
1166                                //-----------------
1167                                if( this.txTumbnail[nパネル番号] != null )
1168                                {
1169                                float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1170                                float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1171                                var mat = SlimDX.Matrix.Identity;
1172                                mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率, f拡大率2 * CTexture.f画面比率, 1.0f);
1173                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1174                                    mat *= SlimDX.Matrix.Translation(
1175                                        (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1176                                        (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1177                                        (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1178                                    this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1179                                }
1180                                for( int la = 0; la < 5 ; la++ )
1181                                {
1182                                    if( CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null )
1183                                        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));
1184                                }
1185                                //-----------------
1186                                #endregion
1187                                                          #region [ タイトル名テクスチャを描画。]                                                          #region [ タイトル名テクスチャを描画。]
1188                                                          //-----------------                                                          //-----------------
1189                                                          if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )                              this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.stバー情報[ nパネル番号 ].strタイトル文字列 );
1190                                                                  this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 530 , 300 );                              this.tx選択されている曲のアーティスト名 = this.t指定された文字テクスチャを生成する( this.stバー情報[ nパネル番号 ].strアーティスト名 );
1191                                                          //-----------------                                                      if( this.tx選択されている曲の曲名 != null )
1192                                                          #endregion                                                              this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1193                                                          #region [ スキル値を描画。]                              if (this.tx選択されている曲のアーティスト名 != null)
1194                                                          //-----------------                                  this.tx選択されている曲のアーティスト名.t2D描画(CDTXMania.app.Device, 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 470);
1195                                                          if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )                              //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1196                                                                  this.tスキル値の描画( 490, 312 , this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );                                                          //      this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1197                                //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1198                                //    this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1199                                                          //-----------------                                                          //-----------------
1200                                                          #endregion                                                          #endregion
1201                                                  }                                                  }
1202                                                  else                                                  else
1203                                                  {                                                  {
1204                                                          // (B) その他のパネルの描画。                                                          // (B) その他のパネルの描画。
1205                                #region [ ジャケット画像の描画 ]
1206                                                          #region [ バーテクスチャの描画。]                              //-----------------
1207                                                          //-----------------                              if (this.txパネル != null)
1208                                                          int width = (int) ( ( (double) ( ( 720 - this.ptバーの基本座標[ i ].X ) + 1 ) ) / Math.Sin( Math.PI * 3 / 5 ) );                              {
1209                                                          int x = 720 - ( (int) ( width * db回転率 ) );                                  var mat = SlimDX.Matrix.Identity;
1210                                                          int y = this.ptバーの基本座標[ i ].Y;                                  mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1211                                                          this.tバーの描画( x, y, this.stバー情報[ nパネル番号 ].eバー種別, false );                                  mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1212                                                          //-----------------                                  mat *= SlimDX.Matrix.Translation(
1213                                                          #endregion                                      (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.txパネル.t3D描画(CDTXMania.app.Device, mat);
1217                                }
1218                                if (this.txTumbnail[ nパネル番号 ] != null)
1219                                {
1220                                    float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1221                                    float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1222                                    var mat = SlimDX.Matrix.Identity;
1223                                    mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1224                                    mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1225                                    mat *= SlimDX.Matrix.Translation(
1226                                        (this.stマトリックス座標[ i ].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1227                                        (this.stマトリックス座標[ i ].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1228                                        (this.stマトリックス座標[ i ].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1229                                    this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1230                                }
1231                                //-----------------
1232                                #endregion
1233                                                          #region [ タイトル名テクスチャを描画。]                                                          #region [ タイトル名テクスチャを描画。]
1234                                                          //-----------------                                                          //-----------------
1235                                                          if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )                              this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar );   //右の帯。
1236                                                                  this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 88 , y + 6 );                              this.tx選曲パネル.t2D描画( CDTXMania.app.Device, 761, 233, new Rectangle( 304, 70, 59, 242 ) );
1237                                                          //-----------------                              if (this.stバー情報[ nパネル番号 ].txタイトル名 != null)
1238                                                          #endregion                              {
1239                                                          #region [ スキル値を描画。]                                  var mat = SlimDX.Matrix.Identity;
1240                                                          //-----------------                                  mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1241                                                          if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )                                  mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1242                                                                  this.tスキル値の描画( x + 34, y + 18, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );                                  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                                    this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1247                                }
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                                    this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1258                                }
1259                                                          //-----------------                                                          //-----------------
1260                                                          #endregion                                                          #endregion
1261                                                  }                                                  }
# Line 836  namespace DTXMania Line 1263  namespace DTXMania
1263                                  }                                  }
1264                                  //-----------------                                  //-----------------
1265                                  #endregion                                  #endregion
1266    
1267                          }                          }
1268                          else                          else
1269                          {                          {
1270    
1271                                  #region [ (2) 通常フェーズの描画。]                                  #region [ (2) 通常フェーズの描画。]
1272                                  //-----------------                                  //-----------------
1273                                  for( int i = 0; i < 13; i++ )   // パネルは全13枚。                                  for( int i = 0; i < 13; i++ )   // パネルは全13枚。
1274                                  {                                  {
                                         if( ( i == 0 && this.n現在のスクロールカウンタ > 0 ) ||             // 最上行は、上に移動中なら表示しない。  
                                                 ( i == 12 && this.n現在のスクロールカウンタ < 0 ) )         // 最下行は、下に移動中なら表示しない。  
                                                 continue;  
   
1275                                          int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;                                          int nパネル番号 = ( ( ( this.n現在の選択行 - 5 ) + i ) + 13 ) % 13;
1276                                          int n見た目の行番号 = i;                                          int n見た目の行番号 = i;
1277                                          int n次のパネル番号 = ( this.n現在のスクロールカウンタ <= 0 ) ? ( ( i + 1 ) % 13 ) : ( ( ( i - 1 ) + 13 ) % 13 );                                          int n次のパネル番号 = ( this.n現在のスクロールカウンタ <= 0 ) ? ( ( i + 1 ) % 13 ) : ( ( ( i - 1 ) + 13 ) % 13 );
1278                                          int x = this.ptバーの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptバーの基本座標[ n次のパネル番号 ].X - this.ptバーの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );                                          int x = this.ptバーの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptバーの基本座標[ n次のパネル番号 ].X - this.ptバーの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );
1279                                          int y = this.ptバーの基本座標[ n見た目の行番号 ].Y + ( (int) ( ( this.ptバーの基本座標[ n次のパネル番号 ].Y - this.ptバーの基本座標[ n見た目の行番号 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );                                          int y = this.ptバーの基本座標[ n見た目の行番号 ].Y + ( (int) ( ( this.ptバーの基本座標[ n次のパネル番号 ].Y - this.ptバーの基本座標[ n見た目の行番号 ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );
1280                                        float fX = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x - this.stマトリックス座標[ n見た目の行番号 ].x ) * ( (  this.n現在のスクロールカウンタ ) ) / 100.0f  ) ) :
1281                                          if( ( i == 5 ) && ( this.n現在のスクロールカウンタ == 0 ) )                                                                       this.stマトリックス座標[ n見た目の行番号 ].x + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].x + this.stマトリックス座標[ n見た目の行番号 ].x ) * ( (  this.n現在のスクロールカウンタ ) ) / 100.0f  ) );
                                         {  
                                                 // (A) スクロールが停止しているときの選択曲バーの描画。  
1282    
1283                                                  #region [ バーテクスチャを描画。]                      float fY = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( (  this.n現在のスクロールカウンタ ) ) / 100.0f  ) ) :
1284                                                  //-----------------                                                                       this.stマトリックス座標[ n見た目の行番号 ].y + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].y - this.stマトリックス座標[ n見た目の行番号 ].y ) * ( (  this.n現在のスクロールカウンタ ) ) / 100.0f  ) );
                                                 this.tバーの描画( 410, 270, this.stバー情報[ nパネル番号 ].eバー種別, true );  
                                                 //-----------------  
                                                 #endregion  
                                                 #region [ タイトル名テクスチャを描画。]  
                                                 //-----------------  
                                                 if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )  
                                                         this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 530, 300 );  
                                                 //-----------------  
                                                 #endregion  
                                                 #region [ スキル値を描画。]  
                                                 //-----------------  
                                                 if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )  
                                                         this.tスキル値の描画( 490, 312, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );  
                                                 //-----------------  
                                                 #endregion  
                                         }  
                                         else  
                                         {  
                                                 // (B) スクロール中の選択曲バー、またはその他のバーの描画。  
1285    
1286                                                  #region [ バーテクスチャを描画。]                      float fZ = this.n現在のスクロールカウンタ <= 0 ? this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z - this.stマトリックス座標[ n見た目の行番号 ].z ) * ( (  this.n現在のスクロールカウンタ ) ) / 100.0f  ) ) :
1287                                                  //-----------------                                                                       this.stマトリックス座標[ n見た目の行番号 ].z + ( ( ( this.stマトリックス座標[ n次のパネル番号 ].z + this.stマトリックス座標[ n見た目の行番号 ].z ) * ( (  this.n現在のスクロールカウンタ ) ) / 100.0f  ) );
1288                                                  this.tバーの描画( x, y, this.stバー情報[ nパネル番号 ].eバー種別, false );  
1289                                                  //-----------------                      if (i == 6)
1290                                                  #endregion                      {
1291                            #region [ ジャケット画像の描画 ]
1292                            //-----------------
1293                            if( this.txパネル != null )
1294                            {
1295                                var mat = SlimDX.Matrix.Identity;
1296                                mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1297                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1298                                mat *= SlimDX.Matrix.Translation(
1299                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1300                                    (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1301                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1302                                this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1303                            }
1304                            if (this.txTumbnail[nパネル番号] != null)
1305                            {
1306                                float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1307                                float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1308                                var mat = SlimDX.Matrix.Identity;
1309                                mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1310                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1311                                mat *= SlimDX.Matrix.Translation(
1312                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1313                                    (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率 - 1f,
1314                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1315                                this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1316                            }
1317                            //-----------------
1318                            #endregion
1319                            #region [ タイトル名テクスチャを描画。]
1320                            //-----------------
1321                            if (this.stバー情報[nパネル番号].txタイトル名 != null)
1322                            {
1323                                //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1324                                var mat = SlimDX.Matrix.Identity;
1325                                mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1326                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1327                                mat *= SlimDX.Matrix.Translation(
1328                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1329                                    (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1330                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1331                                this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1332                            }
1333                            if (this.stバー情報[nパネル番号].txアーティスト名 != null)
1334                            {
1335                                var mat = SlimDX.Matrix.Identity;
1336                                mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1337                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1338                                mat *= SlimDX.Matrix.Translation(
1339                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1340                                    (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1341                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1342                                this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1343                            }
1344                            //-----------------
1345                            #endregion
1346                        }
1347                        else if( ( i == 5 ) )
1348                        {
1349                            this.txランプ用帯.t3D描画( CDTXMania.app.Device, barL );   //右の帯。
1350                            for (int la = 0; la < 5; la++)
1351                            {
1352                                //if( this.stバー情報[ 6 ].ar難易度ラベル[ la ] != null )
1353                                {
1354                                    var lamp = SlimDX.Matrix.Identity;
1355                                    lamp *= SlimDX.Matrix.Translation(
1356                                    ( this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x ) )) * CTexture.f画面比率,
1357                                    ( this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y ) ) ) * CTexture.f画面比率 - 1f - la * 13f,
1358                                    ( this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z ) ) ) * CTexture.f画面比率);
1359    
1360                                    //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));
1361                                }
1362                            }
1363                            this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 531, 243, new Rectangle(74, 80, 230, 230)); //真ん中の部分は別々に描画。
1364                                                    // (A) スクロールが停止しているときの選択曲バーの描画。
1365                            #region [ ジャケット画像の描画 ]
1366                            //-----------------
1367                            if (this.txパネル != null)
1368                            {
1369                                var mat = SlimDX.Matrix.Identity;
1370                                mat *= SlimDX.Matrix.Scaling(CTexture.f画面比率, CTexture.f画面比率, 1.0f);
1371                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1372                                mat *= SlimDX.Matrix.Translation(
1373                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1374                                    (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1375                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1376                                this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1377                            }
1378                            this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 457, 163, new Rectangle(0, 0, 363, 368));
1379    
1380                            for( int la = 0; la < 5 ; la++ )
1381                            {
1382                                if( CDTXMania.stage選曲.r現在選択中の曲.ar難易度ラベル[ la ] != null )
1383                                    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));
1384                            }
1385                            if( this.txTumbnail[ nパネル番号 ] != null )
1386                            {
1387                                float f拡大率 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width;
1388                                float f拡大率2 = (float)218.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1389                                this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率2, 1.0f );
1390                                this.txTumbnail[ nパネル番号 ].t2D描画(CDTXMania.app.Device, 537, 249 );
1391                                this.txTumbnail[ nパネル番号 ].vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1.0f );
1392                            }
1393                            //-----------------
1394                            #endregion
1395                                                  #region [ タイトル名テクスチャを描画。]                                                  #region [ タイトル名テクスチャを描画。]
1396                                                  //-----------------                                                  //-----------------
1397                                                  if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )                          if( this.tx選択されている曲の曲名 == null )
1398                                                          this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 6 );                          {
1399                                                  //-----------------                              this.tx選択されている曲の曲名 = this.t指定された文字テクスチャを生成する( this.stバー情報[ nパネル番号 ].strタイトル文字列 );
1400                                                  #endregion                              this.tx選択されている曲のアーティスト名 = this.t指定された文字テクスチャを生成する( this.stバー情報[ nパネル番号 ].strアーティスト名 );
1401                                                  #region [ スキル値を描画。]                          }
1402                                                  //-----------------                                                  if( this.tx選択されている曲の曲名 != null )
1403                                                  if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )                                                          this.tx選択されている曲の曲名.t2D描画( CDTXMania.app.Device, 552, 210 );
1404                                                          this.tスキル値の描画( x + 34, y + 18, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );                          if( this.tx選択されている曲のアーティスト名 != null )
1405                                this.tx選択されている曲のアーティスト名.t2D描画( CDTXMania.app.Device, 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 470);
1406                            //if( this.stバー情報[ nパネル番号 ].txタイトル名 != null )
1407                                                    //        this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, 556, 210 );
1408                            //if (this.stバー情報[ nパネル番号 ].txアーティスト名 != null)
1409                            //    this.stバー情報[ nパネル番号 ].txアーティスト名.t2D描画(CDTXMania.app.Device, 560 - 770 - this.stバー情報[ nパネル番号 ].nアーティスト名テクスチャの長さdot, 402);
1410                                                  //-----------------                                                  //-----------------
1411                                                  #endregion                                                  #endregion
1412                                          }                                          }
1413                        else if (i >= 12)
1414                        {
1415                        }
1416                        else
1417                        {
1418                            // (B) スクロール中の選択曲バー、またはその他のバーの描画。
1419                            this.txランプ用帯.t3D描画( CDTXMania.app.Device, bar );   //右の帯。
1420                            this.tx選曲パネル.t2D描画(CDTXMania.app.Device, 761, 233, new Rectangle(304, 70, 59, 242));
1421                            #region [ ジャケット画像の描画 ]
1422                            //-----------------
1423                            if (this.txパネル != null)
1424                            {
1425                                var mat = SlimDX.Matrix.Identity;
1426                                mat *= SlimDX.Matrix.Scaling(0.62f, 0.88f, 1.0f);
1427                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1428                                mat *= SlimDX.Matrix.Translation(
1429                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1430                                    (this.stマトリックス座標[i].y + 2 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1431                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1432                                this.txパネル.t3D描画(CDTXMania.app.Device, mat);
1433                            }
1434                            if (this.txTumbnail[nパネル番号] != null)
1435                            {
1436                                float f拡大率 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Width ;
1437                                float f拡大率2 = (float)172.0 / this.txTumbnail[nパネル番号].szテクスチャサイズ.Height;
1438                                var mat = SlimDX.Matrix.Identity;
1439                                mat *= SlimDX.Matrix.Scaling(f拡大率 * CTexture.f画面比率 - 0.084f, f拡大率2 * CTexture.f画面比率 + 0.05f, 1.0f);
1440                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1441                                mat *= SlimDX.Matrix.Translation(
1442                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1443                                    (this.stマトリックス座標[i].y + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1444                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1445                                this.txTumbnail[nパネル番号].t3D描画(CDTXMania.app.Device, mat);
1446                            }
1447                            //-----------------
1448                            #endregion
1449                            #region [ タイトル名テクスチャを描画。]
1450                            //-----------------
1451                            if (this.stバー情報[nパネル番号].txタイトル名 != null)
1452                            {
1453                                //this.stバー情報[ nパネル番号 ].txタイトル名.t2D描画( CDTXMania.app.Device, x + 0x58, y + 8 );
1454                                var mat = SlimDX.Matrix.Identity;
1455                                mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1456                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1457                                mat *= SlimDX.Matrix.Translation(
1458                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1459                                    (this.stマトリックス座標[i].y + 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1460                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1461                                this.stバー情報[nパネル番号].txタイトル名.t3D描画(CDTXMania.app.Device, mat);
1462                            }
1463                            if (this.stバー情報[nパネル番号].txアーティスト名 != null)
1464                            {
1465                                var mat = SlimDX.Matrix.Identity;
1466                                mat *= SlimDX.Matrix.Scaling(0.35f, 0.45f, 1.0f);
1467                                mat *= SlimDX.Matrix.RotationY(this.stマトリックス座標[i].rotY + (this.stマトリックス座標[i].rotY - this.stマトリックス座標[i].rotY));
1468                                mat *= SlimDX.Matrix.Translation(
1469                                    (this.stマトリックス座標[i].x + (int)((this.stマトリックス座標[i].x - this.stマトリックス座標[i].x))) * CTexture.f画面比率,
1470                                    (this.stマトリックス座標[i].y - 110 + (int)((this.stマトリックス座標[i].y - this.stマトリックス座標[i].y))) * CTexture.f画面比率,
1471                                    (this.stマトリックス座標[i].z + (int)((this.stマトリックス座標[i].z - this.stマトリックス座標[i].z))) * CTexture.f画面比率);
1472                                this.stバー情報[nパネル番号].txアーティスト名.t3D描画(CDTXMania.app.Device, mat);
1473                            }
1474                            //-----------------
1475                            #endregion
1476    
1477                            #region [ スキル値を描画。]
1478                            //-----------------
1479                            //if( ( this.stバー情報[ nパネル番号 ].eバー種別 == Eバー種別.Score ) && ( this.e楽器パート != E楽器パート.UNKNOWN ) )
1480                            //this.tスキル値の描画( x + 34, y + 18, this.stバー情報[ nパネル番号 ].nスキル値[ (int) this.e楽器パート ] );
1481                            //-----------------
1482                            #endregion
1483                        }
1484                                  }                                  }
1485                                  //-----------------                                  //-----------------
1486                                  #endregion                                  #endregion
1487    
1488                          }                          }
1489                          #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]                          #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]
1490                          int py;                          int py;
1491                          double d = 0;                          double d = 0;
1492                          if ( nNumOfItems > 1 )                          if ( nNumOfItems > 1 )
1493                          {                          {
1494                                  d = ( 336 - 6 - 8 ) / (double) ( nNumOfItems - 1 );                                  d = ( 336 - 8 ) / (double) ( nNumOfItems - 1 );
1495                                  py = (int) ( d * ( nCurrentPosition - 1 ) );                                  py = (int) ( d * ( nCurrentPosition - 1 ) );
1496                          }                          }
1497                          else                          else
# Line 915  namespace DTXMania Line 1500  namespace DTXMania
1500                                  py = 0;                                  py = 0;
1501                          }                          }
1502                          int delta = (int) ( d * this.n現在のスクロールカウンタ / 100 );                          int delta = (int) ( d * this.n現在のスクロールカウンタ / 100 );
1503                          if ( py + delta <= 336 - 6 - 8 )                          if ( py + delta <= 336 - 8 )
1504                          {                          {
1505                                  this.nスクロールバー相対y座標 = py + delta;                                  this.nスクロールバー相対y座標 = py + delta;
1506                          }                          }
# Line 932  namespace DTXMania Line 1517  namespace DTXMania
1517    
1518                  #region [ private ]                  #region [ private ]
1519                  //-----------------                  //-----------------
1520          private enum Eバー種別 { Score, Box, Other }                  private enum Eバー種別 { Score, Box, Other, Random, BackBox }
1521    
1522                  private struct STバー                  private struct STバー
1523                  {                  {
1524                          public CTexture Score;                          public CTexture Score;
1525                          public CTexture Box;                          public CTexture Box;
1526                          public CTexture Other;                          public CTexture Other;
1527                public CTexture Random;
1528                public CTexture BackBox;
1529                          public CTexture this[ int index ]                          public CTexture this[ int index ]
1530                          {                          {
1531                                  get                                  get
# Line 953  namespace DTXMania Line 1540  namespace DTXMania
1540    
1541                                                  case 2:                                                  case 2:
1542                                                          return this.Other;                                                          return this.Other;
1543    
1544                            case 3:
1545                                return this.Random;
1546    
1547                            case 4:
1548                                return this.BackBox;
1549                                          }                                          }
1550                                          throw new IndexOutOfRangeException();                                          throw new IndexOutOfRangeException();
1551                                  }                                  }
# Line 971  namespace DTXMania Line 1564  namespace DTXMania
1564                                                  case 2:                                                  case 2:
1565                                                          this.Other = value;                                                          this.Other = value;
1566                                                          return;                                                          return;
1567    
1568                            case 3:
1569                                this.Random = value;
1570                                return;
1571    
1572                            case 4:
1573                                this.BackBox = value;
1574                                return;
1575                                          }                                          }
1576                                          throw new IndexOutOfRangeException();                                          throw new IndexOutOfRangeException();
1577                                  }                                  }
# Line 981  namespace DTXMania Line 1582  namespace DTXMania
1582                  {                  {
1583                          public CActSelect曲リスト.Eバー種別 eバー種別;                          public CActSelect曲リスト.Eバー種別 eバー種別;
1584                          public string strタイトル文字列;                          public string strタイトル文字列;
1585                public string strアーティスト名;
1586                          public CTexture txタイトル名;                          public CTexture txタイトル名;
1587                public CTexture txアーティスト名;
1588                public CTexture txパネル;
1589                public int nアーティスト名テクスチャの長さdot;
1590                public int nタイトル名テクスチャの長さdot;
1591                          public STDGBVALUE<int> nスキル値;                          public STDGBVALUE<int> nスキル値;
1592                          public Color col文字色;                          public Color col文字色;
1593                public string strDTXフォルダのパス;
1594                public string[] ar難易度ラベル;
1595                public Cスコア.ST譜面情報 ar譜面情報;
1596                  }                  }
1597    
1598                  private struct ST選曲バー                  private struct ST選曲バー
# Line 1029  namespace DTXMania Line 1638  namespace DTXMania
1638                          }                          }
1639                  }                  }
1640    
1641                  private bool b登場アニメ全部完了;          protected struct ST中心点
1642            {
1643                public float x;
1644                public float y;
1645                public float z;
1646                public float rotY;
1647            }
1648                    /// <summary>
1649                    /// <para>SSTFファイル絶対パス(key)とサムネイル画像(value)との辞書。</para>
1650                    /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1651                    /// </summary>
1652                    protected Dictionary<string, CTexture> dicThumbnail = new Dictionary<string, CTexture>();
1653                    
1654                    /// <summary>
1655                    /// <para>SSTFファイル絶対パス(key)とプロパティ画像(value)との辞書。</para>
1656                    /// <para>アプリの起動から終了まで単純に増加を続け、要素が減ることはない。</para>
1657                    /// </summary>
1658                    protected Dictionary<string, CTexture> dicProperty = new Dictionary<string, CTexture>();
1659            
1660            protected ST中心点[] stマトリックス座標 = new ST中心点[] {
1661                            #region [ 実は円弧配置になってない。射影行列間違ってるよスターレインボウ見せる気かよ… ]
1662                            //-----------------        
1663                new ST中心点() { x = -940.0000f, y = 4f, z = 320f, rotY = 0.4150f },
1664                            new ST中心点() { x = -740.0000f, y = 4f, z = 230f, rotY = 0.4150f },
1665                new ST中心点() { x = -550.0000f, y = 4f, z = 150f, rotY = 0.4150f },
1666                            new ST中心点() { x = -370.0000f, y = 4f, z = 70f, rotY = 0.4150f },
1667                            new ST中心点() { x = -194.0000f,     y = 4f, z = -6f, rotY = 0.4150f },
1668                            new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1669                            new ST中心点() { x = 204.0000f, y = 4f, z = 0f, rotY = -0.4150f },
1670                new ST中心点() { x = 362.0000f, y = 4f, z = 70f, rotY = -0.4150f },
1671                new ST中心点() { x = 528.0000f, y = 4f, z = 146f, rotY = -0.4150f },
1672                new ST中心点() { x = 686.0000f, y = 4f, z = 212f, rotY = -0.4150f },
1673                new ST中心点() { x = 848.0000f, y = 4f, z = 282f, rotY = -0.4150f },
1674                new ST中心点() { x = 1200.0000f, y = 4f, z = 450f, rotY = -0.4150f },
1675                new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1676                new ST中心点() { x = 1500.0000f, y = 4f, z = -289.5575f, rotY = -0.9279888f },
1677                            //-----------------
1678                            #endregion
1679                    };
1680    
1681            protected readonly ST中心点[] stマトリックス曲名座標 = new ST中心点[] {
1682                            #region [ 実は円弧配置になってない。射影行列間違ってるよスターレインボウ見せる気かよ… ]
1683                            //-----------------
1684                new ST中心点() { x = -980.0000f, y = 2f, z = 360f, rotY = 0.4000f },
1685                            new ST中心点() { x = -780.0000f, y = 2f, z = 270f, rotY = 0.4000f },
1686                new ST中心点() { x = -590.0000f, y = 2f, z = 180f, rotY = 0.4000f },
1687                            new ST中心点() { x = -400.0000f, y = 2f, z = 90f, rotY = 0.4000f },
1688                            new ST中心点() { x = -210.0000f, y = 2f, z = 0f, rotY = 0.4000f },
1689                            new ST中心点() { x = 6.00002622683f, y = 2f, z = 0f, rotY = 0f },
1690                            new ST中心点() { x = 210.0000f, y = 2f, z = 0f, rotY = -0.4000f },
1691                new ST中心点() { x = 400.0000f, y = 2f, z = 90f, rotY = -0.4f },
1692                new ST中心点() { x = 590.0000f, y = 2f, z = 180f, rotY = -0.4f },
1693                new ST中心点() { x = 780.0000f, y = 2f, z = 270f, rotY = -0.4f },
1694                new ST中心点() { x = 980.0000f, y = 2f, z = 360f, rotY = -0.4f },
1695                new ST中心点() { x = 1200.0000f, y = 2f, z = 450f, rotY = -0.4f },
1696                new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1697                new ST中心点() { x = 1500.0000f, y = 2f, z = -289.5575f, rotY = -0.9279888f },
1698                            //-----------------
1699                            #endregion
1700                    };
1701            [StructLayout(LayoutKind.Sequential)]
1702            public struct STATUSPANEL
1703            {
1704                public string label;
1705                public int status;
1706            }
1707            public int nIndex;
1708            public STATUSPANEL[] stパネルマップ;
1709    
1710                    public bool b登場アニメ全部完了;
1711                  private Color color文字影 = Color.FromArgb( 0x40, 10, 10, 10 );                  private Color color文字影 = Color.FromArgb( 0x40, 10, 10, 10 );
1712                  private CCounter[] ct登場アニメ用 = new CCounter[ 13 ];                  public CCounter[] ct登場アニメ用 = new CCounter[ 13 ];
1713                  private E楽器パート e楽器パート;                  private E楽器パート e楽器パート;
1714                  private Font ft曲リスト用フォント;                  private Font ft曲リスト用フォント;
1715                  private long nスクロールタイマ;                  private long nスクロールタイマ;
1716                  private int n現在のスクロールカウンタ;                  private int n現在のスクロールカウンタ;
1717                  private int n現在の選択行;                  private int n現在の選択行;
1718                  private int n目標のスクロールカウンタ;                  private int n目標のスクロールカウンタ;
1719          private readonly Point[] ptバーの基本座標 = new Point[] { new Point(0x2c4, 30), new Point(0x272, 0x51), new Point(0x242, 0x84), new Point(0x222, 0xb7), new Point(0x210, 0xea), new Point(0x1d0, 0x127), new Point(0x224, 0x183), new Point(0x242, 0x1b6), new Point(0x270, 0x1e9), new Point(0x2ae, 540), new Point(0x314, 0x24f), new Point(0x3e4, 0x282), new Point(0x500, 0x2b5) };                  private readonly Point[] ptバーの基本座標 = new Point[] { new Point(0x2c4, 30), new Point(0x272, 0x51), new Point(0x242, 0x84), new Point(0x222, 0xb7), new Point(0x210, 0xea), new Point(0x1d0, 0x127), new Point(0x224, 0x183), new Point(0x242, 0x1b6), new Point(0x270, 0x1e9), new Point(0x2ae, 540), new Point(0x314, 0x24f), new Point(0x3e4, 0x282), new Point(0x500, 0x2b5) };
1720                  private STバー情報[] stバー情報 = new STバー情報[ 13 ];                  private STバー情報[] stバー情報 = new STバー情報[ 13 ];
1721                  private CTexture txSongNotFound, txEnumeratingSongs;                  private CTexture txSongNotFound, txEnumeratingSongs;
1722                  private CTexture txスキル数字;                  private CTexture txスキル数字;
1723                  private CTexture txアイテム数数字;                  private CTexture txアイテム数数字;
1724                  private STバー tx曲名バー;                  private STバー tx曲名バー;
1725                  private ST選曲バー tx選曲バー;                  private ST選曲バー tx選曲バー;
1726            private CTexture[] txTumbnail = new CTexture[13];
1727            private CTexture tx選曲パネル;
1728            private CTexture txパネル;
1729            private CTexture txジャケットランダム;
1730            private CTexture txジャケットボックスクローズ;
1731            private CTexture tx帯;
1732            private CTexture tx色帯;
1733            private CTexture txランプ用帯;
1734            private CTexture tx選択されている曲の曲名;
1735            private CTexture tx選択されている曲のアーティスト名;
1736            private CTexture txクリアランプ;
1737            //CPrivateFont prvFont;
1738            CPrivateFastFont prvFont;
1739    
1740                  private int nCurrentPosition = 0;                  private int nCurrentPosition = 0;
1741                  private int nNumOfItems = 0;                  private int nNumOfItems = 0;
# Line 1061  namespace DTXMania Line 1752  namespace DTXMania
1752                                                  return Eバー種別.Score;                                                  return Eバー種別.Score;
1753    
1754                                          case C曲リストノード.Eノード種別.BOX:                                          case C曲リストノード.Eノード種別.BOX:
                                         case C曲リストノード.Eノード種別.BACKBOX:  
1755                                                  return Eバー種別.Box;                                                  return Eバー種別.Box;
1756                        
1757                        case C曲リストノード.Eノード種別.BACKBOX:
1758                            return Eバー種別.BackBox;
1759    
1760                        case C曲リストノード.Eノード種別.RANDOM:
1761                            return Eバー種別.Random;
1762                                  }                                  }
1763                          }                          }
1764                          return Eバー種別.Other;                          return Eバー種別.Other;
# Line 1170  namespace DTXMania Line 1866  namespace DTXMania
1866                          for( int i = 0; i < 13; i++ )                          for( int i = 0; i < 13; i++ )
1867                          {                          {
1868                                  this.stバー情報[ i ].strタイトル文字列 = song.strタイトル;                                  this.stバー情報[ i ].strタイトル文字列 = song.strタイトル;
1869                    this.stバー情報[ i ].strアーティスト名 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.アーティスト名;
1870                                  this.stバー情報[ i ].col文字色 = song.col文字色;                                  this.stバー情報[ i ].col文字色 = song.col文字色;
1871                                  this.stバー情報[ i ].eバー種別 = this.e曲のバー種別を返す( song );                                  this.stバー情報[ i ].eバー種別 = this.e曲のバー種別を返す( song );
1872                    this.stバー情報[ i ].ar譜面情報 = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報;
1873    
1874                    for( int n = 0; n < 5; n++ )
1875                    {
1876                        //this.stバー情報[ i ].ar難易度ラベル[ n ];
1877    
1878                        //if( this.stバー情報[ i ].ar難易度ラベル[ n ] != null )
1879                            //this.stバー情報[ i ].ar難易度ラベル[ n ] = song.ar難易度ラベル[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ];
1880                    }
1881                                                                    
1882                    this.stバー情報[ i ].strDTXフォルダのパス = song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].ファイル情報.フォルダの絶対パス + song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.Preimage;
1883                    //this.tパスを指定してサムネイル画像を生成する( i, this.stバー情報[ i ].strDTXフォルダのパス, this.stバー情報[ i ].eバー種別 );
1884                    if( !this.dicThumbnail.ContainsKey( this.stバー情報[ i ].strDTXフォルダのパス ) )
1885                                    {
1886                                   //txTumbnail = this.tサムネイルテクスチャを作成する( Path.GetDirectoryName( song.ScoreFile ) );
1887                        this.tパスを指定してサムネイル画像を生成する( i, this.stバー情報[ i ].strDTXフォルダのパス, this.stバー情報[ i ].eバー種別  );
1888                                this.dicThumbnail.Add( this.stバー情報[ i ].strDTXフォルダのパス, this.txTumbnail[ i ] );
1889                                    }
1890                    txTumbnail[ i ] = this.dicThumbnail[ this.stバー情報[ i ].strDTXフォルダのパス ];
1891    
1892                                  for( int j = 0; j < 3; j++ )                                  for( int j = 0; j < 3; j++ )
1893                                          this.stバー情報[ i ].nスキル値[ j ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ j ];                                          this.stバー情報[ i ].nスキル値[ j ] = (int) song.arスコア[ this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す( song ) ].譜面情報.最大スキル[ j ];
1894    
# Line 1223  namespace DTXMania Line 1939  namespace DTXMania
1939                      #endregion                      #endregion
1940                  }                  }
1941          }          }
1942            private void tパスを指定してサムネイル画像を生成する( int nバー番号, string strDTXPath, Eバー種別 eType )
1943            {
1944                if (nバー番号 < 0 || nバー番号 > 12)
1945                    return;
1946    
1947                //try
1948                            {
1949                    //if (eType == Eバー種別.Score || eType == Eバー種別.Box)
1950                    {
1951                        if (!File.Exists(strDTXPath))
1952                        {
1953                            this.txTumbnail[nバー番号] = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_preimage default.png"), false);
1954                        }
1955                        else
1956                        {
1957                            this.txTumbnail[nバー番号] = CDTXMania.tテクスチャの生成(strDTXPath);
1958                        }
1959                    }
1960                    //else if (eType == Eバー種別.Random)
1961                    {
1962                        //this.txTumbnail[ nバー番号 ] = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_preimage random.png"), false);
1963                    }
1964                    //else if (eType == Eバー種別.BackBox)
1965                    {
1966                        //if(this.txジャケットボックスクローズ != null)
1967                        //this.txTumbnail[nバー番号] = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_preimage random.png"), false);
1968                    }
1969                            }
1970                /*
1971                            catch( CTextureCreateFailedException )
1972                            {
1973                    if ( this.txジャケット指定が無い場合の画像 != null )
1974                    {
1975                        this.txTumbnail[ nバー番号 ] = this.txジャケット指定が無い場合の画像;
1976                    }
1977                    else
1978                    {
1979                        this.txTumbnail[ nバー番号 ] = null;
1980                    }
1981                            }
1982                     */
1983            }
1984            private CTexture tパスを指定してサムネイル画像を生成して返す( int nバー番号, string strDTXPath, Eバー種別 eType )
1985            {
1986                if (nバー番号 < 0 || nバー番号 > 12)
1987                    return this.txTumbnail[nバー番号] = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_preimage default.png"), false);
1988    
1989                //try
1990                            {
1991                    //if (eType == Eバー種別.Score || eType == Eバー種別.Box)
1992                    {
1993                        if (!File.Exists(strDTXPath))
1994                        {
1995                            return this.txTumbnail[nバー番号] = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\5_preimage default.png"), false);
1996                        }
1997                        else
1998                        {
1999                            return this.txTumbnail[nバー番号] = CDTXMania.tテクスチャの生成(strDTXPath);
2000                        }
2001                    }
2002                    //else if (eType == Eバー種別.Random)
2003                    {
2004                    //    if(this.txジャケットランダム != null)
2005                    //        this.txTumbnail[nバー番号] = this.txジャケットランダム;
2006                    }
2007                    //else if (eType == Eバー種別.BackBox)
2008                    {
2009                    //    if(this.txジャケットボックスクローズ != null)
2010                    //        this.txTumbnail[nバー番号] = this.txジャケットボックスクローズ;
2011                    }
2012                            }
2013                /*
2014                            catch( CTextureCreateFailedException )
2015                            {
2016                    if ( this.txジャケット指定が無い場合の画像 != null )
2017                    {
2018                        this.txTumbnail[ nバー番号 ] = this.txジャケット指定が無い場合の画像;
2019                    }
2020                    else
2021                    {
2022                        this.txTumbnail[ nバー番号 ] = null;
2023                    }
2024                            }
2025                     */
2026            }
2027            private CTexture t指定された文字テクスチャを生成する( string str文字 )
2028            {
2029                //2013.09.05.kairera0467 中央にしか使用することはないので、色は黒固定。
2030                //現在は機能しない(面倒なので実装してない)が、そのうち使用する予定。
2031                //PrivateFontの試験運転も兼ねて。
2032                //CPrivateFastFont
2033                prvFont = new CPrivateFastFont( new FontFamily( CDTXMania.ConfigIni.str選曲リストフォント ), 28, FontStyle.Regular );
2034                Bitmap bmp = prvFont.DrawPrivateFont( str文字, Color.Black, Color.Transparent );
2035    
2036                SizeF sz曲名;
2037    
2038                #region [ 曲名表示に必要となるサイズを取得する。]
2039                //-----------------
2040                using( var bmpDummy = new Bitmap(1, 1) )
2041                {
2042                    var g = Graphics.FromImage( bmpDummy );
2043                    g.PageUnit = GraphicsUnit.Pixel;
2044                    sz曲名 = g.MeasureString( str文字, this.ft曲リスト用フォント);
2045                    //this.stバー情報[ nバー番号 ].nタイトル名テクスチャの長さdot = (int)g.MeasureString(str文字, this.ft曲リスト用フォント).Width;
2046                }
2047                //-----------------
2048                #endregion
2049                int n最大幅px = 200;
2050                int height = 25;
2051                int width = (int)((sz曲名.Width + 2) * 0.5f);
2052                if (width > (CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2))
2053                    width = CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2;  // 右端断ち切れ仕方ないよね
2054    
2055                float f拡大率X = (width <= n最大幅px) ? 0.5f : (((float)n最大幅px / (float)width) * 0.5f); // 長い文字列は横方向に圧縮。
2056    
2057                CTexture tx文字テクスチャ = CDTXMania.tテクスチャの生成( bmp, false );
2058                tx文字テクスチャ.vc拡大縮小倍率 = new Vector3( f拡大率X, 0.5f, 1f );
2059    
2060                //prvFont.Dispose();
2061                bmp.Dispose();
2062    
2063                return tx文字テクスチャ;
2064            }
2065            private void tパネルの生成( int nバー番号, string str曲名, string strアーティスト名, Color color )
2066            {
2067                //t3D描画の仕様上左詰や右詰が面倒になってしまうので、
2068                //パネルにあらかじめ曲名とアーティスト名を埋め込んでおく。
2069                if( nバー番号 < 0 || nバー番号 > 12 )
2070                                    return;
2071                try
2072                {
2073                    Bitmap b4font;
2074                    Bitmap bSongPanel;
2075                    Image imgSongPanel;
2076                    SizeF sz曲名;
2077                    SizeF szアーティスト名;
2078    
2079                    b4font = new Bitmap( 1, 1 );
2080                    Graphics graphics = Graphics.FromImage( b4font );
2081                    graphics.PageUnit = GraphicsUnit.Pixel;
2082                    imgSongPanel= Image.FromFile( CSkin.Path( @"Graphics\5_music panel.png" ) );
2083                    bSongPanel = new Bitmap( 223, 279 );
2084    
2085                    graphics = Graphics.FromImage( bSongPanel );
2086                    graphics.DrawImage( imgSongPanel, 0, 0, 223, 279 );
2087    
2088    
2089                                    #region [ 曲名表示に必要となるサイズを取得する。]
2090                                    //-----------------
2091                                    using( var bmpDummy = new Bitmap( 1, 1 ) )
2092                                    {
2093                                            var g = Graphics.FromImage( bmpDummy );
2094                                            g.PageUnit = GraphicsUnit.Pixel;
2095                                            sz曲名 = g.MeasureString( str曲名, this.ft曲リスト用フォント );
2096                        szアーティスト名 = g.MeasureString( strアーティスト名, this.ft曲リスト用フォント );
2097                        this.stバー情報[ nバー番号 ].nタイトル名テクスチャの長さdot = (int) g.MeasureString( str曲名, this.ft曲リスト用フォント ).Width;
2098                                    }
2099                                    //-----------------
2100                                    #endregion
2101    
2102                    int n最大幅px = 200;
2103                                    int height = 25;
2104                                    int width = (int) ( ( sz曲名.Width + 2 ) );
2105                                    if( width > ( CDTXMania.app.Device.Capabilities.MaxTextureWidth ) )
2106                                            width = CDTXMania.app.Device.Capabilities.MaxTextureWidth;      // 右端断ち切れ仕方ないよね
2107    
2108                                    float f拡大率X = ( width <= n最大幅px ) ? 1 : ( ( (float) n最大幅px / (float) width )  );      // 長い文字列は横方向に圧縮。
2109    
2110                                    using( var bmp = new Bitmap( width, height, PixelFormat.Format32bppArgb ) )             // 2倍(面積4倍)のBitmapを確保。(0.5倍で表示する前提。)
2111                                    using( var g = Graphics.FromImage( bmp ) )
2112                                    {
2113                                            graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
2114                                            float y = ( ( ( float ) bmp.Height ) ) - ( ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot ) );
2115                                            //graphics.DrawString( str曲名, this.ft曲リスト用フォント, new SolidBrush( this.color文字影 ), (float) 2f, (float) ( y + 2f ) );
2116                                            graphics.DrawString( str曲名, this.ft曲リスト用フォント, new SolidBrush( color ), 5f, y );
2117                        graphics.DrawString( strアーティスト名, this.ft曲リスト用フォント, new SolidBrush( this.color文字影 ), (float)234f, 258f);
2118                        graphics.DrawString( strアーティスト名, this.ft曲リスト用フォント, new SolidBrush( Color.White ), 234f, 258f );
2119    
2120                                            CDTXMania.t安全にDisposeする( ref this.stバー情報[ nバー番号 ].txパネル );
2121    
2122                        this.stバー情報[ nバー番号 ].txパネル = new CTexture( CDTXMania.app.Device, bSongPanel, CDTXMania.TextureFormat, false );
2123                                    }
2124    
2125    
2126                }
2127                catch( CTextureCreateFailedException )
2128                            {
2129                                    Trace.TraceError( "曲名テクスチャの作成に失敗しました。[{0}]", str曲名 );
2130                                    this.stバー情報[ nバー番号 ].txタイトル名 = null;
2131                            }
2132    
2133            }
2134                  private void t曲名バーの生成( int nバー番号, string str曲名, Color color )                  private void t曲名バーの生成( int nバー番号, string str曲名, Color color )
2135                  {                  {
2136                          if( nバー番号 < 0 || nバー番号 > 12 )                          if( nバー番号 < 0 || nバー番号 > 12 )
# Line 1239  namespace DTXMania Line 2147  namespace DTXMania
2147                                          var g = Graphics.FromImage( bmpDummy );                                          var g = Graphics.FromImage( bmpDummy );
2148                                          g.PageUnit = GraphicsUnit.Pixel;                                          g.PageUnit = GraphicsUnit.Pixel;
2149                                          sz曲名 = g.MeasureString( str曲名, this.ft曲リスト用フォント );                                          sz曲名 = g.MeasureString( str曲名, this.ft曲リスト用フォント );
2150                        this.stバー情報[ nバー番号 ].nタイトル名テクスチャの長さdot = (int) g.MeasureString( str曲名, this.ft曲リスト用フォント ).Width;
2151                                  }                                  }
2152                                  //-----------------                                  //-----------------
2153                                  #endregion                                  #endregion
2154    
2155                                  int n最大幅px = 0x310;                                  int n最大幅px = 200;
2156                                  int height = 0x25;                                  int height = 25;
2157                                  int width = (int) ( ( sz曲名.Width + 2 ) * 0.5f );                                  int width = (int) ( ( sz曲名.Width + 2 ) * 0.5f );
2158                                  if( width > ( CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2 ) )                                  if( width > ( CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2 ) )
2159                                          width = CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2;  // 右端断ち切れ仕方ないよね                                          width = CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2;  // 右端断ち切れ仕方ないよね
# Line 1261  namespace DTXMania Line 2170  namespace DTXMania
2170    
2171                                          CDTXMania.t安全にDisposeする( ref this.stバー情報[ nバー番号 ].txタイトル名 );                                          CDTXMania.t安全にDisposeする( ref this.stバー情報[ nバー番号 ].txタイトル名 );
2172    
2173                                          this.stバー情報[ nバー番号 ].txタイトル名 = new CTexture( CDTXMania.app.Device, bmp, CDTXMania.TextureFormat );                                          this.stバー情報[ nバー番号 ].txタイトル名 = new CTexture( CDTXMania.app.Device, bmp, CDTXMania.TextureFormat, false );
2174                                          this.stバー情報[ nバー番号 ].txタイトル名.vc拡大縮小倍率 = new Vector3( f拡大率X, 0.5f, 1f );                                          this.stバー情報[ nバー番号 ].txタイトル名.vc拡大縮小倍率 = new Vector3( f拡大率X, 0.5f, 1f );
2175                                  }                                  }
2176                          }                          }
# Line 1271  namespace DTXMania Line 2180  namespace DTXMania
2180                                  this.stバー情報[ nバー番号 ].txタイトル名 = null;                                  this.stバー情報[ nバー番号 ].txタイトル名 = null;
2181                          }                          }
2182                  }                  }
2183            private void tアーティスト名テクスチャの生成( int nバー番号, string strアーティスト名 )
2184                    {
2185                            if( nバー番号 < 0 || nバー番号 > 12 )
2186                                    return;
2187    
2188                            try
2189                            {
2190                                    SizeF szアーティスト名;
2191    
2192                                    #region [ 曲名表示に必要となるサイズを取得する。]
2193                                    //-----------------
2194                                    using( var bmpDummy = new Bitmap( 1, 1 ) )
2195                                    {
2196                                            var g = Graphics.FromImage( bmpDummy );
2197                                            g.PageUnit = GraphicsUnit.Pixel;
2198                                            szアーティスト名 = g.MeasureString( strアーティスト名, this.ft曲リスト用フォント );
2199                                    }
2200                                    //-----------------
2201                                    #endregion
2202    
2203                                    int n最大幅px = 210;
2204                                    int height = 25;
2205                                    int width = (int) ( ( szアーティスト名.Width + 2 ) * 0.5f );
2206                                    if( width > ( CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2 ) )
2207                                            width = CDTXMania.app.Device.Capabilities.MaxTextureWidth / 2;  // 右端断ち切れ仕方ないよね
2208    
2209                                    float f拡大率X = ( width <= n最大幅px ) ? 0.5f : ( ( (float) n最大幅px / (float) width ) * 0.5f );     // 長い文字列は横方向に圧縮。
2210    
2211                                    using( var bmp = new Bitmap( width * 2, height * 2, PixelFormat.Format32bppArgb ) )             // 2倍(面積4倍)のBitmapを確保。(0.5倍で表示する前提。)
2212                                    using( var g = Graphics.FromImage( bmp ) )
2213                                    {
2214                                            g.TextRenderingHint = TextRenderingHint.AntiAlias;
2215                                            float y = ( ( ( float ) bmp.Height ) / 2f ) - ( ( CDTXMania.ConfigIni.n選曲リストフォントのサイズdot * 2f ) / 2f );
2216                        g.DrawString( strアーティスト名, this.ft曲リスト用フォント, new SolidBrush( this.color文字影 ), (float)2f, (float)(y + 2f));
2217                        g.DrawString( strアーティスト名, this.ft曲リスト用フォント, new SolidBrush( Color.White ), 0f, y );
2218    
2219                                            CDTXMania.t安全にDisposeする( ref this.stバー情報[ nバー番号 ].txアーティスト名 );
2220                        this.stバー情報[ nバー番号 ].nアーティスト名テクスチャの長さdot = (int)((g.MeasureString(strアーティスト名, this.ft曲リスト用フォント).Width) * f拡大率X);
2221                                            this.stバー情報[ nバー番号 ].txアーティスト名 = new CTexture( CDTXMania.app.Device, bmp, CDTXMania.TextureFormat, false );
2222                                            this.stバー情報[ nバー番号 ].txアーティスト名.vc拡大縮小倍率 = new Vector3( f拡大率X, 0.5f, 1f );
2223                                    }
2224                            }
2225                            catch( CTextureCreateFailedException )
2226                            {
2227                                    Trace.TraceError( "曲名テクスチャの作成に失敗しました。[{0}]", strアーティスト名 );
2228                                    this.stバー情報[ nバー番号 ].txアーティスト名 = null;
2229                            }
2230                    }
2231                  private void tアイテム数の描画()                  private void tアイテム数の描画()
2232                  {                  {
2233                          string s = nCurrentPosition.ToString() + "/" + nNumOfItems.ToString();                          string s = nCurrentPosition.ToString() + "/" + nNumOfItems.ToString();
# Line 1294  namespace DTXMania Line 2251  namespace DTXMania
2251                          else                          else
2252                          {                          {
2253                                  int n = (int) s数値 - (int) '0';                                  int n = (int) s数値 - (int) '0';
2254                                  dx = ( n % 6 ) * 16;                                  dx = ( n % 6 ) * 8;
2255                                  dy = ( n / 6 ) * 16;                                  dy = ( n / 6 ) * 12;
2256                          }                          }
2257                          if ( this.txアイテム数数字 != null )                          if ( this.txアイテム数数字 != null )
2258                          {                          {

Legend:
Removed from v.121  
changed lines
  Added in v.186

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26