diff options
| author | bunnei <bunneidev@gmail.com> | 2017-01-07 12:39:20 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-07 12:39:20 -0500 |
| commit | 7cfe3ef0463ace034b1e5786c9581cfa5f2e810c (patch) | |
| tree | 6b06cb03d276b29070ca29599fc4c5fcf77edb39 /src/core/frontend/motion_emu.h | |
| parent | b5eac78b43c254b20ef88386b4fdaf0bb6c29fe2 (diff) | |
| parent | d7d40b3c56df8e31d018477a5bd2abe3a6e4e550 (diff) | |
Merge pull request #1951 from wwylele/motion-sensor
Emulate motion sensor in frontend
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 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 |
