2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
9 using Color = System.Drawing.Color;
\r
10 using Rectangle = System.Drawing.Rectangle;
\r
14 internal class CAct演奏判定文字列共通 : CActivity
\r
16 private STLaneValue<STSTATUS> st状態 = new STLaneValue<STSTATUS>();
\r
18 private class STSTATUS
\r
20 public CCounter ct進行;
\r
21 public EJudge judge;
\r
22 public float fX方向拡大率;
\r
23 public float fY方向拡大率;
\r
28 /// #25370 2011.2.1 yyagi
\r
33 private CTexture tex;
\r
36 /// #25370 2011.2.1 yyagi
\r
39 private CActDigit actPositiveLag;
\r
40 private CActDigit actNegativeLag;
\r
42 public CAct演奏判定文字列共通()
\r
44 base.list子Activities.Add(actPositiveLag = new CActDigit(Color.White, Color.Gray, 25));
\r
45 base.list子Activities.Add(actNegativeLag = new CActDigit(Color.Red, Color.Black, 25));
\r
46 for (ELane i = ELane.DrumsLaneMin; i < ELane.Max; ++i)
\r
48 st状態[i] = new STSTATUS();
\r
50 base.b活性化してない = true;
\r
56 /// <param name="nLane">判定文字列を表示するレーン。ギターバスのときはRを渡します。</param>
\r
57 /// <param name="judge">表示する判定です。</param>
\r
58 /// <param name="lag">この判定に対する入力との差 (ms 単位) です。</param>
\r
59 public virtual void Start(ELane nLane, EJudge judge, int lag)
\r
63 (nLane >= ELane.DrumsLaneMax || CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums) &&
\r
64 (nLane != ELane.GtR || CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar) &&
\r
65 (nLane != ELane.BsR || CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass)
\r
68 this.st状態[nLane].ct進行 = new CCounter(0, 300, 1, CDTXMania.Instance.Timer);
\r
69 this.st状態[nLane].judge = judge;
\r
70 this.st状態[nLane].fX方向拡大率 = 1f;
\r
71 this.st状態[nLane].fY方向拡大率 = 1f;
\r
72 this.st状態[nLane].n相対Y座標 = 0;
\r
73 this.st状態[nLane].n透明度 = 0xff;
\r
74 this.st状態[nLane].nLag = lag;
\r
79 public override void On活性化()
\r
83 for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; i++)
\r
85 this.st状態[i].ct進行 = new CCounter();
\r
91 public override void On非活性化()
\r
95 for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; i++)
\r
97 this.st状態[i].ct進行 = null;
\r
103 public override void OnManagedリソースの作成()
\r
107 this.tex = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlay judge strings 1.png"));
\r
108 base.OnManagedリソースの作成();
\r
112 public override void OnManagedリソースの解放()
\r
116 TextureFactory.tテクスチャの解放(ref tex);
\r
117 base.OnManagedリソースの解放();
\r
122 public override int On進行描画()
\r
126 #region [ 表示拡大率の設定 ]
\r
127 for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; ++i)
\r
129 if (!st状態[i].ct進行.b停止中)
\r
131 st状態[i].ct進行.t進行();
\r
132 if (st状態[i].ct進行.b終了値に達した)
\r
134 st状態[i].ct進行.t停止();
\r
136 int num2 = st状態[i].ct進行.n現在の値;
\r
137 if ((st状態[i].judge != EJudge.Miss) && (st状態[i].judge != EJudge.Bad))
\r
141 st状態[i].fX方向拡大率 = 1f + (1f * (1f - (((float)num2) / 50f)));
\r
142 st状態[i].fY方向拡大率 = ((float)num2) / 50f;
\r
143 st状態[i].n相対Y座標 = 0;
\r
144 st状態[i].n透明度 = 0xff;
\r
146 else if (num2 < 130)
\r
148 st状態[i].fX方向拡大率 = 1f;
\r
149 st状態[i].fY方向拡大率 = 1f;
\r
150 st状態[i].n相対Y座標 = ((num2 % 6) == 0) ? (CDTXMania.Instance.Random.Next(6) - 3) : st状態[i].n相対Y座標;
\r
151 st状態[i].n透明度 = 0xff;
\r
153 else if (num2 >= 240)
\r
155 st状態[i].fX方向拡大率 = 1f;
\r
156 st状態[i].fY方向拡大率 = 1f - ((1f * (num2 - 240)) / 60f);
\r
157 st状態[i].n相対Y座標 = 0;
\r
158 st状態[i].n透明度 = 0xff;
\r
162 st状態[i].fX方向拡大率 = 1f;
\r
163 st状態[i].fY方向拡大率 = 1f;
\r
164 st状態[i].n相対Y座標 = 0;
\r
165 st状態[i].n透明度 = 0xff;
\r
168 else if (num2 < 50)
\r
170 st状態[i].fX方向拡大率 = 1f;
\r
171 st状態[i].fY方向拡大率 = ((float)num2) / 50f;
\r
172 st状態[i].n相対Y座標 = 0;
\r
173 st状態[i].n透明度 = 0xff;
\r
175 else if (num2 >= 200)
\r
177 st状態[i].fX方向拡大率 = 1f - (((float)(num2 - 200)) / 100f);
\r
178 st状態[i].fY方向拡大率 = 1f - (((float)(num2 - 200)) / 100f);
\r
179 st状態[i].n相対Y座標 = 0;
\r
180 st状態[i].n透明度 = 0xff;
\r
184 st状態[i].fX方向拡大率 = 1f;
\r
185 st状態[i].fY方向拡大率 = 1f;
\r
186 st状態[i].n相対Y座標 = 0;
\r
187 st状態[i].n透明度 = 0xff;
\r
193 for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; ++i)
\r
195 if (!st状態[i].ct進行.b停止中)
\r
199 Rectangle rc = CDTXMania.Instance.Coordinates.ImgJudgeString.ApplyCounterY((int)st状態[i].judge, 0);
\r
201 #region [ Drums 判定文字列 baseX/Y生成 ]
\r
202 if (i < ELane.DrumsLaneMax)
\r
204 if (!CDTXMania.Instance.ConfigIni.bDrums有効 ||
\r
205 !CDTXMania.Instance.DTX.bチップがある.Drums ||
\r
206 !CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums)
\r
211 baseX = CDTXMania.Instance.ConfigIni.GetLaneX(i) + CDTXMania.Instance.ConfigIni.GetLaneW(i) / 2;
\r
212 baseY = CDTXMania.Instance.ConfigIni.cdJudgeY[EPart.Drums];
\r
214 if (CDTXMania.Instance.ConfigIni.bReverse.Drums)
\r
216 baseY = SampleFramework.GameWindowSize.Height - baseY - rc.Height;
\r
219 tex.fZ軸中心回転 = (float)Math.PI / 4;
\r
222 #region [ Guitar 判定文字列描画 baseX/Y生成 ]
\r
223 else if (i == ELane.GtR) // Guitar
\r
225 if (!CDTXMania.Instance.ConfigIni.bGuitar有効 ||
\r
226 !CDTXMania.Instance.DTX.bチップがある.Guitar ||
\r
227 !CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar)
\r
232 baseX = CDTXMania.Instance.ConfigIni.cdInstX.Guitar[CDTXMania.Instance.ConfigIni.eActiveInst]
\r
233 + CDTXMania.Instance.Coordinates.Instrument.Guitar.W / 2;
\r
234 baseY = CDTXMania.Instance.ConfigIni.cdJudgeY[EPart.Guitar];
\r
236 if (CDTXMania.Instance.ConfigIni.bReverse.Guitar)
\r
238 baseY = SampleFramework.GameWindowSize.Height - baseY - rc.Height;
\r
243 #region [ Bass 判定文字列描画 baseX/Y生成 ]
\r
244 else if (i == ELane.BsR) // Bass
\r
246 if (!CDTXMania.Instance.ConfigIni.bGuitar有効 ||
\r
247 !CDTXMania.Instance.DTX.bチップがある.Bass ||
\r
248 !CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass)
\r
253 baseX = CDTXMania.Instance.ConfigIni.cdInstX.Bass[CDTXMania.Instance.ConfigIni.eActiveInst]
\r
254 + CDTXMania.Instance.Coordinates.Instrument.Bass.W / 2;
\r
255 baseY = CDTXMania.Instance.ConfigIni.cdJudgeY[EPart.Bass];
\r
257 if (CDTXMania.Instance.ConfigIni.bReverse.Bass)
\r
259 baseY = SampleFramework.GameWindowSize.Height - baseY - rc.Height;
\r
270 int x = (int)(xc - CDTXMania.Instance.Coordinates.ImgJudgeString.W / 2.0 * st状態[i].fX方向拡大率);
\r
271 int y = (int)(baseY + st状態[i].n相対Y座標 * Scale.Y - rc.Height / 2.0 * st状態[i].fY方向拡大率);
\r
274 tex.n透明度 = st状態[i].n透明度;
\r
275 tex.vc拡大縮小倍率.X = st状態[i].fX方向拡大率;
\r
276 tex.vc拡大縮小倍率.Y = st状態[i].fY方向拡大率;
\r
277 tex.t2D描画(CDTXMania.Instance.Device, x, y, rc);
\r
279 #region [ #25370 2011.6.3 yyagi ShowLag support ]
\r
280 if (CDTXMania.Instance.ConfigIni.nShowLagType == EShowLagType.On ||
\r
281 ((CDTXMania.Instance.ConfigIni.nShowLagType == EShowLagType.UGreat) && (st状態[i].judge != EJudge.Perfect)))
\r
283 // #25370 2011.2.1 yyagi
\r
284 if (st状態[i].judge != EJudge.Auto)
\r
286 CActDigit useAct = actPositiveLag;
\r
287 int digit = st状態[i].nLag;
\r
290 useAct = actNegativeLag;
\r
294 int w = useAct.Measure(digit);
\r
295 useAct.Draw(digit, xc - w / 2, y + CDTXMania.Instance.Coordinates.ImgJudgeString.H);
\r