2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
12 internal class CAct演奏グラフ : CActivity
\r
14 // #24074 2011.01.23 ikanick グラフの描画
\r
17 // ・基準線(60,70,80,90,100%)を超えると線が黄色くなる(元は白)
\r
21 // ・グラフを波打たせるなどの視覚の向上→実装済
\r
25 public STDGBSValue<double> dbTarget;
\r
26 private STDGBSValue<double> dbTargetDisp;
\r
27 public STDGBSValue<double> dbCurrent;
\r
28 private STDGBSValue<double> dbCurrentDisp;
\r
30 private CTexture txグラフ;
\r
32 private STDGBSValue<CCounter> counterYposInImg;
\r
33 private readonly int slices = 10;
\r
37 base.b活性化してない = true;
\r
40 public override void On活性化()
\r
44 this.dbTarget = new STDGBSValue<double>();
\r
45 dbTarget.Drums = dbTarget.Guitar = dbTarget.Bass = 80.0;
\r
46 this.dbCurrent = new STDGBSValue<double>();
\r
47 dbCurrent.Drums = dbCurrent.Guitar = dbCurrent.Bass = 0.0;
\r
48 counterYposInImg = new STDGBSValue<CCounter>();
\r
53 public override void OnManagedリソースの作成()
\r
57 string pathグラフ = CSkin.Path(@"Graphics\ScreenPlay graph.png");
\r
58 if (File.Exists(pathグラフ))
\r
60 this.txグラフ = TextureFactory.tテクスチャの生成(pathグラフ);
\r
62 base.OnManagedリソースの作成();
\r
66 public override void OnManagedリソースの解放()
\r
70 TextureFactory.tテクスチャの解放(ref this.txグラフ);
\r
71 base.OnManagedリソースの解放();
\r
75 public override int On進行描画()
\r
77 if (b活性化してる && !CDTXMania.Instance.ConfigIni.bStoicMode)
\r
80 for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)
\r
82 if (CDTXMania.Instance.ConfigIni.b楽器有効(inst) &&
\r
83 CDTXMania.Instance.ConfigIni.bGraph[inst] &&
\r
84 CDTXMania.Instance.DTX.bチップがある[inst])
\r
89 base.b初めての進行描画 = false;
\r
90 counterYposInImg.Drums = new CCounter(0, 35, 16, CDTXMania.Instance.Timer);
\r
91 counterYposInImg.Guitar = new CCounter(0, 35, 16, CDTXMania.Instance.Timer);
\r
92 counterYposInImg.Bass = new CCounter(0, 35, 16, CDTXMania.Instance.Timer);
\r
95 counterYposInImg[inst].t進行Loop();
\r
96 int stYposInImg = counterYposInImg[inst].n現在の値;
\r
98 int gx = CDTXMania.Instance.ConfigIni.cdInstX[inst][CDTXMania.Instance.ConfigIni.eActiveInst].Value
\r
99 + CDTXMania.Instance.Coordinates.Instrument[inst].W;
\r
103 if (this.txグラフ != null)
\r
105 this.txグラフ.vc拡大縮小倍率.X = CDTXMania.Instance.Coordinates.Graph[inst].W;
\r
106 this.txグラフ.vc拡大縮小倍率.Y = CDTXMania.Instance.Coordinates.Graph[inst].H;
\r
108 this.txグラフ.n透明度 = 128;
\r
109 this.txグラフ.t2D描画(CDTXMania.Instance.Device, gx, gy, new Rectangle(62, 0, 1, 1));
\r
113 this.txグラフ.n透明度 = 128;
\r
114 this.txグラフ.vc拡大縮小倍率.X = CDTXMania.Instance.Coordinates.Graph[inst].W;
\r
115 this.txグラフ.vc拡大縮小倍率.Y = 1f;
\r
117 for (int i = 0; i < slices; i++)
\r
119 this.txグラフ.t2D描画(CDTXMania.Instance.Device,
\r
120 gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H * i / slices, new Rectangle(60, 0, 1, 1));
\r
123 for (int i = 0; i < 5; i++)
\r
125 Rectangle rectangle;
\r
127 if (this.dbCurrent[inst] >= (100 - i * slices))
\r
129 rectangle = new Rectangle(61, 0, 1, 1); //黄色
\r
130 if (this.txグラフ != null)
\r
132 this.txグラフ.n透明度 = 224;
\r
137 rectangle = new Rectangle(60, 0, 1, 1);
\r
138 if (this.txグラフ != null)
\r
140 this.txグラフ.n透明度 = 160;
\r
144 if (this.txグラフ != null)
\r
147 CDTXMania.Instance.Device,
\r
148 gx, gy + i * CDTXMania.Instance.Coordinates.Graph[inst].H / slices,
\r
156 if (this.dbCurrentDisp[inst] < this.dbCurrent[inst])
\r
158 this.dbCurrentDisp[inst] += (this.dbCurrent[inst] - this.dbCurrentDisp[inst]) / 5 + 0.01;
\r
160 if (this.dbCurrentDisp[inst] >= this.dbCurrent[inst])
\r
162 this.dbCurrentDisp[inst] = this.dbCurrent[inst];
\r
164 int ar = (int)(CDTXMania.Instance.Coordinates.Graph[inst].H * this.dbCurrentDisp[inst] / 100.0);
\r
166 this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
\r
167 this.txグラフ.n透明度 = 255;
\r
169 CDTXMania.Instance.Device,
\r
170 gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,
\r
171 new Rectangle(0, 5 + stYposInImg, 30, ar)
\r
173 this.txグラフ.t2D描画( // 上部白いバー
\r
174 CDTXMania.Instance.Device,
\r
175 gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,
\r
176 new Rectangle(0, 0, 30, 5)
\r
180 if ((dbCurrent[inst] >= dbTarget[inst]))
\r
182 // this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);
\r
183 this.txグラフ.n透明度 = 128;
\r
184 this.txグラフ.b加算合成 = true;
\r
186 CDTXMania.Instance.Device,
\r
187 gx, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,
\r
188 new Rectangle(0, 5 + stYposInImg, 30, ar)
\r
190 this.txグラフ.b加算合成 = false;
\r
193 if (this.dbTargetDisp[inst] < this.dbTarget[inst])
\r
195 this.dbTargetDisp[inst] += (this.dbTarget[inst] - this.dbTargetDisp[inst]) / 5 + 0.01;
\r
197 if (this.dbTargetDisp[inst] >= this.dbTarget[inst])
\r
199 this.dbTargetDisp[inst] = this.dbTarget[inst];
\r
201 ar = (int)(CDTXMania.Instance.Coordinates.Graph[inst].H * this.dbTargetDisp[inst] / 100.0);
\r
204 CDTXMania.Instance.Device,
\r
206 gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,
\r
207 new Rectangle(30, 5 + stYposInImg, 30, ar)
\r
209 this.txグラフ.n透明度 = 255;
\r
210 this.txグラフ.t2D描画( // 上部白いバー
\r
211 CDTXMania.Instance.Device, gx + 30, gy + CDTXMania.Instance.Coordinates.Graph[inst].H - ar,
\r
212 new Rectangle(30, 0, 30, 5)
\r