applets/controller: Implement fallback applet for the SDL frontend
Implement the fallback applet for the SDL frontend, connecting only the minimum amount of players required.
This commit is contained in:
parent
72b2f5d34f
commit
7299356f37
3 changed files with 34 additions and 90 deletions
|
@ -720,92 +720,4 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const
|
|||
return false;
|
||||
}
|
||||
|
||||
Controller_NPad::NPadControllerType Controller_NPad::DecideBestController(
|
||||
NPadControllerType priority) const {
|
||||
if (IsControllerSupported(priority)) {
|
||||
return priority;
|
||||
}
|
||||
const auto is_docked = Settings::values.use_docked_mode;
|
||||
if (is_docked && priority == NPadControllerType::Handheld) {
|
||||
priority = NPadControllerType::JoyDual;
|
||||
if (IsControllerSupported(priority)) {
|
||||
return priority;
|
||||
}
|
||||
}
|
||||
std::vector<NPadControllerType> priority_list;
|
||||
switch (priority) {
|
||||
case NPadControllerType::ProController:
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
if (!is_docked) {
|
||||
priority_list.push_back(NPadControllerType::Handheld);
|
||||
}
|
||||
priority_list.push_back(NPadControllerType::JoyLeft);
|
||||
priority_list.push_back(NPadControllerType::JoyRight);
|
||||
priority_list.push_back(NPadControllerType::Pokeball);
|
||||
break;
|
||||
case NPadControllerType::Handheld:
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
priority_list.push_back(NPadControllerType::ProController);
|
||||
priority_list.push_back(NPadControllerType::JoyLeft);
|
||||
priority_list.push_back(NPadControllerType::JoyRight);
|
||||
priority_list.push_back(NPadControllerType::Pokeball);
|
||||
break;
|
||||
case NPadControllerType::JoyDual:
|
||||
if (!is_docked) {
|
||||
priority_list.push_back(NPadControllerType::Handheld);
|
||||
}
|
||||
priority_list.push_back(NPadControllerType::ProController);
|
||||
priority_list.push_back(NPadControllerType::JoyLeft);
|
||||
priority_list.push_back(NPadControllerType::JoyRight);
|
||||
priority_list.push_back(NPadControllerType::Pokeball);
|
||||
break;
|
||||
case NPadControllerType::JoyLeft:
|
||||
priority_list.push_back(NPadControllerType::JoyRight);
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
if (!is_docked) {
|
||||
priority_list.push_back(NPadControllerType::Handheld);
|
||||
}
|
||||
priority_list.push_back(NPadControllerType::ProController);
|
||||
priority_list.push_back(NPadControllerType::Pokeball);
|
||||
break;
|
||||
case NPadControllerType::JoyRight:
|
||||
priority_list.push_back(NPadControllerType::JoyLeft);
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
if (!is_docked) {
|
||||
priority_list.push_back(NPadControllerType::Handheld);
|
||||
}
|
||||
priority_list.push_back(NPadControllerType::ProController);
|
||||
priority_list.push_back(NPadControllerType::Pokeball);
|
||||
break;
|
||||
case NPadControllerType::Pokeball:
|
||||
priority_list.push_back(NPadControllerType::JoyLeft);
|
||||
priority_list.push_back(NPadControllerType::JoyRight);
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
if (!is_docked) {
|
||||
priority_list.push_back(NPadControllerType::Handheld);
|
||||
}
|
||||
priority_list.push_back(NPadControllerType::ProController);
|
||||
break;
|
||||
default:
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
if (!is_docked) {
|
||||
priority_list.push_back(NPadControllerType::Handheld);
|
||||
}
|
||||
priority_list.push_back(NPadControllerType::ProController);
|
||||
priority_list.push_back(NPadControllerType::JoyLeft);
|
||||
priority_list.push_back(NPadControllerType::JoyRight);
|
||||
priority_list.push_back(NPadControllerType::JoyDual);
|
||||
break;
|
||||
}
|
||||
|
||||
const auto iter = std::find_if(priority_list.begin(), priority_list.end(),
|
||||
[this](auto type) { return IsControllerSupported(type); });
|
||||
if (iter == priority_list.end()) {
|
||||
UNIMPLEMENTED_MSG("Could not find supported controller!");
|
||||
return priority;
|
||||
}
|
||||
|
||||
return *iter;
|
||||
}
|
||||
|
||||
} // namespace Service::HID
|
||||
|
|
|
@ -318,7 +318,6 @@ private:
|
|||
|
||||
void InitNewlyAddedController(std::size_t controller_idx);
|
||||
bool IsControllerSupported(NPadControllerType controller) const;
|
||||
NPadControllerType DecideBestController(NPadControllerType priority) const;
|
||||
void RequestPadStateUpdate(u32 npad_id);
|
||||
|
||||
u32 press_state{};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue