Fix DInput rumble.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7347 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Jordan Woyak 2011-03-15 04:04:27 +00:00
parent c83e5ee35b
commit 3454ade05e
2 changed files with 13 additions and 12 deletions

View File

@ -306,7 +306,7 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
//ZeroMemory(&env, sizeof(env)); //ZeroMemory(&env, sizeof(env));
//env.dwSize = sizeof(env); //env.dwSize = sizeof(env);
for (unsigned int f = 0, i = 0; f < sizeof(force_type_names)/sizeof(*force_type_names); ++f) for (unsigned int f = 0; f < sizeof(force_type_names)/sizeof(*force_type_names); ++f)
{ {
// ugly if ladder // ugly if ladder
if (0 == f) if (0 == f)
@ -319,16 +319,15 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
LPDIRECTINPUTEFFECT pEffect; LPDIRECTINPUTEFFECT pEffect;
if (SUCCEEDED(m_device->CreateEffect(force_type_names[f].guid, &eff, &pEffect, NULL))) if (SUCCEEDED(m_device->CreateEffect(force_type_names[f].guid, &eff, &pEffect, NULL)))
{ {
m_state_out.push_back(EffectState(pEffect));
// ugly if ladder again :/ // ugly if ladder again :/
if (0 == f) if (0 == f)
AddOutput(new ForceConstant(f, m_state_out[i])); AddOutput(new ForceConstant(f, m_state_out.back()));
else if (1 == f) else if (1 == f)
AddOutput(new ForceRamp(f, m_state_out[i])); AddOutput(new ForceRamp(f, m_state_out.back()));
else else
AddOutput(new ForcePeriodic(f, m_state_out[i])); AddOutput(new ForcePeriodic(f, m_state_out.back()));
++i;
m_state_out.push_back(EffectState(pEffect));
} }
} }
} }
@ -351,7 +350,7 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
Joystick::~Joystick() Joystick::~Joystick()
{ {
// release the ff effect iface's // release the ff effect iface's
std::vector<EffectState>::iterator std::list<EffectState>::iterator
i = m_state_out.begin(), i = m_state_out.begin(),
e = m_state_out.end(); e = m_state_out.end();
for (; i!=e; ++i) for (; i!=e; ++i)
@ -439,7 +438,7 @@ bool Joystick::UpdateOutput()
eff.dwSize = sizeof(DIEFFECT); eff.dwSize = sizeof(DIEFFECT);
eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;
std::vector<EffectState>::iterator std::list<EffectState>::iterator
i = m_state_out.begin(), i = m_state_out.begin(),
e = m_state_out.end(); e = m_state_out.end();
for (; i!=e; ++i) for (; i!=e; ++i)

View File

@ -9,6 +9,8 @@
#include <Windows.h> #include <Windows.h>
#include <dinput.h> #include <dinput.h>
#include <list>
#ifdef CIFACE_USE_XINPUT #ifdef CIFACE_USE_XINPUT
// this takes so long, idk if it should be enabled :( // this takes so long, idk if it should be enabled :(
#define NO_DUPLICATE_DINPUT_XINPUT #define NO_DUPLICATE_DINPUT_XINPUT
@ -102,10 +104,10 @@ private:
const LPDIRECTINPUTDEVICE8 m_device; const LPDIRECTINPUTDEVICE8 m_device;
const unsigned int m_index; const unsigned int m_index;
DIJOYSTATE m_state_in; DIJOYSTATE m_state_in;
std::vector<EffectState> m_state_out; std::list<EffectState> m_state_out;
bool m_buffered; bool m_buffered;
}; };
} }