mirror of
https://github.com/open-goal/jak-project
synced 2026-08-11 03:26:33 -04:00
Support 4 controllers (#1751)
* Detects all controllers properly on boot now * warn -> info * linting * add comments to deftype changes
This commit is contained in:
+19
-20
@@ -32,7 +32,8 @@ bool g_gamepad_buttons[CONTROLLER_COUNT][(int)Button::Max] = {{0}};
|
||||
float g_gamepad_analogs[CONTROLLER_COUNT][(int)Analog::Max] = {{0}};
|
||||
|
||||
struct GamepadState {
|
||||
int gamepad_idx[CONTROLLER_COUNT] = {-1, -1};
|
||||
int gamepad_idx[CONTROLLER_COUNT] = {-1, -1, -1, -1};
|
||||
bool glfw_joystick_used[GLFW_JOYSTICK_LAST + 1] = {false};
|
||||
} g_gamepads;
|
||||
|
||||
// input mode for controller mapping
|
||||
@@ -275,25 +276,29 @@ void check_gamepads() {
|
||||
auto check_pad = [](int pad) { // -> bool
|
||||
if (g_gamepads.gamepad_idx[pad] == -1) {
|
||||
for (int i = GLFW_JOYSTICK_1; i <= GLFW_JOYSTICK_LAST; i++) {
|
||||
if (pad == 1 && i == g_gamepads.gamepad_idx[0])
|
||||
if (g_gamepads.glfw_joystick_used[i]) {
|
||||
continue;
|
||||
}
|
||||
if (glfwJoystickPresent(i) && glfwJoystickIsGamepad(i)) {
|
||||
g_gamepads.gamepad_idx[pad] = i;
|
||||
lg::info("Using joystick {}: {}, {}", i, glfwGetJoystickName(i), glfwGetGamepadName(i));
|
||||
g_gamepads.glfw_joystick_used[i] = true;
|
||||
lg::info("Using joystick {} for pad {}: {}, {}", i, pad, glfwGetJoystickName(i),
|
||||
glfwGetGamepadName(i));
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (!glfwJoystickPresent(g_gamepads.gamepad_idx[pad])) {
|
||||
lg::info("Pad {} has been disconnected", pad);
|
||||
lg::info("Pad {} / joystick {} has been disconnected", pad, g_gamepads.gamepad_idx[pad]);
|
||||
g_gamepads.glfw_joystick_used[g_gamepads.gamepad_idx[pad]] = false;
|
||||
g_gamepads.gamepad_idx[pad] = -1;
|
||||
return false;
|
||||
}
|
||||
return true; // pad already exists or was created
|
||||
};
|
||||
if (check_pad(0))
|
||||
check_pad(1);
|
||||
else
|
||||
g_gamepads.gamepad_idx[1] = -1;
|
||||
|
||||
for (int i = 0; i < CONTROLLER_COUNT; i++) {
|
||||
check_pad(i);
|
||||
}
|
||||
}
|
||||
|
||||
void initialize() {
|
||||
@@ -318,12 +323,6 @@ void clear_pad(int pad) {
|
||||
void update_gamepads() {
|
||||
check_gamepads();
|
||||
|
||||
if (g_gamepads.gamepad_idx[0] == -1) {
|
||||
clear_pad(0);
|
||||
clear_pad(1);
|
||||
return;
|
||||
}
|
||||
|
||||
constexpr std::pair<Button, int> gamepad_map[] = {
|
||||
{Button::Select, GLFW_GAMEPAD_BUTTON_BACK},
|
||||
{Button::L3, GLFW_GAMEPAD_BUTTON_LEFT_THUMB},
|
||||
@@ -362,12 +361,12 @@ void update_gamepads() {
|
||||
}
|
||||
};
|
||||
|
||||
read_pad_state(0);
|
||||
|
||||
if (g_gamepads.gamepad_idx[1] != -1)
|
||||
read_pad_state(1);
|
||||
else
|
||||
clear_pad(1);
|
||||
for (int i = 0; i < CONTROLLER_COUNT; i++) {
|
||||
if (g_gamepads.gamepad_idx[i] != -1)
|
||||
read_pad_state(i);
|
||||
else
|
||||
clear_pad(i);
|
||||
}
|
||||
}
|
||||
|
||||
int rumble(int pad, float slow_motor, float fast_motor) {
|
||||
|
||||
Reference in New Issue
Block a user