mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-15 16:59:18 +01:00
Merge pull request #3992 from mimimi085181/wiimote-netplay-fix-second-session
Netplay: Fix 2nd session on Wiimote netplay
This commit is contained in:
commit
1be5f23d9f
@ -722,6 +722,7 @@ bool NetPlayClient::StartGame(const std::string& path)
|
|||||||
// Needed to prevent locking up at boot if (when) the wiimotes connect out of order.
|
// Needed to prevent locking up at boot if (when) the wiimotes connect out of order.
|
||||||
NetWiimote nw;
|
NetWiimote nw;
|
||||||
nw.resize(4, 0);
|
nw.resize(4, 0);
|
||||||
|
m_wiimote_current_data_size = {4, 4, 4, 4};
|
||||||
|
|
||||||
for (unsigned int w = 0; w < 4; ++w)
|
for (unsigned int w = 0; w < 4; ++w)
|
||||||
{
|
{
|
||||||
@ -923,7 +924,6 @@ bool NetPlayClient::GetNetPads(const u8 pad_nb, GCPadStatus* pad_status)
|
|||||||
bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
||||||
{
|
{
|
||||||
NetWiimote nw;
|
NetWiimote nw;
|
||||||
static u8 previousSize[4] = {4, 4, 4, 4};
|
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lkp(m_crit.players);
|
std::lock_guard<std::recursive_mutex> lkp(m_crit.players);
|
||||||
|
|
||||||
@ -932,7 +932,7 @@ bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
|||||||
// does this local Wiimote map in game?
|
// does this local Wiimote map in game?
|
||||||
if (in_game_num < 4)
|
if (in_game_num < 4)
|
||||||
{
|
{
|
||||||
if (previousSize[in_game_num] == size)
|
if (m_wiimote_current_data_size[in_game_num] == size)
|
||||||
{
|
{
|
||||||
nw.assign(data, data + size);
|
nw.assign(data, data + size);
|
||||||
do
|
do
|
||||||
@ -960,13 +960,13 @@ bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
|||||||
m_wiimote_buffer[in_game_num].Push(nw);
|
m_wiimote_buffer[in_game_num].Push(nw);
|
||||||
m_wiimote_buffer[in_game_num].Push(nw);
|
m_wiimote_buffer[in_game_num].Push(nw);
|
||||||
m_wiimote_buffer[in_game_num].Push(nw);
|
m_wiimote_buffer[in_game_num].Push(nw);
|
||||||
previousSize[in_game_num] = size;
|
m_wiimote_current_data_size[in_game_num] = size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // unlock players
|
} // unlock players
|
||||||
|
|
||||||
while (previousSize[_number] == size && !m_wiimote_buffer[_number].Pop(nw))
|
while (m_wiimote_current_data_size[_number] == size && !m_wiimote_buffer[_number].Pop(nw))
|
||||||
{
|
{
|
||||||
// wait for receiving thread to push some data
|
// wait for receiving thread to push some data
|
||||||
Common::SleepCurrentThread(1);
|
Common::SleepCurrentThread(1);
|
||||||
@ -975,7 +975,7 @@ bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Use a blank input, since we may not have any valid input.
|
// Use a blank input, since we may not have any valid input.
|
||||||
if (previousSize[_number] != size)
|
if (m_wiimote_current_data_size[_number] != size)
|
||||||
{
|
{
|
||||||
nw.resize(size, 0);
|
nw.resize(size, 0);
|
||||||
m_wiimote_buffer[_number].Push(nw);
|
m_wiimote_buffer[_number].Push(nw);
|
||||||
@ -989,7 +989,7 @@ bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
|||||||
// until we reach a good input
|
// until we reach a good input
|
||||||
if (nw.size() != size)
|
if (nw.size() != size)
|
||||||
{
|
{
|
||||||
u8 tries = 0;
|
u32 tries = 0;
|
||||||
// Clear the buffer and wait for new input, since we probably just changed reporting mode.
|
// Clear the buffer and wait for new input, since we probably just changed reporting mode.
|
||||||
while (nw.size() != size)
|
while (nw.size() != size)
|
||||||
{
|
{
|
||||||
@ -1012,7 +1012,7 @@ bool NetPlayClient::WiimoteUpdate(int _number, u8* data, const u8 size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
previousSize[_number] = size;
|
m_wiimote_current_data_size[_number] = size;
|
||||||
memcpy(data, nw.data(), size);
|
memcpy(data, nw.data(), size);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ protected:
|
|||||||
|
|
||||||
std::array<Common::FifoQueue<GCPadStatus>, 4> m_pad_buffer;
|
std::array<Common::FifoQueue<GCPadStatus>, 4> m_pad_buffer;
|
||||||
std::array<Common::FifoQueue<NetWiimote>, 4> m_wiimote_buffer;
|
std::array<Common::FifoQueue<NetWiimote>, 4> m_wiimote_buffer;
|
||||||
|
std::array<u32, 4> m_wiimote_current_data_size;
|
||||||
|
|
||||||
NetPlayUI* m_dialog = nullptr;
|
NetPlayUI* m_dialog = nullptr;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user