Change Wii U input to keyboard emulation
The keyboard API allows me to bind multiple buttons to the direction keys, unlike the controller API. I probably need to rethink the controller API at some point.
This commit is contained in:
parent
470a51219e
commit
b5eefd95f0
2 changed files with 31 additions and 65 deletions
|
@ -1,76 +1,21 @@
|
||||||
#include "../Controller.h"
|
#include "../Controller.h"
|
||||||
|
|
||||||
#include <vpad/input.h>
|
|
||||||
|
|
||||||
#define DEADZONE (10000.0f / 32767.0f)
|
|
||||||
|
|
||||||
bool ControllerBackend_Init(void)
|
bool ControllerBackend_Init(void)
|
||||||
{
|
{
|
||||||
VPADInit();
|
return false;
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControllerBackend_Deinit(void)
|
void ControllerBackend_Deinit(void)
|
||||||
{
|
{
|
||||||
VPADShutdown();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ControllerBackend_GetJoystickStatus(bool **buttons, unsigned int *button_count, short **axes, unsigned int *axis_count)
|
bool ControllerBackend_GetJoystickStatus(bool **buttons, unsigned int *button_count, short **axes, unsigned int *axis_count)
|
||||||
{
|
{
|
||||||
static bool button_buffer[27];
|
(void)buttons;
|
||||||
static short axis_buffer[4];
|
(void)button_count;
|
||||||
|
(void)axes;
|
||||||
|
(void)axis_count;
|
||||||
|
|
||||||
*buttons = button_buffer;
|
return false;
|
||||||
*axes = axis_buffer;
|
|
||||||
|
|
||||||
*button_count = sizeof(button_buffer) / sizeof(button_buffer[0]);
|
|
||||||
*axis_count = sizeof(axis_buffer) / sizeof(axis_buffer[0]);
|
|
||||||
|
|
||||||
VPADStatus vpad_status;
|
|
||||||
if (VPADRead(VPAD_CHAN_0, &vpad_status, 1, NULL) == 1)
|
|
||||||
{
|
|
||||||
//////////////////////////
|
|
||||||
// Handle button inputs //
|
|
||||||
//////////////////////////
|
|
||||||
|
|
||||||
button_buffer[0] = vpad_status.hold & VPAD_BUTTON_Y; // Shoot
|
|
||||||
button_buffer[1] = vpad_status.hold & VPAD_BUTTON_B; // Jump
|
|
||||||
button_buffer[2] = vpad_status.hold & VPAD_BUTTON_X; // Map
|
|
||||||
button_buffer[3] = vpad_status.hold & VPAD_BUTTON_L; // Weapon left
|
|
||||||
button_buffer[4] = vpad_status.hold & VPAD_BUTTON_R; // Weapon right
|
|
||||||
button_buffer[5] = vpad_status.hold & VPAD_BUTTON_A; // Inventory
|
|
||||||
button_buffer[6] = vpad_status.hold & VPAD_BUTTON_ZL; // Weapon left
|
|
||||||
button_buffer[7] = vpad_status.hold & VPAD_BUTTON_ZR; // Weapon right
|
|
||||||
button_buffer[8] = vpad_status.hold & VPAD_BUTTON_LEFT;
|
|
||||||
button_buffer[9] = vpad_status.hold & VPAD_BUTTON_RIGHT;
|
|
||||||
button_buffer[10] = vpad_status.hold & VPAD_BUTTON_UP;
|
|
||||||
button_buffer[11] = vpad_status.hold & VPAD_BUTTON_DOWN;
|
|
||||||
button_buffer[12] = vpad_status.hold & VPAD_BUTTON_PLUS;
|
|
||||||
button_buffer[13] = vpad_status.hold & VPAD_BUTTON_MINUS;
|
|
||||||
button_buffer[14] = vpad_status.hold & VPAD_BUTTON_HOME;
|
|
||||||
button_buffer[15] = vpad_status.hold & VPAD_BUTTON_SYNC;
|
|
||||||
button_buffer[16] = vpad_status.hold & VPAD_BUTTON_STICK_R;
|
|
||||||
button_buffer[17] = vpad_status.hold & VPAD_BUTTON_STICK_L;
|
|
||||||
button_buffer[18] = vpad_status.hold & VPAD_BUTTON_TV;
|
|
||||||
button_buffer[19] = vpad_status.hold & VPAD_STICK_R_EMULATION_LEFT;
|
|
||||||
button_buffer[20] = vpad_status.hold & VPAD_STICK_R_EMULATION_RIGHT;
|
|
||||||
button_buffer[21] = vpad_status.hold & VPAD_STICK_R_EMULATION_UP;
|
|
||||||
button_buffer[22] = vpad_status.hold & VPAD_STICK_R_EMULATION_DOWN;
|
|
||||||
button_buffer[23] = vpad_status.hold & VPAD_STICK_L_EMULATION_LEFT;
|
|
||||||
button_buffer[24] = vpad_status.hold & VPAD_STICK_L_EMULATION_RIGHT;
|
|
||||||
button_buffer[25] = vpad_status.hold & VPAD_STICK_L_EMULATION_UP;
|
|
||||||
button_buffer[26] = vpad_status.hold & VPAD_STICK_L_EMULATION_DOWN;
|
|
||||||
|
|
||||||
////////////////////////
|
|
||||||
// Handle axis inputs //
|
|
||||||
////////////////////////
|
|
||||||
|
|
||||||
axis_buffer[0] = (short)(vpad_status.leftStick.x * 0x7FFF);
|
|
||||||
axis_buffer[1] = (short)(vpad_status.leftStick.y * -0x7FFF);
|
|
||||||
axis_buffer[2] = (short)(vpad_status.rightStick.x * 0x7FFF);
|
|
||||||
axis_buffer[3] = (short)(vpad_status.rightStick.y * -0x7FFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <coreinit/thread.h>
|
#include <coreinit/thread.h>
|
||||||
|
#include <vpad/input.h>
|
||||||
#include <whb/proc.h>
|
#include <whb/proc.h>
|
||||||
#include <whb/sdcard.h>
|
#include <whb/sdcard.h>
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@ bool Backend_Init(void)
|
||||||
if (!WHBMountSdCard())
|
if (!WHBMountSdCard())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
VPADInit();
|
||||||
|
|
||||||
tick_delta = OSGetSystemInfo()->busClockSpeed / 4;
|
tick_delta = OSGetSystemInfo()->busClockSpeed / 4;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -23,6 +25,8 @@ bool Backend_Init(void)
|
||||||
|
|
||||||
void Backend_Deinit(void)
|
void Backend_Deinit(void)
|
||||||
{
|
{
|
||||||
|
VPADShutdown();
|
||||||
|
|
||||||
WHBUnmountSdCard();
|
WHBUnmountSdCard();
|
||||||
|
|
||||||
WHBProcShutdown();
|
WHBProcShutdown();
|
||||||
|
@ -72,9 +76,26 @@ bool Backend_SystemTask(bool active)
|
||||||
return WHBProcIsRunning();
|
return WHBProcIsRunning();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Backend_GetKeyboardState(bool *keyboard_state)
|
void Backend_GetKeyboardState(bool *out_keyboard_state)
|
||||||
{
|
{
|
||||||
memset(keyboard_state, 0, sizeof(bool) * BACKEND_KEYBOARD_TOTAL);
|
static bool keyboard_state[BACKEND_KEYBOARD_TOTAL];
|
||||||
|
|
||||||
|
VPADStatus vpad_status;
|
||||||
|
if (VPADRead(VPAD_CHAN_0, &vpad_status, 1, NULL) == 1)
|
||||||
|
{
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_UP] = vpad_status.hold & (VPAD_BUTTON_UP | VPAD_STICK_L_EMULATION_UP);
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_DOWN] = vpad_status.hold & (VPAD_BUTTON_DOWN | VPAD_STICK_L_EMULATION_DOWN);
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_LEFT] = vpad_status.hold & (VPAD_BUTTON_LEFT | VPAD_STICK_L_EMULATION_LEFT);
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_RIGHT] = vpad_status.hold & (VPAD_BUTTON_RIGHT | VPAD_STICK_L_EMULATION_RIGHT);
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_Z] = vpad_status.hold & VPAD_BUTTON_B; // Jump
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_X] = vpad_status.hold & VPAD_BUTTON_Y; // Shoot
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_Q] = vpad_status.hold & (VPAD_BUTTON_A | VPAD_BUTTON_PLUS); // Inventory
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_W] = vpad_status.hold & (VPAD_BUTTON_X | VPAD_BUTTON_MINUS); // Map
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_A] = vpad_status.hold & (VPAD_BUTTON_L | VPAD_BUTTON_ZL | VPAD_STICK_R_EMULATION_LEFT); // Weapon left
|
||||||
|
keyboard_state[BACKEND_KEYBOARD_S] = vpad_status.hold & (VPAD_BUTTON_R | VPAD_BUTTON_ZR | VPAD_STICK_R_EMULATION_RIGHT); // Weapon right
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(out_keyboard_state, keyboard_state, sizeof(keyboard_state));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Backend_ShowMessageBox(const char *title, const char *message)
|
void Backend_ShowMessageBox(const char *title, const char *message)
|
||||||
|
|
Loading…
Add table
Reference in a new issue