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
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
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, 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, 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, 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, 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, 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, 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
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