summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2014-11-13 01:10:55 -0800
committerJasper St. Pierre <jstpierre@mecheye.net>2014-11-28 10:54:04 -0800
commit1958a10b6f5ba8348268b077f6410dadb2a20c8f (patch)
tree3b573b39855003889b38fdfd8e54c0eccbfd0484 /Source/Core/InputCommon/ControllerInterface
parent1b3d0173f5492fa19e3b440d43623ca2145c2a82 (diff)
XInput: Apply immediately as well
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp14
-rw-r--r--Source/Core/InputCommon/ControllerInterface/XInput/XInput.h8
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;
};