diff options
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp b/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp index 22b05952f6..75f69b8823 100644 --- a/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp +++ b/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp @@ -8,10 +8,22 @@ #include <unordered_map> #include <vector> +#include "Common/Assert.h" #include "Common/FileUtil.h" #include "Common/IniFile.h" #include "Common/StringUtil.h" #include "Common/Thread.h" + +#include "Core/Core.h" +#include "Core/HW/GCPad.h" +#include "Core/HW/GCPadEmu.h" +#include "Core/HW/Wiimote.h" +#include "Core/HW/WiimoteEmu/Extension/Classic.h" +#include "Core/HW/WiimoteEmu/Extension/Nunchuk.h" +#include "Core/HW/WiimoteEmu/WiimoteEmu.h" + +#include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h" +#include "InputCommon/ControllerEmu/StickGate.h" #include "InputCommon/ControllerInterface/Touch/ButtonManager.h" namespace ButtonManager @@ -688,6 +700,39 @@ float GetAxisValue(int pad_id, ButtonType axis) return value; } +double GetInputRadiusAtAngle(int pad_id, ButtonType stick, double angle) +{ + // To avoid a crash, don't access controllers before they've been initialized by the boot process + if (!Core::IsRunningAndStarted()) + return 0; + + ControllerEmu::ControlGroup* group; + + switch (stick) + { + case STICK_MAIN: + group = Pad::GetGroup(pad_id, PadGroup::MainStick); + break; + case STICK_C: + group = Pad::GetGroup(pad_id, PadGroup::CStick); + break; + case NUNCHUK_STICK: + group = Wiimote::GetNunchukGroup(pad_id, WiimoteEmu::NunchukGroup::Stick); + break; + case CLASSIC_STICK_LEFT: + group = Wiimote::GetClassicGroup(pad_id, WiimoteEmu::ClassicGroup::LeftStick); + break; + case CLASSIC_STICK_RIGHT: + group = Wiimote::GetClassicGroup(pad_id, WiimoteEmu::ClassicGroup::RightStick); + break; + default: + ASSERT(false); + return 0; + } + + return static_cast<ControllerEmu::ReshapableInput*>(group)->GetInputRadiusAtAngle(angle); +} + bool GamepadEvent(const std::string& dev, int button, int action) { auto it = m_controllers.find(dev); |
