ref: e874b7535722a72456a20d2182b28f65f79a4f60
parent: 0cf1a781b715fe35978724b7a16352823ab02624
author: Clownacy <[email protected]>
date: Sat Apr 4 14:55:44 EDT 2020
Comment GLFW3 code, restore some vanilla behaviour
--- a/src/Backends/GLFW3/Controller.cpp
+++ b/src/Backends/GLFW3/Controller.cpp
@@ -11,6 +11,8 @@
static BOOL joystick_connected;
static int connected_joystick_id;
+static int joystick_neutral_x;
+static int joystick_neutral_y;
static void JoystickCallback(int joystick_id, int event)
{
@@ -21,13 +23,23 @@
if (!joystick_connected)
{
+ int total_axis;
+ const float *axis = glfwGetJoystickAxes(connected_joystick_id, &total_axis);
+
+ if (total_axis >= 2)
+ {
#if GLFW_VERSION_MAJOR > 3 || (GLFW_VERSION_MAJOR == 3 && GLFW_VERSION_MINOR >= 3)
- if (glfwJoystickIsGamepad(joystick_id) == GLFW_TRUE) // Avoid selecting things like laptop touchpads
+ if (glfwJoystickIsGamepad(joystick_id) == GLFW_TRUE) // Avoid selecting things like laptop touchpads
#endif
- {
- printf("Joystick #%d selected\n", joystick_id);
- joystick_connected = TRUE;
- connected_joystick_id = joystick_id;
+ {
+ printf("Joystick #%d selected\n", joystick_id);
+ joystick_connected = TRUE;
+ connected_joystick_id = joystick_id;
+
+ // Reset default stick positions (this is performed in ResetJoystickStatus in vanilla Cave Story
+ joystick_neutral_x = axis[0];
+ joystick_neutral_y = axis[1];
+ }
}
}
@@ -51,10 +63,12 @@
BOOL ControllerBackend_Init(void)
{
+ // Connect joysticks that are already plugged-in
for (int i = GLFW_JOYSTICK_1; i < GLFW_JOYSTICK_LAST; ++i)
if (glfwJoystickPresent(i) == GLFW_TRUE)
JoystickCallback(i, GLFW_CONNECTED);
+ // Set-up the callback for future (dis)connections
glfwSetJoystickCallback(JoystickCallback);
return TRUE;
@@ -65,14 +79,16 @@
if (!joystick_connected)
return FALSE;
+ // Read axis
int total_axis;
const float *axis = glfwGetJoystickAxes(connected_joystick_id, &total_axis);
- status->bLeft = axis[0] < -DEADZONE;
- status->bRight = axis[0] > DEADZONE;
- status->bUp = axis[1] < -DEADZONE;
- status->bDown = axis[1] > DEADZONE;
+ status->bLeft = axis[0] < joystick_neutral_x - DEADZONE;
+ status->bRight = axis[0] > joystick_neutral_x + DEADZONE;
+ status->bUp = axis[1] < joystick_neutral_y - DEADZONE;
+ status->bDown = axis[1] > joystick_neutral_y + DEADZONE;
+ // Read buttons
int total_buttons;
const unsigned char *buttons = glfwGetJoystickButtons(connected_joystick_id, &total_buttons);
@@ -92,6 +108,8 @@
{
if (!joystick_connected)
return FALSE;
+
+ // The code that would normally run here has been moved to JoystickCallback, to better-support hotplugging
return TRUE;
}