2013-03-30 23:32:34 +01:00
|
|
|
#include "input/input_state.h"
|
2012-11-12 17:32:35 +00:00
|
|
|
#include "KeyboardDevice.h"
|
|
|
|
|
#include "../Common/CommonTypes.h"
|
|
|
|
|
#include "../Core/HLE/sceCtrl.h"
|
|
|
|
|
#include "WinUser.h"
|
|
|
|
|
|
2013-03-31 11:30:50 +02:00
|
|
|
static const unsigned int key_pad_map[] = {
|
|
|
|
|
VK_TAB, PAD_BUTTON_LEFT_THUMB,
|
2013-03-30 23:32:34 +01:00
|
|
|
VK_SPACE, PAD_BUTTON_START,
|
|
|
|
|
'V', PAD_BUTTON_SELECT,
|
|
|
|
|
'A', PAD_BUTTON_X,
|
|
|
|
|
'S', PAD_BUTTON_Y,
|
|
|
|
|
'X', PAD_BUTTON_B,
|
|
|
|
|
'Z', PAD_BUTTON_A,
|
|
|
|
|
'Q', PAD_BUTTON_LBUMPER,
|
|
|
|
|
'W', PAD_BUTTON_RBUMPER,
|
|
|
|
|
VK_UP, PAD_BUTTON_UP,
|
|
|
|
|
VK_DOWN, PAD_BUTTON_DOWN,
|
|
|
|
|
VK_LEFT, PAD_BUTTON_LEFT,
|
|
|
|
|
VK_RIGHT, PAD_BUTTON_RIGHT,
|
|
|
|
|
};
|
|
|
|
|
|
2012-12-02 16:04:50 -08:00
|
|
|
static const unsigned short analog_ctrl_map[] = {
|
|
|
|
|
'I', CTRL_UP,
|
|
|
|
|
'K', CTRL_DOWN,
|
|
|
|
|
'J', CTRL_LEFT,
|
|
|
|
|
'L', CTRL_RIGHT,
|
|
|
|
|
};
|
|
|
|
|
|
2013-03-30 23:32:34 +01:00
|
|
|
int KeyboardDevice::UpdateState(InputState &input_state) {
|
2013-02-10 22:56:54 -08:00
|
|
|
bool alternate = GetAsyncKeyState(VK_SHIFT) != 0;
|
|
|
|
|
static u32 alternator = 0;
|
|
|
|
|
bool doAlternate = alternate && (alternator++ % 10) < 5;
|
|
|
|
|
|
2013-03-31 11:30:50 +02:00
|
|
|
for (int i = 0; i < sizeof(key_pad_map)/sizeof(key_pad_map[0]); i += 2) {
|
2013-03-31 13:11:37 -07:00
|
|
|
if (!GetAsyncKeyState(key_pad_map[i])) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (!doAlternate || key_pad_map[i + 1] > PAD_BUTTON_SELECT) {
|
2013-03-31 00:25:10 +01:00
|
|
|
input_state.pad_buttons |= key_pad_map[i+1];
|
|
|
|
|
}
|
2012-11-12 17:32:35 +00:00
|
|
|
}
|
2012-12-02 16:04:50 -08:00
|
|
|
|
|
|
|
|
float analogX = 0;
|
|
|
|
|
float analogY = 0;
|
|
|
|
|
for (int i = 0; i < sizeof(analog_ctrl_map)/sizeof(analog_ctrl_map[0]); i += 2) {
|
|
|
|
|
if (!GetAsyncKeyState(analog_ctrl_map[i])) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (analog_ctrl_map[i + 1]) {
|
|
|
|
|
case CTRL_UP:
|
2013-01-06 22:57:33 -08:00
|
|
|
analogY += 1.0f;
|
2012-12-02 16:04:50 -08:00
|
|
|
break;
|
|
|
|
|
case CTRL_DOWN:
|
2013-01-06 22:57:33 -08:00
|
|
|
analogY -= 1.0f;
|
2012-12-02 16:04:50 -08:00
|
|
|
break;
|
|
|
|
|
case CTRL_LEFT:
|
2013-01-06 22:57:33 -08:00
|
|
|
analogX -= 1.0f;
|
2012-12-02 16:04:50 -08:00
|
|
|
break;
|
|
|
|
|
case CTRL_RIGHT:
|
2013-01-06 22:57:33 -08:00
|
|
|
analogX += 1.0f;
|
2012-12-02 16:04:50 -08:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-03-31 00:25:10 +01:00
|
|
|
input_state.pad_lstick_x += analogX;
|
|
|
|
|
input_state.pad_lstick_y += analogY;
|
2012-11-12 17:32:35 +00:00
|
|
|
return 0;
|
|
|
|
|
}
|