|
|
|
@ -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
|