summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface
diff options
context:
space:
mode:
authorAnthony <Helios747@users.noreply.github.com>2019-11-27 15:40:43 -0800
committerGitHub <noreply@github.com>2019-11-27 15:40:43 -0800
commit155016531fb970f45d46a97b4397d9990e2b494e (patch)
treec2cb83ae37c26ef4ebaae0dea9172eb4291084ec /Source/Core/InputCommon/ControllerInterface
parent34a1df1c68ba76cdc5aea2dfabb68e1850dd9662 (diff)
parent2d4a3f4597f14b2563fac7acf080b91fa4bac5e8 (diff)
Merge pull request #8439 from JosJuice/android-native-motion-controls
Android: Native motion controls
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Android/Android.cpp37
-rw-r--r--Source/Core/InputCommon/ControllerInterface/Android/Android.h2
2 files changed, 39 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
index 910b7553c9..21537cba15 100644
--- a/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/Android/Android.cpp
@@ -10,6 +10,21 @@
namespace ciface::Android
{
+static bool s_accelerometer_enabled = false;
+static bool s_gyroscope_enabled = false;
+
+void SetMotionSensorsEnabled(bool accelerometer_enabled, bool gyroscope_enabled)
+{
+ const bool any_changes =
+ s_accelerometer_enabled != accelerometer_enabled || s_gyroscope_enabled != gyroscope_enabled;
+
+ s_accelerometer_enabled = accelerometer_enabled;
+ s_gyroscope_enabled = gyroscope_enabled;
+
+ if (any_changes)
+ g_controller_interface.RefreshDevices();
+}
+
void PopulateDevices()
{
for (int i = 0; i < 8; ++i)
@@ -185,6 +200,28 @@ Touchscreen::Touchscreen(int padID) : _padID(padID)
AddInput(new Axis(_padID, ButtonManager::TURNTABLE_CROSSFADE_RIGHT));
AddInput(new Axis(_padID, ButtonManager::TURNTABLE_EFFECT_DIAL));
+ // Wiimote IMU
+ // Only add inputs if we actually can receive data from the relevant sensor.
+ // Whether inputs exist affects what WiimoteEmu gets when calling ControlReference::BoundCount.
+ if (s_accelerometer_enabled)
+ {
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_LEFT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_RIGHT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_FORWARD));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_BACKWARD));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_UP));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_ACCEL_DOWN));
+ }
+ if (s_gyroscope_enabled)
+ {
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_PITCH_UP));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_PITCH_DOWN));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_ROLL_LEFT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_ROLL_RIGHT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_YAW_LEFT));
+ AddInput(new Axis(_padID, ButtonManager::WIIMOTE_GYRO_YAW_RIGHT));
+ }
+
// Rumble
AddOutput(new Motor(_padID, ButtonManager::RUMBLE));
}
diff --git a/Source/Core/InputCommon/ControllerInterface/Android/Android.h b/Source/Core/InputCommon/ControllerInterface/Android/Android.h
index 82a1a47954..c9e7ddc0a9 100644
--- a/Source/Core/InputCommon/ControllerInterface/Android/Android.h
+++ b/Source/Core/InputCommon/ControllerInterface/Android/Android.h
@@ -9,6 +9,8 @@
namespace ciface::Android
{
+void SetMotionSensorsEnabled(bool accelerometer_enabled, bool gyroscope_enabled);
+
void PopulateDevices();
class Touchscreen : public Core::Device