OSDN Git Service

#37177 キーアサインでPOVを登録すると、同じ方向のHATが消える問題を修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 04.コンフィグ / CActConfigKeyAssign.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using FDK;\r
7 using SharpDX;\r
8 \r
9 using Rectangle = System.Drawing.Rectangle;\r
10 using Color = System.Drawing.Color;\r
11 using SlimDXKey = SlimDX.DirectInput.Key;\r
12 \r
13 namespace DTXMania\r
14 {\r
15         internal class CActConfigKeyAssign : CActivity\r
16         {\r
17                 public bool bキー入力待ちの最中である\r
18                 {\r
19                         get\r
20                         {\r
21                                 return this.bキー入力待ち;\r
22                         }\r
23                 }\r
24 \r
25                 public void t開始(EPad pad, string strパッド名)\r
26                 {\r
27                         this.pad = pad;\r
28                         this.strパッド名 = strパッド名;\r
29                         for (int i = 0; i < CConfigXml.AssignableCodes - 2; i++)\r
30                         {\r
31                                 this.structReset用KeyAssign[i].InputDevice = CDTXMania.Instance.ConfigIni.KeyAssign[pad][i].入力デバイス;\r
32                                 this.structReset用KeyAssign[i].ID = CDTXMania.Instance.ConfigIni.KeyAssign[pad][i].ID;\r
33                                 this.structReset用KeyAssign[i].Code = CDTXMania.Instance.ConfigIni.KeyAssign[pad][i].コード;\r
34                         }\r
35                 }\r
36 \r
37                 public void tEnter押下()\r
38                 {\r
39                         if (!this.bキー入力待ち)\r
40                         {\r
41                                 CDTXMania.Instance.Skin.sound決定音.t再生する();\r
42                                 if (ptr == CConfigXml.AssignableCodes - 2)\r
43                                 {\r
44                                         for (int i = 0; i < CConfigXml.AssignableCodes - 2; i++)\r
45                                         {\r
46                                                 CDTXMania.Instance.ConfigIni.KeyAssign[pad][i].CopyFrom(this.structReset用KeyAssign[i]);\r
47                                         }\r
48                                         return;\r
49                                 }\r
50                                 else if (ptr == CConfigXml.AssignableCodes - 1)\r
51                                 {\r
52 \r
53                                         CDTXMania.Instance.stageコンフィグ.tアサイン完了通知();\r
54                                         return;\r
55                                 }\r
56                                 this.bキー入力待ち = true;\r
57                         }\r
58                 }\r
59 \r
60                 public void OnNext()\r
61                 {\r
62                         if (!this.bキー入力待ち)\r
63                         {\r
64                                 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();\r
65                                 ptr++;\r
66                                 ptr %= CConfigXml.AssignableCodes;\r
67                         }\r
68                 }\r
69 \r
70                 public void OnPrevious()\r
71                 {\r
72                         if (!this.bキー入力待ち)\r
73                         {\r
74                                 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();\r
75                                 --ptr;\r
76                                 ptr += CConfigXml.AssignableCodes;\r
77                                 ptr %= CConfigXml.AssignableCodes;\r
78                         }\r
79                 }\r
80 \r
81                 public override void On活性化()\r
82                 {\r
83                         if (base.b活性化してない)\r
84                         {\r
85                                 this.pad = EPad.Unknown;\r
86                                 this.strパッド名 = "";\r
87                                 this.ptr = 0;\r
88                                 this.bキー入力待ち = false;\r
89                                 this.structReset用KeyAssign = new CKeyAssign[CConfigXml.AssignableCodes - 2];\r
90                                 for (int i = 0; i < this.structReset用KeyAssign.Length; ++i)\r
91                                 {\r
92                                         structReset用KeyAssign[i] = new CKeyAssign(EInputDevice.Unknown, 0, 0);\r
93                                 }\r
94 \r
95                                 base.On活性化();\r
96                         }\r
97                 }\r
98 \r
99                 public override void On非活性化()\r
100                 {\r
101                         if (base.b活性化してる)\r
102                         {\r
103                                 TextureFactory.tテクスチャの解放(ref this.txカーソル);\r
104                                 TextureFactory.tテクスチャの解放(ref this.txHitKeyダイアログ);\r
105                                 base.On非活性化();\r
106                         }\r
107                 }\r
108 \r
109                 public override void OnManagedリソースの作成()\r
110                 {\r
111                         if (base.b活性化してる)\r
112                         {\r
113                                 this.prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y)); // t項目リストの設定 の前に必要\r
114                                 this.txカーソル = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig menu cursor.png"), false);\r
115                                 this.txHitKeyダイアログ = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig hit key to assign dialog.png"), false);\r
116                                 base.OnManagedリソースの作成();\r
117                         }\r
118                 }\r
119 \r
120                 public override void OnManagedリソースの解放()\r
121                 {\r
122                         if (base.b活性化してる)\r
123                         {\r
124                                 TextureFactory.t安全にDisposeする(ref prvFont);\r
125                         }\r
126                 }\r
127 \r
128                 public override int On進行描画()\r
129                 {\r
130                         if (base.b活性化してる)\r
131                         {\r
132                                 if (this.bキー入力待ち)\r
133                                 {\r
134                                         if (CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDXKey.Escape))\r
135                                         {\r
136                                                 CDTXMania.Instance.Skin.sound取消音.t再生する();\r
137                                                 this.bキー入力待ち = false;\r
138                                                 CDTXMania.Instance.Input管理.tポーリング(CDTXMania.Instance.bApplicationActive, false);\r
139                                         }\r
140                                         else if ((this.tキーチェックとアサイン_Keyboard() || this.tキーチェックとアサイン_MidiIn()) || (this.tキーチェックとアサイン_Joypad() || this.tキーチェックとアサイン_Mouse()))\r
141                                         {\r
142                                                 this.bキー入力待ち = false;\r
143                                                 CDTXMania.Instance.Input管理.tポーリング(CDTXMania.Instance.bApplicationActive, false);\r
144                                         }\r
145                                 }\r
146                                 else if (CDTXMania.Instance.Input管理.Keyboard.bキーが押された((int)SlimDXKey.Delete))\r
147                                 {\r
148                                         CDTXMania.Instance.Skin.sound決定音.t再生する();\r
149                                         CDTXMania.Instance.ConfigIni.KeyAssign[this.pad][ptr].Reset();\r
150                                 }\r
151 \r
152                                 if (this.txカーソル != null)\r
153                                 {\r
154                                         int num = 20;\r
155                                         int num2 = 0x144;\r
156                                         int num3 = 0x3e + (num * (ptr + 1));\r
157                                         this.txカーソル.vc拡大縮小倍率 = new Vector3(1f, 0.75f, 1f);\r
158                                         this.txカーソル.t2D描画(CDTXMania.Instance.Device, num2 * Scale.X, num3 * Scale.Y - 6, new Rectangle(0, 0, (int)(0x10 * Scale.X), (int)(0x20 * Scale.Y)));\r
159                                         num2 += 0x10;\r
160                                         Rectangle rectangle = new Rectangle((int)(8 * Scale.X), 0, (int)(0x10 * Scale.X), (int)(0x20 * Scale.Y));\r
161                                         for (int j = 0; j < 14; j++)\r
162                                         {\r
163                                                 this.txカーソル.t2D描画(CDTXMania.Instance.Device, num2 * Scale.X, num3 * Scale.Y - 6, rectangle);\r
164                                                 num2 += 0x10;\r
165                                         }\r
166                                         this.txカーソル.t2D描画(CDTXMania.Instance.Device, num2 * Scale.X, num3 * Scale.Y - 6, new Rectangle((int)(0x10 * Scale.X), 0, (int)(0x10 * Scale.X), (int)(0x20 * Scale.Y)));\r
167                                 }\r
168 \r
169                                 int num5 = 20;\r
170                                 int x = 0x134;\r
171                                 int y = 0x40;\r
172                                 using (Bitmap bmpStr = prvFont.DrawPrivateFont(this.strパッド名, Color.White, Color.Black))\r
173                                 {\r
174                                         CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr);\r
175                                         txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
176                                         txStr.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y - 20);\r
177                                         TextureFactory.tテクスチャの解放(ref txStr);\r
178                                 }\r
179 \r
180                                 y += num5;\r
181                                 string strParam;\r
182                                 bool b強調;\r
183                                 for (int i = 0; i < CConfigXml.AssignableCodes - 2; i++)\r
184                                 {\r
185                                         COptionKeyAssign stkeyassignArray = CDTXMania.Instance.ConfigIni.KeyAssign[this.pad][i];\r
186                                         switch (stkeyassignArray.入力デバイス)\r
187                                         {\r
188                                                 case EInputDevice.Keyboard:\r
189                                                         this.tアサインコードの描画_Keyboard(i + 1, x + 20, y, stkeyassignArray.ID, stkeyassignArray.コード, ptr == i);\r
190                                                         break;\r
191 \r
192                                                 case EInputDevice.MIDIIn:\r
193                                                         this.tアサインコードの描画_MidiIn(i + 1, x + 20, y, stkeyassignArray.ID, stkeyassignArray.コード, ptr == i);\r
194                                                         break;\r
195 \r
196                                                 case EInputDevice.JoyPad:\r
197                                                         this.tアサインコードの描画_Joypad(i + 1, x + 20, y, stkeyassignArray.ID, stkeyassignArray.コード, ptr == i);\r
198                                                         break;\r
199 \r
200                                                 case EInputDevice.Mouse:\r
201                                                         this.tアサインコードの描画_Mouse(i + 1, x + 20, y, stkeyassignArray.ID, stkeyassignArray.コード, ptr == i);\r
202                                                         break;\r
203 \r
204                                                 default:\r
205                                                         strParam = string.Format("{0,2}.", i + 1);\r
206                                                         b強調 = (ptr == i);\r
207                                                         using (Bitmap bmpStr = b強調 ?\r
208                                                                         prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
209                                                                         prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))\r
210                                                         {\r
211                                                                 CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
212                                                                 txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
213                                                                 txStr.t2D描画(CDTXMania.Instance.Device, (x + 20) * Scale.X, y * Scale.Y - 20);\r
214                                                                 TextureFactory.tテクスチャの解放(ref txStr);\r
215                                                         }\r
216                                                         break;\r
217                                         }\r
218                                         y += num5;\r
219                                 }\r
220 \r
221                                 strParam = "Reset All Assign";\r
222                                 b強調 = (ptr == CConfigXml.AssignableCodes - 2);\r
223                                 using (Bitmap bmpStr = b強調 ?\r
224                                                 prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
225                                                 prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))\r
226                                 {\r
227                                         CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
228                                         txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
229                                         txStr.t2D描画(CDTXMania.Instance.Device, (x + 20) * Scale.X, y * Scale.Y - 20);\r
230                                         TextureFactory.tテクスチャの解放(ref txStr);\r
231                                 }\r
232 \r
233                                 y += num5;\r
234                                 strParam = "<< Returnto List";\r
235                                 b強調 = (ptr == CConfigXml.AssignableCodes - 1);\r
236                                 using (Bitmap bmpStr = b強調 ?\r
237                                                 prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
238                                                 prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))\r
239                                 {\r
240                                         CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
241                                         txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
242                                         txStr.t2D描画(CDTXMania.Instance.Device, (x + 20) * Scale.X, y * Scale.Y - 20);\r
243                                         TextureFactory.tテクスチャの解放(ref txStr);\r
244                                 }\r
245 \r
246                                 if (this.bキー入力待ち && (this.txHitKeyダイアログ != null))\r
247                                 {\r
248                                         this.txHitKeyダイアログ.t2D描画(CDTXMania.Instance.Device, 0x185 * Scale.X, 0xd7 * Scale.Y);\r
249                                 }\r
250                         }\r
251                         return 0;\r
252                 }\r
253 \r
254 \r
255                 // その他\r
256                 [StructLayout(LayoutKind.Sequential)]\r
257                 private struct STKEYLABEL\r
258                 {\r
259                         public int nCode;\r
260                         public string strLabel;\r
261                         public STKEYLABEL(int nCode, string strLabel)\r
262                         {\r
263                                 this.nCode = nCode;\r
264                                 this.strLabel = strLabel;\r
265                         }\r
266                 }\r
267 \r
268                 private bool bキー入力待ち;\r
269 \r
270                 private STKEYLABEL[] KeyLabel = new STKEYLABEL[] {\r
271                         #region [ *** ]\r
272                         new STKEYLABEL((int)SlimDXKey.Escape, "[ESC]"),\r
273                         new STKEYLABEL((int)SlimDXKey.D1, "[ 1 ]"),\r
274                         new STKEYLABEL((int)SlimDXKey.D2, "[ 2 ]"),\r
275                         new STKEYLABEL((int)SlimDXKey.D3, "[ 3 ]"),\r
276                         new STKEYLABEL((int)SlimDXKey.D4, "[ 4 ]"),\r
277                         new STKEYLABEL((int)SlimDXKey.D5, "[ 5 ]"),\r
278                         new STKEYLABEL((int)SlimDXKey.D6, "[ 6 ]"),\r
279                         new STKEYLABEL((int)SlimDXKey.D7, "[ 7 ]"),\r
280                         new STKEYLABEL((int)SlimDXKey.D8, "[ 8 ]"),\r
281                         new STKEYLABEL((int)SlimDXKey.D9, "[ 9 ]"),\r
282                         new STKEYLABEL((int)SlimDXKey.D0, "[ 0 ]"),\r
283                         new STKEYLABEL((int)SlimDXKey.Minus, "[ - ]"),\r
284                         new STKEYLABEL((int)SlimDXKey.Equals, "[ = ]"),\r
285                         new STKEYLABEL((int)SlimDXKey.Backspace, "[BSC]"),\r
286                         new STKEYLABEL((int)SlimDXKey.Tab, "[TAB]"),\r
287                         new STKEYLABEL((int)SlimDXKey.Q, "[ Q ]"),\r
288                         new STKEYLABEL((int)SlimDXKey.W, "[ W ]"),\r
289                         new STKEYLABEL((int)SlimDXKey.E, "[ E ]"),\r
290                         new STKEYLABEL((int)SlimDXKey.R, "[ R ]"),\r
291                         new STKEYLABEL((int)SlimDXKey.T, "[ T ]"),\r
292                         new STKEYLABEL((int)SlimDXKey.Y, "[ Y ]"),\r
293                         new STKEYLABEL((int)SlimDXKey.U, "[ U ]"),\r
294                         new STKEYLABEL((int)SlimDXKey.I, "[ I ]"),\r
295                         new STKEYLABEL((int)SlimDXKey.O, "[ O ]"),\r
296                         new STKEYLABEL((int)SlimDXKey.P, "[ P ]"),\r
297                         new STKEYLABEL((int)SlimDXKey.LeftBracket, "[ [ ]"),\r
298                         new STKEYLABEL((int)SlimDXKey.RightBracket, "[ ] ]"),\r
299                         new STKEYLABEL((int)SlimDXKey.Return, "[Enter]"),\r
300                         new STKEYLABEL((int)SlimDXKey.LeftControl, "[L-Ctrl]"),\r
301                         new STKEYLABEL((int)SlimDXKey.A, "[ A ]"),\r
302                         new STKEYLABEL((int)SlimDXKey.S, "[ S ]"),\r
303                         new STKEYLABEL((int)SlimDXKey.D, "[ D ]"),\r
304                         new STKEYLABEL((int)SlimDXKey.F, "[ F ]"),\r
305                         new STKEYLABEL((int)SlimDXKey.G, "[ G ]"),\r
306                         new STKEYLABEL((int)SlimDXKey.H, "[ H ]"),\r
307                         new STKEYLABEL((int)SlimDXKey.J, "[ J ]"),\r
308                         new STKEYLABEL((int)SlimDXKey.K, "[ K ]"),\r
309                         new STKEYLABEL((int)SlimDXKey.L, "[ L ]"),\r
310                         new STKEYLABEL((int)SlimDXKey.Semicolon, "[ ; ]"),\r
311                         new STKEYLABEL((int)SlimDXKey.Apostrophe, "[ ' ]"),\r
312                         new STKEYLABEL((int)SlimDXKey.Grave, "[ ` ]"),\r
313                         new STKEYLABEL((int)SlimDXKey.LeftShift, "[L-Shift]"),\r
314                         new STKEYLABEL((int)SlimDXKey.Backslash, @"[ \]"),\r
315                         new STKEYLABEL((int)SlimDXKey.Z, "[ Z ]"),\r
316                         new STKEYLABEL((int)SlimDXKey.X, "[ X ]"),\r
317                         new STKEYLABEL((int)SlimDXKey.C, "[ C ]"),\r
318                         new STKEYLABEL((int)SlimDXKey.V, "[ V ]"),\r
319                         new STKEYLABEL((int)SlimDXKey.B, "[ B ]"),\r
320                         new STKEYLABEL((int)SlimDXKey.N, "[ N ]"),\r
321                         new STKEYLABEL((int)SlimDXKey.M, "[ M ]"),\r
322                         new STKEYLABEL((int)SlimDXKey.Comma, "[ , ]"),\r
323                         new STKEYLABEL((int)SlimDXKey.Period, "[ . ]"),\r
324                         new STKEYLABEL((int)SlimDXKey.Slash, "[ / ]"),\r
325                         new STKEYLABEL((int)SlimDXKey.RightShift, "[R-Shift]"),\r
326                         new STKEYLABEL((int)SlimDXKey.NumberPadStar, "[ * ]"),\r
327                         new STKEYLABEL((int)SlimDXKey.LeftAlt, "[L-Alt]"),\r
328                         new STKEYLABEL((int)SlimDXKey.Space, "[Space]"),\r
329                         new STKEYLABEL((int)SlimDXKey.CapsLock, "[CAPS]"),\r
330                         new STKEYLABEL((int)SlimDXKey.F1, "[F1]"),\r
331                         new STKEYLABEL((int)SlimDXKey.F2, "[F2]"),\r
332                         new STKEYLABEL((int)SlimDXKey.F3, "[F3]"),\r
333                         new STKEYLABEL((int)SlimDXKey.F4, "[F4]"),\r
334                         new STKEYLABEL((int)SlimDXKey.F5, "[F5]"),\r
335                         new STKEYLABEL((int)SlimDXKey.F6, "[F6]"),\r
336                         new STKEYLABEL((int)SlimDXKey.F7, "[F7]"),\r
337                         new STKEYLABEL((int)SlimDXKey.F8, "[F8]"),\r
338                         new STKEYLABEL((int)SlimDXKey.F9, "[F9]"),\r
339                         new STKEYLABEL((int)SlimDXKey.F10, "[F10]"),\r
340                         new STKEYLABEL((int)SlimDXKey.NumberLock, "[NumLock]"),\r
341                         new STKEYLABEL((int)SlimDXKey.ScrollLock, "[Scroll]"),\r
342                         new STKEYLABEL((int)SlimDXKey.NumberPad7, "[NPad7]"),\r
343                         new STKEYLABEL((int)SlimDXKey.NumberPad8, "[NPad8]"),\r
344                         new STKEYLABEL((int)SlimDXKey.NumberPad9, "[NPad9]"),\r
345                         new STKEYLABEL((int)SlimDXKey.NumberPadMinus, "[NPad-]"),\r
346                         new STKEYLABEL((int)SlimDXKey.NumberPad4, "[NPad4]"),\r
347                         new STKEYLABEL((int)SlimDXKey.NumberPad5, "[NPad5]"),\r
348                         new STKEYLABEL((int)SlimDXKey.NumberPad6, "[NPad6]"),\r
349                         new STKEYLABEL((int)SlimDXKey.NumberPadPlus, "[NPad+]"),\r
350                         new STKEYLABEL((int)SlimDXKey.NumberPad1, "[NPad1]"),\r
351                         new STKEYLABEL((int)SlimDXKey.NumberPad2, "[NPad2]"),\r
352                         new STKEYLABEL((int)SlimDXKey.NumberPad3, "[NPad3]"),\r
353                         new STKEYLABEL((int)SlimDXKey.NumberPad0, "[NPad0]"),\r
354                         new STKEYLABEL((int)SlimDXKey.NumberPadPeriod, "[NPad.]"),\r
355                         new STKEYLABEL((int)SlimDXKey.F11, "[F11]"),\r
356                         new STKEYLABEL((int)SlimDXKey.F12, "[F12]"),\r
357                         new STKEYLABEL((int)SlimDXKey.F13, "[F13]"),\r
358                         new STKEYLABEL((int)SlimDXKey.F14, "[F14]"),\r
359                         new STKEYLABEL((int)SlimDXKey.F15, "[F15]"),\r
360                         new STKEYLABEL((int)SlimDXKey.Kana, "[Kana]"),\r
361                         new STKEYLABEL((int)SlimDXKey.AbntC1, "[ ? ]"),\r
362                         new STKEYLABEL((int)SlimDXKey.Convert, "[Henkan]"),\r
363                         new STKEYLABEL((int)SlimDXKey.NoConvert, "[MuHenkan]"),\r
364                         new STKEYLABEL((int)SlimDXKey.Backslash, @"[ \ ]"),\r
365                         new STKEYLABEL((int)SlimDXKey.AbntC2, "[NPad.]"),\r
366                         new STKEYLABEL((int)SlimDXKey.NumberPadEquals, "[NPad=]"),\r
367                         new STKEYLABEL((int)SlimDXKey.PreviousTrack, "[ ^ ]"),  // DIK_CIRCUMFLEX = 0x90\r
368                         new STKEYLABEL((int)SlimDXKey.AT, "[ @ ]"),\r
369                         new STKEYLABEL((int)SlimDXKey.Colon, "[ : ]"),\r
370                         new STKEYLABEL((int)SlimDXKey.Underline, "[ _ ]"),\r
371                         new STKEYLABEL((int)SlimDXKey.Kanji, "[Kanji]"),\r
372                         new STKEYLABEL((int)SlimDXKey.Stop, "[Stop]"),\r
373                         new STKEYLABEL((int)SlimDXKey.AX, "[AX]"),\r
374                         new STKEYLABEL((int)SlimDXKey.NumberPadEnter, "[NPEnter]"),\r
375                         new STKEYLABEL((int)SlimDXKey.RightControl, "[R-Ctrl]"),\r
376                         new STKEYLABEL((int)SlimDXKey.Mute, "[Mute]"),\r
377                         new STKEYLABEL((int)SlimDXKey.Calculator, "[Calc]"),\r
378                         new STKEYLABEL((int)SlimDXKey.PlayPause, "[PlayPause]"),\r
379                         new STKEYLABEL((int)SlimDXKey.MediaStop, "[MediaStop]"),\r
380                         new STKEYLABEL((int)SlimDXKey.VolumeDown, "[Volume-]"),\r
381                         new STKEYLABEL((int)SlimDXKey.VolumeUp, "[Volume+]"),\r
382                         new STKEYLABEL((int)SlimDXKey.WebHome, "[WebHome]"),\r
383                         new STKEYLABEL((int)SlimDXKey.NumberPadComma, "[NPad,]"),\r
384                         new STKEYLABEL((int)SlimDXKey.NumberPadSlash, "[ / ]"),\r
385                         new STKEYLABEL((int)SlimDXKey.PrintScreen, "[PrtScn]"),\r
386                         new STKEYLABEL((int)SlimDXKey.RightAlt, "[R-Alt]"),\r
387                         new STKEYLABEL((int)SlimDXKey.Pause, "[Pause]"),\r
388                         new STKEYLABEL((int)SlimDXKey.Home, "[Home]"),\r
389                         new STKEYLABEL((int)SlimDXKey.UpArrow, "[Up]"),\r
390                         new STKEYLABEL((int)SlimDXKey.PageUp, "[PageUp]"),\r
391                         new STKEYLABEL((int)SlimDXKey.LeftArrow, "[Left]"),\r
392                         new STKEYLABEL((int)SlimDXKey.RightArrow, "[Right]"),\r
393                         new STKEYLABEL((int)SlimDXKey.End, "[End]"),\r
394                         new STKEYLABEL((int)SlimDXKey.DownArrow, "[Down]"),\r
395                         new STKEYLABEL((int)SlimDXKey.PageDown, "[PageDown]"),\r
396                         new STKEYLABEL((int)SlimDXKey.Insert, "[Insert]"),\r
397                         new STKEYLABEL((int)SlimDXKey.Delete, "[Delete]"),\r
398                         new STKEYLABEL((int)SlimDXKey.LeftWindowsKey, "[L-Win]"),\r
399                         new STKEYLABEL((int)SlimDXKey.RightWindowsKey, "[R-Win]"),\r
400                         new STKEYLABEL((int)SlimDXKey.Applications, "[APP]"),\r
401                         new STKEYLABEL((int)SlimDXKey.Power, "[Power]"),\r
402                         new STKEYLABEL((int)SlimDXKey.Sleep, "[Sleep]"),\r
403                         new STKEYLABEL((int)SlimDXKey.Wake, "[Wake]"),\r
404                         #endregion\r
405                 };\r
406 \r
407                 private EPad pad;\r
408                 int ptr;\r
409                 private CKeyAssign[] structReset用KeyAssign;\r
410                 private string strパッド名;\r
411                 private CTexture txHitKeyダイアログ;\r
412                 private CTexture txカーソル;\r
413                 private CPrivateFastFont prvFont;\r
414 \r
415                 private void tアサインコードの描画_Joypad(int line, int x, int y, int nID, int nCode, bool b強調)\r
416                 {\r
417                         string str = string.Format("{0,2}. ", line);\r
418                         switch (nCode)\r
419                         {\r
420                                 case 0:\r
421                                         str += "Left";\r
422                                         break;\r
423 \r
424                                 case 1:\r
425                                         str += "Right";\r
426                                         break;\r
427 \r
428                                 case 2:\r
429                                         str += "Up";\r
430                                         break;\r
431 \r
432                                 case 3:\r
433                                         str += "Down";\r
434                                         break;\r
435 \r
436                                 case 4:\r
437                                         str += "Forward";\r
438                                         break;\r
439 \r
440                                 case 5:\r
441                                         str += "Back";\r
442                                         break;\r
443 \r
444                                 default:\r
445                                         if ((6 <= nCode) && (nCode < 6 + 128))              // other buttons (128 types)\r
446                                         {\r
447                                                 str += string.Format("Button{0}", nCode - 5);\r
448                                         }\r
449                                         else if ((6 + 128 <= nCode) && (nCode < 6 + 128 + 8))       // POV HAT ( 8 types; 45 degrees per HATs)\r
450                                         {\r
451                                                 str += string.Format("POV {0}", (nCode - 6 - 128) * 45);\r
452                                         }\r
453                                         else\r
454                                         {\r
455                                                 str += string.Format("Code{0}", nCode);\r
456                                         }\r
457                                         break;\r
458                         }\r
459                         using (Bitmap bmpStr = b強調 ?\r
460                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
461                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black))\r
462                         {\r
463                                 CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
464                                 txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
465                                 txStr.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y - 20);\r
466                                 TextureFactory.tテクスチャの解放(ref txStr);\r
467                         }\r
468                 }\r
469 \r
470                 private void tアサインコードの描画_Keyboard(int line, int x, int y, int nID, int nCode, bool b強調)\r
471                 {\r
472                         string str = null;\r
473                         foreach (STKEYLABEL stkeylabel in this.KeyLabel)\r
474                         {\r
475                                 if (stkeylabel.nCode == nCode)\r
476                                 {\r
477                                         str = string.Format("{0,2}. Key {1}", line, stkeylabel.strLabel);\r
478                                         break;\r
479                                 }\r
480                         }\r
481                         if (str == null)\r
482                         {\r
483                                 str = string.Format("{0,2}. Key 0x{1:X2}", line, nCode);\r
484                         }\r
485 \r
486                         using (Bitmap bmpStr = b強調 ?\r
487                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
488                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black))\r
489                         {\r
490                                 CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
491                                 txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
492                                 txStr.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y - 20);\r
493                                 TextureFactory.tテクスチャの解放(ref txStr);\r
494                         }\r
495                 }\r
496 \r
497                 private void tアサインコードの描画_MidiIn(int line, int x, int y, int nID, int nCode, bool b強調)\r
498                 {\r
499                         string str = string.Format("{0,2}. MidiIn #{1} code.{2}", line, nID, nCode);\r
500                         using (Bitmap bmpStr = b強調 ?\r
501                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
502                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black))\r
503                         {\r
504                                 CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
505                                 txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
506                                 txStr.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y - 20);\r
507                                 TextureFactory.tテクスチャの解放(ref txStr);\r
508                         }\r
509                 }\r
510 \r
511                 private void tアサインコードの描画_Mouse(int line, int x, int y, int nID, int nCode, bool b強調)\r
512                 {\r
513                         string str = string.Format("{0,2}. Mouse Button{1}", line, nCode);\r
514                         using (Bitmap bmpStr = b強調 ?\r
515                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black, Color.Yellow, Color.OrangeRed) :\r
516                                         prvFont.DrawPrivateFont(str, Color.White, Color.Black))\r
517                         {\r
518                                 CTexture txStr = TextureFactory.tテクスチャの生成(bmpStr, false);\r
519                                 txStr.vc拡大縮小倍率 = new Vector3(0.75f, 0.75f, 1f);\r
520                                 txStr.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y - 20);\r
521                                 TextureFactory.tテクスチャの解放(ref txStr);\r
522                         }\r
523                 }\r
524 \r
525                 private bool tキーチェックとアサイン_Joypad()\r
526                 {\r
527                         foreach (IInputDevice device in CDTXMania.Instance.Input管理.list入力デバイス)\r
528                         {\r
529                                 if (device.e入力デバイス種別 == E入力デバイス種別.Joystick)\r
530                                 {\r
531                                         for (int i = 0; i < 6 + 0x80 + 8; i++)      // +6 for Axis, +8 for HAT\r
532                                         {\r
533                                                 if (device.bキーが押された(i))\r
534                                                 {\r
535                                                         CDTXMania.Instance.Skin.sound決定音.t再生する();\r
536 \r
537                                                         // #xxxxx: 2017.5.7 from: アサイン済みのキーと今回割り当てるキーが同じである場合は、削除されないようコードを未使用値(ここでは-1)にする。\r
538                                                         if (i == CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].コード)\r
539                                                                 CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].コード = -1;\r
540 \r
541                                                         CDTXMania.Instance.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する(EInputDevice.JoyPad, device.ID, i);\r
542                                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].入力デバイス = EInputDevice.JoyPad;\r
543                                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].ID = device.ID;\r
544                                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].コード = i;\r
545                                                         return true;\r
546                                                 }\r
547                                         }\r
548                                 }\r
549                         }\r
550                         return false;\r
551                 }\r
552 \r
553                 private bool tキーチェックとアサイン_Keyboard()\r
554                 {\r
555                         for( int i = 0; i < 256; i++ )\r
556                         {\r
557                                 if( i != (int) SlimDXKey.Escape &&\r
558                                         i != (int) SlimDXKey.UpArrow &&\r
559                                         i != (int) SlimDXKey.DownArrow &&\r
560                                         i != (int) SlimDXKey.LeftArrow &&\r
561                                         i != (int) SlimDXKey.RightArrow &&\r
562                                         i != (int) SlimDXKey.Delete &&\r
563                                          CDTXMania.Instance.Input管理.Keyboard.bキーが押された( i ) )\r
564                                 {\r
565                                         CDTXMania.Instance.Skin.sound決定音.t再生する();\r
566 \r
567                                         // #xxxxx: 2017.5.7 from: アサイン済みのキーと今回割り当てるキーが同じである場合は、削除されないようコードを未使用値(ここでは-1)にする。\r
568                                         if( i == CDTXMania.Instance.ConfigIni.KeyAssign[ pad ][ ptr ].コード )\r
569                                                 CDTXMania.Instance.ConfigIni.KeyAssign[ pad ][ ptr ].コード = -1;\r
570 \r
571                                         CDTXMania.Instance.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する( EInputDevice.Keyboard, 0, i );\r
572 \r
573                                         CDTXMania.Instance.ConfigIni.KeyAssign[ pad ][ ptr ].入力デバイス = EInputDevice.Keyboard;\r
574                                         CDTXMania.Instance.ConfigIni.KeyAssign[ pad ][ ptr ].ID = 0;\r
575                                         CDTXMania.Instance.ConfigIni.KeyAssign[ pad ][ ptr ].コード = i;\r
576                                         return true;\r
577                                 }\r
578                         }\r
579                         return false;\r
580                 }\r
581 \r
582                 private bool tキーチェックとアサイン_MidiIn()\r
583                 {\r
584                         foreach (IInputDevice device in CDTXMania.Instance.Input管理.list入力デバイス)\r
585                         {\r
586                                 if (device.e入力デバイス種別 == E入力デバイス種別.MidiIn)\r
587                                 {\r
588                                         for (int i = 0; i < 0x100; i++)\r
589                                         {\r
590                                                 if (device.bキーが押された(i))\r
591                                                 {\r
592                                                         CDTXMania.Instance.Skin.sound決定音.t再生する();\r
593                                                         CDTXMania.Instance.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する(EInputDevice.MIDIIn, device.ID, i);\r
594                                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].入力デバイス = EInputDevice.MIDIIn;\r
595                                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].ID = device.ID;\r
596                                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].コード = i;\r
597                                                         return true;\r
598                                                 }\r
599                                         }\r
600                                 }\r
601                         }\r
602                         return false;\r
603                 }\r
604 \r
605                 private bool tキーチェックとアサイン_Mouse()\r
606                 {\r
607                         for (int i = 0; i < 8; i++)\r
608                         {\r
609                                 if (CDTXMania.Instance.Input管理.Mouse.bキーが押された(i))\r
610                                 {\r
611                                         CDTXMania.Instance.Skin.sound決定音.t再生する();\r
612                                         CDTXMania.Instance.ConfigIni.t指定した入力が既にアサイン済みである場合はそれを全削除する(EInputDevice.Mouse, 0, i);\r
613                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].入力デバイス = EInputDevice.Mouse;\r
614                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].ID = 0;\r
615                                         CDTXMania.Instance.ConfigIni.KeyAssign[pad][ptr].コード = i;\r
616                                         return true;\r
617                                 }\r
618                         }\r
619                         return false;\r
620                 }\r
621         }\r
622 }\r