From 1958a10b6f5ba8348268b077f6410dadb2a20c8f Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 13 Nov 2014 01:10:55 -0800 Subject: [PATCH] XInput: Apply immediately as well --- .../ControllerInterface/XInput/XInput.cpp | 14 ++++---------- .../ControllerInterface/XInput/XInput.h | 8 +++++--- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp index 68d7eeb479..2bf98bb0b3 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp @@ -121,7 +121,6 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) : m_index(index), m_subtype(caps.SubType) { ZeroMemory(&m_state_out, sizeof(m_state_out)); - ZeroMemory(&m_current_state_out, sizeof(m_current_state_out)); // XInputGetCaps seems to always claim all capabilities are supported // but I will leave all this stuff in, incase m$ fixes xinput up a bit @@ -162,7 +161,7 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index) { //WORD val = (&caps.Vibration.wLeftMotorSpeed)[i]; // should be max value / nope, more lies if ((&caps.Vibration.wLeftMotorSpeed)[i]) - AddOutput(new Motor(i, (&m_state_out.wLeftMotorSpeed)[i], 65535)); + AddOutput(new Motor(i, this, (&m_state_out.wLeftMotorSpeed)[i], 65535)); } ZeroMemory(&m_state_in, sizeof(m_state_in)); @@ -208,15 +207,9 @@ void Device::UpdateInput() PXInputGetState(m_index, &m_state_in); } -void Device::UpdateOutput() +void Device::UpdateMotors() { - // this if statement is to make rumble work better when multiple ControllerInterfaces are using the device - // only calls XInputSetState if the state changed - if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out))) - { - m_current_state_out = m_state_out; - PXInputSetState(m_index, &m_state_out); - } + PXInputSetState(m_index, &m_state_out); } // GET name/source/id @@ -261,6 +254,7 @@ ControlState Device::Axis::GetState() const void Device::Motor::SetState(ControlState state) { m_motor = (WORD)(state * m_range); + m_parent->UpdateMotors(); } } diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h index 17ee333e97..94c1549a53 100644 --- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h +++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h @@ -64,17 +64,17 @@ private: { public: std::string GetName() const; - Motor(u8 index, WORD& motor, WORD range) : m_index(index), m_motor(motor), m_range(range) {} + Motor(u8 index, Device* parent, WORD &motor, WORD range) : m_index(index), m_parent(parent), m_motor(motor), m_range(range) {} void SetState(ControlState state); private: WORD& m_motor; const WORD m_range; const u8 m_index; + Device* m_parent; }; public: void UpdateInput() override; - void UpdateOutput() override; Device(const XINPUT_CAPABILITIES& capabilities, u8 index); @@ -82,9 +82,11 @@ public: int GetId() const; std::string GetSource() const; + void UpdateMotors(); + private: XINPUT_STATE m_state_in; - XINPUT_VIBRATION m_state_out, m_current_state_out; + XINPUT_VIBRATION m_state_out; const BYTE m_subtype; const u8 m_index; };