OSDN Git Service

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