mirror of
https://github.com/SFML/SFML.git
synced 2024-11-28 22:31:09 +08:00
Fixed small joystick movement getting lost due to the set axes threshold.
This fixes issue #1329.
This commit is contained in:
parent
8b7a50a914
commit
49d611ee69
@ -86,7 +86,10 @@ m_joystickThreshold(0.1f)
|
||||
// Get the initial joystick states
|
||||
JoystickManager::getInstance().update();
|
||||
for (unsigned int i = 0; i < Joystick::Count; ++i)
|
||||
{
|
||||
m_joystickStates[i] = JoystickManager::getInstance().getState(i);
|
||||
std::fill_n(m_previousAxes[i], static_cast<std::size_t>(Joystick::AxisCount), 0.f);
|
||||
}
|
||||
|
||||
// Get the initial sensor states
|
||||
for (unsigned int i = 0; i < Sensor::Count; ++i)
|
||||
@ -176,6 +179,10 @@ void WindowImpl::processJoystickEvents()
|
||||
event.type = connected ? Event::JoystickConnected : Event::JoystickDisconnected;
|
||||
event.joystickButton.joystickId = i;
|
||||
pushEvent(event);
|
||||
|
||||
// Clear previous axes positions
|
||||
if (connected)
|
||||
std::fill_n(m_previousAxes[i], static_cast<std::size_t>(Joystick::AxisCount), 0.f);
|
||||
}
|
||||
|
||||
if (connected)
|
||||
@ -186,7 +193,7 @@ void WindowImpl::processJoystickEvents()
|
||||
if (caps.axes[j])
|
||||
{
|
||||
Joystick::Axis axis = static_cast<Joystick::Axis>(j);
|
||||
float prevPos = previousState.axes[axis];
|
||||
float prevPos = m_previousAxes[i][axis];
|
||||
float currPos = m_joystickStates[i].axes[axis];
|
||||
if (fabs(currPos - prevPos) >= m_joystickThreshold)
|
||||
{
|
||||
@ -196,6 +203,8 @@ void WindowImpl::processJoystickEvents()
|
||||
event.joystickMove.axis = axis;
|
||||
event.joystickMove.position = currPos;
|
||||
pushEvent(event);
|
||||
|
||||
m_previousAxes[i][axis] = currPos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -270,10 +270,11 @@ private:
|
||||
////////////////////////////////////////////////////////////
|
||||
// Member data
|
||||
////////////////////////////////////////////////////////////
|
||||
std::queue<Event> m_events; ///< Queue of available events
|
||||
JoystickState m_joystickStates[Joystick::Count]; ///< Previous state of the joysticks
|
||||
Vector3f m_sensorValue[Sensor::Count]; ///< Previous value of the sensors
|
||||
float m_joystickThreshold; ///< Joystick threshold (minimum motion for "move" event to be generated)
|
||||
std::queue<Event> m_events; ///< Queue of available events
|
||||
JoystickState m_joystickStates[Joystick::Count]; ///< Previous state of the joysticks
|
||||
Vector3f m_sensorValue[Sensor::Count]; ///< Previous value of the sensors
|
||||
float m_joystickThreshold; ///< Joystick threshold (minimum motion for "move" event to be generated)
|
||||
float m_previousAxes[Joystick::Count][Joystick::AxisCount]; ///< Position of each axis last time a move event triggered, in range [-100, 100]
|
||||
};
|
||||
|
||||
} // namespace priv
|
||||
|
Loading…
Reference in New Issue
Block a user