OSDN Git Service

7e5ffd9462e30bcdb57ff11d7f38a6b282fa1158
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / ドラム画面 / CAct演奏Drums判定文字列.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Diagnostics;\r
4 using System.Text;\r
5 using System.Runtime.InteropServices;\r
6 using SlimDX;\r
7 \r
8 namespace DTXMania\r
9 {\r
10         internal class CAct演奏Drums判定文字列 : CAct演奏判定文字列共通\r
11         {\r
12                 // コンストラクタ\r
13 \r
14                 public CAct演奏Drums判定文字列()\r
15                 {\r
16                         this.stレーンサイズ = new STレーンサイズ[ 12 ];\r
17                         STレーンサイズ stレーンサイズ = new STレーンサイズ();\r
18                         int[,] sizeXW = new int[,] {\r
19                                 { 0x24, 0x24 },\r
20                                 { 0x4d, 30 },\r
21                                 { 0x6f, 30 },\r
22                                 { 0x92, 0x2a },\r
23                                 { 0xc1, 30 },\r
24                                 { 0xe3, 30 },\r
25                                 { 0x105, 30 },\r
26                                 { 0x127, 0x24 },\r
27                                 { 0, 0 },\r
28                                 { 0, 0 },\r
29                                 { 0x1fb, 80 },\r
30                                 { 0x18e, 80 }\r
31                         };\r
32                         for ( int i = 0; i < 12; i++ )\r
33                         {\r
34                                 this.stレーンサイズ[i] = new STレーンサイズ();\r
35                                 this.stレーンサイズ[i].x = sizeXW[i, 0];\r
36                                 this.stレーンサイズ[i].w = sizeXW[i, 1];\r
37                         }\r
38                         base.b活性化してない = true;\r
39                 }\r
40                 \r
41                 \r
42                 // CActivity 実装(共通クラスからの差分のみ)\r
43                 public override int On進行描画()\r
44                 {\r
45                         throw new InvalidOperationException( "t進行描画(C演奏判定ライン座標共通 演奏判定ライン共通 ) のほうを使用してください。" );\r
46                 }\r
47                 public override int t進行描画( C演奏判定ライン座標共通 演奏判定ライン座標 )\r
48                 {\r
49                         if( !base.b活性化してない )\r
50                         {\r
51                                 for( int i = 0; i < 12; i++ )\r
52                                 {\r
53                                         if( !base.st状態[ i ].ct進行.b停止中 )\r
54                                         {\r
55                                                 base.st状態[ i ].ct進行.t進行();\r
56                                                 if( base.st状態[ i ].ct進行.b終了値に達した )\r
57                                                 {\r
58                                                         base.st状態[ i ].ct進行.t停止();\r
59                                                 }\r
60                                                 int num2 = base.st状態[ i ].ct進行.n現在の値;\r
61                                                 if( ( base.st状態[ i ].judge != E判定.Miss ) && ( base.st状態[ i ].judge != E判定.Bad ) )\r
62                                                 {\r
63                                                         if( num2 < 50 )\r
64                                                         {\r
65                                                                 base.st状態[ i ].fX方向拡大率 = 1f + ( 1f * ( 1f - ( ( (float) num2 ) / 50f ) ) );\r
66                                                                 base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;\r
67                                                                 base.st状態[ i ].n相対X座標 = 0;\r
68                                                                 base.st状態[ i ].n相対Y座標 = 0;\r
69                                                                 base.st状態[ i ].n透明度 = 0xff;\r
70                                                         }\r
71                                                         else if( num2 < 130 )\r
72                                                         {\r
73                                                                 base.st状態[ i ].fX方向拡大率 = 1f;\r
74                                                                 base.st状態[ i ].fY方向拡大率 = 1f;\r
75                                                                 base.st状態[ i ].n相対X座標 = 0;\r
76                                                                 base.st状態[ i ].n相対Y座標 = ( ( num2 % 6 ) == 0 ) ? ( CDTXMania.Random.Next( 6 ) - 3 ) : base.st状態[ i ].n相対Y座標;\r
77                                                                 base.st状態[ i ].n透明度 = 0xff;\r
78                                                         }\r
79                                                         else if( num2 >= 240 )\r
80                                                         {\r
81                                                                 base.st状態[ i ].fX方向拡大率 = 1f;\r
82                                                                 base.st状態[ i ].fY方向拡大率 = 1f - ( ( 1f * ( num2 - 240 ) ) / 60f );\r
83                                                                 base.st状態[ i ].n相対X座標 = 0;\r
84                                                                 base.st状態[ i ].n相対Y座標 = 0;\r
85                                                                 base.st状態[ i ].n透明度 = 0xff;\r
86                                                         }\r
87                                                         else\r
88                                                         {\r
89                                                                 base.st状態[ i ].fX方向拡大率 = 1f;\r
90                                                                 base.st状態[ i ].fY方向拡大率 = 1f;\r
91                                                                 base.st状態[ i ].n相対X座標 = 0;\r
92                                                                 base.st状態[ i ].n相対Y座標 = 0;\r
93                                                                 base.st状態[ i ].n透明度 = 0xff;\r
94                                                         }\r
95                                                 }\r
96                                                 else if( num2 < 50 )\r
97                                                 {\r
98                                                         base.st状態[ i ].fX方向拡大率 = 1f;\r
99                                                         base.st状態[ i ].fY方向拡大率 = ( (float) num2 ) / 50f;\r
100                                                         base.st状態[ i ].n相対X座標 = 0;\r
101                                                         base.st状態[ i ].n相対Y座標 = 0;\r
102                                                         base.st状態[ i ].n透明度 = 0xff;\r
103                                                 }\r
104                                                 else if( num2 >= 200 )\r
105                                                 {\r
106                                                         base.st状態[ i ].fX方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );\r
107                                                         base.st状態[ i ].fY方向拡大率 = 1f - ( ( (float) ( num2 - 200 ) ) / 100f );\r
108                                                         base.st状態[ i ].n相対X座標 = 0;\r
109                                                         base.st状態[ i ].n相対Y座標 = 0;\r
110                                                         base.st状態[ i ].n透明度 = 0xff;\r
111                                                 }\r
112                                                 else\r
113                                                 {\r
114                                                         base.st状態[ i ].fX方向拡大率 = 1f;\r
115                                                         base.st状態[ i ].fY方向拡大率 = 1f;\r
116                                                         base.st状態[ i ].n相対X座標 = 0;\r
117                                                         base.st状態[ i ].n相対Y座標 = 0;\r
118                                                         base.st状態[ i ].n透明度 = 0xff;\r
119                                                 }\r
120                                         }\r
121                                 }\r
122                                 for( int j = 0; j < 12; j++ )\r
123                                 {\r
124                                         if( !base.st状態[ j ].ct進行.b停止中 )\r
125                                         {\r
126                                                 int index = base.st判定文字列[ (int) base.st状態[ j ].judge ].n画像番号;\r
127                                                 int baseX = 0;\r
128                                                 int baseY = 0;\r
129                                                 if( j < 8 )                     // Drums\r
130                                                 {\r
131                                                         if ( CDTXMania.ConfigIni.判定文字表示位置.Drums == E判定文字表示位置.表示OFF )\r
132                                                         {\r
133                                                                 continue;\r
134                                                         }\r
135                                                         baseX = this.stレーンサイズ[ j ].x;\r
136                                                         baseY = CDTXMania.ConfigIni.bReverse.Drums ?\r
137                                                                 ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 240 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 50 ) :\r
138                                                                 ( ( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Drums ) == E判定文字表示位置.レーン上 ) ? ( 180 + ( this.n文字の縦表示位置[ j ] * 0x20 ) ) : 450 );\r
139                                                 }\r
140                                                 else if( j == 11 )      // Bass\r
141                                                 {\r
142                                                         if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )\r
143                                                         {\r
144                                                                 continue;\r
145                                                         }\r
146                                                         int yB;\r
147                                                         switch ( CDTXMania.ConfigIni.判定文字表示位置.Bass )\r
148                                                         {\r
149                                                                 case E判定文字表示位置.コンボ下:\r
150                                                                         baseX = this.stレーンサイズ[ j ].x;\r
151                                                                         baseY = ( CDTXMania.ConfigIni.bReverse.Bass ? 100 : 300 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );\r
152                                                                         break;\r
153                                                                 case E判定文字表示位置.レーン上:\r
154                                                                         baseX = this.stレーンサイズ[ j ].x;\r
155                                                                         //baseY = ( CDTXMania.ConfigIni.bReverse.Bass ? 240 : 180 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );\r
156                                                                         yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.ConfigIni.bReverse.Bass );\r
157                                                                         baseY = ( CDTXMania.ConfigIni.bReverse.Bass ? yB - 134 : yB + 85 ) +( this.n文字の縦表示位置[ j ] * 0x20 );\r
158                                                                         break;\r
159                                                                 case E判定文字表示位置.判定ライン上:\r
160                                                                         baseX = this.stレーンサイズ[ j ].x;\r
161                                                                         yB = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, CDTXMania.ConfigIni.bReverse.Bass );\r
162                                                                         baseY = CDTXMania.ConfigIni.bReverse.Bass ? yB + 30 : yB - 24;\r
163                                                                         break;\r
164                                                         }\r
165                                                 }\r
166                                                 else if( j == 10 )      // Guitar\r
167                                                 {\r
168                                                         if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )\r
169                                                         {\r
170                                                                 continue;\r
171                                                         }\r
172                                                         int yG;\r
173                                                         switch ( CDTXMania.ConfigIni.判定文字表示位置.Guitar )\r
174                                                         {\r
175                                                             case E判定文字表示位置.コンボ下:\r
176                                                                         baseX = ( CDTXMania.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x : 0x198;\r
177                                                                         baseY = ( CDTXMania.ConfigIni.bReverse.Guitar ? 100 : 300 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );\r
178                                                                         break;\r
179                                                             case E判定文字表示位置.レーン上:\r
180                                                                         baseX = ( CDTXMania.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x : 0x198;\r
181                                                                         //baseY = ( CDTXMania.ConfigIni.bReverse.Guitar ? 240 : 180 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );\r
182                                                                         yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.ConfigIni.bReverse.Guitar );\r
183                                                                         baseY = ( CDTXMania.ConfigIni.bReverse.Guitar ? yG - 134 : yG + 85 ) + ( this.n文字の縦表示位置[ j ] * 0x20 );\r
184                                                                         break;\r
185                                                             case E判定文字表示位置.判定ライン上:\r
186                                                                         baseX = ( CDTXMania.DTX.bチップがある.Bass ) ? this.stレーンサイズ[ j ].x : 0x198;\r
187                                                                         yG = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, CDTXMania.ConfigIni.bReverse.Guitar );\r
188                                                                 baseY = CDTXMania.ConfigIni.bReverse.Guitar ? yG + 30 : yG - 24;\r
189                                                                 break;\r
190                                                         }\r
191                                                 }\r
192                                                 int xc = ( ( baseX + base.st状態[ j ].n相対X座標 ) + ( this.stレーンサイズ[ j ].w / 2 ) );  // Xcenter座標\r
193                                                 int x = xc - ( (int) ( ( 64f * base.st状態[ j ].fX方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) );\r
194                                                 int y = ( baseY + base.st状態[ j ].n相対Y座標 ) - ( (int) ( ( ( 43f * base.st状態[ j ].fY方向拡大率 ) * ( ( j < 10 ) ? 1.0 : 0.7 ) ) / 2.0 ) );\r
195                                                 if( base.tx判定文字列[ index ] != null )\r
196                                                 {\r
197                                                         base.tx判定文字列[ index ].n透明度 = base.st状態[ j ].n透明度;\r
198                                                         base.tx判定文字列[ index ].vc拡大縮小倍率 = new Vector3( (float) ( base.st状態[ j ].fX方向拡大率 * ( ( j < 10 ) ? 1.0 : 0.7 ) ), (float) ( base.st状態[ j ].fY方向拡大率 * ( ( j < 10 ) ? 1.0 : 0.7 ) ), 1f );\r
199                                                         base.tx判定文字列[ index ].t2D描画( CDTXMania.app.Device, x, y, base.st判定文字列[ (int) base.st状態[ j ].judge ].rc );\r
200 \r
201                                                         #region [ #25370 2011.6.3 yyagi ShowLag support ]\r
202                                                         if ( base.nShowLagType == (int) EShowLagType.ON ||\r
203                                                                  ( ( base.nShowLagType == (int) EShowLagType.GREAT_POOR ) && ( base.st状態[ j ].judge != E判定.Perfect ) ) )\r
204                                                         {\r
205                                                                 if ( base.st状態[ j ].judge != E判定.Auto && base.txlag数値 != null )             // #25370 2011.2.1 yyagi\r
206                                                                 {\r
207                                                                         bool minus = false;\r
208                                                                         int offsetX = 0;\r
209                                                                         string strDispLag = base.st状態[ j ].nLag.ToString();\r
210                                                                         if ( st状態[ j ].nLag < 0 )\r
211                                                                         {\r
212                                                                                 minus = true;\r
213                                                                         }\r
214                                                                         x = xc - strDispLag.Length * 15 / 2;\r
215                                                                         for ( int i = 0; i < strDispLag.Length; i++ )\r
216                                                                         {\r
217                                                                                 int p = ( strDispLag[ i ] == '-' ) ? 11 : (int) ( strDispLag[ i ] - '0' );      //int.Parse(strDispLag[i]);\r
218                                                                                 p += minus ? 0 : 12;            // change color if it is minus value\r
219                                                                                 base.txlag数値.t2D描画( CDTXMania.app.Device, x + offsetX, y + 34, base.stLag数値[ p ].rc );\r
220                                                                                 offsetX += 15;\r
221                                                                         }\r
222                                                                 }\r
223                                                         }\r
224                                                         #endregion\r
225                                                 }\r
226                                         // Label_07FC: ;\r
227                                         }\r
228                                 }\r
229                         }\r
230                         return 0;\r
231                 }\r
232                 \r
233 \r
234                 // その他\r
235 \r
236                 #region [ private ]\r
237                 //-----------------\r
238                 [StructLayout( LayoutKind.Sequential )]\r
239                 private struct STレーンサイズ\r
240                 {\r
241                         public int x;\r
242                         public int w;\r
243                 }\r
244 \r
245                 private readonly int[] n文字の縦表示位置 = new int[] { 1, 2, 0, 1, 3, 2, 1, 0, 0, 0, 1, 1 };\r
246                 private STレーンサイズ[] stレーンサイズ;\r
247                 //-----------------\r
248                 #endregion\r
249         }\r
250 }\r