diff options
author | wwylele <wwylele@gmail.com> | 2016-12-11 23:32:41 +0200 |
---|---|---|
committer | wwylele <wwylele@gmail.com> | 2016-12-26 10:52:16 +0200 |
commit | bcf9d20d5713e7003792bb8fa740b19a7204920e (patch) | |
tree | a5fd21a9dd1587d8dedddc33a19b09490ceb164d /src/core/frontend/motion_emu.h | |
parent | 6479f63091da35b1ac6f3930532cc8bde466f6c4 (diff) |
Frontend: emulate motion sensor
Diffstat (limited to 'src/core/frontend/motion_emu.h')
-rw-r--r-- | src/core/frontend/motion_emu.h | 52 |
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 0000000000..99d41a7264 --- /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 |