using System.Text;\r
using System.Runtime.InteropServices;\r
using System.Drawing;\r
+using System.IO;\r
using SlimDX;\r
using FDK;\r
\r
namespace DTXMania\r
{\r
- internal class CAct演奏Drumsグラフ : CActivity\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
-\r
- public double dbグラフ値現在_渡\r
- {\r
- get\r
- {\r
- return this.dbグラフ値現在;\r
- }\r
- set\r
- {\r
- this.dbグラフ値現在 = value;\r
- }\r
- }\r
- public double dbグラフ値目標_渡\r
- {\r
- get\r
- {\r
- return this.dbグラフ値目標;\r
- }\r
- set\r
- {\r
- this.dbグラフ値目標 = value;\r
- }\r
- }\r
- \r
- // コンストラクタ\r
-\r
- public CAct演奏Drumsグラフ()\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
-\r
- // CActivity 実装\r
-\r
public override void On活性化()\r
- {\r
- this.dbグラフ値目標 = 80f;\r
- this.dbグラフ値現在 = 0f;\r
- base.On活性化();\r
- }\r
- public override void On非活性化()\r
{\r
- base.On非活性化();\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
+ if (base.b活性化してる)\r
{\r
- this.txグラフ = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlay graph.png"));\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
+ if (base.b活性化してる)\r
{\r
- CDTXMania.tテクスチャの解放( ref this.txグラフ );\r
+ TextureFactory.tテクスチャの解放(ref this.txグラフ);\r
base.OnManagedリソースの解放();\r
}\r
}\r
+\r
public override int On進行描画()\r
{\r
- if( !base.b活性化してない )\r
+ if (b活性化してる && !CDTXMania.Instance.ConfigIni.bStoicMode)\r
{\r
- if( base.b初めての進行描画 )\r
+\r
+ for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
{\r
- base.b初めての進行描画 = false;\r
- }\r
- // 背景暗幕\r
- if (this.txグラフ != null)\r
- {\r
- this.txグラフ.n透明度 = 128;\r
- this.txグラフ.vc拡大縮小倍率 = new Vector3(38f, 230f, 1f);\r
- }\r
- Rectangle rectangle = new Rectangle(22, 0, 1, 1);\r
- this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88, rectangle);\r
- \r
- // 基準線\r
- if (this.txグラフ != null)\r
- {\r
- this.txグラフ.n透明度 = 192;\r
- this.txグラフ.vc拡大縮小倍率 = new Vector3(38f, 1f, 1f);\r
- }\r
- for (int i = 0; i < 4; i++)\r
- {\r
- // 基準線を越えたら黄色くなる\r
- if (this.dbグラフ値現在 >= (100 - i * 10))\r
- {\r
- rectangle = new Rectangle(21, 0, 1, 1);\r
- }\r
- else\r
- {\r
- rectangle = new Rectangle(20, 0, 1, 1);\r
- }\r
- this.txグラフ.t2D描画(CDTXMania.app.Device, 345, 88+i*23, rectangle);\r
- }\r
-\r
- // グラフ\r
- // --現在値\r
- if (this.txグラフ != null)\r
- {\r
- this.txグラフ.n透明度 = 192;\r
- this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
- }\r
- rectangle = new Rectangle(0, 0, 10, (int)(230f * this.dbグラフ値現在 / 100));\r
- this.txグラフ.t2D描画(CDTXMania.app.Device, 350, 318 - (int)(230f * this.dbグラフ値現在 / 100), rectangle);\r
- if (dbグラフ値現在 >= dbグラフ値目標)\r
- {\r
- this.txグラフ.vc拡大縮小倍率 = new Vector3(1.2f, 1f, 1f);\r
- this.txグラフ.n透明度 = 64;\r
- this.txグラフ.b加算合成 = true;\r
- this.txグラフ.t2D描画(CDTXMania.app.Device, 349, 318 - (int)(230f * this.dbグラフ値現在 / 100), rectangle);\r
- }\r
- // --目標値\r
- if (this.txグラフ != null)\r
- {\r
- this.txグラフ.n透明度 = 192;\r
- this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
- this.txグラフ.b加算合成 = false;\r
- }\r
- rectangle = new Rectangle(10, 0, 10, (int)(230f * this.dbグラフ値目標 / 100));\r
- this.txグラフ.t2D描画(CDTXMania.app.Device, 368, 318 - (int)(230f * this.dbグラフ値目標 / 100), rectangle);\r
- \r
- }\r
- return 0;\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
- // その他\r
+ counterYposInImg[inst].t進行Loop();\r
+ int stYposInImg = counterYposInImg[inst].n現在の値;\r
\r
- #region [ private ]\r
- //----------------\r
- private double dbグラフ値目標;\r
- private double dbグラフ値現在;\r
- private CTexture txグラフ;\r
- //-----------------\r
- #endregion\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