diff options
Diffstat (limited to 'src/SFML/Window/Unix/JoystickImpl.cpp')
-rw-r--r-- | src/SFML/Window/Unix/JoystickImpl.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/SFML/Window/Unix/JoystickImpl.cpp b/src/SFML/Window/Unix/JoystickImpl.cpp index d60075d..903d588 100644 --- a/src/SFML/Window/Unix/JoystickImpl.cpp +++ b/src/SFML/Window/Unix/JoystickImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2015 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2016 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. @@ -440,6 +440,14 @@ namespace sf namespace priv { //////////////////////////////////////////////////////////// +JoystickImpl::JoystickImpl() : +m_file(-1) +{ + std::fill(m_mapping, m_mapping + ABS_MAX + 1, 0); +} + + +//////////////////////////////////////////////////////////// void JoystickImpl::initialize() { udevContext = udev_new(); @@ -650,19 +658,23 @@ JoystickState JoystickImpl::JoystickImpl::update() case JS_EVENT_AXIS: { float value = joyState.value * 100.f / 32767.f; - switch (m_mapping[joyState.number]) + + if (joyState.number < ABS_MAX + 1) { - case ABS_X: m_state.axes[Joystick::X] = value; break; - case ABS_Y: m_state.axes[Joystick::Y] = value; break; - case ABS_Z: - case ABS_THROTTLE: m_state.axes[Joystick::Z] = value; break; - case ABS_RZ: - case ABS_RUDDER: m_state.axes[Joystick::R] = value; break; - case ABS_RX: m_state.axes[Joystick::U] = value; break; - case ABS_RY: m_state.axes[Joystick::V] = value; break; - case ABS_HAT0X: m_state.axes[Joystick::PovX] = value; break; - case ABS_HAT0Y: m_state.axes[Joystick::PovY] = value; break; - default: break; + switch (m_mapping[joyState.number]) + { + case ABS_X: m_state.axes[Joystick::X] = value; break; + case ABS_Y: m_state.axes[Joystick::Y] = value; break; + case ABS_Z: + case ABS_THROTTLE: m_state.axes[Joystick::Z] = value; break; + case ABS_RZ: + case ABS_RUDDER: m_state.axes[Joystick::R] = value; break; + case ABS_RX: m_state.axes[Joystick::U] = value; break; + case ABS_RY: m_state.axes[Joystick::V] = value; break; + case ABS_HAT0X: m_state.axes[Joystick::PovX] = value; break; + case ABS_HAT0Y: m_state.axes[Joystick::PovY] = value; break; + default: break; + } } break; } |