diff options
| author | LC <mathew1800@gmail.com> | 2020-07-08 08:50:47 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-08 08:50:47 -0400 |
| commit | 87287181dd17156170d601ca5e7c81e66afb6643 (patch) | |
| tree | 70f8e2c226da940af63f2bd534319de6bcab1627 /Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp | |
| parent | a5166be9952ce3486db9730f8a7e178af4415d66 (diff) | |
| parent | f8e0ececb9668e200eb0fbe932d7f8ddf2728a8b (diff) | |
Merge pull request #8907 from JosJuice/android-overlay-stick-gate
Android: Use octagonal stick gate in overlay
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); |
