OSDN Git Service

#36043 rev.920 で手違いが起きたため、一度 rev.919 に戻し、ファイルを再修正。Ech定義の使用を CChip のプロパティを使うよう一部変更。
[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.Diagnostics;\r
7 using SlimDX;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CAct演奏Drumsゲージ : CAct演奏ゲージ共通\r
13         {\r
14                 // プロパティ\r
15                 \r
16                 // コンストラクタ\r
17 \r
18                 public CAct演奏Drumsゲージ()\r
19                 {\r
20                         base.b活性化してない = true;\r
21                 }\r
22 \r
23 \r
24                 // CActivity 実装\r
25 \r
26                 public override void On活性化()\r
27                 {\r
28                         // CAct演奏ゲージ共通.Init()に移動\r
29                         // this.dbゲージ値 = ( CDTXMania.Instance.ConfigIni.nRisky > 0 ) ? 1.0 : 0.66666666666666663;\r
30                         base.On活性化();\r
31                 }\r
32                 public override void On非活性化()\r
33                 {\r
34                         this.ct本体振動 = null;\r
35                         this.ct本体移動 = null;\r
36                         for( int i = 0; i < 24; i++ )\r
37                         {\r
38                                 this.st白い星[ i ].ct進行 = null;\r
39                         }\r
40                         base.On非活性化();\r
41                 }\r
42                 public override void OnManagedリソースの作成()\r
43                 {\r
44                         if( !base.b活性化してない )\r
45                         {\r
46                                 this.txゲージ = TextureFactory.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums gauge.png" ) );\r
47                                 this.txゲージ白 = TextureFactory.tテクスチャの生成Af( CSkin.Path( @"Graphics\ScreenPlayDrums_gauge_white.png " ) );\r
48                                 base.OnManagedリソースの作成();\r
49                         }\r
50                 }\r
51                 public override void OnManagedリソースの解放()\r
52                 {\r
53                         if( !base.b活性化してない )\r
54                         {\r
55                                 TextureFactory.tテクスチャの解放( ref this.txゲージ白 );\r
56                                 TextureFactory.tテクスチャの解放( ref this.txゲージ );\r
57                                 base.OnManagedリソースの解放();\r
58                         }\r
59                 }\r
60                 public override int On進行描画()\r
61                 {\r
62                         if ( !base.b活性化してない )\r
63                         {\r
64                                 #region [ 初めての進行描画 ]\r
65                                 if ( base.b初めての進行描画 )\r
66                                 {\r
67                                         for ( int k = 0; k < 0x18; k++ )\r
68                                         {\r
69                                                 this.st白い星[ k ].x = 2 + CDTXMania.Instance.Random.Next( 4 );\r
70                                                 this.st白い星[ k ].fScale = 0.2f + ( CDTXMania.Instance.Random.Next( 2 ) * 0.05f );\r
71                                                 this.st白い星[ k ].ct進行 = new CCounter( 0, 0x160, 8 + CDTXMania.Instance.Random.Next( 4 ), CDTXMania.Instance.Timer );\r
72                                                 this.st白い星[ k ].ct進行.n現在の値 = CDTXMania.Instance.Random.Next( 0x160 );\r
73                                         }\r
74                                         this.ct本体移動 = new CCounter( 0, 0x1a, 20, CDTXMania.Instance.Timer );\r
75                                         this.ct本体振動 = new CCounter( 0, 360, 4, CDTXMania.Instance.Timer );\r
76                                         base.b初めての進行描画 = false;\r
77                                 }\r
78                                 #endregion\r
79                                 this.ct本体移動.t進行Loop();\r
80                                 this.ct本体振動.t進行Loop();\r
81 \r
82                                 #region [ Risky残りMiss回数表示 ]\r
83                                 if ( this.bRisky && this.actLVLNFont != null )          // #23599 2011.7.30 yyagi Risky残りMiss回数表示\r
84                                 {\r
85                                         CActLVLNFont.EFontColor efc = this.IsDanger( E楽器パート.DRUMS ) ?\r
86                                                 CActLVLNFont.EFontColor.Red : CActLVLNFont.EFontColor.Yellow;\r
87                                         actLVLNFont.t文字列描画( (int) ( 12 * Scale.X ), (int) ( 408 * Scale.Y ), nRiskyTimes.ToString(), efc, CActLVLNFont.EFontAlign.Right );\r
88                                 }\r
89                                 #endregion\r
90 \r
91                                 #region [ 緑orオレンジのゲージ表示 ]\r
92                                 const double dbゲージ最大値 = 352.0 * Scale.Y;\r
93                                 int n表示するゲージの高さ = ( this.dbゲージ値 == 1.0 ) ?\r
94                                         ( (int) ( dbゲージ最大値 * this.dbゲージ値 ) ) :\r
95                                         ( (int) ( ( dbゲージ最大値 * this.dbゲージ値 ) + ( 2.0 * Math.Sin( Math.PI * 2 * ( ( (double) this.ct本体振動.n現在の値 ) / 360.0 ) ) ) ) );\r
96 \r
97                                 if ( n表示するゲージの高さ <= 0 )\r
98                                 {\r
99                                         return 0;\r
100                                 }\r
101                                 if ( this.txゲージ != null )\r
102                                 {\r
103                                         this.txゲージ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
104                                         this.txゲージ.n透明度 = 0xff;\r
105                                         this.txゲージ.b加算合成 = false;\r
106                                 }\r
107                                 int nCtゲージ内部上昇スクロール現在値 = (int) ( this.ct本体移動.n現在の値 * Scale.Y );\r
108                                 int n表示ゲージ最大値 = (int) ( 0x195 * Scale.Y );\r
109                                 int ybar = ( n表示ゲージ最大値 - n表示するゲージの高さ ) - nCtゲージ内部上昇スクロール現在値;\r
110                                 int height = n表示するゲージの高さ + nCtゲージ内部上昇スクロール現在値;\r
111                                 while ( height > 0 )\r
112                                 {\r
113                                         Rectangle rect = ( this.dbゲージ値 == 1.0 ) ?\r
114                                                 new Rectangle( 48, 0, 48, 61 ) :\r
115                                                 new Rectangle( 0, 0, 48, 61 );\r
116                                         #region [ clipping ]\r
117                                         if ( ybar < ( n表示ゲージ最大値 - n表示するゲージの高さ ) )\r
118                                         {\r
119                                                 int d = ( n表示ゲージ最大値 - n表示するゲージの高さ ) - ybar;\r
120                                                 rect.Y += d;\r
121                                                 rect.Height -= d;\r
122                                                 ybar += d;\r
123                                         }\r
124                                         if ( ( ybar + rect.Height ) > n表示ゲージ最大値 )\r
125                                         {\r
126                                                 int num7 = ( ybar + rect.Height ) - n表示ゲージ最大値;\r
127                                                 rect.Height -= num7;\r
128                                         }\r
129                                         if ( rect.Top >= rect.Bottom )\r
130                                         {\r
131                                                 break;\r
132                                         }\r
133                                         #endregion\r
134                                         if ( this.txゲージ != null )\r
135                                         {\r
136                                                 this.txゲージ.t2D描画(\r
137                                                         CDTXMania.Instance.Device,\r
138                                                         6 * Scale.X,\r
139                                                         ybar,\r
140                                                         rect\r
141                                                 );\r
142                                         }\r
143                                         height -= rect.Height;\r
144                                         ybar += rect.Height;\r
145                                 }\r
146                                 #endregion\r
147                                 #region [ 光彩 ]\r
148                                 if ( this.txゲージ白 != null )\r
149                                 {\r
150                                         this.txゲージ白.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
151                                         this.txゲージ白.n透明度 = 180;\r
152                                         this.txゲージ白.b加算合成 = true;\r
153                                 }\r
154                                 {\r
155                                         Rectangle rect = new Rectangle(\r
156                                                 0,\r
157                                                 0,\r
158                                                 (int) ( 0x10 *     Scale.X ),\r
159                                                 (int) ( 0x40 * 4 * Scale.Y )\r
160                                         );\r
161                                         #region [ clipping1 ]\r
162                                         int ylight = ( n表示ゲージ最大値 - n表示するゲージの高さ ) + (int) ( 0 * 0x40 * Scale.Y );\r
163                                         if ( ylight >= n表示ゲージ最大値 )\r
164                                         {\r
165                                                 //break;\r
166                                         }\r
167                                         #endregion\r
168                                         else\r
169                                         {\r
170                                                 #region [ Clipping2 ]\r
171                                                 if ( ( ylight + rect.Height ) > n表示ゲージ最大値 )\r
172                                                 {\r
173                                                         int d = ( ylight + rect.Height ) - n表示ゲージ最大値;\r
174                                                         rect.Height -= d;\r
175                                                 }\r
176                                                 #endregion\r
177                                                 if ( ( rect.Top < rect.Bottom ) && ( this.txゲージ白 != null ) )\r
178                                                 {\r
179                                                         this.txゲージ白.t2D描画(\r
180                                                                 CDTXMania.Instance.Device,\r
181                                                                 (int) ( 6 * Scale.X ),\r
182                                                                 (int) ( ylight + 0.5f ),\r
183                                                                 rect\r
184                                                         );\r
185                                                 }\r
186                                         }\r
187                                 }\r
188                                 #endregion\r
189                                 #region [ ゲージ頂上の光源 ]\r
190                                 if ( this.txゲージ != null )\r
191                                 {\r
192                                         //this.txゲージ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );\r
193                                         this.txゲージ.n透明度 = 0xff;\r
194                                         this.txゲージ.b加算合成 = false;\r
195                                 }\r
196                                 {\r
197                                         Rectangle rect = new Rectangle(\r
198                                                 (int) ( 0x30 * Scale.X ),\r
199                                                 0,\r
200                                                 (int) ( 0x10 * Scale.X ),\r
201                                                 (int) ( 0x10 * Scale.Y )\r
202                                         );\r
203                                         int yゲージ頂上 = n表示ゲージ最大値 - n表示するゲージの高さ;\r
204                                         if ( yゲージ頂上 < n表示ゲージ最大値 )\r
205                                         {\r
206                                                 #region [ clipping ]\r
207                                                 if ( ( yゲージ頂上 + rect.Height ) > n表示ゲージ最大値 )\r
208                                                 {\r
209                                                         int d = ( yゲージ頂上 + rect.Height ) - n表示ゲージ最大値;\r
210                                                         rect.Height -= d;\r
211                                                 }\r
212                                                 #endregion\r
213                                                 if ( ( rect.Top < rect.Bottom ) && ( this.txゲージ != null ) )\r
214                                                 {\r
215                                                         this.txゲージ.t2D描画(\r
216                                                                 CDTXMania.Instance.Device,\r
217                                                                 (int) ( 6 * Scale.X ),\r
218                                                                 (int) ( yゲージ頂上 + 0.5f ),\r
219                                                                 rect\r
220                                                         );\r
221                                                 }\r
222                                         }\r
223                                 }\r
224                                 #endregion\r
225                                 #region [ 泡 ]\r
226                                 if ( this.txゲージ != null )\r
227                                 {\r
228                                         this.txゲージ.b加算合成 = true;\r
229                                 }\r
230                                 for ( int j = 0; j < 24; j++ )\r
231                                 {\r
232                                         this.st白い星[ j ].ct進行.t進行Loop();\r
233                                         int x = 6 + this.st白い星[ j ].x;\r
234                                         int y泡 = ( n表示ゲージ最大値 - n表示するゲージの高さ ) + (int) ( ( 0x160 - this.st白い星[ j ].ct進行.n現在の値 ) * Scale.Y );\r
235                                         int n透明度 = ( this.st白い星[ j ].ct進行.n現在の値 < 0xb0 ) ? 0 : ( (int) ( 255.0 * ( ( (double) ( this.st白い星[ j ].ct進行.n現在の値 - 0xb0 ) ) / 176.0 ) ) );\r
236                                         if ( ( n透明度 != 0 ) && ( y泡 < (int) ( 0x191 * Scale.Y ) ) )\r
237                                         {\r
238                                                 Rectangle rect = new Rectangle(\r
239                                                         (int) ( 0 * Scale.X ),\r
240                                                         (int) ( 0x20 * Scale.Y ),\r
241                                                         (int) ( 0x20 * Scale.X ),\r
242                                                         (int) ( 0x20 * Scale.Y )\r
243                                                 );\r
244                                                 if ( this.txゲージ != null )\r
245                                                 {\r
246                                                         this.txゲージ.vc拡大縮小倍率 = new Vector3( this.st白い星[ j ].fScale, this.st白い星[ j ].fScale, 1f );\r
247                                                         this.txゲージ.n透明度 = n透明度;\r
248                                                         this.txゲージ.t2D描画(\r
249                                                                 CDTXMania.Instance.Device,\r
250                                                                 (int) ( x * Scale.X ),\r
251                                                                 (int) ( y泡 + 0.5f ),\r
252                                                                 rect\r
253                                                         );\r
254                                                 }\r
255                                         }\r
256                                 }\r
257                                 #endregion\r
258                         }\r
259                         return 0;\r
260                 }\r
261 \r
262 \r
263                 // その他\r
264 \r
265                 #region [ private ]\r
266                 //-----------------\r
267                 [StructLayout( LayoutKind.Sequential )]\r
268                 private struct ST白い星\r
269                 {\r
270                         public int x;\r
271                         public float fScale;\r
272                         public CCounter ct進行;\r
273                 }\r
274 \r
275                 private CTextureAf txゲージ白;\r
276                 private const int STAR_MAX = 0x18;\r
277                 private ST白い星[] st白い星 = new ST白い星[ 0x18 ];\r
278                 //-----------------\r
279                 #endregion\r
280         }\r
281 }\r