42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
WORD vendorID;
WORD productID;
WORD versionNumber;
WORD unknown1;
DWORD unknown2;
};
static WINAPI DWORD (*XInputGetStateFuncPtr)(DWORD, XINPUT_STATE *);
static WINAPI DWORD (*XInputGetCapabilitiesExFuncPtr)(DWORD, DWORD, DWORD,
struct XInputCapabilitiesEx *);
static int XInputVersion;
@implementation OHXInputGameController
@synthesize vendorID = _vendorID, productID = _productID, gamepad = _gamepad;
+ (void)initialize
{
HMODULE module;
if (self != [OHXInputGameController class])
return;
if ((module = LoadLibraryA("xinput1_4.dll")) != NULL) {
XInputGetStateFuncPtr =
(WINAPI DWORD (*)(DWORD, XINPUT_STATE *))
GetProcAddress(module, (LPCSTR)100);
XInputGetCapabilitiesExFuncPtr = (WINAPI DWORD (*)(DWORD, DWORD,
DWORD, struct XInputCapabilitiesEx *))
GetProcAddress(module, (LPCSTR)108);
XInputVersion = 14;
} else if ((module = LoadLibrary("xinput1_3.dll")) != NULL) {
XInputGetStateFuncPtr =
(WINAPI DWORD (*)(DWORD, XINPUT_STATE *))
GetProcAddress(module, (LPCSTR)100);
XInputVersion = 13;
} else if ((module = LoadLibrary("xinput9_1_0.dll")) != NULL) {
XInputGetStateFuncPtr =
(WINAPI DWORD (*)(DWORD, XINPUT_STATE *))
GetProcAddress(module, "XInputGetState");
XInputVersion = 910;
}
}
+ (OFArray OF_GENERIC(OHGameController *) *)controllers
{
OFMutableArray *controllers = [OFMutableArray array];
|
>
<
|
|
|
|
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
WORD vendorID;
WORD productID;
WORD versionNumber;
WORD unknown1;
DWORD unknown2;
};
int OHXInputVersion;
static WINAPI DWORD (*XInputGetStateFuncPtr)(DWORD, XINPUT_STATE *);
static WINAPI DWORD (*XInputGetCapabilitiesExFuncPtr)(DWORD, DWORD, DWORD,
struct XInputCapabilitiesEx *);
@implementation OHXInputGameController
@synthesize vendorID = _vendorID, productID = _productID, gamepad = _gamepad;
+ (void)initialize
{
HMODULE module;
if (self != [OHXInputGameController class])
return;
if ((module = LoadLibraryA("xinput1_4.dll")) != NULL) {
XInputGetStateFuncPtr =
(WINAPI DWORD (*)(DWORD, XINPUT_STATE *))
GetProcAddress(module, (LPCSTR)100);
XInputGetCapabilitiesExFuncPtr = (WINAPI DWORD (*)(DWORD, DWORD,
DWORD, struct XInputCapabilitiesEx *))
GetProcAddress(module, (LPCSTR)108);
OHXInputVersion = 14;
} else if ((module = LoadLibrary("xinput1_3.dll")) != NULL) {
XInputGetStateFuncPtr =
(WINAPI DWORD (*)(DWORD, XINPUT_STATE *))
GetProcAddress(module, (LPCSTR)100);
OHXInputVersion = 13;
} else if ((module = LoadLibrary("xinput9_1_0.dll")) != NULL) {
XInputGetStateFuncPtr =
(WINAPI DWORD (*)(DWORD, XINPUT_STATE *))
GetProcAddress(module, "XInputGetState");
OHXInputVersion = 910;
}
}
+ (OFArray OF_GENERIC(OHGameController *) *)controllers
{
OFMutableArray *controllers = [OFMutableArray array];
|
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB);
_gamepad.rightThumbstickButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB);
_gamepad.menuButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_START);
_gamepad.optionsButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK);
if (XInputVersion != 910)
_gamepad.homeButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_GUIDE);
_gamepad.leftTriggerButton.value =
(float)state.Gamepad.bLeftTrigger / 255;
_gamepad.rightTriggerButton.value =
(float)state.Gamepad.bRightTrigger / 255;
|
|
|
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB);
_gamepad.rightThumbstickButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB);
_gamepad.menuButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_START);
_gamepad.optionsButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK);
if (OHXInputVersion != 910)
_gamepad.homeButton.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_GUIDE);
_gamepad.leftTriggerButton.value =
(float)state.Gamepad.bLeftTrigger / 255;
_gamepad.rightTriggerButton.value =
(float)state.Gamepad.bRightTrigger / 255;
|
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT);
_gamepad.dPad.right.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT);
}
- (OFString *)name
{
switch (XInputVersion) {
case 14:
return @"XInput 1.4 device";
case 13:
return @"XInput 1.3 device";
case 910:
return @"XInput 9.1.0 device";
}
|
|
|
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT);
_gamepad.dPad.right.value =
!!(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT);
}
- (OFString *)name
{
switch (OHXInputVersion) {
case 14:
return @"XInput 1.4 device";
case 13:
return @"XInput 1.3 device";
case 910:
return @"XInput 9.1.0 device";
}
|