+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Runtime.InteropServices;\r
-using System.Drawing;\r
-using System.IO;\r
-using SharpDX;\r
-using FDK;\r
-\r
-using Rectangle = System.Drawing.Rectangle;\r
-\r
-namespace DTXMania\r
-{\r
- internal class CAct演奏グラフ : CActivity\r
- {\r
- // #24074 2011.01.23 ikanick グラフの描画\r
- // 実装内容\r
- // ・左を現在、右を目標\r
- // ・基準線(60,70,80,90,100%)を超えると線が黄色くなる(元は白)\r
- // ・目標を超えると現在が光る\r
- // ・オート時には描画しない\r
- // 要望・実装予定\r
- // ・グラフを波打たせるなどの視覚の向上→実装済\r
- // 修正等\r
- // ・画像がないと落ちる→修正済\r
-\r
- public STDGBSValue<double> dbTarget;\r
- private STDGBSValue<double> dbTargetDisp;\r
- public STDGBSValue<double> dbCurrent;\r
- private STDGBSValue<double> dbCurrentDisp;\r
-\r
- private CTexture txグラフ;\r
-\r
- private STDGBSValue<CCounter> counterYposInImg;\r
- private readonly int slices = 10;\r
-\r
- public CAct演奏グラフ()\r
- {\r
- base.b活性化してない = true;\r
- }\r
-\r
- public override void On活性化()\r
- {\r
- if (base.b活性化してない)\r
- {\r
- this.dbTarget = new STDGBSValue<double>();\r
- dbTarget.Drums = dbTarget.Guitar = dbTarget.Bass = 80.0;\r
- this.dbCurrent = new STDGBSValue<double>();\r
- dbCurrent.Drums = dbCurrent.Guitar = dbCurrent.Bass = 0.0;\r
- counterYposInImg = new STDGBSValue<CCounter>();\r
- base.On活性化();\r
- }\r
- }\r
-\r
- public override void OnManagedリソースの作成()\r
- {\r
- if (base.b活性化してる)\r
- {\r
- string pathグラフ = CSkin.Path(@"Graphics\ScreenPlay graph.png");\r
- if (File.Exists(pathグラフ))\r
- {\r
- this.txグラフ = TextureFactory.tテクスチャの生成(pathグラフ);\r
- }\r
- base.OnManagedリソースの作成();\r
- }\r
- }\r
-\r
- public override void OnManagedリソースの解放()\r
- {\r
- if (base.b活性化してる)\r
- {\r
- TextureFactory.tテクスチャの解放(ref this.txグラフ);\r
- base.OnManagedリソースの解放();\r
- }\r
- }\r
-\r
- public override int On進行描画()\r
- {\r
- if (b活性化してる && !CDTXMania.Instance.ConfigIni.bStoicMode)\r
- {\r
-\r
- for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
- {\r
- if (CDTXMania.Instance.ConfigIni.b楽器有効(inst) &&\r
- CDTXMania.Instance.ConfigIni.bGraph[inst] &&\r
- CDTXMania.Instance.DTX.bチップがある[inst])\r
- {\r
-\r
- if (base.b初めての進行描画)\r
- {\r
- base.b初めての進行描画 = false;\r
- counterYposInImg.Drums = new CCounter(0, 35, 16, CDTXMania.Instance.Timer);\r
- counterYposInImg.Guitar = new CCounter(0, 35, 16, CDTXMania.Instance.Timer);\r
- counterYposInImg.Bass = new CCounter(0, 35, 16, CDTXMania.Instance.Timer);\r
- }\r
-\r
- counterYposInImg[inst].t進行Loop();\r
- int stYposInImg = counterYposInImg[inst].n現在の値;\r
-\r
- int gx = CDTXMania.Instance.ConfigIni.cdInstX[inst][CDTXMania.Instance.ConfigIni.eActiveInst].Value\r
- + CDTXMania.Instance.Coordinates.Instrument[inst].W;\r
- int gy = 0;\r
-\r
- if (this.txグラフ != null)\r
- {\r
- // 背景暗幕\r
- this.txグラフ.n透明度 = 128;\r
- this.txグラフ.vc拡大縮小倍率.X = CDTXMania.Instance.Coordinates.Graph[inst].W;\r
- this.txグラフ.vc拡大縮小倍率.Y = CDTXMania.Instance.Coordinates.Graph[inst].H;\r
- this.txグラフ.t2D描画(CDTXMania.Instance.Device, gx, gy, new Rectangle(62, 0, 1, 1));\r
-\r
- // 基準線\r
- this.txグラフ.vc拡大縮小倍率.X = CDTXMania.Instance.Coordinates.Graph[inst].W;\r
- this.txグラフ.vc拡大縮小倍率.Y = 1f;\r
-\r
- for (int i = 0; i < slices; i++)\r
- {\r
- if (this.dbCurrent[inst] < (100 - i * slices))\r
- {\r
- // 通常の基準線(白)\r
- this.txグラフ.n透明度 = 128;\r
- this.txグラフ.t2D描画(CDTXMania.Instance.Device,\r
- gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H * i / slices, new Rectangle(60, 0, 1, 1));\r
- }\r
- else\r
- {\r
- // 基準線を越えたら線が黄色くなる\r
- this.txグラフ.n透明度 = 224;\r
- this.txグラフ.t2D描画(CDTXMania.Instance.Device,\r
- gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H * i / slices, new Rectangle(61, 0, 1, 1));\r
- }\r
- }\r
-\r
- // グラフのゲージ部分\r
-\r
- // --現在値\r
- this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
-\r
- if (this.dbCurrentDisp[inst] < this.dbCurrent[inst])\r
- {\r
- this.dbCurrentDisp[inst] += (this.dbCurrent[inst] - this.dbCurrentDisp[inst]) / 5 + 0.01;\r
- }\r
- else\r
- {\r
- this.dbCurrentDisp[inst] = this.dbCurrent[inst];\r
- }\r
- int ar = (int)(CDTXMania.Instance.Coordinates.Graph[inst].H * this.dbCurrentDisp[inst] / 100.0);\r
-\r
- this.txグラフ.n透明度 = 224;\r
- this.txグラフ.t2D描画(\r
- CDTXMania.Instance.Device,\r
- gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,\r
- new Rectangle(0, 5 + stYposInImg, 30, ar)\r
- );\r
- this.txグラフ.t2D描画( // 上部白いバー\r
- CDTXMania.Instance.Device,\r
- gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,\r
- new Rectangle(63 + 0, 0, 30, 5)\r
- );\r
-\r
- // 目標を超えた時に発光?させる\r
- if ((dbCurrent[inst] >= dbTarget[inst]))\r
- {\r
- this.txグラフ.n透明度 = 128;\r
- this.txグラフ.b加算合成 = true;\r
- this.txグラフ.t2D描画(\r
- CDTXMania.Instance.Device,\r
- gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,\r
- new Rectangle(0, 5 + stYposInImg, 30, ar)\r
- );\r
- this.txグラフ.b加算合成 = false;\r
- }\r
-\r
- // --目標値\r
- if (this.dbTargetDisp[inst] < this.dbTarget[inst])\r
- {\r
- this.dbTargetDisp[inst] += (this.dbTarget[inst] - this.dbTargetDisp[inst]) / 5 + 0.01;\r
- }\r
- else\r
- {\r
- this.dbTargetDisp[inst] = this.dbTarget[inst];\r
- }\r
- ar = (int)(CDTXMania.Instance.Coordinates.Graph[inst].H * this.dbTargetDisp[inst] / 100.0);\r
- \r
- this.txグラフ.n透明度 = 224;\r
- this.txグラフ.t2D描画(\r
- CDTXMania.Instance.Device,\r
- gx + 30,\r
- gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,\r
- new Rectangle(30, 5 + stYposInImg, 30, ar)\r
- );\r
- this.txグラフ.t2D描画( // 上部白いバー\r
- CDTXMania.Instance.Device, gx + 30, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,\r
- new Rectangle(63 + 30, 0, 30, 5)\r
- );\r
- }\r
- }\r
- }\r
- }\r
- return 0;\r
- }\r
- }\r
-}\r