mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 09:06:55 -04:00
Wii: Try to support keyboard and older controller
Also try to fix camera slowly drifting on 3DS
This commit is contained in:
parent
8bf0e1aa87
commit
2f8da40409
@ -109,6 +109,11 @@ void Window_ProcessEvents(double delta) {
|
||||
if (Input_RawMode) {
|
||||
circlePosition pos = { 0, 0 };
|
||||
hidCircleRead(&pos);
|
||||
|
||||
// May not be exactly 0 on actual hardware
|
||||
if (Math_AbsI(pos.dx) < 4) pos.dx = 0;
|
||||
if (Math_AbsI(pos.dy) < 4) pos.dy = 0;
|
||||
|
||||
Event_RaiseRawMove(&PointerEvents.RawMoved, -pos.dx / 32.0f, pos.dy / 32.0f);
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <gccore.h>
|
||||
#if defined HW_RVL
|
||||
#include <wiiuse/wpad.h>
|
||||
#include <wiikeyboard/keyboard.h>
|
||||
#endif
|
||||
|
||||
static void* xfb;
|
||||
@ -54,9 +55,9 @@ void Window_Init(void) {
|
||||
#if defined HW_RVL
|
||||
WPAD_Init();
|
||||
WPAD_SetDataFormat(0, WPAD_FMT_BTNS_ACC_IR);
|
||||
#elif defined HW_DOL
|
||||
PAD_Init();
|
||||
KEYBOARD_Init(NULL);
|
||||
#endif
|
||||
PAD_Init();
|
||||
}
|
||||
|
||||
static void DoCreateWindow(int _3d) {
|
||||
@ -80,6 +81,43 @@ void Window_Close(void) {
|
||||
/* TODO implement */
|
||||
}
|
||||
|
||||
static void HandlePADInput(void) {
|
||||
PADStatus pads[4];
|
||||
PAD_Read(pads);
|
||||
if (pads[0].err) return;
|
||||
|
||||
int mods = pads[0].button;
|
||||
int dx = pads[0].stickX;
|
||||
int dy = pads[0].stickY;
|
||||
|
||||
if (Input_RawMode && (Math_AbsI(dx) > 1 || Math_AbsI(dy) > 1)) {
|
||||
Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 32.0f, dy / 32.0f);
|
||||
}
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & PAD_TRIGGER_L);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & PAD_TRIGGER_R);
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & PAD_BUTTON_A);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_CHAT], mods & PAD_BUTTON_X);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & PAD_BUTTON_Y);
|
||||
// PAD_BUTTON_B
|
||||
|
||||
Input_SetNonRepeatable(IPT_ENTER, mods & PAD_BUTTON_START);
|
||||
Input_SetNonRepeatable(IPT_ESCAPE, mods & PAD_TRIGGER_Z);
|
||||
// fake tab with PAD_BUTTON_B for Launcher too
|
||||
Input_SetNonRepeatable(IPT_TAB, mods & PAD_BUTTON_B);
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & PAD_BUTTON_LEFT);
|
||||
Input_SetNonRepeatable(IPT_LEFT, mods & PAD_BUTTON_LEFT);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & PAD_BUTTON_RIGHT);
|
||||
Input_SetNonRepeatable(IPT_RIGHT, mods & PAD_BUTTON_RIGHT);
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & PAD_BUTTON_UP);
|
||||
Input_SetNonRepeatable(IPT_UP, mods & PAD_BUTTON_UP);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & PAD_BUTTON_DOWN);
|
||||
Input_SetNonRepeatable(IPT_DOWN, mods & PAD_BUTTON_DOWN);
|
||||
}
|
||||
|
||||
#if defined HW_RVL
|
||||
|
||||
int dragCursorX = 0;
|
||||
@ -174,6 +212,15 @@ void Window_ProcessEvents(double delta) {
|
||||
}
|
||||
|
||||
Pointer_SetPosition(0, x, y);
|
||||
HandlePADInput();
|
||||
|
||||
keyboard_event ke;
|
||||
res = KEYBOARD_GetEvent(&ke);
|
||||
if (res && ke.type == KEYBOARD_PRESSED)
|
||||
{
|
||||
//Platform_Log2("KEYCODE: %i (%i)", &ke.keycode, &ke.type);
|
||||
if (ke.symbol) Event_RaiseInt(&InputEvents.Press, ke.symbol);
|
||||
}
|
||||
}
|
||||
|
||||
static int evctr = 0;
|
||||
@ -200,39 +247,7 @@ static void Cursor_GetRawPos(int* x, int* y) {
|
||||
#elif defined HW_DOL
|
||||
void Window_ProcessEvents(double delta) {
|
||||
/* TODO implement */
|
||||
PADStatus pads[4];
|
||||
PAD_Read(pads);
|
||||
int mods = pads[0].button;
|
||||
|
||||
int dx = pads[0].stickX;
|
||||
int dy = pads[0].stickY;
|
||||
if (Input_RawMode && (Math_AbsI(dx) > 1 || Math_AbsI(dy) > 1)) {
|
||||
Event_RaiseRawMove(&PointerEvents.RawMoved, dx / 32.0f, dy / 32.0f);
|
||||
}
|
||||
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_PLACE_BLOCK], mods & PAD_TRIGGER_L);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_DELETE_BLOCK], mods & PAD_TRIGGER_R);
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_JUMP], mods & PAD_BUTTON_A);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_CHAT], mods & PAD_BUTTON_X);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_INVENTORY], mods & PAD_BUTTON_Y);
|
||||
// PAD_BUTTON_B
|
||||
|
||||
Input_SetNonRepeatable(IPT_ENTER, mods & PAD_BUTTON_START);
|
||||
Input_SetNonRepeatable(IPT_ESCAPE, mods & PAD_TRIGGER_Z);
|
||||
// fake tab with PAD_BUTTON_B for Launcher too
|
||||
Input_SetNonRepeatable(IPT_TAB, mods & PAD_BUTTON_B);
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_LEFT], mods & PAD_BUTTON_LEFT);
|
||||
Input_SetNonRepeatable(IPT_LEFT, mods & PAD_BUTTON_LEFT);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_RIGHT], mods & PAD_BUTTON_RIGHT);
|
||||
Input_SetNonRepeatable(IPT_RIGHT, mods & PAD_BUTTON_RIGHT);
|
||||
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_FORWARD], mods & PAD_BUTTON_UP);
|
||||
Input_SetNonRepeatable(IPT_UP, mods & PAD_BUTTON_UP);
|
||||
Input_SetNonRepeatable(KeyBinds[KEYBIND_BACK], mods & PAD_BUTTON_DOWN);
|
||||
Input_SetNonRepeatable(IPT_DOWN, mods & PAD_BUTTON_DOWN);
|
||||
HandlePADInput();
|
||||
}
|
||||
|
||||
static void Cursor_GetRawPos(int* x, int* y) {
|
||||
@ -342,4 +357,4 @@ void Window_DisableRawMouse(void) {
|
||||
Input_RawMode = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user