summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface
diff options
context:
space:
mode:
authorLC <mathew1800@gmail.com>2020-07-08 08:50:47 -0400
committerGitHub <noreply@github.com>2020-07-08 08:50:47 -0400
commit87287181dd17156170d601ca5e7c81e66afb6643 (patch)
tree70f8e2c226da940af63f2bd534319de6bcab1627 /Source/Core/InputCommon/ControllerInterface
parenta5166be9952ce3486db9730f8a7e178af4415d66 (diff)
parentf8e0ececb9668e200eb0fbe932d7f8ddf2728a8b (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')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.cpp45
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h7
2 files changed, 52 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);
diff --git a/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h b/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h
index 5d6a19ef78..2139c2e2ca 100644
--- a/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h
+++ b/Source/Core/InputCommon/ControllerInterface/Touch/ButtonManager.h
@@ -268,9 +268,16 @@ public:
};
void Init(const std::string&);
+
+// pad_id is numbered 0 to 3 for GC pads and 4 to 7 for Wiimotes
bool GetButtonPressed(int pad_id, ButtonType button);
float GetAxisValue(int pad_id, ButtonType axis);
+
+// emu_pad_id is numbered 0 to 3 for both GC pads and Wiimotes
+double GetInputRadiusAtAngle(int emu_pad_id, ButtonType stick, double angle);
+
bool GamepadEvent(const std::string& dev, int button, int action);
void GamepadAxisEvent(const std::string& dev, int axis, float value);
+
void Shutdown();
} // namespace ButtonManager