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
17 STレーンサイズ stレーンサイズ = new STレーンサイズ();
\r
18 int[,] sizeXW = new int[,] {
\r
32 for ( int i = 0; i < 12; i++ )
\r
34 this.stレーンサイズ[i] = new STレーンサイズ();
\r
35 this.stレーンサイズ[i].x = sizeXW[i, 0];
\r
36 this.stレーンサイズ[i].w = sizeXW[i, 1];
\r
38 base.b活性化してない = true;
\r
42 // CActivity 実装(共通クラスからの差分のみ)
\r
43 public override int On進行描画()
\r
45 throw new InvalidOperationException( "t進行描画(C演奏判定ライン座標共通 演奏判定ライン共通 ) のほうを使用してください。" );
\r
47 public override int t進行描画( C演奏判定ライン座標共通 演奏判定ライン座標 )
\r
49 if( !base.b活性化してない )
\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.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
122 for( int j = 0; j < 12; j++ )
\r
124 if( !base.st状態[ j ].ct進行.b停止中 )
\r
126 int index = base.st判定文字列[ (int) base.st状態[ j ].judge ].n画像番号;
\r
129 if( j < 8 ) // Drums
\r
131 if ( CDTXMania.ConfigIni.判定文字表示位置.Drums == E判定文字表示位置.表示OFF )
\r
135 baseX = this.stレーンサイズ[ j ].x;
\r
136 baseY = CDTXMania.ConfigIni.bReverse.Drums ?
\r
137 ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 240 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 50 ) :
\r
138 ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 180 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 450 );
\r
140 else if( j == 11 ) // Bass
\r
142 if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )
\r
147 switch ( CDTXMania.ConfigIni.判定文字表示位置.Bass )
\r
149 case E判定文字表示位置.コンボ下:
\r
150 baseX = this.stレーンサイズ[ j ].x;
\r
151 baseY = ( CDTXMania.ConfigIni.bReverse.Bass ? 100 : 300 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
153 case E判定文字表示位置.レーン上:
\r
154 baseX = this.stレーンサイズ[ j ].x;
\r
155 //baseY = ( CDTXMania.ConfigIni.bReverse.Bass ? 240 : 180 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
156 yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.ConfigIni.bReverse.Bass );
\r
157 baseY = ( CDTXMania.ConfigIni.bReverse.Bass ? yB - 134 : yB + 85 ) +( this.n文字の縦表示位置[ j ] * 0x20 );
\r
159 case E判定文字表示位置.判定ライン上:
\r
160 baseX = this.stレーンサイズ[ j ].x;
\r
161 yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.ConfigIni.bReverse.Bass );
\r
162 baseY = CDTXMania.ConfigIni.bReverse.Bass ? yB + 30 : yB - 24;
\r
166 else if( j == 10 ) // Guitar
\r
168 if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )
\r
173 switch ( CDTXMania.ConfigIni.判定文字表示位置.Guitar )
\r
175 case E判定文字表示位置.コンボ下:
\r
176 baseX = ( CDTXMania.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x : 0x198;
\r
177 baseY = ( CDTXMania.ConfigIni.bReverse.Guitar ? 100 : 300 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
179 case E判定文字表示位置.レーン上:
\r
180 baseX = ( CDTXMania.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x : 0x198;
\r
181 //baseY = ( CDTXMania.ConfigIni.bReverse.Guitar ? 240 : 180 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
182 yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.ConfigIni.bReverse.Guitar );
\r
183 baseY = ( CDTXMania.ConfigIni.bReverse.Guitar ? yG - 134 : yG + 85 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );
\r
185 case E判定文字表示位置.判定ライン上:
\r
186 baseX = ( CDTXMania.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x : 0x198;
\r
187 yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.ConfigIni.bReverse.Guitar );
\r
188 baseY = CDTXMania.ConfigIni.bReverse.Guitar ? yG + 30 : yG - 24;
\r
192 int xc = ( ( baseX + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) ); // Xcenter座標
\r
193 int x = xc - ( (int) ( ( 64f * base.st状態[ j ].fX方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) );
\r
194 int y = ( baseY + base.st状態[ j ].n相対Y座標 ) - ( (int) ( ( ( 43f * base.st状態[ j ].fY方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) / 2.0 ) );
\r
195 if( base.tx判定文字列[ index ] != null )
\r
197 base.tx判定文字列[ index ].n透明度 = base.st状態[ j ].n透明度;
\r
198 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
199 base.tx判定文字列[ index ].t2D描画( CDTXMania.app.Device, x, y, base.st判定文字列[ (int) base.st状態[ j ].judge ].rc );
\r
201 #region [ #25370 2011.6.3 yyagi ShowLag support ]
\r
202 if ( base.nShowLagType == (int) EShowLagType.ON ||
\r
203 ( ( base.nShowLagType == (int) EShowLagType.GREAT_POOR ) && ( base.st状態[ j ].judge != E判定.Perfect ) ) )
\r
205 if ( base.st状態[ j ].judge != E判定.Auto && base.txlag数値 != null ) // #25370 2011.2.1 yyagi
\r
207 bool minus = false;
\r
209 string strDispLag = base.st状態[ j ].nLag.ToString();
\r
210 if ( st状態[ j ].nLag < 0 )
\r
214 x = xc - strDispLag.Length * 15 / 2;
\r
215 for ( int i = 0; i < strDispLag.Length; i++ )
\r
217 int p = ( strDispLag[ i ] == '-' ) ? 11 : (int) ( strDispLag[ i ] - '0' ); //int.Parse(strDispLag[i]);
\r
218 p += minus ? 0 : 12; // change color if it is minus value
\r
219 base.txlag数値.t2D描画( CDTXMania.app.Device, x + offsetX, y + 34, base.stLag数値[ p ].rc );
\r
236 #region [ private ]
\r
237 //-----------------
\r
238 [StructLayout( LayoutKind.Sequential )]
\r
239 private struct STレーンサイズ
\r
245 private readonly int[] n文字の縦表示位置 = new int[] { 1, 2, 0, 1, 3, 2, 1, 0, 0, 0, 1, 1 };
\r
246 private STレーンサイズ[] stレーンサイズ;
\r
247 //-----------------
\r