2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
9 internal class CAct演奏Guitar判定文字列 : CAct演奏判定文字列共通
\r
13 public CAct演奏Guitar判定文字列()
\r
15 this.stレーンサイズ = new STレーンサイズ[ 12 ];
\r
16 STレーンサイズ stレーンサイズ = new STレーンサイズ();
\r
17 int[ , ] sizeXW = new int[ , ] {
\r
28 { 0x1a, 0x6f }, // 最後2つ(Gt, Bs)がドラムスと異なる
\r
31 for ( int i = 0; i < 12; i++ )
\r
33 this.stレーンサイズ[ i ] = new STレーンサイズ();
\r
34 this.stレーンサイズ[ i ].x = sizeXW[ i, 0 ];
\r
35 this.stレーンサイズ[ i ].w = sizeXW[ i, 1 ];
\r
37 base.b活性化してない = true;
\r
40 // CActivity 実装(共通クラスからの差分のみ)
\r
42 public override int On進行描画()
\r
44 throw new InvalidOperationException( "t進行描画(C演奏判定ライン座標共通 演奏判定ライン共通 ) のほうを使用してください。" );
\r
46 public override int t進行描画( C演奏判定ライン座標共通 演奏判定ライン座標 )
\r
48 if( !base.b活性化してない )
\r
50 for( int i = 0; i < 12; i++ )
\r
52 if( !base.st状態[ i ].ct進行.b停止中 )
\r
54 base.st状態[ i ].ct進行.t進行();
\r
55 if( base.st状態[ i ].ct進行.b終了値に達した )
\r
57 base.st状態[ i ].ct進行.t停止();
\r
59 int num2 = base.st状態[ i ].ct進行.n現在の値;
\r
60 if( ( base.st状態[ i ].judge != E判定.Miss ) && ( base.st状態[ i ].judge != E判定.Bad ) )
\r
64 base.st状態[ i ].fX方向拡大率 = 1f + ( 1f * ( 1f - ( ( (float) num2 ) / 50f ) ) );
\r
65 base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;
\r
66 base.st状態[ i ].n相対X座標 = 0;
\r
67 base.st状態[ i ].n相対Y座標 = 0;
\r
68 base.st状態[ i ].n透明度 = 0xff;
\r
70 else if( num2 < 130 )
\r
72 base.st状態[ i ].fX方向拡大率 = 1f;
\r
73 base.st状態[ i ].fY方向拡大率 = 1f;
\r
74 base.st状態[ i ].n相対X座標 = 0;
\r
75 base.st状態[ i ].n相対Y座標 = ( ( num2 % 6 ) == 0 ) ? ( CDTXMania.Random.Next( 6 ) - 3 ) : base.st状態[ i ].n相対Y座標;
\r
76 base.st状態[ i ].n透明度 = 0xff;
\r
78 else if( num2 >= 240 )
\r
80 base.st状態[ i ].fX方向拡大率 = 1f;
\r
81 base.st状態[ i ].fY方向拡大率 = 1f - ( ( 1f * ( num2 - 240 ) ) / 60f );
\r
82 base.st状態[ i ].n相対X座標 = 0;
\r
83 base.st状態[ i ].n相対Y座標 = 0;
\r
84 base.st状態[ i ].n透明度 = 0xff;
\r
88 base.st状態[ i ].fX方向拡大率 = 1f;
\r
89 base.st状態[ i ].fY方向拡大率 = 1f;
\r
90 base.st状態[ i ].n相対X座標 = 0;
\r
91 base.st状態[ i ].n相対Y座標 = 0;
\r
92 base.st状態[ i ].n透明度 = 0xff;
\r
95 else if( num2 < 50 )
\r
97 base.st状態[ i ].fX方向拡大率 = 1f;
\r
98 base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;
\r
99 base.st状態[ i ].n相対X座標 = 0;
\r
100 base.st状態[ i ].n相対Y座標 = 0;
\r
101 base.st状態[ i ].n透明度 = 0xff;
\r
103 else if( num2 >= 200 )
\r
105 base.st状態[ i ].fX方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );
\r
106 base.st状態[ i ].fY方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );
\r
107 base.st状態[ i ].n相対X座標 = 0;
\r
108 base.st状態[ i ].n相対Y座標 = 0;
\r
109 base.st状態[ i ].n透明度 = 0xff;
\r
113 base.st状態[ i ].fX方向拡大率 = 1f;
\r
114 base.st状態[ i ].fY方向拡大率 = 1f;
\r
115 base.st状態[ i ].n相対X座標 = 0;
\r
116 base.st状態[ i ].n相対Y座標 = 0;
\r
117 base.st状態[ i ].n透明度 = 0xff;
\r
121 for( int j = 0; j < 12; j++ )
\r
123 if( !base.st状態[ j ].ct進行.b停止中 )
\r
125 int index = base.st判定文字列[ (int) base.st状態[ j ].judge ].n画像番号;
\r
130 if( j == 11 ) // Bass
\r
132 if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )
\r
136 switch ( CDTXMania.ConfigIni.判定文字表示位置.Bass )
\r
138 case E判定文字表示位置.コンボ下:
\r
140 baseY = CDTXMania.ConfigIni.bReverse.Bass ? 0x12b : 190;
\r
142 case E判定文字表示位置.レーン上:
\r
143 baseX = this.stレーンサイズ[ j ].x;
\r
144 baseY = CDTXMania.ConfigIni.bReverse.Bass ? 0x12b : 190;
\r
146 case E判定文字表示位置.判定ライン上:
\r
147 baseX = this.stレーンサイズ[ j ].x;
\r
148 int yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, true, CDTXMania.ConfigIni.bReverse.Bass );
\r
149 baseY = CDTXMania.ConfigIni.bReverse.Bass ? yB + 30 : yB - 20;
\r
153 else if( j == 10 ) // Guitar
\r
155 if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )
\r
159 switch ( CDTXMania.ConfigIni.判定文字表示位置.Guitar )
\r
161 case E判定文字表示位置.コンボ下:
\r
163 baseY = CDTXMania.ConfigIni.bReverse.Guitar ? 0x12b : 190;
\r
165 case E判定文字表示位置.レーン上:
\r
166 baseX = this.stレーンサイズ[ j ].x;
\r
167 baseY = CDTXMania.ConfigIni.bReverse.Guitar ? 0x12b : 190;
\r
169 case E判定文字表示位置.判定ライン上:
\r
170 baseX = this.stレーンサイズ[ j ].x;
\r
171 int yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, CDTXMania.ConfigIni.bReverse.Guitar );
\r
172 baseY = CDTXMania.ConfigIni.bReverse.Guitar ? yG + 30 : yG - 20;
\r
176 int xc = ( ( baseX + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) );
\r
177 int x = xc - ( (int) ( ( ( 128f * base.st状態[ j ].fX方向拡大率 ) * 0.8 ) / 2.0 ) );
\r
178 int y = ( baseY + base.st状態[ j ].n相対Y座標 ) - ( (int) ( ( ( 43f * base.st状態[ j ].fY方向拡大率 ) * 0.8 ) / 2.0 ) );
\r
179 if( base.tx判定文字列[ index ] != null )
\r
181 base.tx判定文字列[ index ].n透明度 = base.st状態[ j ].n透明度;
\r
182 base.tx判定文字列[ index ].vc拡大縮小倍率 = new Vector3( (float) ( base.st状態[ j ].fX方向拡大率 * 0.8 ), (float) ( base.st状態[ j ].fY方向拡大率 * 0.8 ), 1f );
\r
183 base.tx判定文字列[ index ].t2D描画( CDTXMania.app.Device, x, y, base.st判定文字列[ (int) base.st状態[ j ].judge ].rc );
\r
185 #region [ #25370 2011.6.3 yyagi ShowLag support ]
\r
186 if ( base.nShowLagType == (int) EShowLagType.ON ||
\r
187 ( ( base.nShowLagType == (int) EShowLagType.GREAT_POOR ) && ( base.st状態[ j ].judge != E判定.Perfect ) ) )
\r
189 if ( base.st状態[ j ].judge != E判定.Auto && base.txlag数値 != null ) // #25370 2011.2.1 yyagi
\r
191 bool minus = false;
\r
193 string strDispLag = base.st状態[ j ].nLag.ToString();
\r
194 if ( st状態[ j ].nLag < 0 )
\r
198 x = xc - strDispLag.Length * 15 / 2;
\r
199 for ( int i = 0; i < strDispLag.Length; i++ )
\r
201 int p = ( strDispLag[ i ] == '-' ) ? 11 : (int) ( strDispLag[ i ] - '0' ); //int.Parse(strDispLag[i]);
\r
202 p += minus ? 0 : 12; // change color if it is minus value
\r
203 base.txlag数値.t2D描画( CDTXMania.app.Device, x + offsetX, y + 35, base.stLag数値[ p ].rc );
\r
221 #region [ private ]
\r
222 //-----------------
\r
223 [StructLayout( LayoutKind.Sequential )]
\r
224 private struct STレーンサイズ
\r
230 private STレーンサイズ[] stレーンサイズ;
\r
231 //-----------------
\r