From 48b69ca01841ba724049895a83d8d88ec95d66de Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Tue, 26 Feb 2019 19:46:21 -0600 Subject: ControllerInterface: Input detection improvements. --- .../Core/InputCommon/ControllerInterface/Device.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'Source/Core/InputCommon/ControllerInterface/Device.h') diff --git a/Source/Core/InputCommon/ControllerInterface/Device.h b/Source/Core/InputCommon/ControllerInterface/Device.h index 7b36da934a..0ee2b31444 100644 --- a/Source/Core/InputCommon/ControllerInterface/Device.h +++ b/Source/Core/InputCommon/ControllerInterface/Device.h @@ -55,9 +55,22 @@ public: class Input : public Control { public: - // things like absolute axes/ absolute mouse position will override this + // Things like absolute axes/ absolute mouse position should override this to prevent + // undesirable behavior in our mapping logic. virtual bool IsDetectable() { return true; } + + // Implementations should return a value from 0.0 to 1.0 across their normal range. + // One input should be provided for each "direction". (e.g. 2 for each axis) + // If possible, negative values may be returned in situations where an opposing input is + // activated. (e.g. When an underlying axis, X, is currently negative, "Axis X-", will return a + // positive value and "Axis X+" may return a negative value.) + // Doing so is solely to allow our input detection logic to better detect false positives. + // This is necessary when making use of "FullAnalogSurface" as multiple inputs will be seen + // increasing from 0.0 to 1.0 as a user tries to map just one. The negative values provide a + // view of the underlying axis. (Negative values are clamped off before they reach + // expression-parser or controller-emu) virtual ControlState GetState() const = 0; + Input* ToInput() override { return this; } }; @@ -96,11 +109,7 @@ protected: { public: FullAnalogSurface(Input* low, Input* high) : m_low(*low), m_high(*high) {} - ControlState GetState() const override - { - return (1 + m_high.GetState() - m_low.GetState()) / 2; - } - + ControlState GetState() const override; std::string GetName() const override { return m_low.GetName() + *m_high.GetName().rbegin(); } private: -- cgit v1.2.3 From c389d68186ea7fa95d763d7bb55bc09e5a45c4cd Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Wed, 27 Feb 2019 18:10:18 -0600 Subject: ControllerInterface/DolphinQt: Make mapping "all devices" way less hacky. --- Source/Core/InputCommon/ControllerInterface/Device.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Source/Core/InputCommon/ControllerInterface/Device.h') diff --git a/Source/Core/InputCommon/ControllerInterface/Device.h b/Source/Core/InputCommon/ControllerInterface/Device.h index 0ee2b31444..7d7623ba03 100644 --- a/Source/Core/InputCommon/ControllerInterface/Device.h +++ b/Source/Core/InputCommon/ControllerInterface/Device.h @@ -172,6 +172,9 @@ public: bool HasConnectedDevice(const DeviceQualifier& qualifier) const; + std::pair, Device::Input*> + DetectInput(u32 wait_ms, std::vector device_strings); + protected: mutable std::mutex m_devices_mutex; std::vector> m_devices; -- cgit v1.2.3