summaryrefslogtreecommitdiffstats
path: root/src/input_common
diff options
context:
space:
mode:
authorgerman <german@thesoftwareartisans.com>2020-09-03 02:59:34 +0200
committergerman <german@thesoftwareartisans.com>2020-09-05 04:48:13 +0200
commit0774b17846fc7bd12bfe329fbaed6524d96c81cb (patch)
tree66322913f15800647404a33051d99454546eaa11 /src/input_common
parentconfigure_input_player: Show/hide motion buttons based on the controller (diff)
downloadyuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.tar
yuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.tar.gz
yuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.tar.bz2
yuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.tar.lz
yuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.tar.xz
yuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.tar.zst
yuzu-0774b17846fc7bd12bfe329fbaed6524d96c81cb.zip
Diffstat (limited to 'src/input_common')
-rw-r--r--src/input_common/motion_emu.cpp17
-rw-r--r--src/input_common/udp/client.cpp10
-rw-r--r--src/input_common/udp/client.h3
-rw-r--r--src/input_common/udp/udp.cpp2
4 files changed, 25 insertions, 7 deletions
diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp
index d4cdf76a3..69fd3c1d2 100644
--- a/src/input_common/motion_emu.cpp
+++ b/src/input_common/motion_emu.cpp
@@ -56,7 +56,7 @@ public:
is_tilting = false;
}
- std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() {
+ Input::MotionStatus GetStatus() {
std::lock_guard guard{status_mutex};
return status;
}
@@ -76,7 +76,7 @@ private:
Common::Event shutdown_event;
- std::tuple<Common::Vec3<float>, Common::Vec3<float>> status;
+ Input::MotionStatus status;
std::mutex status_mutex;
// Note: always keep the thread declaration at the end so that other objects are initialized
@@ -113,10 +113,19 @@ private:
gravity = QuaternionRotate(inv_q, gravity);
angular_rate = QuaternionRotate(inv_q, angular_rate);
+ // TODO: Calculate the correct rotation vector and orientation matrix
+ const auto matrix4x4 = q.ToMatrix();
+ const auto rotation = Common::MakeVec(0.0f, 0.0f, 0.0f);
+ const std::array orientation{
+ Common::Vec3f(matrix4x4[0], matrix4x4[1], -matrix4x4[2]),
+ Common::Vec3f(matrix4x4[4], matrix4x4[5], -matrix4x4[6]),
+ Common::Vec3f(-matrix4x4[8], -matrix4x4[9], matrix4x4[10]),
+ };
+
// Update the sensor state
{
std::lock_guard guard{status_mutex};
- status = std::make_tuple(gravity, angular_rate);
+ status = std::make_tuple(gravity, angular_rate, rotation, orientation);
}
}
}
@@ -131,7 +140,7 @@ public:
device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity);
}
- std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() const override {
+ Input::MotionStatus GetStatus() const override {
return device->GetStatus();
}
diff --git a/src/input_common/udp/client.cpp b/src/input_common/udp/client.cpp
index 3f4eaf448..91e13482d 100644
--- a/src/input_common/udp/client.cpp
+++ b/src/input_common/udp/client.cpp
@@ -170,10 +170,18 @@ void Client::OnPadData(Response::PadData data) {
// directions correspond to the ones of the Switch
Common::Vec3f accel = Common::MakeVec<float>(data.accel.x, data.accel.y, data.accel.z);
Common::Vec3f gyro = Common::MakeVec<float>(data.gyro.pitch, data.gyro.yaw, data.gyro.roll);
+
+ // TODO: Calculate the correct rotation vector and orientation matrix
+ const auto rotation = Common::MakeVec(0.0f, 0.0f, 0.0f);
+ const std::array orientation{
+ Common::Vec3f(1.0f, 0.0f, 0.0f),
+ Common::Vec3f(0.0f, 1.0f, 0.0f),
+ Common::Vec3f(0.0f, 0.0f, 1.0f),
+ };
{
std::lock_guard guard(status->update_mutex);
- status->motion_status = {accel, gyro};
+ status->motion_status = {accel, gyro, rotation, orientation};
// TODO: add a setting for "click" touch. Click touch refers to a device that differentiates
// between a simple "tap" and a hard press that causes the touch screen to click.
diff --git a/src/input_common/udp/client.h b/src/input_common/udp/client.h
index b8c654755..a73283ae8 100644
--- a/src/input_common/udp/client.h
+++ b/src/input_common/udp/client.h
@@ -14,6 +14,7 @@
#include "common/common_types.h"
#include "common/thread.h"
#include "common/vector_math.h"
+#include "core/frontend/input.h"
namespace InputCommon::CemuhookUDP {
@@ -30,7 +31,7 @@ struct Version;
struct DeviceStatus {
std::mutex update_mutex;
- std::tuple<Common::Vec3<float>, Common::Vec3<float>> motion_status;
+ Input::MotionStatus motion_status;
std::tuple<float, float, bool> touch_status;
// calibration data for scaling the device's touch area to 3ds
diff --git a/src/input_common/udp/udp.cpp b/src/input_common/udp/udp.cpp
index 4b347e47e..03bae5752 100644
--- a/src/input_common/udp/udp.cpp
+++ b/src/input_common/udp/udp.cpp
@@ -29,7 +29,7 @@ private:
class UDPMotionDevice final : public Input::MotionDevice {
public:
explicit UDPMotionDevice(std::shared_ptr<DeviceStatus> status_) : status(std::move(status_)) {}
- std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() const override {
+ Input::MotionStatus GetStatus() const override {
std::lock_guard guard(status->update_mutex);
return status->motion_status;
}