+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Runtime.InteropServices;\r
-using System.Drawing;\r
-using FDK;\r
-using SharpDX;\r
-\r
-using Color = System.Drawing.Color;\r
-using Rectangle = System.Drawing.Rectangle;\r
-\r
-namespace DTXMania\r
-{\r
- internal class CAct演奏判定文字列共通 : CActivity\r
- {\r
- private STLaneValue<STSTATUS> st状態 = new STLaneValue<STSTATUS>();\r
-\r
- private class STSTATUS\r
- {\r
- public CCounter ct進行;\r
- public EJudge judge;\r
- public float fX方向拡大率;\r
- public float fY方向拡大率;\r
- public int n相対Y座標;\r
- public int n透明度;\r
-\r
- /// <summary>\r
- /// #25370 2011.2.1 yyagi\r
- /// </summary>\r
- public int nLag;\r
- }\r
-\r
- private CTexture tex;\r
-\r
- /// <summary>\r
- /// #25370 2011.2.1 yyagi\r
- /// </summary>\r
- /// \r
- private CActDigit actPositiveLag;\r
- private CActDigit actNegativeLag;\r
-\r
- public CAct演奏判定文字列共通()\r
- {\r
- base.list子Activities.Add(actPositiveLag = new CActDigit(Color.White, Color.Gray, 25));\r
- base.list子Activities.Add(actNegativeLag = new CActDigit(Color.Red, Color.Black, 25));\r
- for (ELane i = ELane.DrumsLaneMin; i < ELane.Max; ++i)\r
- {\r
- st状態[i] = new STSTATUS();\r
- }\r
- base.b活性化してない = true;\r
- }\r
-\r
- /// <summary>\r
- /// アクティビティ開始メソッド。\r
- /// </summary>\r
- /// <param name="nLane">判定文字列を表示するレーン。ギターバスのときはRを渡します。</param>\r
- /// <param name="judge">表示する判定です。</param>\r
- /// <param name="lag">この判定に対する入力との差 (ms 単位) です。</param>\r
- public virtual void Start(ELane nLane, EJudge judge, int lag)\r
- {\r
- if\r
- (\r
- (nLane >= ELane.DrumsLaneMax || CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums) &&\r
- (nLane != ELane.GtR || CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar) &&\r
- (nLane != ELane.BsR || CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass)\r
- )\r
- {\r
- this.st状態[nLane].ct進行 = new CCounter(0, 300, 1, CDTXMania.Instance.Timer);\r
- this.st状態[nLane].judge = judge;\r
- this.st状態[nLane].fX方向拡大率 = 1f;\r
- this.st状態[nLane].fY方向拡大率 = 1f;\r
- this.st状態[nLane].n相対Y座標 = 0;\r
- this.st状態[nLane].n透明度 = 0xff;\r
- this.st状態[nLane].nLag = lag;\r
- }\r
- }\r
-\r
-\r
- public override void On活性化()\r
- {\r
- if (b活性化してない)\r
- {\r
- for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; i++)\r
- {\r
- this.st状態[i].ct進行 = new CCounter();\r
- }\r
- base.On活性化();\r
- }\r
- }\r
-\r
- public override void On非活性化()\r
- {\r
- if (b活性化してる)\r
- {\r
- for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; i++)\r
- {\r
- this.st状態[i].ct進行 = null;\r
- }\r
- base.On非活性化();\r
- }\r
- }\r
-\r
- public override void OnManagedリソースの作成()\r
- {\r
- if (b活性化してる)\r
- {\r
- this.tex = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlay judge strings 1.png"));\r
- base.OnManagedリソースの作成();\r
- }\r
- }\r
-\r
- public override void OnManagedリソースの解放()\r
- {\r
- if (b活性化してる)\r
- {\r
- TextureFactory.tテクスチャの解放(ref tex);\r
- base.OnManagedリソースの解放();\r
- }\r
- }\r
-\r
-\r
- public override int On進行描画()\r
- {\r
- if (b活性化してる)\r
- {\r
- #region [ 表示拡大率の設定 ]\r
- for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; ++i)\r
- {\r
- if (!st状態[i].ct進行.b停止中)\r
- {\r
- st状態[i].ct進行.t進行();\r
- if (st状態[i].ct進行.b終了値に達した)\r
- {\r
- st状態[i].ct進行.t停止();\r
- }\r
- int num2 = st状態[i].ct進行.n現在の値;\r
- if ((st状態[i].judge != EJudge.Miss) && (st状態[i].judge != EJudge.Bad))\r
- {\r
- if (num2 < 50)\r
- {\r
- st状態[i].fX方向拡大率 = 1f + (1f * (1f - (((float)num2) / 50f)));\r
- st状態[i].fY方向拡大率 = ((float)num2) / 50f;\r
- st状態[i].n相対Y座標 = 0;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- else if (num2 < 130)\r
- {\r
- st状態[i].fX方向拡大率 = 1f;\r
- st状態[i].fY方向拡大率 = 1f;\r
- st状態[i].n相対Y座標 = ((num2 % 6) == 0) ? (CDTXMania.Instance.Random.Next(6) - 3) : st状態[i].n相対Y座標;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- else if (num2 >= 240)\r
- {\r
- st状態[i].fX方向拡大率 = 1f;\r
- st状態[i].fY方向拡大率 = 1f - ((1f * (num2 - 240)) / 60f);\r
- st状態[i].n相対Y座標 = 0;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- else\r
- {\r
- st状態[i].fX方向拡大率 = 1f;\r
- st状態[i].fY方向拡大率 = 1f;\r
- st状態[i].n相対Y座標 = 0;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- }\r
- else if (num2 < 50)\r
- {\r
- st状態[i].fX方向拡大率 = 1f;\r
- st状態[i].fY方向拡大率 = ((float)num2) / 50f;\r
- st状態[i].n相対Y座標 = 0;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- else if (num2 >= 200)\r
- {\r
- st状態[i].fX方向拡大率 = 1f - (((float)(num2 - 200)) / 100f);\r
- st状態[i].fY方向拡大率 = 1f - (((float)(num2 - 200)) / 100f);\r
- st状態[i].n相対Y座標 = 0;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- else\r
- {\r
- st状態[i].fX方向拡大率 = 1f;\r
- st状態[i].fY方向拡大率 = 1f;\r
- st状態[i].n相対Y座標 = 0;\r
- st状態[i].n透明度 = 0xff;\r
- }\r
- }\r
- }\r
- #endregion\r
-\r
- for (ELane i = ELane.DrumsLaneMin; i < ELane.BassLaneMax; ++i)\r
- {\r
- if (!st状態[i].ct進行.b停止中)\r
- {\r
- int baseX = 0;\r
- int baseY = 0;\r
- Rectangle rc = CDTXMania.Instance.Coordinates.ImgJudgeString.ApplyCounterY((int)st状態[i].judge, 0);\r
-\r
- #region [ Drums 判定文字列 baseX/Y生成 ]\r
- if (i < ELane.DrumsLaneMax)\r
- {\r
- if (!CDTXMania.Instance.ConfigIni.bDrums有効 ||\r
- !CDTXMania.Instance.DTX.bチップがある.Drums ||\r
- !CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums)\r
- {\r
- continue;\r
- }\r
-\r
- baseX = CDTXMania.Instance.ConfigIni.GetLaneX(i) + CDTXMania.Instance.ConfigIni.GetLaneW(i) / 2;\r
- baseY = CDTXMania.Instance.ConfigIni.cdJudgeY[EPart.Drums];\r
-\r
- if (CDTXMania.Instance.ConfigIni.bReverse.Drums)\r
- {\r
- baseY = SampleFramework.GameWindowSize.Height - baseY - rc.Height;\r
- }\r
-\r
- tex.fZ軸中心回転 = (float)Math.PI / 4;\r
- }\r
- #endregion\r
- #region [ Guitar 判定文字列描画 baseX/Y生成 ]\r
- else if (i == ELane.GtR) // Guitar\r
- {\r
- if (!CDTXMania.Instance.ConfigIni.bGuitar有効 ||\r
- !CDTXMania.Instance.DTX.bチップがある.Guitar ||\r
- !CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar)\r
- {\r
- continue;\r
- }\r
-\r
- baseX = CDTXMania.Instance.ConfigIni.cdInstX.Guitar[CDTXMania.Instance.ConfigIni.eActiveInst]\r
- + CDTXMania.Instance.Coordinates.Instrument.Guitar.W / 2;\r
- baseY = CDTXMania.Instance.ConfigIni.cdJudgeY[EPart.Guitar];\r
-\r
- if (CDTXMania.Instance.ConfigIni.bReverse.Guitar)\r
- {\r
- baseY = SampleFramework.GameWindowSize.Height - baseY - rc.Height;\r
- }\r
- tex.fZ軸中心回転 = 0;\r
- }\r
- #endregion\r
- #region [ Bass 判定文字列描画 baseX/Y生成 ]\r
- else if (i == ELane.BsR) // Bass\r
- {\r
- if (!CDTXMania.Instance.ConfigIni.bGuitar有効 ||\r
- !CDTXMania.Instance.DTX.bチップがある.Bass ||\r
- !CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass)\r
- {\r
- continue;\r
- }\r
-\r
- baseX = CDTXMania.Instance.ConfigIni.cdInstX.Bass[CDTXMania.Instance.ConfigIni.eActiveInst]\r
- + CDTXMania.Instance.Coordinates.Instrument.Bass.W / 2;\r
- baseY = CDTXMania.Instance.ConfigIni.cdJudgeY[EPart.Bass];\r
-\r
- if (CDTXMania.Instance.ConfigIni.bReverse.Bass)\r
- {\r
- baseY = SampleFramework.GameWindowSize.Height - baseY - rc.Height;\r
- }\r
- tex.fZ軸中心回転 = 0;\r
- }\r
- else\r
- {\r
- continue;\r
- }\r
- #endregion\r
-\r
- int xc = baseX;\r
- int x = (int)(xc - CDTXMania.Instance.Coordinates.ImgJudgeString.W / 2.0 * st状態[i].fX方向拡大率);\r
- int y = (int)(baseY + st状態[i].n相対Y座標 * Scale.Y - rc.Height / 2.0 * st状態[i].fY方向拡大率);\r
- if (tex != null)\r
- {\r
- tex.n透明度 = st状態[i].n透明度;\r
- tex.vc拡大縮小倍率.X = st状態[i].fX方向拡大率;\r
- tex.vc拡大縮小倍率.Y = st状態[i].fY方向拡大率;\r
- tex.t2D描画(CDTXMania.Instance.Device, x, y, rc);\r
-\r
- #region [ #25370 2011.6.3 yyagi ShowLag support ]\r
- if (CDTXMania.Instance.ConfigIni.nShowLagType == EShowLagType.On ||\r
- ((CDTXMania.Instance.ConfigIni.nShowLagType == EShowLagType.UGreat) && (st状態[i].judge != EJudge.Perfect)))\r
- {\r
- // #25370 2011.2.1 yyagi\r
- if (st状態[i].judge != EJudge.Auto)\r
- {\r
- CActDigit useAct = actPositiveLag;\r
- int digit = st状態[i].nLag;\r
- if (digit < 0)\r
- {\r
- useAct = actNegativeLag;\r
- digit = -digit;\r
- }\r
-\r
- int w = useAct.Measure(digit);\r
- useAct.Draw(digit, xc - w / 2, y + CDTXMania.Instance.Coordinates.ImgJudgeString.H);\r
- }\r
- }\r
- #endregion\r
- }\r
-\r
- }\r
- }\r
- }\r
- return 0;\r
- }\r
- }\r
-}\r