Qt/WiimoteControllersWidget: Disable remote Wiimote configuration during netplay.

This commit is contained in:
Admiral H. Curtiss 2022-09-25 04:22:30 +02:00
parent a1563f2def
commit ae4b89441c
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
4 changed files with 29 additions and 5 deletions

View File

@ -2321,11 +2321,22 @@ bool NetPlayClient::IsFirstInGamePad(int ingame_pad) const
[](auto mapping) { return mapping > 0; });
}
static int CountLocalPads(const PadMappingArray& pad_map, const PlayerId& local_player_pid)
{
return static_cast<int>(
std::count_if(pad_map.begin(), pad_map.end(), [&local_player_pid](const auto& mapping) {
return mapping == local_player_pid;
}));
}
int NetPlayClient::NumLocalPads() const
{
return static_cast<int>(std::count_if(m_pad_map.begin(), m_pad_map.end(), [this](auto mapping) {
return mapping == m_local_player->pid;
}));
return CountLocalPads(m_pad_map, m_local_player->pid);
}
int NetPlayClient::NumLocalWiimotes() const
{
return CountLocalPads(m_wiimote_map, m_local_player->pid);
}
static int InGameToLocal(int ingame_pad, const PadMappingArray& pad_map, PlayerId local_player_pid)
@ -2653,6 +2664,14 @@ PadDetails GetPadDetails(int pad_num)
return res;
}
int NumLocalWiimotes()
{
std::lock_guard lk(crit_netplay_client);
if (netplay_client)
return netplay_client->NumLocalWiimotes();
return 0;
}
void NetPlay_Enable(NetPlayClient* const np)
{
std::lock_guard lk(crit_netplay_client);

View File

@ -151,6 +151,7 @@ public:
bool IsFirstInGamePad(int ingame_pad) const;
int NumLocalPads() const;
int NumLocalWiimotes() const;
int InGamePadToLocalPad(int ingame_pad) const;
int LocalPadToInGamePad(int local_pad) const;

View File

@ -256,4 +256,5 @@ void SetSIPollBatching(bool state);
void SendPowerButtonEvent();
std::string GetGBASavePath(int pad_num);
PadDetails GetPadDetails(int pad_num);
int NumLocalWiimotes();
} // namespace NetPlay

View File

@ -287,7 +287,8 @@ void WiimoteControllersWidget::LoadSettings(Core::State state)
const bool running_gc = running && !SConfig::GetInstance().bWii;
const bool enable_passthrough = m_wiimote_passthrough->isChecked() && !running_gc;
const bool enable_emu_bt = !m_wiimote_passthrough->isChecked() && !running_gc;
const bool running_netplay = running && NetPlay::IsNetPlayRunning();
const bool is_netplay = NetPlay::IsNetPlayRunning();
const bool running_netplay = running && is_netplay;
m_wiimote_sync->setEnabled(enable_passthrough);
m_wiimote_reset->setEnabled(enable_passthrough);
@ -295,13 +296,15 @@ void WiimoteControllersWidget::LoadSettings(Core::State state)
for (auto* pt_label : m_wiimote_pt_labels)
pt_label->setEnabled(enable_passthrough);
const int num_local_wiimotes = is_netplay ? NetPlay::NumLocalWiimotes() : 4;
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
{
m_wiimote_labels[i]->setEnabled(enable_emu_bt);
m_wiimote_boxes[i]->setEnabled(enable_emu_bt && !running_netplay);
const bool is_emu_wiimote = m_wiimote_boxes[i]->currentIndex() == 1;
m_wiimote_buttons[i]->setEnabled(enable_emu_bt && is_emu_wiimote);
m_wiimote_buttons[i]->setEnabled(enable_emu_bt && is_emu_wiimote &&
static_cast<int>(i) < num_local_wiimotes);
}
m_wiimote_real_balance_board->setEnabled(enable_emu_bt && !running_netplay);