Gamecube: Change dpad to just be fly up/down hotbar left/right

Also make it possible for other platforms to override
This commit is contained in:
UnknownShadow200 2025-09-10 21:43:33 +10:00
parent d2a0a597b9
commit 71991c2275
14 changed files with 246 additions and 68 deletions

View File

@ -128,6 +128,27 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_3ds[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
static Result irrst_result;
void Gamepads_Init(void) {
@ -167,7 +188,7 @@ static void ProcessCircleInput(int port, int axis, circlePosition* pos, float de
void Gamepads_Process(float delta) {
u32 mods = hidKeysDown() | hidKeysHeld();
int port = Gamepad_Connect(0x3D5, PadBind_Defaults);
int port = Gamepad_Connect(0x3D5, defaults_3ds);
HandleButtons(port, mods);
circlePosition hid_pos;

View File

@ -100,24 +100,24 @@ static void ProcessMouse(joypad_inputs_t* inputs, float delta) {
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping default_n64[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_CUP, 0 },
[BIND_BACK] = { CCPAD_CDOWN, 0 },
[BIND_LEFT] = { CCPAD_CLEFT, 0 },
[BIND_RIGHT] = { CCPAD_CRIGHT, 0 },
static const BindMapping defaults_n64[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_CUP },
[BIND_BACK] = { CCPAD_CDOWN },
[BIND_LEFT] = { CCPAD_CLEFT },
[BIND_RIGHT] = { CCPAD_CRIGHT },
[BIND_FLY_UP] = { CCPAD_UP, 0 },
[BIND_FLY_DOWN]= { CCPAD_DOWN, 0 },
[BIND_SPEED] = { CCPAD_LEFT, 0 },
[BIND_FLY] = { CCPAD_RIGHT, 0 },
[BIND_FLY_UP] = { CCPAD_UP },
[BIND_FLY_DOWN]= { CCPAD_DOWN },
[BIND_SPEED] = { CCPAD_LEFT },
[BIND_FLY] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1, 0 },
[BIND_INVENTORY] = { CCPAD_2, 0 },
[BIND_PLACE_BLOCK] = { CCPAD_5, 0 },
[BIND_HOTBAR_RIGHT] = { CCPAD_L, 0 },
[BIND_DELETE_BLOCK] = { CCPAD_R, 0 },
[BIND_JUMP] = { CCPAD_1 },
[BIND_INVENTORY] = { CCPAD_2 },
[BIND_PLACE_BLOCK] = { CCPAD_5 },
[BIND_HOTBAR_RIGHT] = { CCPAD_L },
[BIND_DELETE_BLOCK] = { CCPAD_R },
[BIND_SET_SPAWN] = { CCPAD_START, 0 },
[BIND_SET_SPAWN] = { CCPAD_START },
};
void Gamepads_Init(void) {
@ -169,7 +169,7 @@ void Gamepads_Process(float delta) {
ProcessMouse(&inputs, delta); continue;
}
int port = Gamepad_Connect(0x64 + i, default_n64);
int port = Gamepad_Connect(0x64 + i, defaults_n64);
HandleButtons(port, inputs.btn);
ProcessAnalogInput(port, &inputs, delta);
}

View File

@ -222,6 +222,27 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_dc[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
void Gamepads_Init(void) {
Input.Sources |= INPUT_SOURCE_GAMEPAD;
}
@ -264,7 +285,7 @@ static void HandleController(int port, bool dual_analog, cont_state_t* state, fl
// TODO: verify values are right
if(dual_analog)
{
HandleJoystick(port, PAD_AXIS_LEFT, state->joyx, state->joyy, delta);
HandleJoystick(port, PAD_AXIS_LEFT, state->joyx, state->joyy, delta);
HandleJoystick(port, PAD_AXIS_RIGHT, state->joy2x, state->joy2y, delta);
}
else
@ -287,7 +308,7 @@ void Gamepads_Process(float delta) {
int dual_analog = cont_has_capabilities(cont, CONT_CAPABILITIES_DUAL_ANALOG);
if(dual_analog == -1) dual_analog = 0;
int port = Gamepad_Connect(0xDC + i, PadBind_Defaults);
int port = Gamepad_Connect(0xDC + i, defaults_dc);
HandleButtons(port, state->buttons);
HandleController(port, dual_analog, state, delta);
}

View File

@ -111,25 +111,21 @@ void Window_RequestClose(void) {
*#########################################################################################################################*/
static PADStatus gc_pads[PAD_CHANMAX];
static const BindMapping gcpad_defaults[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP, 0 },
[BIND_BACK] = { CCPAD_DOWN, 0 },
[BIND_LEFT] = { CCPAD_LEFT, 0 },
[BIND_RIGHT] = { CCPAD_RIGHT, 0 },
[BIND_JUMP] = { CCPAD_1, 0 },
[BIND_SET_SPAWN] = { CCPAD_START, 0 },
[BIND_CHAT] = { CCPAD_4, 0 },
[BIND_INVENTORY] = { CCPAD_3, 0 },
[BIND_SEND_CHAT] = { CCPAD_START, 0 },
[BIND_DELETE_BLOCK] = { CCPAD_L, 0 },
[BIND_PLACE_BLOCK] = { CCPAD_R, 0 },
static const BindMapping defaults_gc[BIND_COUNT] = {
[BIND_FLY_UP] = { CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_LEFT },
[BIND_HOTBAR_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_2, CCPAD_LEFT },
[BIND_HOTBAR_RIGHT] = { CCPAD_2, CCPAD_RIGHT }
};
#define PAD_AXIS_SCALE 8.0f
@ -170,7 +166,7 @@ static void ProcessPADInput(PADStatus* pad, int i, float delta) {
return; // not connected, still busy, etc
}
int port = Gamepad_Connect(0x5C + i, gcpad_defaults);
int port = Gamepad_Connect(0x5C + i, defaults_gc);
ProcessPAD_Buttons(port, gc_pads[i].button);
ProcessPAD_Joystick(port, PAD_AXIS_LEFT, gc_pads[i].stickX, gc_pads[i].stickY, delta);
ProcessPAD_Joystick(port, PAD_AXIS_RIGHT, gc_pads[i].substickX, gc_pads[i].substickY, delta);

View File

@ -1,5 +1,3 @@
#include "Core.h"
#ifdef CC_BUILD_NDS
#include "_GraphicsBase.h"
#include "Errors.h"
#include "Logger.h"
@ -833,5 +831,4 @@ void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) {
if (skipRendering) return;
Draw_TexturedTriangles(verticesCount, startVertex);
}
#endif

View File

@ -1,5 +1,3 @@
#include "Core.h"
#if defined CC_BUILD_NDS
#define CC_NO_UPDATER
#define CC_NO_DYNLIB
@ -658,4 +656,4 @@ static cc_result GetMachineID(cc_uint32* key) {
cc_result Platform_GetEntropy(void* data, int len) {
return ERR_NOT_SUPPORTED;
}
#endif

View File

@ -1,5 +1,3 @@
#include "Core.h"
#if defined CC_BUILD_NDS
#include "Window.h"
#include "Platform.h"
#include "Input.h"
@ -256,13 +254,34 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
*#########################################################################################################################*/
static const BindMapping defaults_nds[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
void Gamepads_Init(void) {
Input.Sources |= INPUT_SOURCE_GAMEPAD;
}
void Gamepads_Process(float delta) {
int port = Gamepad_Connect(0xD5, PadBind_Defaults);
int port = Gamepad_Connect(0xD5, defaults_nds);
int mods = keysDown() | keysHeld();
Gamepad_SetButton(port, CCPAD_L, mods & KEY_L);
@ -379,4 +398,4 @@ cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) {
cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) {
return ERR_NOT_SUPPORTED;
}
#endif

View File

@ -227,6 +227,27 @@ void Window_DisableRawMouse(void) { Input.RawMode = false; }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_ps2[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
static char padBuf0[256] __attribute__((aligned(64)));
static char padBuf1[256] __attribute__((aligned(64)));
@ -299,7 +320,7 @@ static void ProcessPad(int i, float delta) {
int ret = padRead(i, 0, &pad);
if (ret == 0) return;
int port = Gamepad_Connect(0x503 + i, PadBind_Defaults);
int port = Gamepad_Connect(0x503 + i, defaults_ps2);
ProcessPadInput(port, delta, &pad);
}

View File

@ -271,6 +271,27 @@ void Window_DisableRawMouse(void) { Input.RawMode = false; }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_ps3[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
static padInfo pad_info;
static padData pad_data[MAX_PORT_NUM];
static cc_bool circle_main;
@ -333,7 +354,7 @@ void Gamepads_Process(float delta) {
if (!pad_info.status[i]) continue;
ioPadGetData(i, &pad_data[i]);
int port = Gamepad_Connect(0x503 + i, PadBind_Defaults);
int port = Gamepad_Connect(0x503 + i, defaults_ps3);
ProcessPadInput(port, delta, &pad_data[i]);
}
}

View File

@ -83,6 +83,27 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_psp[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
void Gamepads_Init(void) {
Input.Sources |= INPUT_SOURCE_GAMEPAD;
@ -125,7 +146,7 @@ static void ProcessCircleInput(int port, SceCtrlData* pad, float delta) {
}
void Gamepads_Process(float delta) {
int port = Gamepad_Connect(0x503, PadBind_Defaults);
int port = Gamepad_Connect(0x503, defaults_psp);
SceCtrlData pad;
/* TODO implement */

View File

@ -141,21 +141,21 @@ void Window_DisableRawMouse(void) { Input.RawMode = false; }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping vita_padbinds[BIND_COUNT] = {
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_PLACE_BLOCK] = { CCPAD_L },
[BIND_DELETE_BLOCK] = { CCPAD_R },
[BIND_FLY_UP] = { CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_LEFT },
static const BindMapping defaults_vita[BIND_COUNT] = {
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_PLACE_BLOCK] = { CCPAD_L },
[BIND_DELETE_BLOCK] = { CCPAD_R },
[BIND_FLY_UP] = { CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_LEFT },
[BIND_HOTBAR_RIGHT] = { CCPAD_RIGHT },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
};
static cc_bool circle_main;
@ -207,7 +207,7 @@ static void ProcessCircleInput(int port, int axis, int x, int y, float delta) {
}
static void ProcessPadInput(float delta) {
int port = Gamepad_Connect(0x503, vita_padbinds);
int port = Gamepad_Connect(0x503, defaults_vita);
SceCtrlData pad;
// sceCtrlReadBufferPositive is blocking (seems to block until vblank), and don't want that

View File

@ -147,6 +147,27 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_switch[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
void Gamepads_Init(void) {
Input.Sources |= INPUT_SOURCE_GAMEPAD;
}
@ -179,7 +200,7 @@ static void ProcessJoystickInput(int port, int axis, HidAnalogStickState* pos, f
}
void Gamepads_Process(float delta) {
int port = Gamepad_Connect(0x51C, PadBind_Defaults);
int port = Gamepad_Connect(0x51C, defaults_switch);
u64 keys = padGetButtons(&pad);
HandleButtons(port, keys);

View File

@ -86,6 +86,27 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_xbox[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
static xid_dev_t* xid_ctrl;
static xid_gamepad_in gp_state;
@ -184,7 +205,7 @@ void Gamepads_Process(float delta) {
usbh_pooling_hubs();
#endif
if (!xid_ctrl) return;
int port = Gamepad_Connect(0xB0, PadBind_Defaults);
int port = Gamepad_Connect(0xB0, defaults_xbox);
HandleButtons(port, &gp_state);
HandleJoystick(port, PAD_AXIS_LEFT, gp_state.leftStickX, gp_state.leftStickY, delta);

View File

@ -85,6 +85,27 @@ void Window_UpdateRawMouse(void) { }
/*########################################################################################################################*
*-------------------------------------------------------Gamepads----------------------------------------------------------*
*#########################################################################################################################*/
static const BindMapping defaults_xbox360[BIND_COUNT] = {
[BIND_FORWARD] = { CCPAD_UP },
[BIND_BACK] = { CCPAD_DOWN },
[BIND_LEFT] = { CCPAD_LEFT },
[BIND_RIGHT] = { CCPAD_RIGHT },
[BIND_JUMP] = { CCPAD_1 },
[BIND_SET_SPAWN] = { CCPAD_START },
[BIND_CHAT] = { CCPAD_4 },
[BIND_INVENTORY] = { CCPAD_3 },
[BIND_SEND_CHAT] = { CCPAD_START },
[BIND_DELETE_BLOCK] = { CCPAD_L },
[BIND_PLACE_BLOCK] = { CCPAD_R },
[BIND_SPEED] = { CCPAD_2, CCPAD_L },
[BIND_FLY] = { CCPAD_2, CCPAD_R },
[BIND_NOCLIP] = { CCPAD_2, CCPAD_3 },
[BIND_FLY_UP] = { CCPAD_2, CCPAD_UP },
[BIND_FLY_DOWN] = { CCPAD_2, CCPAD_DOWN },
[BIND_HOTBAR_LEFT] = { CCPAD_ZL },
[BIND_HOTBAR_RIGHT] = { CCPAD_ZR }
};
void Gamepads_Init(void) {
Input.Sources |= INPUT_SOURCE_GAMEPAD;
@ -131,7 +152,7 @@ static void HandleJoystick(int port, int axis, int x, int y, float delta) {
void Gamepads_Process(float delta) {
usb_do_poll();
int port = Gamepad_Connect(0xB0360, PadBind_Defaults);
int port = Gamepad_Connect(0xB0360, defaults_xbox360);
struct controller_data_s pad;
int res = get_controller_data(&pad, 0);