diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2023-04-12 04:39:05 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2023-06-03 09:05:56 +0200 |
commit | 5c1310dc5ddc022f70d376325e6c112e95348344 (patch) | |
tree | cc5c49deb2482c72b6a86bf3aa497def4cc4a8b1 /src/core/hid/emulated_console.cpp | |
parent | android: Change wording for "Add Games" button (#100) (diff) | |
download | yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.tar yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.tar.gz yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.tar.bz2 yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.tar.lz yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.tar.xz yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.tar.zst yuzu-5c1310dc5ddc022f70d376325e6c112e95348344.zip |
Diffstat (limited to 'src/core/hid/emulated_console.cpp')
-rw-r--r-- | src/core/hid/emulated_console.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/core/hid/emulated_console.cpp b/src/core/hid/emulated_console.cpp index 17d663379..b4afd930e 100644 --- a/src/core/hid/emulated_console.cpp +++ b/src/core/hid/emulated_console.cpp @@ -13,7 +13,7 @@ EmulatedConsole::~EmulatedConsole() = default; void EmulatedConsole::ReloadFromSettings() { // Using first motion device from player 1. No need to assign any unique config at the moment const auto& player = Settings::values.players.GetValue()[0]; - motion_params = Common::ParamPackage(player.motions[0]); + motion_params[0] = Common::ParamPackage(player.motions[0]); ReloadInput(); } @@ -74,14 +74,30 @@ void EmulatedConsole::ReloadInput() { // If you load any device here add the equivalent to the UnloadInput() function SetTouchParams(); - motion_devices = Common::Input::CreateInputDevice(motion_params); - if (motion_devices) { - motion_devices->SetCallback({ + motion_params[1] = Common::ParamPackage{"engine:virtual_gamepad,port:8,motion:0"}; + + for (std::size_t index = 0; index < motion_devices.size(); ++index) { + motion_devices[index] = Common::Input::CreateInputDevice(motion_params[index]); + if (!motion_devices[index]) { + continue; + } + motion_devices[index]->SetCallback({ .on_change = [this](const Common::Input::CallbackStatus& callback) { SetMotion(callback); }, }); } + // Restore motion state + auto& emulated_motion = console.motion_values.emulated; + auto& motion = console.motion_state; + emulated_motion.ResetRotations(); + emulated_motion.ResetQuaternion(); + motion.accel = emulated_motion.GetAcceleration(); + motion.gyro = emulated_motion.GetGyroscope(); + motion.rotation = emulated_motion.GetRotations(); + motion.orientation = emulated_motion.GetOrientation(); + motion.is_at_rest = !emulated_motion.IsMoving(motion_sensitivity); + // Unique index for identifying touch device source std::size_t index = 0; for (auto& touch_device : touch_devices) { @@ -100,7 +116,9 @@ void EmulatedConsole::ReloadInput() { } void EmulatedConsole::UnloadInput() { - motion_devices.reset(); + for (auto& motion : motion_devices) { + motion.reset(); + } for (auto& touch : touch_devices) { touch.reset(); } @@ -133,11 +151,11 @@ void EmulatedConsole::RestoreConfig() { } Common::ParamPackage EmulatedConsole::GetMotionParam() const { - return motion_params; + return motion_params[0]; } void EmulatedConsole::SetMotionParam(Common::ParamPackage param) { - motion_params = std::move(param); + motion_params[0] = std::move(param); ReloadInput(); } |