From 35e27a52c46326e0720b5ef3ee0ca3279ecf238e Mon Sep 17 00:00:00 2001 From: Collecting Date: Fri, 31 Oct 2025 05:40:39 +0000 Subject: [PATCH] feat: Choose Controller Color & Toggle Gyro Signed-off-by: Collecting --- src/hid_core/frontend/emulated_controller.cpp | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/hid_core/frontend/emulated_controller.cpp b/src/hid_core/frontend/emulated_controller.cpp index 9aa08d5cc..909dd0eef 100644 --- a/src/hid_core/frontend/emulated_controller.cpp +++ b/src/hid_core/frontend/emulated_controller.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -97,6 +98,9 @@ void EmulatedController::ReloadFromSettings() { motion_params[index] = Common::ParamPackage(player.motions[index]); } + controller.body_color = player.body_color; + controller.gyro_overlay_visible = player.gyro_overlay_visible; + controller.color_values = {}; ReloadColorsFromSettings(); @@ -637,6 +641,8 @@ void EmulatedController::SaveCurrentConfig() { auto& player = Settings::values.players.GetValue()[player_index]; player.connected = is_connected; player.controller_type = MapNPadToSettingsType(npad_type); + player.body_color = controller.body_color; + player.gyro_overlay_visible = controller.gyro_overlay_visible; for (std::size_t index = 0; index < player.buttons.size(); ++index) { player.buttons[index] = button_params[index].Serialize(); } @@ -730,6 +736,26 @@ Common::ParamPackage EmulatedController::GetMotionParam(std::size_t index) const return motion_params[index]; } +u32 EmulatedController::GetBodyColor() const { + std::scoped_lock lock{mutex}; + return controller.body_color; +} + +void EmulatedController::SetBodyColor(u32 color) { + std::scoped_lock lock{mutex}; + controller.body_color = color; +} + +bool EmulatedController::IsGyroOverlayVisible() const { + std::scoped_lock lock{mutex}; + return controller.gyro_overlay_visible; +} + +void EmulatedController::SetGyroOverlayVisible(bool visible) { + std::scoped_lock lock{mutex}; + controller.gyro_overlay_visible = visible; +} + void EmulatedController::SetButtonParam(std::size_t index, Common::ParamPackage param) { if (index >= button_params.size()) { return;