2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
10 internal class CActSelectステータスパネル : CActivity
\r
14 public CActSelectステータスパネル()
\r
16 base.b活性化してない = true;
\r
18 public void t選択曲が変更された()
\r
20 C曲リストノード c曲リストノード = CDTXMania.stage選曲.r現在選択中の曲;
\r
21 Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;
\r
22 if( ( c曲リストノード != null ) && ( cスコア != null ) )
\r
24 this.n現在選択中の曲の難易度 = CDTXMania.stage選曲.n現在選択中の曲の難易度;
\r
25 for( int i = 0; i < 3; i++ )
\r
27 int num2 = cスコア.譜面情報.レベル[ i ];
\r
36 this.n現在選択中の曲のレベル[ i ] = num2;
\r
37 this.n現在選択中の曲の最高ランク[ i ] = cスコア.譜面情報.最大ランク[ i ];
\r
38 this.b現在選択中の曲がフルコンボ[ i ] = cスコア.譜面情報.フルコンボ[ i ];
\r
39 this.db現在選択中の曲の最高スキル値[ i ] = cスコア.譜面情報.最大スキル[ i ];
\r
41 for( int j = 0; j < 5; j++ )
\r
43 this.str難易度ラベル[ j ] = c曲リストノード.ar難易度ラベル[ j ];
\r
45 if( this.r直前の曲 != c曲リストノード )
\r
47 this.n難易度開始文字位置 = 0;
\r
49 this.r直前の曲 = c曲リストノード;
\r
56 public override void On活性化()
\r
60 this.n現在選択中の曲の難易度 = 0;
\r
61 for( int i = 0; i < 3; i++ )
\r
63 this.n現在選択中の曲のレベル[ i ] = 0;
\r
64 this.n現在選択中の曲の最高ランク[ i ] = 99;
\r
65 this.b現在選択中の曲がフルコンボ[ i ] = false;
\r
66 this.db現在選択中の曲の最高スキル値[ i ] = 0.0;
\r
68 for( int j = 0; j < 5; j++ )
\r
70 this.str難易度ラベル[ j ] = "";
\r
72 this.n難易度開始文字位置 = 0;
\r
76 public override void On非活性化()
\r
78 this.ct登場アニメ用 = null;
\r
79 this.ct難易度スクロール用 = null;
\r
80 this.ct難易度矢印用 = null;
\r
83 public override void OnManagedリソースの作成()
\r
85 if( !base.b活性化してない )
\r
87 this.txパネル本体 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect status panel.png" ), true );
\r
88 this.txレベル数字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect level numbers.png" ), false );
\r
89 this.txスキルゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill gauge.png" ), false );
\r
90 this.txゲージ用数字他 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on gauge etc.png" ), false );
\r
91 this.tx難易度用矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect triangle arrow.png" ), false );
\r
92 base.OnManagedリソースの作成();
\r
95 public override void OnManagedリソースの解放()
\r
97 if( !base.b活性化してない )
\r
99 CDTXMania.tテクスチャの解放( ref this.txパネル本体 );
\r
100 CDTXMania.tテクスチャの解放( ref this.txレベル数字 );
\r
101 CDTXMania.tテクスチャの解放( ref this.txスキルゲージ );
\r
102 CDTXMania.tテクスチャの解放( ref this.txゲージ用数字他 );
\r
103 CDTXMania.tテクスチャの解放( ref this.tx難易度用矢印 );
\r
104 base.OnManagedリソースの解放();
\r
107 public override int On進行描画()
\r
109 if( !base.b活性化してない )
\r
111 #region [ 初めての進行描画 ]
\r
112 //-----------------
\r
113 if( base.b初めての進行描画 )
\r
115 this.ct登場アニメ用 = new CCounter( 0, 100, 5, CDTXMania.Timer );
\r
116 this.ct難易度スクロール用 = new CCounter( 0, 20, 1, CDTXMania.Timer );
\r
117 this.ct難易度矢印用 = new CCounter( 0, 5, 80, CDTXMania.Timer );
\r
118 base.b初めての進行描画 = false;
\r
120 //-----------------
\r
125 this.ct登場アニメ用.t進行();
\r
127 this.ct難易度スクロール用.t進行();
\r
128 if( this.ct難易度スクロール用.b終了値に達した )
\r
130 int num = this.n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す();
\r
139 this.ct難易度スクロール用.n現在の値 = 0;
\r
142 this.ct難易度矢印用.t進行Loop();
\r
146 #region [ パネル本体の描画 ]
\r
147 //-----------------
\r
148 if( this.txパネル本体 != null )
\r
150 if( this.ct登場アニメ用.b終了値に達した )
\r
157 double num2 = ( (double) ( 100 - this.ct登場アニメ用.n現在の値 ) ) / 100.0;
\r
158 double num3 = Math.Sin( 1.5707963267948966 * num2 );
\r
159 this.n本体X = 3 - ( (int) ( ( this.txパネル本体.sz画像サイズ.Width * num3 ) * num3 ) );
\r
162 this.txパネル本体.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );
\r
164 //-----------------
\r
167 #region [ 難易度文字列の描画 ]
\r
168 //-----------------
\r
170 #region [ chArray ← 難易度文字列を並べたもの、index ← その文字数 ]
\r
171 //-----------------
\r
172 char[] chArray = new char[ 0x100 ];
\r
173 C文字コンソール.Eフォント種別[] eフォント種別Array = new C文字コンソール.Eフォント種別[ 0x100 ];
\r
177 for( int i = 0; i < 5; i++ )
\r
179 if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル[ i ].Length > 0 ) )
\r
181 string str = this.str難易度ラベル[ i ];
\r
182 char[] chArray2 = new char[ 0x100 ];
\r
184 while( ( num6 < 0xff ) && ( num6 < this.str難易度ラベル[ i ].Length ) )
\r
186 chArray2[ num6 ] = str[ num6 ];
\r
189 chArray2[ num6 ] = '\0';
\r
194 chArray[ index ] = ' ';
\r
195 eフォント種別Array[ index ] = C文字コンソール.Eフォント種別.白;
\r
200 chArray[ index ] = ' ';
\r
201 eフォント種別Array[ index ] = C文字コンソール.Eフォント種別.白;
\r
207 while( ( chArray2[ num6 ] != '\0' ) && ( index < 0xff ) )
\r
209 chArray[ index ] = chArray2[ num6++ ];
\r
210 eフォント種別Array[ index ] = ( this.n現在選択中の曲の難易度 == i ) ? C文字コンソール.Eフォント種別.赤 : C文字コンソール.Eフォント種別.白;
\r
213 chArray[ index ] = '\0';
\r
216 //-----------------
\r
221 int x = this.n本体X + 20;
\r
222 int y = this.n本体Y + 0x10;
\r
223 index = this.n難易度開始文字位置;
\r
225 while( index < ( this.n難易度開始文字位置 + 0x24 ) )
\r
227 CDTXMania.act文字コンソール.tPrint( x, y, eフォント種別Array[ index ], chArray[ index ].ToString() );
\r
230 if( chArray[ index ] == '\0' )
\r
236 if( this.n難易度開始文字位置 > 0 )
\r
238 int num9 = ( this.n本体X + 12 ) - this.ct難易度矢印用.n現在の値;
\r
239 int num10 = ( this.n本体Y + 0x10 ) + 5;
\r
240 if( this.tx難易度用矢印 != null )
\r
242 this.tx難易度用矢印.t2D描画( CDTXMania.app.Device, num9, num10, new Rectangle( 0, 0, 8, 0x10 ) );
\r
247 int num11 = ( ( this.n本体X + 20 ) + 0x120 ) + this.ct難易度矢印用.n現在の値;
\r
248 int num12 = ( this.n本体Y + 0x10 ) + 5;
\r
249 if( this.tx難易度用矢印 != null )
\r
251 this.tx難易度用矢印.t2D描画( CDTXMania.app.Device, num11, num12, new Rectangle( 8, 0, 8, 0x10 ) );
\r
255 //-----------------
\r
258 Cスコア cスコア = CDTXMania.stage選曲.r現在選択中のスコア;
\r
260 #region [ 選択曲の Lv の描画 ]
\r
261 //-----------------
\r
262 if( ( cスコア != null ) && ( this.txレベル数字 != null ) )
\r
264 for( int i = 0; i < 3; i++ )
\r
266 int[,] nDispPosYOffset = { { 0, 21, 42 }, { 0, 42, 21} }; // #24063 2011.1.27 yyagi
\r
269 int nDispPosX = this.n本体X + 66;
\r
270 int nDispPosY = this.n本体Y + 50 + nDispPosYOffset[ (CDTXMania.ConfigIni.bIsSwappedGuitarBass? 1 : 0), i ];
\r
271 int nLevel = this.n現在選択中の曲のレベル[ i ];
\r
276 else if( nLevel > 99 )
\r
280 // Lv25刻みで、白→オレンジ→黄色→赤、と色を変える
\r
282 int nRectOffsetX = ( ( nLevel / 25 ) < 2 ) ? 64 : 0;
\r
283 int nRectOffsetY = ( ( ( nLevel / 25 ) % 2 ) == 0 ) ? 64 : 0;
\r
286 rect十の位 = this.rc数字[ 11 ]; // "--"
\r
287 rect一の位 = this.rc数字[ 11 ]; // "-- "
\r
289 else if( cスコア.譜面情報.レベルを非表示にする )
\r
291 rect十の位 = this.rc数字[ 10 ]; // "?"
\r
292 rect一の位 = this.rc数字[ 10 ]; // "?"
\r
296 rect十の位 = this.rc数字[ nLevel / 10 ];
\r
297 rect一の位 = this.rc数字[ nLevel % 10 ];
\r
299 rect十の位.X += nRectOffsetX;
\r
300 rect十の位.Y += nRectOffsetY;
\r
301 rect一の位.X += nRectOffsetX;
\r
302 rect一の位.Y += nRectOffsetY;
\r
303 this.txレベル数字.t2D描画( CDTXMania.app.Device, nDispPosX, nDispPosY, rect十の位 );
\r
304 this.txレベル数字.t2D描画( CDTXMania.app.Device, nDispPosX + 13, nDispPosY, rect一の位 );
\r
307 //-----------------
\r
309 #region [ 選択曲の 最高スキル値ゲージ+数値の描画 ]
\r
310 //-----------------
\r
311 for( int i = 0; i < 3; i++ )
\r
313 int[ , ] nDispPosYOffset = { { 0, 21, 42 }, { 0, 42, 21 } };
\r
314 if ( this.n現在選択中の曲のレベル[ i ] != 0 )
\r
316 double dMaxSkill = this.db現在選択中の曲の最高スキル値[ i ];
\r
317 if( dMaxSkill != 0.0 )
\r
319 int nDispPosX = this.n本体X + 100;
\r
320 int nDispPosY = this.n本体Y + 53 + nDispPosYOffset[ ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ? 1 : 0 ), i ];
\r
321 this.txスキルゲージ.t2D描画( CDTXMania.app.Device, nDispPosX, nDispPosY,
\r
322 new Rectangle( 0, 0, (int) ( 170.0 * dMaxSkill / 100.0 ), 10 ) );
\r
324 string sMaxSkillString = dMaxSkill.ToString( "##0.00" );
\r
325 int nMaxSkillStringWidth = 0;
\r
326 foreach( char ch in sMaxSkillString )
\r
328 for( int j = 0; j < 12; j++ )
\r
330 if( ch == this.st数字[ j ].ch )
\r
332 nMaxSkillStringWidth += this.st数字[ j ].rc.Width - 1;
\r
337 int x = this.n本体X + 182 - nMaxSkillStringWidth / 2;
\r
338 int y = this.n本体Y + 53 + nDispPosYOffset[ ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ? 1 : 0 ), i ];
\r
339 foreach( char ch in sMaxSkillString )
\r
341 for( int j = 0; j < 12; j++ )
\r
343 if( ch == this.st数字[ j ].ch )
\r
345 if( this.txゲージ用数字他 != null )
\r
347 this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, x, y, this.st数字[ j ].rc );
\r
349 x += this.st数字[ j ].rc.Width - 1;
\r
357 int x = this.n本体X + 182 - 20;
\r
358 int y = this.n本体Y + 53 + nDispPosYOffset[ ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ? 1 : 0 ), i ];
\r
359 if( this.txゲージ用数字他 != null )
\r
361 this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 22, 40, 10 ) );
\r
365 //-----------------
\r
367 #region [ 選択曲の 最高ランクの描画 ]
\r
368 //-----------------
\r
369 for( int i = 0; i < 3; i++ )
\r
371 int nMaxRank = this.n現在選択中の曲の最高ランク[ i ];
\r
372 if( nMaxRank != 99 )
\r
374 if ( nMaxRank < 0 )
\r
382 int[ , ] nDispPosYOffset = { { 0, 21, 42 }, { 0, 42, 21 } };
\r
383 int x = this.n本体X + 278;
\r
384 int y = this.n本体Y + 55 + nDispPosYOffset[ ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ? 1 : 0 ), i ];
\r
385 if( this.txゲージ用数字他 != null )
\r
387 this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, x, y, this.rcランク[ nMaxRank ] );
\r
391 //-----------------
\r
393 #region [ 選択曲の FullCombo の 描画 ]
\r
394 //-----------------
\r
395 Rectangle rectFullCombo = new Rectangle( 30, 32, 30, 16 );
\r
396 for( int i = 0; i < 3; i++ )
\r
398 if( this.b現在選択中の曲がフルコンボ[ i ] )
\r
400 int[ , ] nDispPosYOffset = { { 0, 21, 42 }, { 0, 42, 21 } };
\r
401 int x = this.n本体X + 290;
\r
402 int y = this.n本体Y + 53 + nDispPosYOffset[ (CDTXMania.ConfigIni.bIsSwappedGuitarBass ? 1 : 0), i ];
\r
403 if( this.txゲージ用数字他 != null )
\r
405 this.txゲージ用数字他.t2D描画( CDTXMania.app.Device, x, y, rectFullCombo );
\r
409 //-----------------
\r
418 #region [ private ]
\r
419 //-----------------
\r
420 [StructLayout( LayoutKind.Sequential )]
\r
421 private struct ST数字
\r
424 public Rectangle rc;
\r
425 public ST数字( char ch, Rectangle rc )
\r
432 private STDGBVALUE<bool> b現在選択中の曲がフルコンボ;
\r
433 private CCounter ct登場アニメ用;
\r
434 private CCounter ct難易度スクロール用;
\r
435 private CCounter ct難易度矢印用;
\r
436 private STDGBVALUE<double> db現在選択中の曲の最高スキル値;
\r
437 private STDGBVALUE<int> n現在選択中の曲のレベル;
\r
438 private STDGBVALUE<int> n現在選択中の曲の最高ランク;
\r
439 private int n現在選択中の曲の難易度;
\r
440 private int n難易度開始文字位置;
\r
441 private const int n難易度表示可能文字数 = 0x24;
\r
444 private readonly Rectangle[] rcランク = new Rectangle[] { new Rectangle( 0, 0x20, 10, 10 ), new Rectangle( 10, 0x20, 10, 10 ), new Rectangle( 20, 0x20, 10, 10 ), new Rectangle( 0, 0x2a, 10, 10 ), new Rectangle( 10, 0x2a, 10, 10 ), new Rectangle( 20, 0x2a, 10, 10 ), new Rectangle( 0, 0x34, 10, 10 ) };
\r
445 private readonly Rectangle[] rc数字 = new Rectangle[] { new Rectangle( 0, 0, 15, 0x13 ), new Rectangle( 15, 0, 15, 0x13 ), new Rectangle( 30, 0, 15, 0x13 ), new Rectangle( 0x2d, 0, 15, 0x13 ), new Rectangle( 0, 0x13, 15, 0x13 ), new Rectangle( 15, 0x13, 15, 0x13 ), new Rectangle( 30, 0x13, 15, 0x13 ), new Rectangle( 0x2d, 0x13, 15, 0x13 ), new Rectangle( 0, 0x26, 15, 0x13 ), new Rectangle( 15, 0x26, 15, 0x13 ), new Rectangle( 30, 0x26, 15, 0x13 ), new Rectangle( 0x2d, 0x26, 15, 0x13 ) };
\r
446 private C曲リストノード r直前の曲;
\r
447 private string[] str難易度ラベル = new string[] { "", "", "", "", "" };
\r
448 private readonly ST数字[] st数字 = new ST数字[] { new ST数字( '0', new Rectangle( 0, 0, 8, 11 ) ), new ST数字( '1', new Rectangle( 8, 0, 8, 11 ) ), new ST数字( '2', new Rectangle( 0x10, 0, 8, 11 ) ), new ST数字( '3', new Rectangle( 0x18, 0, 8, 11 ) ), new ST数字( '4', new Rectangle( 0x20, 0, 8, 11 ) ), new ST数字( '5', new Rectangle( 40, 0, 8, 11 ) ), new ST数字( '6', new Rectangle( 0, 11, 8, 11 ) ), new ST数字( '7', new Rectangle( 8, 11, 8, 11 ) ), new ST数字( '8', new Rectangle( 0x10, 11, 8, 11 ) ), new ST数字( '9', new Rectangle( 0x18, 11, 8, 11 ) ), new ST数字( '.', new Rectangle( 0x20, 11, 4, 11 ) ), new ST数字( 'p', new Rectangle( 0x24, 11, 15, 11 ) ) };
\r
449 private CTexture txゲージ用数字他;
\r
450 private CTexture txスキルゲージ;
\r
451 private CTexture txパネル本体;
\r
452 private CTexture txレベル数字;
\r
453 private CTexture tx難易度用矢印;
\r
455 private int n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す()
\r
459 for( int i = 0; i < 5; i++ )
\r
461 if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル[ i ].Length > 0 ) )
\r
463 length = this.str難易度ラベル[ i ].Length;
\r
465 if( this.n現在選択中の曲の難易度 == i )
\r
469 if( ( this.str難易度ラベル[ i ] != null ) && ( this.str難易度ラベル.Length > 0 ) )
\r
474 if( num >= ( this.n難易度開始文字位置 + 0x24 ) )
\r
478 if( ( num + length ) <= this.n難易度開始文字位置 )
\r
482 if( ( ( num + length ) - 1 ) >= ( this.n難易度開始文字位置 + 0x24 ) )
\r
486 if( num < this.n難易度開始文字位置 )
\r
492 //-----------------
\r