Allow resynchronize players list for battle mode before starting
This commit is contained in:
parent
54375ab682
commit
4db16ce701
@ -327,6 +327,12 @@ public:
|
|||||||
unsigned int getCurrentNumPlayers() const { return m_num_players -
|
unsigned int getCurrentNumPlayers() const { return m_num_players -
|
||||||
m_eliminated_players;}
|
m_eliminated_players;}
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
void resetElimination()
|
||||||
|
{
|
||||||
|
m_eliminated_karts = 0;
|
||||||
|
m_eliminated_players = 0;
|
||||||
|
}
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
virtual void addReservedKart(int kart_id)
|
virtual void addReservedKart(int kart_id)
|
||||||
{
|
{
|
||||||
if (m_eliminated_karts > 0)
|
if (m_eliminated_karts > 0)
|
||||||
|
@ -1169,6 +1169,40 @@ void ClientLobby::liveJoinAcknowledged(Event* event)
|
|||||||
assert(nim);
|
assert(nim);
|
||||||
nim->restoreCompleteState(data);
|
nim->restoreCompleteState(data);
|
||||||
w->restoreCompleteState(data);
|
w->restoreCompleteState(data);
|
||||||
|
|
||||||
|
if (race_manager->supportsLiveJoining() && data.size() > 0)
|
||||||
|
{
|
||||||
|
// Get and update the players list 1 more time in case the was
|
||||||
|
// player connection or disconnection
|
||||||
|
std::vector<std::shared_ptr<NetworkPlayerProfile> > players =
|
||||||
|
decodePlayers(data);
|
||||||
|
w->resetElimination();
|
||||||
|
for (unsigned i = 0; i < players.size(); i++)
|
||||||
|
{
|
||||||
|
AbstractKart* k = w->getKart(i);
|
||||||
|
if (k->getController()->isLocalPlayerController())
|
||||||
|
continue;
|
||||||
|
k->reset();
|
||||||
|
// Only need to change non local player karts
|
||||||
|
RemoteKartInfo& rki = race_manager->getKartInfo(i);
|
||||||
|
rki.copyFrom(players[i], players[i]->getLocalPlayerId());
|
||||||
|
if (rki.isReserved())
|
||||||
|
{
|
||||||
|
World::getWorld()->eliminateKart(i,
|
||||||
|
false/*notify_of_elimination*/);
|
||||||
|
k->setPosition(
|
||||||
|
World::getWorld()->getCurrentNumKarts() + 1);
|
||||||
|
k->finishedRace(World::getWorld()->getTime(),
|
||||||
|
true/*from_server*/);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Will be reset once again after live join is finished
|
||||||
|
addLiveJoiningKart(i, rki, 0/*live_join_util_ticks*/);
|
||||||
|
k->getNode()->setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} // liveJoinAcknowledged
|
} // liveJoinAcknowledged
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -1032,6 +1032,14 @@ void ServerLobby::finishedLoadingLiveJoinClient(Event* event)
|
|||||||
nim->addLiveJoinPeer(peer);
|
nim->addLiveJoinPeer(peer);
|
||||||
|
|
||||||
w->saveCompleteState(ns);
|
w->saveCompleteState(ns);
|
||||||
|
if (race_manager->supportsLiveJoining())
|
||||||
|
{
|
||||||
|
// Only needed in non-racing mode as no need players can added after
|
||||||
|
// starting of race
|
||||||
|
std::vector<std::shared_ptr<NetworkPlayerProfile> > players =
|
||||||
|
getLivePlayers();
|
||||||
|
encodePlayers(ns, players);
|
||||||
|
}
|
||||||
|
|
||||||
m_peers_ready[peer] = false;
|
m_peers_ready[peer] = false;
|
||||||
peer->setWaitingForGame(false);
|
peer->setWaitingForGame(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user