diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2022-12-20 13:09:10 -0600 |
---|---|---|
committer | Narr the Reg <juangerman-13@hotmail.com> | 2023-01-19 18:05:20 -0600 |
commit | a4074001fe2e8ed72c87093f57ec972815661b81 (patch) | |
tree | 145ff4c2896098d069cb2b08d175ed8e4c906e83 /src/core/hid/emulated_controller.cpp | |
parent | 18c9f8eeed64196088969904d16095721ed66a3c (diff) |
core: hid: Migrate ring from emulated devices to emulated controller
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
-rw-r--r-- | src/core/hid/emulated_controller.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp index 7a01f3f4c8..128101e8ca 100644 --- a/src/core/hid/emulated_controller.cpp +++ b/src/core/hid/emulated_controller.cpp @@ -139,6 +139,7 @@ void EmulatedController::LoadDevices() { camera_params = Common::ParamPackage{"engine:camera,camera:1"}; nfc_params = Common::ParamPackage{"engine:virtual_amiibo,nfc:1"}; + ring_params = Common::ParamPackage{"engine:joycon,axis_x:100,axis_y:101"}; output_params[LeftIndex] = left_joycon; output_params[RightIndex] = right_joycon; @@ -160,6 +161,7 @@ void EmulatedController::LoadDevices() { std::ranges::transform(battery_params, battery_devices.begin(), Common::Input::CreateInputDevice); camera_devices = Common::Input::CreateInputDevice(camera_params); + ring_analog_device = Common::Input::CreateInputDevice(ring_params); nfc_devices = Common::Input::CreateInputDevice(nfc_params); std::ranges::transform(output_params, output_devices.begin(), Common::Input::CreateOutputDevice); @@ -343,6 +345,13 @@ void EmulatedController::ReloadInput() { camera_devices->ForceUpdate(); } + if (ring_analog_device) { + ring_analog_device->SetCallback({ + .on_change = + [this](const Common::Input::CallbackStatus& callback) { SetRingAnalog(callback); }, + }); + } + if (nfc_devices) { if (npad_id_type == NpadIdType::Handheld || npad_id_type == NpadIdType::Player1) { nfc_devices->SetCallback({ @@ -436,6 +445,7 @@ void EmulatedController::UnloadInput() { stick.reset(); } camera_devices.reset(); + ring_analog_device.reset(); nfc_devices.reset(); } @@ -501,6 +511,7 @@ void EmulatedController::SaveCurrentConfig() { for (std::size_t index = 0; index < player.motions.size(); ++index) { player.motions[index] = motion_params[index].Serialize(); } + Settings::values.ringcon_analogs = ring_params.Serialize(); } void EmulatedController::RestoreConfig() { @@ -1005,6 +1016,24 @@ void EmulatedController::SetCamera(const Common::Input::CallbackStatus& callback TriggerOnChange(ControllerTriggerType::IrSensor, true); } +void EmulatedController::SetRingAnalog(const Common::Input::CallbackStatus& callback) { + std::unique_lock lock{mutex}; + const auto force_value = TransformToStick(callback); + + controller.ring_analog_value = force_value.x; + + if (is_configuring) { + lock.unlock(); + TriggerOnChange(ControllerTriggerType::RingController, false); + return; + } + + controller.ring_analog_state.force = force_value.x.value; + + lock.unlock(); + TriggerOnChange(ControllerTriggerType::RingController, true); +} + void EmulatedController::SetNfc(const Common::Input::CallbackStatus& callback) { std::unique_lock lock{mutex}; controller.nfc_values = TransformToNfc(callback); @@ -1104,6 +1133,15 @@ bool EmulatedController::SetCameraFormat( camera_format)) == Common::Input::CameraError::None; } +Common::ParamPackage EmulatedController::GetRingParam() const { + return ring_params; +} + +void EmulatedController::SetRingParam(Common::ParamPackage param) { + ring_params = std::move(param); + ReloadInput(); +} + bool EmulatedController::HasNfc() const { const auto& nfc_output_device = output_devices[3]; @@ -1395,6 +1433,10 @@ CameraValues EmulatedController::GetCameraValues() const { return controller.camera_values; } +RingAnalogValue EmulatedController::GetRingSensorValues() const { + return controller.ring_analog_value; +} + HomeButtonState EmulatedController::GetHomeButtons() const { std::scoped_lock lock{mutex}; if (is_configuring) { @@ -1478,6 +1520,10 @@ const CameraState& EmulatedController::GetCamera() const { return controller.camera_state; } +RingSensorForce EmulatedController::GetRingSensorForce() const { + return controller.ring_analog_state; +} + const NfcState& EmulatedController::GetNfc() const { std::scoped_lock lock{mutex}; return controller.nfc_state; |