OSDN Git Service

Merge branch 'feature/37178_プロジェクトとソリューションファイルの英語化' into develop
[dtxmania/dtxmania.git] / DTXMania / コード / 全体 / CPad.cs
diff --git a/DTXMania/コード/全体/CPad.cs b/DTXMania/コード/全体/CPad.cs
new file mode 100644 (file)
index 0000000..0b86ae0
--- /dev/null
@@ -0,0 +1,207 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+using FDK;
+
+namespace DTXMania
+{
+       public class CPad
+       {
+               // プロパティ
+
+               internal STHIT st検知したデバイス;
+               [StructLayout(LayoutKind.Sequential)]
+               internal struct STHIT
+               {
+                       public bool Keyboard;
+                       public bool MIDIIN;
+                       public bool Joypad;
+                       public bool Mouse;
+                       public void Clear()
+                       {
+                               this.Keyboard = false;
+                               this.MIDIIN = false;
+                               this.Joypad = false;
+                               this.Mouse = false;
+                       }
+               }
+
+
+               // コンストラクタ
+
+               internal CPad()
+               {
+                       this.st検知したデバイス.Clear();
+               }
+
+
+               // メソッド
+
+               public List<STInputEvent> GetEvents(EPad pad)
+               {
+                       COptionKeyAssign[] stkeyassignArray = CDTXMania.Instance.ConfigIni.KeyAssign[pad];
+                       List<STInputEvent> list = new List<STInputEvent>();
+
+                       // すべての入力デバイスについて…
+                       foreach (IInputDevice device in CDTXMania.Instance.Input管理.list入力デバイス)
+                       {
+                               if ((device.list入力イベント != null) && (device.list入力イベント.Count != 0))
+                               {
+                                       foreach (STInputEvent event2 in device.list入力イベント)
+                                       {
+                                               for (int i = 0; i < CConfigXml.AssignableCodes; i++)
+                                               {
+                                                       switch (stkeyassignArray[i].入力デバイス)
+                                                       {
+                                                               case EInputDevice.Keyboard:
+                                                                       if ((device.e入力デバイス種別 == E入力デバイス種別.Keyboard) && (event2.nKey == stkeyassignArray[i].コード))
+                                                                       {
+                                                                               list.Add(event2);
+                                                                               this.st検知したデバイス.Keyboard = true;
+                                                                       }
+                                                                       break;
+
+                                                               case EInputDevice.MIDIIn:
+                                                                       if (((device.e入力デバイス種別 == E入力デバイス種別.MidiIn) && (device.ID == stkeyassignArray[i].ID)) && (event2.nKey == stkeyassignArray[i].コード))
+                                                                       {
+                                                                               list.Add(event2);
+                                                                               this.st検知したデバイス.MIDIIN = true;
+                                                                       }
+                                                                       break;
+
+                                                               case EInputDevice.JoyPad:
+                                                                       if (((device.e入力デバイス種別 == E入力デバイス種別.Joystick) && (device.ID == stkeyassignArray[i].ID)) && (event2.nKey == stkeyassignArray[i].コード))
+                                                                       {
+                                                                               list.Add(event2);
+                                                                               this.st検知したデバイス.Joypad = true;
+                                                                       }
+                                                                       break;
+
+                                                               case EInputDevice.Mouse:
+                                                                       if ((device.e入力デバイス種別 == E入力デバイス種別.Mouse) && (event2.nKey == stkeyassignArray[i].コード))
+                                                                       {
+                                                                               list.Add(event2);
+                                                                               this.st検知したデバイス.Mouse = true;
+                                                                       }
+                                                                       break;
+                                                       }
+                                               }
+                                       }
+                                       continue;
+                               }
+                       }
+                       return list;
+               }
+               public bool b押された(EPad pad)
+               {
+                       COptionKeyAssign[] stkeyassignArray = CDTXMania.Instance.ConfigIni.KeyAssign[pad];
+                       for (int i = 0; i < CConfigXml.AssignableCodes; i++)
+                       {
+                               switch (stkeyassignArray[i].入力デバイス)
+                               {
+                                       case EInputDevice.Keyboard:
+                                               if (!CDTXMania.Instance.Input管理.Keyboard.bキーが押された(stkeyassignArray[i].コード))
+                                                       break;
+
+                                               this.st検知したデバイス.Keyboard = true;
+                                               return true;
+
+                                       case EInputDevice.MIDIIn:
+                                               {
+                                                       IInputDevice device2 = CDTXMania.Instance.Input管理.MidiIn(stkeyassignArray[i].ID);
+                                                       if ((device2 == null) || !device2.bキーが押された(stkeyassignArray[i].コード))
+                                                               break;
+
+                                                       this.st検知したデバイス.MIDIIN = true;
+                                                       return true;
+                                               }
+                                       case EInputDevice.JoyPad:
+                                               {
+                                                       if (!CDTXMania.Instance.ConfigIni.dicJoystick.Value.ContainsKey(stkeyassignArray[i].ID))
+                                                               break;
+
+                                                       IInputDevice device = CDTXMania.Instance.Input管理.Joystick(stkeyassignArray[i].ID);
+                                                       if ((device == null) || !device.bキーが押された(stkeyassignArray[i].コード))
+                                                               break;
+
+                                                       this.st検知したデバイス.Joypad = true;
+                                                       return true;
+                                               }
+                                       case EInputDevice.Mouse:
+                                               if (!CDTXMania.Instance.Input管理.Mouse.bキーが押された(stkeyassignArray[i].コード))
+                                                       break;
+
+                                               this.st検知したデバイス.Mouse = true;
+                                               return true;
+                               }
+                       }
+                       return false;
+               }
+
+               public bool bDecidePadIsPressedDGB()
+               {
+                       return
+                               b押された(EPad.GtDecide) || b押された(EPad.BsDecide) || b押された(EPad.CY) ||
+                               b押された(EPad.LC) || b押された(EPad.RD);
+               }
+
+               public bool bDecidePadIsPressedGB()
+               {
+                       return
+                               b押された(EPad.GtDecide) || b押された(EPad.BsDecide);
+               }
+
+               public bool bCancelPadIsPressedDGB()
+               {
+                       return b押された(EPad.FT) || b押された(EPad.GtCancel) || b押された(EPad.BsCancel);
+               }
+
+               public bool bCancelPadIsPressedGB()
+               {
+                       return b押された(EPad.GtCancel) || b押された(EPad.BsCancel);
+               }
+
+               public bool b押されている(EPad pad)
+               {
+                       COptionKeyAssign[] stkeyassignArray = CDTXMania.Instance.ConfigIni.KeyAssign[pad];
+                       for (int i = 0; i < CConfigXml.AssignableCodes; i++)
+                       {
+                               switch (stkeyassignArray[i].入力デバイス)
+                               {
+                                       case EInputDevice.Keyboard:
+                                               if (!CDTXMania.Instance.Input管理.Keyboard.bキーが押されている(stkeyassignArray[i].コード))
+                                               {
+                                                       break;
+                                               }
+                                               this.st検知したデバイス.Keyboard = true;
+                                               return true;
+
+                                       case EInputDevice.JoyPad:
+                                               {
+                                                       if (!CDTXMania.Instance.ConfigIni.dicJoystick.Value.ContainsKey(stkeyassignArray[i].ID))
+                                                       {
+                                                               break;
+                                                       }
+                                                       IInputDevice device = CDTXMania.Instance.Input管理.Joystick(stkeyassignArray[i].ID);
+                                                       if ((device == null) || !device.bキーが押されている(stkeyassignArray[i].コード))
+                                                       {
+                                                               break;
+                                                       }
+                                                       this.st検知したデバイス.Joypad = true;
+                                                       return true;
+                                               }
+                                       case EInputDevice.Mouse:
+                                               if (!CDTXMania.Instance.Input管理.Mouse.bキーが押されている(stkeyassignArray[i].コード))
+                                               {
+                                                       break;
+                                               }
+                                               this.st検知したデバイス.Mouse = true;
+                                               return true;
+                               }
+
+                       }
+                       return false;
+               }
+       }
+}