diff --git a/src/input.cpp b/src/input.cpp index 10be5663..d60b20f7 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -126,14 +126,19 @@ void InputHandler::handleEvent(sf::Event& event) } else if (event.type == sf::Event::JoystickMoved) { - float axis_pos; + static constexpr float scale_factor = 100.f / (100.f - joystick_axis_snap_to_0_range); + + float axis_pos = 0.f; + if (event.joystickMove.position > joystick_axis_snap_to_0_range) { - axis_pos = (event.joystickMove.position - joystick_axis_snap_to_0_range) * ((joystick_axis_snap_to_0_range / 100) + 1); + axis_pos = (event.joystickMove.position - joystick_axis_snap_to_0_range) * scale_factor; } else if (event.joystickMove.position < -joystick_axis_snap_to_0_range) { - axis_pos = (event.joystickMove.position + joystick_axis_snap_to_0_range) * ((joystick_axis_snap_to_0_range / 100) + 1); - } else { - axis_pos = 0.0; + axis_pos = (event.joystickMove.position + joystick_axis_snap_to_0_range) * scale_factor; } + + // Clamp axis_pos within SFML range. + axis_pos = std::min(std::max(-100.f, axis_pos), 100.f); + if (joystick_axis_pos[event.joystickMove.joystickId][event.joystickMove.axis] != axis_pos){ joystick_axis_changed[event.joystickMove.joystickId][event.joystickMove.axis] = true; }