XInput: Apply immediately as well
This commit is contained in:
parent
1b3d0173f5
commit
1958a10b6f
|
@ -121,7 +121,6 @@ Device::Device(const XINPUT_CAPABILITIES& caps, u8 index)
|
||||||
: m_index(index), m_subtype(caps.SubType)
|
: m_index(index), m_subtype(caps.SubType)
|
||||||
{
|
{
|
||||||
ZeroMemory(&m_state_out, sizeof(m_state_out));
|
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
|
// XInputGetCaps seems to always claim all capabilities are supported
|
||||||
// but I will leave all this stuff in, incase m$ fixes xinput up a bit
|
// 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
|
//WORD val = (&caps.Vibration.wLeftMotorSpeed)[i]; // should be max value / nope, more lies
|
||||||
if ((&caps.Vibration.wLeftMotorSpeed)[i])
|
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));
|
ZeroMemory(&m_state_in, sizeof(m_state_in));
|
||||||
|
@ -208,15 +207,9 @@ void Device::UpdateInput()
|
||||||
PXInputGetState(m_index, &m_state_in);
|
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
|
PXInputSetState(m_index, &m_state_out);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET name/source/id
|
// GET name/source/id
|
||||||
|
@ -261,6 +254,7 @@ ControlState Device::Axis::GetState() const
|
||||||
void Device::Motor::SetState(ControlState state)
|
void Device::Motor::SetState(ControlState state)
|
||||||
{
|
{
|
||||||
m_motor = (WORD)(state * m_range);
|
m_motor = (WORD)(state * m_range);
|
||||||
|
m_parent->UpdateMotors();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,17 +64,17 @@ private:
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::string GetName() const;
|
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);
|
void SetState(ControlState state);
|
||||||
private:
|
private:
|
||||||
WORD& m_motor;
|
WORD& m_motor;
|
||||||
const WORD m_range;
|
const WORD m_range;
|
||||||
const u8 m_index;
|
const u8 m_index;
|
||||||
|
Device* m_parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void UpdateInput() override;
|
void UpdateInput() override;
|
||||||
void UpdateOutput() override;
|
|
||||||
|
|
||||||
Device(const XINPUT_CAPABILITIES& capabilities, u8 index);
|
Device(const XINPUT_CAPABILITIES& capabilities, u8 index);
|
||||||
|
|
||||||
|
@ -82,9 +82,11 @@ public:
|
||||||
int GetId() const;
|
int GetId() const;
|
||||||
std::string GetSource() const;
|
std::string GetSource() const;
|
||||||
|
|
||||||
|
void UpdateMotors();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
XINPUT_STATE m_state_in;
|
XINPUT_STATE m_state_in;
|
||||||
XINPUT_VIBRATION m_state_out, m_current_state_out;
|
XINPUT_VIBRATION m_state_out;
|
||||||
const BYTE m_subtype;
|
const BYTE m_subtype;
|
||||||
const u8 m_index;
|
const u8 m_index;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue