ControllerInterface: Gate the input based on our new background input setting

This commit is contained in:
Jasper St. Pierre 2014-07-11 10:53:51 -04:00
parent 5abc028ace
commit 74f3083381
3 changed files with 36 additions and 2 deletions

View File

@ -5,6 +5,12 @@
#include <sstream>
#include <string>
// For InputGateOn()
// This is a really bad layering violation, but it's the cleanest
// place I could find to put it.
#include "Core/ConfigManager.h"
#include "Core/Host.h"
#include "InputCommon/ControllerInterface/Device.h"
namespace ciface
@ -74,6 +80,16 @@ void Device::ClearInputState()
// kinda slow but, w/e, should only happen when user unplugs a device while playing
}
bool Device::Control::InputGateOn()
{
if (SConfig::GetInstance().m_BackgroundInput)
return true;
else if (Host_RendererHasFocus())
return true;
else
return false;
}
//
// DeviceQualifier :: ToString
//

View File

@ -42,6 +42,8 @@ public:
virtual std::string GetName() const = 0;
virtual ~Control() {}
bool InputGateOn();
virtual Input* ToInput() { return nullptr; }
virtual Output* ToOutput() { return nullptr; }
};
@ -59,6 +61,16 @@ public:
virtual ControlState GetState() const = 0;
bool ShouldHaveInput();
ControlState GetGatedState()
{
if (InputGateOn())
return GetState();
else
return 0.0;
}
Input* ToInput() override { return this; }
};
@ -74,6 +86,12 @@ public:
virtual void SetState(ControlState state) = 0;
void SetGatedState(ControlState state)
{
if (InputGateOn())
SetState(state);
}
Output* ToOutput() override { return this; }
};

View File

@ -228,12 +228,12 @@ public:
virtual ControlState GetValue() override
{
return control->ToInput()->GetState();
return control->ToInput()->GetGatedState();
}
virtual void SetValue(ControlState value) override
{
control->ToOutput()->SetState(value);
control->ToOutput()->SetGatedState(value);
}
virtual int CountNumControls() override