summaryrefslogtreecommitdiffstats
path: root/src/core/frontend/motion_emu.h
diff options
context:
space:
mode:
authorwwylele <wwylele@gmail.com>2016-12-11 22:32:41 +0100
committerwwylele <wwylele@gmail.com>2016-12-26 09:52:16 +0100
commitbcf9d20d5713e7003792bb8fa740b19a7204920e (patch)
treea5fd21a9dd1587d8dedddc33a19b09490ceb164d /src/core/frontend/motion_emu.h
parentCommon: add Quaternion (diff)
downloadyuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.tar
yuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.tar.gz
yuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.tar.bz2
yuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.tar.lz
yuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.tar.xz
yuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.tar.zst
yuzu-bcf9d20d5713e7003792bb8fa740b19a7204920e.zip
Diffstat (limited to '')
-rw-r--r--src/core/frontend/motion_emu.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/core/frontend/motion_emu.h b/src/core/frontend/motion_emu.h
new file mode 100644
index 000000000..99d41a726
--- /dev/null
+++ b/src/core/frontend/motion_emu.h
@@ -0,0 +1,52 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+#include "common/thread.h"
+#include "common/vector_math.h"
+
+class EmuWindow;
+
+namespace Motion {
+
+class MotionEmu final {
+public:
+ MotionEmu(EmuWindow& emu_window);
+ ~MotionEmu();
+
+ /**
+ * Signals that a motion sensor tilt has begun.
+ * @param x the x-coordinate of the cursor
+ * @param y the y-coordinate of the cursor
+ */
+ void BeginTilt(int x, int y);
+
+ /**
+ * Signals that a motion sensor tilt is occurring.
+ * @param x the x-coordinate of the cursor
+ * @param y the y-coordinate of the cursor
+ */
+ void Tilt(int x, int y);
+
+ /**
+ * Signals that a motion sensor tilt has ended.
+ */
+ void EndTilt();
+
+private:
+ Math::Vec2<int> mouse_origin;
+
+ std::mutex tilt_mutex;
+ Math::Vec2<float> tilt_direction;
+ float tilt_angle = 0;
+
+ bool is_tilting = false;
+
+ Common::Event shutdown_event;
+ std::thread motion_emu_thread;
+
+ void MotionEmuThread(EmuWindow& emu_window);
+};
+
+} // namespace Motion