mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-19 12:40:49 +00:00
Fix joystick binding for an action being discarded when default for another action is loaded (Bug #3900)
This commit is contained in:
parent
ca5b351eef
commit
8d17565efd
@ -1243,7 +1243,7 @@ namespace MWInput
|
|||||||
if (!controlExists)
|
if (!controlExists)
|
||||||
{
|
{
|
||||||
float initial;
|
float initial;
|
||||||
if (defaultButtonBindings.find(i) != defaultButtonBindings.end())
|
if (defaultAxisBindings.find(i) == defaultAxisBindings.end())
|
||||||
initial = 0.0f;
|
initial = 0.0f;
|
||||||
else initial = 0.5f;
|
else initial = 0.5f;
|
||||||
control = new ICS::Control(std::to_string(i), false, true, initial, ICS::ICS_MAX, ICS::ICS_MAX);
|
control = new ICS::Control(std::to_string(i), false, true, initial, ICS::ICS_MAX, ICS::ICS_MAX);
|
||||||
@ -1259,12 +1259,13 @@ namespace MWInput
|
|||||||
{
|
{
|
||||||
clearAllControllerBindings(control);
|
clearAllControllerBindings(control);
|
||||||
|
|
||||||
if (defaultButtonBindings.find(i) != defaultButtonBindings.end())
|
if (defaultButtonBindings.find(i) != defaultButtonBindings.end()
|
||||||
|
&& !mInputBinder->isJoystickButtonBound(mFakeDeviceID, defaultButtonBindings[i]))
|
||||||
{
|
{
|
||||||
control->setInitialValue(0.0f);
|
control->setInitialValue(0.0f);
|
||||||
mInputBinder->addJoystickButtonBinding(control, mFakeDeviceID, defaultButtonBindings[i], ICS::Control::INCREASE);
|
mInputBinder->addJoystickButtonBinding(control, mFakeDeviceID, defaultButtonBindings[i], ICS::Control::INCREASE);
|
||||||
}
|
}
|
||||||
else if (defaultAxisBindings.find(i) != defaultAxisBindings.end())
|
else if (defaultAxisBindings.find(i) != defaultAxisBindings.end() && !mInputBinder->isJoystickAxisBound(mFakeDeviceID, defaultAxisBindings[i]))
|
||||||
{
|
{
|
||||||
control->setValue(0.5f);
|
control->setValue(0.5f);
|
||||||
control->setInitialValue(0.5f);
|
control->setInitialValue(0.5f);
|
||||||
|
2
extern/oics/ICSInputControlSystem.h
vendored
2
extern/oics/ICSInputControlSystem.h
vendored
@ -120,6 +120,8 @@ namespace ICS
|
|||||||
bool isMouseButtonBound(unsigned int button) const;
|
bool isMouseButtonBound(unsigned int button) const;
|
||||||
void addJoystickAxisBinding(Control* control, int deviceID, int axis, Control::ControlChangingDirection direction);
|
void addJoystickAxisBinding(Control* control, int deviceID, int axis, Control::ControlChangingDirection direction);
|
||||||
void addJoystickButtonBinding(Control* control, int deviceID, unsigned int button, Control::ControlChangingDirection direction);
|
void addJoystickButtonBinding(Control* control, int deviceID, unsigned int button, Control::ControlChangingDirection direction);
|
||||||
|
bool isJoystickButtonBound(int deviceID, unsigned int button) const;
|
||||||
|
bool isJoystickAxisBound(int deviceID, unsigned int axis) const;
|
||||||
void removeKeyBinding(SDL_Scancode key);
|
void removeKeyBinding(SDL_Scancode key);
|
||||||
void removeMouseAxisBinding(NamedAxis axis);
|
void removeMouseAxisBinding(NamedAxis axis);
|
||||||
void removeMouseButtonBinding(unsigned int button);
|
void removeMouseButtonBinding(unsigned int button);
|
||||||
|
18
extern/oics/ICSInputControlSystem_joystick.cpp
vendored
18
extern/oics/ICSInputControlSystem_joystick.cpp
vendored
@ -110,6 +110,24 @@ namespace ICS
|
|||||||
mControlsJoystickButtonBinderMap[deviceID][button] = controlJoystickButtonBinderItem;
|
mControlsJoystickButtonBinderMap[deviceID][button] = controlJoystickButtonBinderItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool InputControlSystem::isJoystickButtonBound(int deviceID, unsigned int button) const
|
||||||
|
{
|
||||||
|
JoystickButtonBinderMapType::const_iterator found = mControlsJoystickButtonBinderMap.find(deviceID);
|
||||||
|
if (found == mControlsJoystickButtonBinderMap.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (found->second.find(button) != found->second.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InputControlSystem::isJoystickAxisBound(int deviceID, unsigned int axis) const
|
||||||
|
{
|
||||||
|
JoystickAxisBinderMapType::const_iterator found = mControlsJoystickAxisBinderMap.find(deviceID);
|
||||||
|
if (found == mControlsJoystickAxisBinderMap.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (found->second.find(axis) != found->second.end());
|
||||||
|
}
|
||||||
|
|
||||||
// get bindings
|
// get bindings
|
||||||
int InputControlSystem::getJoystickAxisBinding(Control* control, int deviceID, ICS::Control::ControlChangingDirection direction)
|
int InputControlSystem::getJoystickAxisBinding(Control* control, int deviceID, ICS::Control::ControlChangingDirection direction)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user