OSDN Git Service

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