applets/controller: Implement "Explain Text"
"Explain Text" is additional text that is shown for each player in the controller applet.
This commit is contained in:
parent
5219615418
commit
5ce3015945
6 changed files with 304 additions and 25 deletions
|
@ -11,6 +11,7 @@
|
|||
namespace Core::Frontend {
|
||||
|
||||
using BorderColor = std::array<u8, 4>;
|
||||
using ExplainText = std::array<char, 0x81>;
|
||||
|
||||
struct ControllerParameters {
|
||||
s8 min_players{};
|
||||
|
@ -19,6 +20,8 @@ struct ControllerParameters {
|
|||
bool enable_single_mode{};
|
||||
bool enable_border_color{};
|
||||
std::vector<BorderColor> border_colors{};
|
||||
bool enable_explain_text{};
|
||||
std::vector<ExplainText> explain_text{};
|
||||
bool allow_pro_controller{};
|
||||
bool allow_handheld{};
|
||||
bool allow_dual_joycons{};
|
||||
|
|
|
@ -19,8 +19,8 @@ namespace Service::AM::Applets {
|
|||
[[maybe_unused]] constexpr ResultCode ERR_CONTROLLER_APPLET_3102{ErrorModule::HID, 3102};
|
||||
|
||||
static Core::Frontend::ControllerParameters ConvertToFrontendParameters(
|
||||
ControllerSupportArgPrivate private_arg, ControllerSupportArgHeader header,
|
||||
std::vector<IdentificationColor> identification_colors) {
|
||||
ControllerSupportArgPrivate private_arg, ControllerSupportArgHeader header, bool enable_text,
|
||||
std::vector<IdentificationColor> identification_colors, std::vector<ExplainText> text) {
|
||||
HID::Controller_NPad::NPadType npad_style_set;
|
||||
npad_style_set.raw = private_arg.style_set;
|
||||
|
||||
|
@ -31,6 +31,8 @@ static Core::Frontend::ControllerParameters ConvertToFrontendParameters(
|
|||
.enable_single_mode = header.enable_single_mode,
|
||||
.enable_border_color = header.enable_identification_color,
|
||||
.border_colors = identification_colors,
|
||||
.enable_explain_text = enable_text,
|
||||
.explain_text = text,
|
||||
.allow_pro_controller = npad_style_set.pro_controller == 1,
|
||||
.allow_handheld = npad_style_set.handheld == 1,
|
||||
.allow_dual_joycons = npad_style_set.joycon_dual == 1,
|
||||
|
@ -126,31 +128,38 @@ void Controller::Execute() {
|
|||
case LibraryAppletVersion::Version5:
|
||||
return ConvertToFrontendParameters(
|
||||
controller_private_arg, controller_user_arg_old.header,
|
||||
controller_user_arg_old.enable_explain_text,
|
||||
std::vector<IdentificationColor>(
|
||||
controller_user_arg_old.identification_colors.begin(),
|
||||
controller_user_arg_old.identification_colors.end()));
|
||||
controller_user_arg_old.identification_colors.end()),
|
||||
std::vector<ExplainText>(controller_user_arg_old.explain_text.begin(),
|
||||
controller_user_arg_old.explain_text.end()));
|
||||
case LibraryAppletVersion::Version7:
|
||||
default:
|
||||
return ConvertToFrontendParameters(
|
||||
controller_private_arg, controller_user_arg_new.header,
|
||||
controller_user_arg_new.enable_explain_text,
|
||||
std::vector<IdentificationColor>(
|
||||
controller_user_arg_new.identification_colors.begin(),
|
||||
controller_user_arg_new.identification_colors.end()));
|
||||
controller_user_arg_new.identification_colors.end()),
|
||||
std::vector<ExplainText>(controller_user_arg_new.explain_text.begin(),
|
||||
controller_user_arg_new.explain_text.end()));
|
||||
}
|
||||
}();
|
||||
|
||||
is_single_mode = parameters.enable_single_mode;
|
||||
|
||||
LOG_DEBUG(
|
||||
Service_HID,
|
||||
"Controller Parameters: min_players={}, max_players={}, keep_controllers_connected={}, "
|
||||
"enable_single_mode={}, enable_border_color={}, allow_pro_controller={}, "
|
||||
"allow_handheld={}, allow_dual_joycons={}, allow_left_joycon={}, allow_right_joycon={}",
|
||||
parameters.min_players, parameters.max_players, parameters.keep_controllers_connected,
|
||||
parameters.enable_single_mode, parameters.enable_border_color,
|
||||
parameters.allow_pro_controller, parameters.allow_handheld,
|
||||
parameters.allow_dual_joycons, parameters.allow_left_joycon,
|
||||
parameters.allow_right_joycon);
|
||||
LOG_DEBUG(Service_HID,
|
||||
"Controller Parameters: min_players={}, max_players={}, "
|
||||
"keep_controllers_connected={}, enable_single_mode={}, enable_border_color={}, "
|
||||
"enable_explain_text={}, allow_pro_controller={}, allow_handheld={}, "
|
||||
"allow_dual_joycons={}, allow_left_joycon={}, allow_right_joycon={}",
|
||||
parameters.min_players, parameters.max_players,
|
||||
parameters.keep_controllers_connected, parameters.enable_single_mode,
|
||||
parameters.enable_border_color, parameters.enable_explain_text,
|
||||
parameters.allow_pro_controller, parameters.allow_handheld,
|
||||
parameters.allow_dual_joycons, parameters.allow_left_joycon,
|
||||
parameters.allow_right_joycon);
|
||||
|
||||
frontend.ReconfigureControllers([this] { ConfigurationComplete(); }, parameters);
|
||||
break;
|
||||
|
|
|
@ -16,6 +16,7 @@ class System;
|
|||
namespace Service::AM::Applets {
|
||||
|
||||
using IdentificationColor = std::array<u8, 4>;
|
||||
using ExplainText = std::array<char, 0x81>;
|
||||
|
||||
enum class LibraryAppletVersion : u32_le {
|
||||
Version3 = 0x3, // 1.0.0 - 2.3.0
|
||||
|
@ -65,7 +66,7 @@ struct ControllerSupportArgOld {
|
|||
ControllerSupportArgHeader header{};
|
||||
std::array<IdentificationColor, 4> identification_colors{};
|
||||
bool enable_explain_text{};
|
||||
std::array<std::array<char, 0x81>, 4> explain_text{};
|
||||
std::array<ExplainText, 4> explain_text{};
|
||||
};
|
||||
static_assert(sizeof(ControllerSupportArgOld) == 0x21C,
|
||||
"ControllerSupportArgOld has incorrect size.");
|
||||
|
@ -75,7 +76,7 @@ struct ControllerSupportArgNew {
|
|||
ControllerSupportArgHeader header{};
|
||||
std::array<IdentificationColor, 8> identification_colors{};
|
||||
bool enable_explain_text{};
|
||||
std::array<std::array<char, 0x81>, 8> explain_text{};
|
||||
std::array<ExplainText, 8> explain_text{};
|
||||
};
|
||||
static_assert(sizeof(ControllerSupportArgNew) == 0x430,
|
||||
"ControllerSupportArgNew has incorrect size.");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue