OSDN Git Service

#36028 DTXMania/コード内のソースコードを整形
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / ドラム画面 / CAct演奏Drumsグラフ.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.IO;\r
7 using SlimDX;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CAct演奏Drumsグラフ : CActivity\r
13         {\r
14                 // #24074 2011.01.23 ikanick グラフの描画\r
15                 // 実装内容\r
16                 // ・左を現在、右を目標\r
17                 // ・基準線(60,70,80,90,100%)を超えると線が黄色くなる(元は白)\r
18                 // ・目標を超えると現在が光る\r
19                 // ・オート時には描画しない\r
20                 // 要望・実装予定\r
21                 // ・グラフを波打たせるなどの視覚の向上→実装済\r
22                 // 修正等\r
23                 // ・画像がないと落ちる→修正済\r
24 \r
25                 private int XPos = 3 * 345;\r
26                 private int YPos = 200;\r
27                 private int DispHeight = 400;\r
28                 private int DispWidth = 60;\r
29                 private CCounter counterYposInImg = null;\r
30                 private readonly int slices = 10;\r
31 \r
32                 // プロパティ\r
33 \r
34                 public double dbグラフ値現在_渡\r
35                 {\r
36                         get\r
37                         {\r
38                                 return this.dbグラフ値現在;\r
39                         }\r
40                         set\r
41                         {\r
42                                 this.dbグラフ値現在 = value;\r
43                         }\r
44                 }\r
45                 public double dbグラフ値目標_渡\r
46                 {\r
47                         get\r
48                         {\r
49                                 return this.dbグラフ値目標;\r
50                         }\r
51                         set\r
52                         {\r
53                                 this.dbグラフ値目標 = value;\r
54                         }\r
55                 }\r
56 \r
57                 // コンストラクタ\r
58 \r
59                 public CAct演奏Drumsグラフ()\r
60                 {\r
61                         base.b活性化してない = true;\r
62                 }\r
63 \r
64 \r
65                 // CActivity 実装\r
66 \r
67                 public override void On活性化()\r
68                 {\r
69                         this.dbグラフ値目標 = 80f;\r
70                         this.dbグラフ値現在 = 0f;\r
71                         base.On活性化();\r
72                 }\r
73                 public override void On非活性化()\r
74                 {\r
75                         base.On非活性化();\r
76                 }\r
77                 public override void OnManagedリソースの作成()\r
78                 {\r
79                         if (!base.b活性化してない)\r
80                         {\r
81                                 string pathグラフ = CSkin.Path(@"Graphics\ScreenPlay graph.png");\r
82                                 if (File.Exists(pathグラフ))\r
83                                 {\r
84                                         this.txグラフ = TextureFactory.tテクスチャの生成(pathグラフ);\r
85                                 }\r
86                                 base.OnManagedリソースの作成();\r
87                         }\r
88                 }\r
89                 public override void OnManagedリソースの解放()\r
90                 {\r
91                         if (!base.b活性化してない)\r
92                         {\r
93                                 TextureFactory.tテクスチャの解放(ref this.txグラフ);\r
94                                 base.OnManagedリソースの解放();\r
95                         }\r
96                 }\r
97                 public override int On進行描画()\r
98                 {\r
99                         if (!base.b活性化してない)\r
100                         {\r
101                                 if (base.b初めての進行描画)\r
102                                 {\r
103                                         /* #35804 エフェクトを変更しました。\r
104                                         for( int k = 0; k < 64; k++ )\r
105                                         {\r
106                                                 this.stキラキラ[ k ].x = CDTXMania.app.Random.Next( 30 );\r
107                                                 this.stキラキラ[ k ].fScale = 1f + ( CDTXMania.app.Random.Next( 9 ) * 0.2f );\r
108                                                 this.stキラキラ[ k ].Trans = 0 + CDTXMania.app.Random.Next( 32 ) ;\r
109                         if (k < 32)\r
110                         {\r
111                             this.stキラキラ[ k ].ct進行 = new CCounter(0, DispHeight, 10 + CDTXMania.app.Random.Next(20), CDTXMania.app.Timer);\r
112                         }\r
113                         else if (k < 64)\r
114                         {\r
115                             this.stキラキラ[ k ].ct進行 = new CCounter(0, DispHeight, 20 + CDTXMania.app.Random.Next(50), CDTXMania.app.Timer);\r
116                         }\r
117                         this.stキラキラ[ k ].ct進行.n現在の値 = CDTXMania.app.Random.Next(DispHeight);\r
118                                         }\r
119                                         for( int k = 0; k < 16; k++ )\r
120                                         {\r
121                                                 this.stフラッシュ[ k ].y = -1;\r
122                                                 this.stフラッシュ[ k ].Trans = 0;\r
123                                         }\r
124                                         */\r
125                                         base.b初めての進行描画 = false;\r
126                                         counterYposInImg = new CCounter(0, 35, 16, CDTXMania.app.Timer);\r
127                                 }\r
128 \r
129                                 counterYposInImg.t進行Loop();\r
130                                 int stYposInImg = counterYposInImg.n現在の値;\r
131 \r
132                                 // レーン表示位置によって変更\r
133                                 if (CDTXMania.app.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Center)\r
134                                 {\r
135                                         XPos = 1350;\r
136                                 }\r
137 \r
138                                 // 背景暗幕\r
139                                 if (this.txグラフ != null)\r
140                                 {\r
141                                         this.txグラフ.vc拡大縮小倍率 = new Vector3(DispWidth, DispHeight, 1f);\r
142                                         this.txグラフ.n透明度 = 128;\r
143                                         this.txグラフ.t2D描画(\r
144         CDTXMania.app.Device,\r
145         XPos,\r
146         YPos,\r
147         new Rectangle(62, 0, 1, 1)\r
148 );\r
149                                 }\r
150 \r
151                                 // 基準線\r
152 \r
153                                 if (this.txグラフ != null)\r
154                                 {\r
155                                         this.txグラフ.n透明度 = 128;\r
156                                         this.txグラフ.vc拡大縮小倍率 = new Vector3(DispWidth, 1f, 1f);\r
157                                         for (int i = 0; i < slices; i++)\r
158                                         {\r
159                                                 this.txグラフ.t2D描画(\r
160         CDTXMania.app.Device,\r
161         XPos,\r
162         YPos + DispHeight * i / slices,\r
163         new Rectangle(60, 0, 1, 1)\r
164 );\r
165                                         }\r
166                                         /* #35804 chnmr0 縦線は非表示にしました。\r
167                     this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, DispHeight, 1f);\r
168                     for (int i = 0; i < 2; i++)\r
169                     {\r
170                         this.txグラフ.t2D描画(\r
171                                                         CDTXMania.app.Device,\r
172                                                         (XPos + 12 + i * 54),\r
173                                                         YPos,\r
174                                                         rectangle\r
175                                                 );\r
176                         this.txグラフ.t2D描画(\r
177                                                         CDTXMania.app.Device,\r
178                                                         (45 + XPos + i * 54),\r
179                                                         YPos,\r
180                                                         rectangle\r
181                                                 );\r
182                     }\r
183                                         */\r
184                                 }\r
185 \r
186                                 if (this.txグラフ != null)\r
187                                 {\r
188                                         this.txグラフ.vc拡大縮小倍率 = new Vector3(DispWidth, 1f, 1f);\r
189                                 }\r
190                                 for (int i = 0; i < 5; i++)\r
191                                 {\r
192                                         Rectangle rectangle;\r
193                                         // 基準線を越えたら線が黄色くなる\r
194                                         if (this.dbグラフ値現在 >= (100 - i * slices))\r
195                                         {\r
196                                                 rectangle = new Rectangle(61, 0, 1, 1); //黄色\r
197                                                 if (this.txグラフ != null)\r
198                                                 {\r
199                                                         this.txグラフ.n透明度 = 224;\r
200                                                 }\r
201                                         }\r
202                                         else\r
203                                         {\r
204                                                 rectangle = new Rectangle(60, 0, 1, 1);\r
205                                                 if (this.txグラフ != null)\r
206                                                 {\r
207                                                         this.txグラフ.n透明度 = 160;\r
208                                                 }\r
209                                         }\r
210 \r
211                                         if (this.txグラフ != null)\r
212                                         {\r
213                                                 this.txグラフ.t2D描画(\r
214         CDTXMania.app.Device,\r
215         XPos,\r
216         YPos + i * DispHeight / slices,\r
217         rectangle\r
218 );\r
219                                         }\r
220                                 }\r
221                                 // グラフ\r
222                                 // --現在値\r
223                                 if (this.dbグラフ値現在_表示 < this.dbグラフ値現在)\r
224                                 {\r
225                                         this.dbグラフ値現在_表示 += (this.dbグラフ値現在 - this.dbグラフ値現在_表示) / 5 + 0.01;\r
226                                 }\r
227                                 if (this.dbグラフ値現在_表示 >= this.dbグラフ値現在)\r
228                                 {\r
229                                         this.dbグラフ値現在_表示 = this.dbグラフ値現在;\r
230                                 }\r
231                                 int ar = (int)(DispHeight * this.dbグラフ値現在_表示 / 100.0);\r
232 \r
233                                 if (this.txグラフ != null)\r
234                                 {\r
235                                         this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
236                                         this.txグラフ.n透明度 = 255;\r
237                                         this.txグラフ.t2D描画(\r
238         CDTXMania.app.Device,\r
239         XPos,\r
240         YPos + DispHeight - ar,\r
241         new Rectangle(0, 5 + stYposInImg, 30, ar)\r
242 );\r
243                                         this.txグラフ.t2D描画( // 上部白いバー\r
244                                                 CDTXMania.app.Device,\r
245                                                 XPos,\r
246                                                 YPos + DispHeight - ar,\r
247                                                 new Rectangle(0, 0, 30, 5)\r
248                                         );\r
249                                 }\r
250                                 /*\r
251                                 for( int k = 0; k < 32; k++ )\r
252                                 {\r
253                     rectangle = new Rectangle(60,0,1,1);\r
254                     if (this.txグラフ != null)\r
255                     {\r
256                                         this.stキラキラ[ k ].ct進行.t進行Loop();\r
257                         int num1 = (int)this.stキラキラ[ k ].x;\r
258                         int num2 = this.stキラキラ[ k ].ct進行.n現在の値;\r
259                         this.txグラフ.vc拡大縮小倍率 = new Vector3(this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale);\r
260                         this.txグラフ.n透明度 = 138 - 2 * this.stキラキラ[ k ].Trans;\r
261                         if ( num2 < (2.3f * this.dbグラフ値現在_表示) )\r
262                         {\r
263                             this.txグラフ.t2D描画(\r
264                                                                 CDTXMania.app.Device,\r
265                                                                 XPos + 15 + num1,\r
266                                                                 YPos + DispHeight - num2,\r
267                                                                 rectangle\r
268                                                         );\r
269                         }\r
270                     }\r
271                                 }\r
272                                 */\r
273 \r
274                                 // --現在値_追加エフェクト\r
275                                 /*\r
276                 if (this.dbグラフ値直前 != this.dbグラフ値現在)\r
277                 {\r
278                     this.stフラッシュ[ nグラフフラッシュct ].y = 0;\r
279                     this.stフラッシュ[ nグラフフラッシュct ].Trans = 224;\r
280                     nグラフフラッシュct ++;\r
281                     if (nグラフフラッシュct >= 16)\r
282                     {\r
283                         nグラフフラッシュct = 0;\r
284                     }\r
285                 }\r
286                 this.dbグラフ値直前 = this.dbグラフ値現在;\r
287 \r
288                 for (int m = 0; m < 16; m++)\r
289                 {\r
290                                         rectangle = new Rectangle(60,0,1,1);\r
291 \r
292                                         if ((this.stフラッシュ[ m ].y >= 0) &&\r
293                                                 (this.stフラッシュ[ m ].y+3 < ar) &&\r
294                                                 (this.txグラフ != null))\r
295                     {\r
296                         // this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
297                         this.txグラフ.n透明度 = this.stフラッシュ[ m ].Trans;\r
298                         this.txグラフ.t2D描画(\r
299                                                         CDTXMania.app.Device,\r
300                                                         XPos + 15,\r
301                                                         (this.stフラッシュ[ m ].y + YPos + DispHeight - ar),\r
302                                                         rectangle\r
303                                                 );\r
304                         this.txグラフ.n透明度 = this.stフラッシュ[ m ].Trans;\r
305                         this.txグラフ.t2D描画(\r
306                                                         CDTXMania.app.Device,\r
307                                                         XPos + 15,\r
308                                                         (this.stフラッシュ[ m ].y + 2 + YPos + DispHeight - ar),\r
309                                                         rectangle\r
310                                                 );\r
311                     }\r
312                     this.stフラッシュ[ m ].y += 4;\r
313                     this.stフラッシュ[ m ].Trans -= 4;\r
314                 }\r
315                                 */\r
316 \r
317                                 // --現在値_目標越\r
318                                 if ((dbグラフ値現在 >= dbグラフ値目標) && (this.txグラフ != null))\r
319                                 {\r
320                                         // this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);\r
321                                         this.txグラフ.n透明度 = 128;\r
322                                         this.txグラフ.b加算合成 = true;\r
323                                         this.txグラフ.t2D描画(\r
324         CDTXMania.app.Device,\r
325         XPos,\r
326         YPos + DispHeight - ar,\r
327         new Rectangle(0, 5 + stYposInImg, 30, ar)\r
328 );\r
329                                         this.txグラフ.b加算合成 = false;\r
330                                 }\r
331                                 // --目標値\r
332                                 if (this.dbグラフ値目標_表示 < this.dbグラフ値目標)\r
333                                 {\r
334                                         this.dbグラフ値目標_表示 += (this.dbグラフ値目標 - this.dbグラフ値目標_表示) / 5 + 0.01;\r
335                                 }\r
336                                 if (this.dbグラフ値目標_表示 >= this.dbグラフ値目標)\r
337                                 {\r
338                                         this.dbグラフ値目標_表示 = this.dbグラフ値目標;\r
339                                 }\r
340                                 ar = (int)(DispHeight * this.dbグラフ値目標_表示 / 100.0);\r
341 \r
342                                 if (this.txグラフ != null)\r
343                                 {\r
344                                         // this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
345                                         // this.txグラフ.n透明度 = 192;\r
346                                         this.txグラフ.t2D描画(\r
347         CDTXMania.app.Device,\r
348         XPos + 30,\r
349         YPos + DispHeight - ar,\r
350         new Rectangle(30, 5 + stYposInImg, 30, ar)\r
351 );\r
352                                         this.txグラフ.n透明度 = 255;\r
353                                         this.txグラフ.t2D描画( // 上部白いバー\r
354                                                 CDTXMania.app.Device,\r
355                                                 XPos + 30,\r
356                                                 YPos + DispHeight - ar,\r
357                                                 new Rectangle(30, 0, 30, 5)\r
358                                         );\r
359                                         /*\r
360                     // this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);\r
361                     this.txグラフ.n透明度 = 48;\r
362                     this.txグラフ.b加算合成 = true;\r
363                     this.txグラフ.t2D描画(\r
364                                                 CDTXMania.app.Device,\r
365                                                 XPos + 63,\r
366                                                 YPos + DispHeight - ar,\r
367                                                 rectangle\r
368                                         );\r
369                     this.txグラフ.b加算合成 = false;\r
370                                         */\r
371                                 }\r
372                                 /*\r
373                                 for( int k = 32; k < 64; k++ )\r
374                                 {\r
375                     rectangle = new Rectangle(60,0,1,1);\r
376                     if (this.txグラフ != null)\r
377                     {\r
378                                         this.stキラキラ[ k ].ct進行.t進行Loop();\r
379                         int num1 = (int)this.stキラキラ[ k ].x;\r
380                         int num2 = this.stキラキラ[ k ].ct進行.n現在の値;\r
381                         this.txグラフ.vc拡大縮小倍率 = new Vector3(this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale);\r
382                         this.txグラフ.n透明度 = 138 - 2 * this.stキラキラ[ k ].Trans;\r
383                         if ( num2 < (2.3f * this.dbグラフ値目標_表示) )\r
384                         {\r
385                             this.txグラフ.t2D描画(\r
386                                                                 CDTXMania.app.Device,\r
387                                                                 (XPos + 69 + 3 * num1),\r
388                                                                 YPos + DispHeight - num2,\r
389                                                                 rectangle\r
390                                                         );\r
391                         }\r
392                     }\r
393                                 }\r
394                                 */\r
395 \r
396                         }\r
397                         return 0;\r
398                 }\r
399 \r
400 \r
401                 // その他\r
402 \r
403                 #region [ private ]\r
404                 //----------------\r
405                 /*\r
406                 [StructLayout( LayoutKind.Sequential )]\r
407                 private struct STキラキラ\r
408                 {\r
409                         public int x;\r
410                         public int y;\r
411                         public float fScale;\r
412                         public int Trans;\r
413                         public CCounter ct進行;\r
414                 }\r
415                 */\r
416                 // private STキラキラ[] stキラキラ = new STキラキラ[ 64 ];\r
417                 // private STキラキラ[] stフラッシュ = new STキラキラ[ 16 ];\r
418 \r
419                 private double dbグラフ値目標;\r
420                 private double dbグラフ値目標_表示;\r
421                 private double dbグラフ値現在;\r
422                 private double dbグラフ値現在_表示;\r
423                 // private double dbグラフ値直前;\r
424                 // private int nグラフフラッシュct;\r
425 \r
426                 private CTexture txグラフ;\r
427                 //-----------------\r
428                 #endregion\r
429         }\r
430 }\r