OSDN Git Service

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