OSDN Git Service

#28195 ESCでCONFIGを抜けたときに、スキンサウンドが切り替わらない問題を修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 04.コンフィグ / CStageコンフィグ.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Globalization;\r
5 using System.Runtime.InteropServices;\r
6 using System.Drawing;\r
7 using System.Diagnostics;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CStageコンフィグ : CStage\r
13         {\r
14                 // プロパティ\r
15 \r
16                 public CActDFPFont actFont { get; private set; }\r
17 \r
18 \r
19                 // コンストラクタ\r
20 \r
21                 public CStageコンフィグ()\r
22                 {\r
23                         CActDFPFont font;\r
24                         base.eステージID = CStage.Eステージ.コンフィグ;\r
25                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
26                         this.actFont = font = new CActDFPFont();\r
27                         base.list子Activities.Add( font );\r
28                         base.list子Activities.Add( this.actFIFO = new CActFIFOWhite() );\r
29                         base.list子Activities.Add( this.actList = new CActConfigList() );\r
30                         base.list子Activities.Add( this.actKeyAssign = new CActConfigKeyAssign() );\r
31                         base.list子Activities.Add( this.actオプションパネル = new CActオプションパネル() );\r
32                         base.b活性化してない = true;\r
33                 }\r
34                 \r
35                 \r
36                 // メソッド\r
37 \r
38                 public void tアサイン完了通知()                                                                                                                 // CONFIGにのみ存在\r
39                 {                                                                                                                                                                               //\r
40                         this.eItemPanelモード = EItemPanelモード.パッド一覧;                                                         //\r
41                 }                                                                                                                                                                               //\r
42                 public void tパッド選択通知( EKeyConfigPart part, EKeyConfigPad pad )                                                    //\r
43                 {                                                                                                                                                                               //\r
44                         this.actKeyAssign.t開始( part, pad, this.actList.ib現在の選択項目.str項目名 );              //\r
45                         this.eItemPanelモード = EItemPanelモード.キーコード一覧;                                                   //\r
46                 }                                                                                                                                                                               //\r
47                 public void t項目変更通知()                                                                                                                               // OPTIONと共通\r
48                 {                                                                                                                                                                               //\r
49                         this.t説明文パネルに現在選択されている項目の説明を描画する();                                         //\r
50                 }                                                                                                                                                                               //\r
51 \r
52                 \r
53                 // CStage 実装\r
54 \r
55                 public override void On活性化()\r
56                 {\r
57                         Trace.TraceInformation( "コンフィグステージを活性化します。" );\r
58                         Trace.Indent();\r
59                         try\r
60                         {\r
61                                 this.n現在のメニュー番号 = 0;                                                                                                  //\r
62                                 this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel );                        //\r
63                                 for( int i = 0; i < 4; i++ )                                                                                                    //\r
64                                 {                                                                                                                                                               //\r
65                                         this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );                 //\r
66                                 }                                                                                                                                                               //\r
67                                 this.bメニューにフォーカス中 = true;                                                                                 // ここまでOPTIONと共通\r
68                                 this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
69                                 strSkinSubfolder = CSkin.strSkinSubfolder;                                                                              // CONFIGに入る前に、現在使用中のSkin名を保持 \r
70                         }\r
71                         finally\r
72                         {\r
73                                 Trace.TraceInformation( "コンフィグステージの活性化を完了しました。" );\r
74                                 Trace.Unindent();\r
75                         }\r
76                         base.On活性化();             // 2011.3.14 yyagi: On活性化()をtryの中から外に移動\r
77                 }\r
78                 public override void On非活性化()\r
79                 {\r
80                         Trace.TraceInformation( "コンフィグステージを非活性化します。" );\r
81                         Trace.Indent();\r
82                         try\r
83                         {\r
84                                 CDTXMania.ConfigIni.t書き出し( CDTXMania.strEXEのあるフォルダ + "Config.ini" );      // CONFIGだけ\r
85                                 if( this.ftフォント != null )                                                                                                       // 以下OPTIONと共通\r
86                                 {\r
87                                         this.ftフォント.Dispose();\r
88                                         this.ftフォント = null;\r
89                                 }\r
90                                 for( int i = 0; i < 4; i++ )\r
91                                 {\r
92                                         this.ctキー反復用[ i ] = null;\r
93                                 }\r
94                                 base.On非活性化();\r
95                         }\r
96                         finally\r
97                         {\r
98                                 Trace.TraceInformation( "コンフィグステージの非活性化を完了しました。" );\r
99                                 Trace.Unindent();\r
100                         }\r
101                 }\r
102                 public override void OnManagedリソースの作成()                                                                                   // OPTIONと画像以外共通\r
103                 {\r
104                         if( !base.b活性化してない )\r
105                         {\r
106                                 this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig background.jpg" ), false );\r
107                                 this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig header panel.png" ), true );\r
108                                 this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig footer panel.png" ), true );\r
109                                 this.txMenuカーソル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );\r
110                                 if( this.bメニューにフォーカス中 )\r
111                                 {\r
112                                         this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
113                                 }\r
114                                 else\r
115                                 {\r
116                                         this.t説明文パネルに現在選択されている項目の説明を描画する();\r
117                                 }\r
118                                 base.OnManagedリソースの作成();\r
119                         }\r
120                 }\r
121                 public override void OnManagedリソースの解放()                                                                                   // OPTIONと同じ(COnfig.iniの書き出しタイミングのみ異なるが、無視して良い)\r
122                 {\r
123                         if( !base.b活性化してない )\r
124                         {\r
125                                 CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
126                                 CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
127                                 CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
128                                 CDTXMania.tテクスチャの解放( ref this.txMenuカーソル );\r
129                                 CDTXMania.tテクスチャの解放( ref this.tx説明文パネル );\r
130                                 base.OnManagedリソースの解放();\r
131                         }\r
132                 }\r
133                 public override int On進行描画()\r
134                 {\r
135                         if( base.b活性化してない )\r
136                                 return 0;\r
137 \r
138                         if( base.b初めての進行描画 )\r
139                         {\r
140                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
141                                 this.actFIFO.tフェードイン開始();\r
142                                 base.b初めての進行描画 = false;\r
143                         }\r
144 \r
145                         // 描画\r
146 \r
147                         #region [ 背景 ]\r
148                         //---------------------\r
149                         if( this.tx背景 != null )\r
150                                 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
151                         //---------------------\r
152                         #endregion\r
153                         #region [ メニューカーソル ]\r
154                         //---------------------\r
155                         if( this.txMenuカーソル != null )\r
156                         {\r
157                                 Rectangle rectangle;\r
158                                 this.txMenuカーソル.n透明度 = this.bメニューにフォーカス中 ? 0xff : 0x80;\r
159                                 int x = 0x37;\r
160                                 int y = 0x61 + ( this.n現在のメニュー番号 * 0x19 );\r
161                                 int num3 = 170;\r
162                                 this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0, 0x10, 0x20 ) );\r
163                                 this.txMenuカーソル.t2D描画( CDTXMania.app.Device, ( x + num3 ) - 0x10, y, new Rectangle( 10, 0, 0x10, 0x20 ) );\r
164                                 x += 0x10;\r
165                                 for( num3 -= 0x20; num3 > 0; num3 -= rectangle.Width )\r
166                                 {\r
167                                         rectangle = new Rectangle( 8, 0, 0x10, 0x20 );\r
168                                         if( num3 < 0x10 )\r
169                                         {\r
170                                                 rectangle.Width -= 0x10 - num3;\r
171                                         }\r
172                                         this.txMenuカーソル.t2D描画( CDTXMania.app.Device, x, y, rectangle );\r
173                                         x += rectangle.Width;\r
174                                 }\r
175                         }\r
176                         //---------------------\r
177                         #endregion\r
178                         #region [ メニュー ]\r
179                         //---------------------\r
180                         string str = "System";\r
181                         int num4 = this.actFont.n文字列長dot( str );\r
182                         bool flag = this.n現在のメニュー番号 == 0;\r
183                         this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 100, str, flag );\r
184                         //str = "Drums Keys";\r
185                         //num4 = this.actFont.n文字列長dot( str );\r
186                         //flag = this.n現在のメニュー番号 == 1;\r
187                         //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0x7d, str, flag );\r
188                         //str = "Guitar Keys";\r
189                         //num4 = this.actFont.n文字列長dot( str );\r
190                         //flag = this.n現在のメニュー番号 == 2;\r
191                         //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 150, str, flag );\r
192                         //str = "Bass Keys";\r
193                         //num4 = this.actFont.n文字列長dot( str );\r
194                         //flag = this.n現在のメニュー番号 == 3;\r
195                         //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0xaf, str, flag );\r
196                         //str = "Exit";\r
197                         //num4 = this.actFont.n文字列長dot( str );\r
198                         //flag = this.n現在のメニュー番号 == 4;\r
199                         //this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 200, str, flag );\r
200                         str = "Drums";\r
201                         num4 = this.actFont.n文字列長dot( str );\r
202                         flag = this.n現在のメニュー番号 == 1;\r
203                         this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0x7d, str, flag );\r
204                         str = "Guitar";\r
205                         num4 = this.actFont.n文字列長dot( str );\r
206                         flag = this.n現在のメニュー番号 == 2;\r
207                         this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 150, str, flag );\r
208                         str = "Bass";\r
209                         num4 = this.actFont.n文字列長dot( str );\r
210                         flag = this.n現在のメニュー番号 == 3;\r
211                         this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 0xaf, str, flag );\r
212                         str = "Exit";\r
213                         num4 = this.actFont.n文字列長dot( str );\r
214                         flag = this.n現在のメニュー番号 == 4;\r
215                         this.actFont.t文字列描画( 0x8a - ( num4 / 2 ), 200, str, flag );\r
216 \r
217                         //---------------------\r
218                         #endregion\r
219                         #region [ 説明文パネル ]\r
220                         //---------------------\r
221                         if( this.tx説明文パネル != null )\r
222                                 this.tx説明文パネル.t2D描画( CDTXMania.app.Device, 0x1d, 0xf8 );\r
223                         //---------------------\r
224                         #endregion\r
225                         #region [ アイテム ]\r
226                         //---------------------\r
227                         switch( this.eItemPanelモード )\r
228                         {\r
229                                 case EItemPanelモード.パッド一覧:\r
230                                         this.actList.t進行描画( !this.bメニューにフォーカス中 );\r
231                                         break;\r
232 \r
233                                 case EItemPanelモード.キーコード一覧:\r
234                                         this.actKeyAssign.On進行描画();\r
235                                         break;\r
236                         }\r
237                         //---------------------\r
238                         #endregion\r
239                         #region [ 上部パネル ]\r
240                         //---------------------\r
241                         if( this.tx上部パネル != null )\r
242                                 this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, 0 );\r
243                         //---------------------\r
244                         #endregion\r
245                         #region [ 下部パネル ]\r
246                         //---------------------\r
247                         if( this.tx下部パネル != null )\r
248                                 this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.szテクスチャサイズ.Height );\r
249                         //---------------------\r
250                         #endregion\r
251                         #region [ オプションパネル ]\r
252                         //---------------------\r
253                         this.actオプションパネル.On進行描画();\r
254                         //---------------------\r
255                         #endregion\r
256                         #region [ フェードイン・アウト ]\r
257                         //---------------------\r
258                         switch( base.eフェーズID )\r
259                         {\r
260                                 case CStage.Eフェーズ.共通_フェードイン:\r
261                                         if( this.actFIFO.On進行描画() != 0 )\r
262                                         {\r
263                                                 CDTXMania.Skin.bgmコンフィグ画面.t再生する();\r
264                                                 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
265                                         }\r
266                                         break;\r
267 \r
268                                 case CStage.Eフェーズ.共通_フェードアウト:\r
269                                         if( this.actFIFO.On進行描画() == 0 )\r
270                                         {\r
271                                                 break;\r
272                                         }\r
273                                         return 1;\r
274                         }\r
275                         //---------------------\r
276                         #endregion\r
277 \r
278                         // キー入力\r
279 \r
280                         if( ( base.eフェーズID != CStage.Eフェーズ.共通_通常状態 )\r
281                                 || this.actKeyAssign.bキー入力待ちの最中である\r
282                                 || CDTXMania.act現在入力を占有中のプラグイン != null )\r
283                                 return 0;\r
284 \r
285                         if( ( CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) )\r
286                         {\r
287                                 CDTXMania.Skin.sound取消音.t再生する();\r
288                                 if( !this.bメニューにフォーカス中 )\r
289                                 {\r
290                                         if( this.eItemPanelモード == EItemPanelモード.キーコード一覧 )\r
291                                         {\r
292                                                 CDTXMania.stageコンフィグ.tアサイン完了通知();\r
293                                                 return 0;\r
294                                         }\r
295                                         if ( this.actList.bIsKeyAssignSelected == false )               // #24525 2011.3.15 yyagi\r
296                                         {\r
297                                                 this.bメニューにフォーカス中 = true;\r
298                                         }\r
299                                         this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
300                                         this.actList.tEsc押下();                                                              // #24525 2011.3.15 yyagi ESC押下時の右メニュー描画用\r
301                                 }\r
302                                 else\r
303                                 {\r
304                                         this.actFIFO.tフェードアウト開始();\r
305                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
306                                 }\r
307                         }\r
308                         else if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Return) ) ) )\r
309                         {\r
310                                 if( this.n現在のメニュー番号 == 4 )\r
311                                 {\r
312                                         CDTXMania.Skin.sound決定音.t再生する();\r
313                                         this.actFIFO.tフェードアウト開始();\r
314                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
315                                 }\r
316                                 else if( this.bメニューにフォーカス中 )\r
317                                 {\r
318                                         CDTXMania.Skin.sound決定音.t再生する();\r
319                                         this.bメニューにフォーカス中 = false;\r
320                                         this.t説明文パネルに現在選択されている項目の説明を描画する();\r
321                                 }\r
322                                 else\r
323                                 {\r
324                                         switch( this.eItemPanelモード )\r
325                                         {\r
326                                                 case EItemPanelモード.パッド一覧:\r
327                                                         bool bIsKeyAssignSelectedBeforeHitEnter = this.actList.bIsKeyAssignSelected;    // #24525 2011.3.15 yyagi\r
328                                                         this.actList.tEnter押下();\r
329                                                         if( this.actList.b現在選択されている項目はReturnToMenuである )\r
330                                                         {\r
331                                                                 this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
332                                                                 if ( bIsKeyAssignSelectedBeforeHitEnter == false )                                                      // #24525 2011.3.15 yyagi\r
333                                                                 {\r
334                                                                         this.bメニューにフォーカス中 = true;\r
335                                                                 }\r
336                                                         }\r
337                                                         break;\r
338 \r
339                                                 case EItemPanelモード.キーコード一覧:\r
340                                                         this.actKeyAssign.tEnter押下();\r
341                                                         break;\r
342                                         }\r
343                                 }\r
344                         }\r
345                         this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.UpArrow ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
346                         this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );\r
347                         if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
348                         {\r
349                                 this.tカーソルを上へ移動する();\r
350                         }\r
351                         this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.DownArrow ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
352                         this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );\r
353                         if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
354                         {\r
355                                 this.tカーソルを下へ移動する();\r
356                         }\r
357                         return 0;\r
358                 }\r
359 \r
360 \r
361                 // その他\r
362 \r
363                 #region [ private ]\r
364                 //-----------------\r
365                 private enum EItemPanelモード\r
366                 {\r
367                         パッド一覧,\r
368                         キーコード一覧\r
369                 }\r
370 \r
371                 [StructLayout( LayoutKind.Sequential )]\r
372                 private struct STキー反復用カウンタ\r
373                 {\r
374                         public CCounter Up;\r
375                         public CCounter Down;\r
376                         public CCounter R;\r
377                         public CCounter B;\r
378                         public CCounter this[ int index ]\r
379                         {\r
380                                 get\r
381                                 {\r
382                                         switch( index )\r
383                                         {\r
384                                                 case 0:\r
385                                                         return this.Up;\r
386 \r
387                                                 case 1:\r
388                                                         return this.Down;\r
389 \r
390                                                 case 2:\r
391                                                         return this.R;\r
392 \r
393                                                 case 3:\r
394                                                         return this.B;\r
395                                         }\r
396                                         throw new IndexOutOfRangeException();\r
397                                 }\r
398                                 set\r
399                                 {\r
400                                         switch( index )\r
401                                         {\r
402                                                 case 0:\r
403                                                         this.Up = value;\r
404                                                         return;\r
405 \r
406                                                 case 1:\r
407                                                         this.Down = value;\r
408                                                         return;\r
409 \r
410                                                 case 2:\r
411                                                         this.R = value;\r
412                                                         return;\r
413 \r
414                                                 case 3:\r
415                                                         this.B = value;\r
416                                                         return;\r
417                                         }\r
418                                         throw new IndexOutOfRangeException();\r
419                                 }\r
420                         }\r
421                 }\r
422 \r
423                 private CActFIFOWhite actFIFO;\r
424                 private CActConfigKeyAssign actKeyAssign;\r
425                 private CActConfigList actList;\r
426                 private CActオプションパネル actオプションパネル;\r
427                 private bool bメニューにフォーカス中;\r
428                 private STキー反復用カウンタ ctキー反復用;\r
429                 private const int DESC_H = 0x80;\r
430                 private const int DESC_W = 220;\r
431                 private EItemPanelモード eItemPanelモード;\r
432                 private Font ftフォント;\r
433                 private int n現在のメニュー番号;\r
434                 private CTexture txMenuカーソル;\r
435                 private CTexture tx下部パネル;\r
436                 private CTexture tx上部パネル;\r
437                 private CTexture tx説明文パネル;\r
438                 private CTexture tx背景;\r
439                 private string strSkinSubfolder;\r
440 \r
441                 private void tカーソルを下へ移動する()\r
442                 {\r
443                         if( !this.bメニューにフォーカス中 )\r
444                         {\r
445                                 switch( this.eItemPanelモード )\r
446                                 {\r
447                                         case EItemPanelモード.パッド一覧:\r
448                                                 this.actList.t次に移動();\r
449                                                 return;\r
450 \r
451                                         case EItemPanelモード.キーコード一覧:\r
452                                                 this.actKeyAssign.t次に移動();\r
453                                                 return;\r
454                                 }\r
455                         }\r
456                         else\r
457                         {\r
458                                 CDTXMania.Skin.soundカーソル移動音.t再生する();\r
459                                 this.n現在のメニュー番号 = ( this.n現在のメニュー番号 + 1 ) % 5;\r
460                                 switch( this.n現在のメニュー番号 )\r
461                                 {\r
462                                         case 0:\r
463                                                 this.actList.t項目リストの設定・System();\r
464                                                 break;\r
465 \r
466                                         //case 1:\r
467                                         //    this.actList.t項目リストの設定・KeyAssignDrums();\r
468                                         //    break;\r
469 \r
470                                         //case 2:\r
471                                         //    this.actList.t項目リストの設定・KeyAssignGuitar();\r
472                                         //    break;\r
473 \r
474                                         //case 3:\r
475                                         //    this.actList.t項目リストの設定・KeyAssignBass();\r
476                                         //    break;\r
477 \r
478                                         case 1:\r
479                                                 this.actList.t項目リストの設定・Drums();\r
480                                                 break;\r
481 \r
482                                         case 2:\r
483                                                 this.actList.t項目リストの設定・Guitar();\r
484                                                 break;\r
485 \r
486                                         case 3:\r
487                                                 this.actList.t項目リストの設定・Bass();\r
488                                                 break;\r
489 \r
490                                         case 4:\r
491                                                 this.actList.t項目リストの設定・Exit();\r
492                                                 break;\r
493                                 }\r
494                                 this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
495                         }\r
496                 }\r
497                 private void tカーソルを上へ移動する()\r
498                 {\r
499                         if( !this.bメニューにフォーカス中 )\r
500                         {\r
501                                 switch( this.eItemPanelモード )\r
502                                 {\r
503                                         case EItemPanelモード.パッド一覧:\r
504                                                 this.actList.t前に移動();\r
505                                                 return;\r
506 \r
507                                         case EItemPanelモード.キーコード一覧:\r
508                                                 this.actKeyAssign.t前に移動();\r
509                                                 return;\r
510                                 }\r
511                         }\r
512                         else\r
513                         {\r
514                                 CDTXMania.Skin.soundカーソル移動音.t再生する();\r
515                                 this.n現在のメニュー番号 = ( ( this.n現在のメニュー番号 - 1 ) + 5 ) % 5;\r
516                                 switch( this.n現在のメニュー番号 )\r
517                                 {\r
518                                         case 0:\r
519                                                 this.actList.t項目リストの設定・System();\r
520                                                 break;\r
521 \r
522                                         //case 1:\r
523                                         //    this.actList.t項目リストの設定・KeyAssignDrums();\r
524                                         //    break;\r
525 \r
526                                         //case 2:\r
527                                         //    this.actList.t項目リストの設定・KeyAssignGuitar();\r
528                                         //    break;\r
529 \r
530                                         //case 3:\r
531                                         //    this.actList.t項目リストの設定・KeyAssignBass();\r
532                                         //    break;\r
533                                         case 1:\r
534                                                 this.actList.t項目リストの設定・Drums();\r
535                                                 break;\r
536 \r
537                                         case 2:\r
538                                                 this.actList.t項目リストの設定・Guitar();\r
539                                                 break;\r
540 \r
541                                         case 3:\r
542                                                 this.actList.t項目リストの設定・Bass();\r
543                                                 break;\r
544 \r
545                                         case 4:\r
546                                                 this.actList.t項目リストの設定・Exit();\r
547                                                 break;\r
548                                 }\r
549                                 this.t説明文パネルに現在選択されているメニューの説明を描画する();\r
550                         }\r
551                 }\r
552                 private void t説明文パネルに現在選択されているメニューの説明を描画する()\r
553                 {\r
554                         try\r
555                         {\r
556                                 var image = new Bitmap( 220 * 2, 192 * 2 );             // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する。)\r
557                                 var graphics = Graphics.FromImage( image );\r
558                                 graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
559                                 \r
560                                 string[,] str = new string[ 2, 2 ];\r
561                                 switch( this.n現在のメニュー番号 )\r
562                                 {\r
563                                         case 0:\r
564                                                 str[ 0, 0 ] = "システムに関係する項目を設定しま";\r
565                                                 str[ 0, 1 ] = "す。";\r
566                                                 str[ 1, 0 ] = "Settings for an overall systems.";\r
567                                                 break;\r
568 \r
569                                         //case 1:\r
570                                         //    str[0, 0] = "ドラムのキー入力に関する項目を設";\r
571                                         //    str[0, 1] = "定します。";\r
572                                         //    str[1, 0] = "Settings for the drums key/pad inputs.";\r
573                                         //    str[1, 1] = "";\r
574                                         //    break;\r
575 \r
576                                         //case 2:\r
577                                         //    str[0, 0] = "ギターのキー入力に関する項目を設";\r
578                                         //    str[0, 1] = "定します。";\r
579                                         //    str[1, 0] = "Settings for the guitar key/pad inputs.";\r
580                                         //    str[1, 1] = "";\r
581                                         //    break;\r
582 \r
583                                         //case 3:\r
584                                         //    str[0, 0] = "ベースのキー入力に関する項目を設";\r
585                                         //    str[0, 1] = "定します。";\r
586                                         //    str[1, 0] = "Settings for the bass key/pad inputs.";\r
587                                         //    str[1, 1] = "";\r
588                                         //    break;\r
589                                         case 1:\r
590                                                 str[ 0, 0 ] = "ドラムの演奏に関する項目を設定し";\r
591                                                 str[ 0, 1 ] = "ます。";\r
592                                                 str[ 1, 0 ] = "Settings to play the drums.";\r
593                                                 str[ 1, 1 ] = "";\r
594                                                 break;\r
595 \r
596                                         case 2:\r
597                                                 str[ 0, 0 ] = "ギターの演奏に関する項目を設定し";\r
598                                                 str[ 0, 1 ] = "ます。";\r
599                                                 str[ 1, 0 ] = "Settings to play the guitar.";\r
600                                                 str[ 1, 1 ] = "";\r
601                                                 break;\r
602 \r
603                                         case 3:\r
604                                                 str[ 0, 0 ] = "ベースの演奏に関する項目を設定し";\r
605                                                 str[ 0, 1 ] = "ます。";\r
606                                                 str[ 1, 0 ] = "Settings to play the bass.";\r
607                                                 str[ 1, 1 ] = "";\r
608                                                 break;\r
609 \r
610                                         case 4:\r
611                                                 str[ 0, 0 ] = "設定を保存し、コンフィグ画面を終了";\r
612                                                 str[ 0, 1 ] = "します。";\r
613                                                 str[ 1, 0 ] = "Save the settings and exit from";\r
614                                                 str[ 1, 1 ] = "CONFIGURATION menu.";\r
615                                                 break;\r
616                                 }\r
617                                 \r
618                                 int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
619                                 for (int i = 0; i < 2; i++)\r
620                                 {\r
621                                         graphics.DrawString( str[ c, i ], this.ftフォント, Brushes.White, new PointF( 4f, ( i * 30 ) ) );\r
622                                 }\r
623                                 graphics.Dispose();\r
624                                 if( this.tx説明文パネル != null )\r
625                                 {\r
626                                         this.tx説明文パネル.Dispose();\r
627                                 }\r
628                                 this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
629                                 this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
630                                 this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
631                                 image.Dispose();\r
632                         }\r
633                         catch( CTextureCreateFailedException )\r
634                         {\r
635                                 Trace.TraceError( "説明文テクスチャの作成に失敗しました。" );\r
636                                 this.tx説明文パネル = null;\r
637                         }\r
638                 }\r
639                 private void t説明文パネルに現在選択されている項目の説明を描画する()\r
640                 {\r
641                         try\r
642                         {\r
643                                 var image = new Bitmap( 220 * 2, 192 * 2 );             // 説明文領域サイズの縦横 2 倍。(描画時に 0.5 倍で表示する。)\r
644                                 var graphics = Graphics.FromImage( image );\r
645                                 graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
646 \r
647                                 CItemBase item = this.actList.ib現在の選択項目;\r
648                                 if( ( item.str説明文 != null ) && ( item.str説明文.Length > 0 ) )\r
649                                 {\r
650                                         int num = 0;\r
651                                         foreach( string str in item.str説明文.Split( new char[] { '\n' } ) )\r
652                                         {\r
653                                                 graphics.DrawString( str, this.ftフォント, Brushes.White, new PointF( 4f, (float) num ) );\r
654                                                 num += 30;\r
655                                         }\r
656                                 }\r
657                                 graphics.Dispose();\r
658                                 if( this.tx説明文パネル != null )\r
659                                 {\r
660                                         this.tx説明文パネル.Dispose();\r
661                                 }\r
662                                 this.tx説明文パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
663                                 this.tx説明文パネル.vc拡大縮小倍率.X = 0.5f;\r
664                                 this.tx説明文パネル.vc拡大縮小倍率.Y = 0.5f;\r
665                                 image.Dispose();\r
666                         }\r
667                         catch( CTextureCreateFailedException )\r
668                         {\r
669                                 Trace.TraceError( "説明文パネルテクスチャの作成に失敗しました。" );\r
670                                 this.tx説明文パネル = null;\r
671                         }\r
672                 }\r
673                 //-----------------\r
674                 #endregion\r
675         }\r
676 }\r