summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp45
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);