summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src/ControllerInterface
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-01-17 15:48:50 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2013-01-17 15:48:50 -0600
commita01bd96d7d0bde0125ad3b13a6e6f6353fe1c8a0 (patch)
treebfea2306c8379113f675ab920357f459db934ac2 /Source/Core/InputCommon/Src/ControllerInterface
parent69c91a20ea77bad0a9a1e10ab963c580908c3a45 (diff)
parentf97d2a93c4167a4b6aec0ae69536395380d427e3 (diff)
Merge branch 'full-analog-surface'
Fixes issue 5010.
Diffstat (limited to 'Source/Core/InputCommon/Src/ControllerInterface')
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp4
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h32
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp4
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm4
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp4
5 files changed, 39 insertions, 9 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
index 82cfe2469e..e6877f5731 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
@@ -461,7 +461,7 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
i = device->Inputs().begin(),
e = device->Inputs().end();
for (std::vector<bool>::iterator state = states.begin(); i != e; ++i)
- *state++ = ((*i)->GetState() > INPUT_DETECT_THRESHOLD);
+ *state++ = ((*i)->GetState() > (1 - INPUT_DETECT_THRESHOLD));
while (time < ms)
{
@@ -477,7 +477,7 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
if (false == *state)
return *i;
}
- else
+ else if ((*i)->GetState() < (1 - INPUT_DETECT_THRESHOLD))
*state = false;
}
Common::SleepCurrentThread(10); time += 10;
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h
index 7c5a236d75..b846bb56e8 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h
+++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h
@@ -87,7 +87,7 @@ public:
Input* ToInput() { return this; }
};
-
+
//
// Output
//
@@ -122,6 +122,36 @@ public:
protected:
void AddInput(Input* const i);
void AddOutput(Output* const o);
+
+ class FullAnalogSurface : public Input
+ {
+ public:
+ FullAnalogSurface(Input* low, Input* high)
+ : m_low(*low), m_high(*high)
+ {}
+
+ ControlState GetState() const
+ {
+ return (1 + m_high.GetState() - m_low.GetState()) / 2;
+ }
+
+ std::string GetName() const
+ {
+ return m_low.GetName() + *m_high.GetName().rbegin();
+ }
+
+ private:
+ Input& m_low;
+ Input& m_high;
+ };
+
+ void AddAnalogInputs(Input* low, Input* high)
+ {
+ AddInput(low);
+ AddInput(high);
+ AddInput(new FullAnalogSurface(low, high));
+ AddInput(new FullAnalogSurface(high, low));
+ }
private:
std::vector<Input*> m_inputs;
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp
index af6ee7e77c..9bc5364e76 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp
@@ -267,8 +267,8 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
const LONG& ax = (&m_state_in.lX)[offset];
// each axis gets a negative and a positive input instance associated with it
- AddInput(new Axis(offset, ax, base, range.lMin-base));
- AddInput(new Axis(offset, ax, base, range.lMax-base));
+ AddAnalogInputs(new Axis(offset, ax, base, range.lMin-base),
+ new Axis(offset, ax, base, range.lMax-base));
}
}
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm
index 129a5f38e0..60c0cc8c50 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm
+++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm
@@ -64,8 +64,8 @@ Joystick::Joystick(IOHIDDeviceRef device, std::string name, int index)
AddInput(new Hat(e, m_device, Hat::down));
AddInput(new Hat(e, m_device, Hat::left));
} else {
- AddInput(new Axis(e, m_device, Axis::negative));
- AddInput(new Axis(e, m_device, Axis::positive));
+ AddAnalogInputs(new Axis(e, m_device, Axis::negative),
+ new Axis(e, m_device, Axis::positive));
}
}
CFRelease(axes);
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp
index c7c6898ecd..5473f7bcb3 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp
@@ -86,8 +86,8 @@ Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index, const unsi
for (u8 i = 0; i != SDL_JoystickNumAxes(m_joystick); ++i)
{
// each axis gets a negative and a positive input instance associated with it
- AddInput(new Axis(i, m_joystick, -32768));
- AddInput(new Axis(i, m_joystick, 32767));
+ AddAnalogInputs(new Axis(i, m_joystick, -32768),
+ new Axis(i, m_joystick, 32767));
}
#ifdef USE_SDL_HAPTIC