2 using System.Collections.Generic;
\r
3 using System.Diagnostics;
\r
5 using System.Runtime.InteropServices;
\r
10 internal class CAct演奏Drums判定文字列 : CAct演奏判定文字列共通
\r
14 public CAct演奏Drums判定文字列()
\r
16 this.stレーンサイズ = new STレーンサイズ[ 12 ]
\r
18 new STレーンサイズ( 36 - 36, 36 ),
\r
19 new STレーンサイズ( 77 - 36, 30 ),
\r
20 new STレーンサイズ( 111 - 36, 30 ),
\r
21 new STレーンサイズ( 146 - 36, 42 ),
\r
22 new STレーンサイズ( 192 - 36, 30 ),
\r
23 new STレーンサイズ( 227 - 36, 30 ),
\r
24 new STレーンサイズ( 261 - 36, 30 ),
\r
25 new STレーンサイズ( 295 - 36, 36 ),
\r
26 new STレーンサイズ( 0 - 36, 0 ),
\r
27 new STレーンサイズ( 0 - 36, 0 ),
\r
28 new STレーンサイズ( 507 - 36, 80 ),
\r
29 new STレーンサイズ( 398 - 36, 80 )
\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
41 // 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 #region [ 表示拡大率の設定 ]
\r
51 for ( int i = 0; i < 12; i++ )
\r
53 if( !base.st状態[ i ].ct進行.b停止中 )
\r
55 base.st状態[ i ].ct進行.t進行();
\r
56 if( base.st状態[ i ].ct進行.b終了値に達した )
\r
58 base.st状態[ i ].ct進行.t停止();
\r
60 int num2 = base.st状態[ i ].ct進行.n現在の値;
\r
61 if( ( base.st状態[ i ].judge != E判定.Miss ) && ( base.st状態[ i ].judge != E判定.Bad ) )
\r
65 base.st状態[ i ].fX方向拡大率 = 1f + ( 1f * ( 1f - ( ( (float) num2 ) / 50f ) ) );
\r
66 base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;
\r
67 base.st状態[ i ].n相対X座標 = 0;
\r
68 base.st状態[ i ].n相対Y座標 = 0;
\r
69 base.st状態[ i ].n透明度 = 0xff;
\r
71 else if( num2 < 130 )
\r
73 base.st状態[ i ].fX方向拡大率 = 1f;
\r
74 base.st状態[ i ].fY方向拡大率 = 1f;
\r
75 base.st状態[ i ].n相対X座標 = 0;
\r
76 base.st状態[ i ].n相対Y座標 = ( ( num2 % 6 ) == 0 ) ? ( CDTXMania.Instance.Random.Next( 6 ) - 3 ) : base.st状態[ i ].n相対Y座標;
\r
77 base.st状態[ i ].n透明度 = 0xff;
\r
79 else if( num2 >= 240 )
\r
81 base.st状態[ i ].fX方向拡大率 = 1f;
\r
82 base.st状態[ i ].fY方向拡大率 = 1f - ( ( 1f * ( num2 - 240 ) ) / 60f );
\r
83 base.st状態[ i ].n相対X座標 = 0;
\r
84 base.st状態[ i ].n相対Y座標 = 0;
\r
85 base.st状態[ i ].n透明度 = 0xff;
\r
89 base.st状態[ i ].fX方向拡大率 = 1f;
\r
90 base.st状態[ i ].fY方向拡大率 = 1f;
\r
91 base.st状態[ i ].n相対X座標 = 0;
\r
92 base.st状態[ i ].n相対Y座標 = 0;
\r
93 base.st状態[ i ].n透明度 = 0xff;
\r
96 else if( num2 < 50 )
\r
98 base.st状態[ i ].fX方向拡大率 = 1f;
\r
99 base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;
\r
100 base.st状態[ i ].n相対X座標 = 0;
\r
101 base.st状態[ i ].n相対Y座標 = 0;
\r
102 base.st状態[ i ].n透明度 = 0xff;
\r
104 else if( num2 >= 200 )
\r
106 base.st状態[ i ].fX方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );
\r
107 base.st状態[ i ].fY方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );
\r
108 base.st状態[ i ].n相対X座標 = 0;
\r
109 base.st状態[ i ].n相対Y座標 = 0;
\r
110 base.st状態[ i ].n透明度 = 0xff;
\r
114 base.st状態[ i ].fX方向拡大率 = 1f;
\r
115 base.st状態[ i ].fY方向拡大率 = 1f;
\r
116 base.st状態[ i ].n相対X座標 = 0;
\r
117 base.st状態[ i ].n相対Y座標 = 0;
\r
118 base.st状態[ i ].n透明度 = 0xff;
\r
123 for( int j = 0; j < 12; j++ )
\r
125 if( !base.st状態[ j ].ct進行.b停止中 )
\r
127 int index = base.st判定文字列[ (int) base.st状態[ j ].judge ].n画像番号;
\r
130 #region [ Drums 判定文字列 baseX/Y生成 ]
\r
131 if ( j < 8 ) // Drums
\r
133 if ( CDTXMania.Instance.ConfigIni.判定文字表示位置.Drums == E判定文字表示位置.表示OFF )
\r
137 baseX = this.stレーンサイズ[ j ].x;
\r
138 baseX = (int) ( baseX * ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ? 1.0 : 0.75 ) );
\r
139 baseX += ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left? 36 : 205 );
\r
140 baseY = CDTXMania.Instance.ConfigIni.bReverse.Drums ?
\r
141 ( ( ( (E判定文字表示位置) CDTXMania.Instance.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 240 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 50 ) :
\r
142 ( ( ( (E判定文字表示位置) CDTXMania.Instance.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 180 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 450 );
\r
143 baseY = (int) ( baseY * Scale.Y );
\r
146 #region [ Bass 判定文字列描画 baseX/Y生成 ]
\r
147 else if( j == 11 ) // Bass
\r
149 if( ( (E判定文字表示位置) CDTXMania.Instance.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )
\r
154 switch ( CDTXMania.Instance.ConfigIni.判定文字表示位置.Bass )
\r
156 case E判定文字表示位置.コンボ下:
\r
157 baseX = this.stレーンサイズ[ j ].x + 36;
\r
158 if ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)
\r
162 yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.Instance.ConfigIni.bReverse.Bass );
\r
164 CDTXMania.Instance.ConfigIni.bReverse.Bass ?
\r
165 yB + (int) ( ( -124 + 0 ) * Scale.Y ) :
\r
166 yB + (int) ( ( +184 + 0 ) * Scale.Y )
\r
168 + (int) ( this.n文字の縦表示位置[ j ] * 0x20 * Scale.Y );
\r
170 case E判定文字表示位置.レーン上:
\r
171 baseX = this.stレーンサイズ[ j ].x + 36;
\r
172 if ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)
\r
176 //baseY = ( CDTXMania.Instance.ConfigIni.bReverse.Bass ? 240 : 180 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
177 yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.Instance.ConfigIni.bReverse.Bass );
\r
179 CDTXMania.Instance.ConfigIni.bReverse.Bass ?
\r
180 yB - (int) ( 134 * Scale.Y ) :
\r
181 yB + (int) ( 75 * Scale.Y )
\r
183 + (int) ( this.n文字の縦表示位置[ j ] * 0x20 * Scale.Y );
\r
185 case E判定文字表示位置.判定ライン上:
\r
186 baseX = this.stレーンサイズ[ j ].x + 36;
\r
187 if ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)
\r
191 yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.Instance.ConfigIni.bReverse.Bass );
\r
192 baseY = CDTXMania.Instance.ConfigIni.bReverse.Bass ?
\r
193 yB + (int) ( 20 * Scale.Y ) :
\r
194 yB - (int) ( 24 * Scale.Y );
\r
199 #region [ Guitar 判定文字列描画 baseX/Y生成 ]
\r
200 else if( j == 10 ) // Guitar
\r
202 if( ( (E判定文字表示位置) CDTXMania.Instance.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )
\r
207 switch ( CDTXMania.Instance.ConfigIni.判定文字表示位置.Guitar )
\r
209 case E判定文字表示位置.コンボ下:
\r
210 baseX = ( CDTXMania.Instance.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x + 36 : 0x198;
\r
211 if ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)
\r
213 baseX = this.stレーンサイズ[ j ].x + 36; // 判定表示がドラムレーンにかぶらないよう、ベース有りの時と同じ表示方法にする
\r
216 yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.Instance.ConfigIni.bReverse.Guitar );
\r
218 CDTXMania.Instance.ConfigIni.bReverse.Guitar ?
\r
219 yG + (int) ( ( -124 + 0 ) * Scale.Y ) :
\r
220 yG + (int) ( ( +184 + 0 ) * Scale.Y )
\r
222 + (int) ( this.n文字の縦表示位置[ j ] * 0x20 * Scale.Y );
\r
224 case E判定文字表示位置.レーン上:
\r
225 baseX = ( CDTXMania.Instance.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x + 36 : 0x198;
\r
226 if ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)
\r
228 baseX = this.stレーンサイズ[ j ].x + 36; // 判定表示がドラムレーンにかぶらないよう、ベース有りの時と同じ表示方法にする
\r
231 //baseY = ( CDTXMania.Instance.ConfigIni.bReverse.Guitar ? 240 : 180 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
232 yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.Instance.ConfigIni.bReverse.Guitar );
\r
234 CDTXMania.Instance.ConfigIni.bReverse.Guitar ?
\r
235 yG - (int) ( 134 * Scale.Y ):
\r
236 yG + (int) ( 75 * Scale.Y )
\r
238 + (int) ( this.n文字の縦表示位置[ j ] * 0x20 * Scale.Y );
\r
240 case E判定文字表示位置.判定ライン上:
\r
241 baseX = ( CDTXMania.Instance.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x + 36 : 0x198;
\r
242 if ( CDTXMania.Instance.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)
\r
244 baseX = this.stレーンサイズ[ j ].x + 36; // 判定表示がドラムレーンにかぶらないよう、ベース有りの時と同じ表示方法にする
\r
247 yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.Instance.ConfigIni.bReverse.Guitar );
\r
248 baseY = CDTXMania.Instance.ConfigIni.bReverse.Guitar ?
\r
249 yG + (int) ( 20 * Scale.Y ) :
\r
250 yG - (int) ( 24 * Scale.Y );
\r
255 int xc = (int) ( ( ( ( baseX + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) ) ) * Scale.X ); // Xcenter座標
\r
256 int x = xc - ( (int) ( ( ( 256f / 2 ) * base.st状態[ j ].fX方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) );
\r
257 int y = (int) ( baseY + ( base.st状態[ j ].n相対Y座標 ) * Scale.Y ) - ( (int) ( ( ( ( 256f / 3 ) * base.st状態[ j ].fY方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) / 2.0 ) );
\r
259 //int xc = ( ( baseX + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) ); // Xcenter座標
\r
260 //int x = xc - ( (int) ( ( 64f * base.st状態[ j ].fX方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) );
\r
261 //int y = ( baseY + base.st状態[ j ].n相対Y座標 ) - ( (int) ( ( ( 43f * base.st状態[ j ].fY方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) / 2.0 ) );
\r
262 if( base.tx判定文字列[ index ] != null )
\r
264 base.tx判定文字列[ index ].n透明度 = base.st状態[ j ].n透明度;
\r
265 base.tx判定文字列[ index ].vc拡大縮小倍率 = new Vector3( (float) ( base.st状態[ j ].fX方向拡大率 * ( ( j < 10 ) ? 1.0 : 0.7 ) ), (float) ( base.st状態[ j ].fY方向拡大率 * ( ( j < 10 ) ? 1.0 : 0.7 ) ), 1f );
\r
266 base.tx判定文字列[ index ].t2D描画(
\r
267 CDTXMania.Instance.Device,
\r
270 base.st判定文字列[ (int) base.st状態[ j ].judge ].rc
\r
273 #region [ #25370 2011.6.3 yyagi ShowLag support ]
\r
274 if ( base.nShowLagType == (int) EShowLagType.ON ||
\r
275 ( ( base.nShowLagType == (int) EShowLagType.GREAT_POOR ) && ( base.st状態[ j ].judge != E判定.Perfect ) ) )
\r
277 if ( base.st状態[ j ].judge != E判定.Auto && base.txlag数値 != null ) // #25370 2011.2.1 yyagi
\r
279 bool minus = false;
\r
281 string strDispLag = base.st状態[ j ].nLag.ToString();
\r
282 if ( st状態[ j ].nLag < 0 )
\r
286 //x = xc - strDispLag.Length * 15 / 2;
\r
287 x = xc - (int) ( ( strDispLag.Length * 15 / 2 ) * Scale.X );
\r
288 for ( int i = 0; i < strDispLag.Length; i++ )
\r
290 int p = ( strDispLag[ i ] == '-' ) ? 11 : (int) ( strDispLag[ i ] - '0' ); //int.Parse(strDispLag[i]);
\r
291 p += minus ? 0 : 12; // change color if it is minus value
\r
292 //base.txlag数値.t2D描画( CDTXMania.Instance.app.Device, x + offsetX, y + 34, base.stLag数値[ p ].rc );
\r
293 base.txlag数値.t2D描画(
\r
294 CDTXMania.Instance.Device,
\r
295 x + offsetX * Scale.X,
\r
297 base.stLag数値[ p ].rc
\r
299 offsetX += 12; // 15 -> 12
\r
315 #region [ private ]
\r
316 //-----------------
\r
317 [StructLayout( LayoutKind.Sequential )]
\r
318 private struct STレーンサイズ
\r
322 public STレーンサイズ( int x_, int w_ )
\r
330 private readonly int[] n文字の縦表示位置 = new int[] { 1, 2, 0, 1, 3, 2, 1, 0, 0, 0, 1, 1 };
\r
331 private STレーンサイズ[] stレーンサイズ;
\r
332 //-----------------
\r