Determine live join by server
This commit is contained in:
parent
2aede6fa25
commit
366ee5caad
@ -96,6 +96,7 @@ ClientLobby::ClientLobby(const TransportAddress& a, std::shared_ptr<Server> s)
|
||||
m_first_connect = true;
|
||||
m_spectator = false;
|
||||
m_server_live_joinable = false;
|
||||
m_server_send_live_load_world = false;
|
||||
} // ClientLobby
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -116,6 +117,7 @@ ClientLobby::~ClientLobby()
|
||||
void ClientLobby::setup()
|
||||
{
|
||||
m_spectator = false;
|
||||
m_server_send_live_load_world = false;
|
||||
m_auto_back_to_lobby_time = std::numeric_limits<uint64_t>::max();
|
||||
m_start_live_game_time = std::numeric_limits<uint64_t>::max();
|
||||
m_received_server_result = false;
|
||||
@ -254,9 +256,12 @@ void ClientLobby::addAllPlayers(Event* event)
|
||||
|
||||
std::shared_ptr<STKPeer> peer = event->getPeerSP();
|
||||
peer->cleanPlayerProfiles();
|
||||
m_server_send_live_load_world = data.getUInt8() == 1;
|
||||
|
||||
std::vector<std::shared_ptr<NetworkPlayerProfile> > players;
|
||||
unsigned player_count = data.getUInt8();
|
||||
|
||||
bool is_specator = true;
|
||||
for (unsigned i = 0; i < player_count; i++)
|
||||
{
|
||||
core::stringw player_name;
|
||||
@ -269,6 +274,8 @@ void ClientLobby::addAllPlayers(Event* event)
|
||||
KartTeam team = (KartTeam)data.getUInt8();
|
||||
std::string country_id;
|
||||
data.decodeString(&country_id);
|
||||
if (host_id == STKHost::get()->getMyHostId())
|
||||
is_specator = false;
|
||||
auto player = std::make_shared<NetworkPlayerProfile>(peer, player_name,
|
||||
host_id, kart_color, online_id, ppd, local_id, team, country_id);
|
||||
std::string kart_name;
|
||||
@ -276,6 +283,8 @@ void ClientLobby::addAllPlayers(Event* event)
|
||||
player->setKartName(kart_name);
|
||||
players.push_back(player);
|
||||
}
|
||||
setSpectator(is_specator);
|
||||
|
||||
uint32_t random_seed = data.getUInt32();
|
||||
ItemManager::updateRandomSeed(random_seed);
|
||||
if (race_manager->isBattleMode())
|
||||
@ -294,8 +303,7 @@ void ClientLobby::addAllPlayers(Event* event)
|
||||
// Disable until render gui during loading is bug free
|
||||
//StateManager::get()->enterGameState();
|
||||
|
||||
// Live join or spectate if state is CONNECTED
|
||||
if (m_state.load() == CONNECTED)
|
||||
if (m_server_send_live_load_world)
|
||||
{
|
||||
World* w = World::getWorld();
|
||||
w->setLiveJoinWorld(true);
|
||||
@ -1110,8 +1118,7 @@ void ClientLobby::backToLobby(Event *event)
|
||||
void ClientLobby::finishedLoadingWorld()
|
||||
{
|
||||
NetworkString* ns = getNetworkString(1);
|
||||
// Live join or spectate if state is CONNECTED
|
||||
ns->setSynchronous(m_state.load() == CONNECTED);
|
||||
ns->setSynchronous(m_server_send_live_load_world);
|
||||
ns->addUInt8(LE_CLIENT_LOADED_WORLD);
|
||||
sendToServer(ns, true);
|
||||
delete ns;
|
||||
|
@ -101,6 +101,8 @@ private:
|
||||
|
||||
bool m_server_live_joinable;
|
||||
|
||||
bool m_server_send_live_load_world;
|
||||
|
||||
uint64_t m_auto_back_to_lobby_time;
|
||||
|
||||
uint64_t m_start_live_game_time;
|
||||
|
@ -601,7 +601,8 @@ void ServerLobby::asynchronousUpdate()
|
||||
// Add placeholder players for live join
|
||||
addLiveJoinPlaceholder(players);
|
||||
|
||||
NetworkString* load_world_message = getLoadWorldMessage(players);
|
||||
NetworkString* load_world_message = getLoadWorldMessage(players,
|
||||
false/*live_join*/);
|
||||
m_game_setup->setHitCaptureTime(m_battle_hit_capture_limit,
|
||||
m_battle_time_limit);
|
||||
uint16_t flag_return_time = (uint16_t)stk_config->time2Ticks(
|
||||
@ -628,14 +629,16 @@ void ServerLobby::asynchronousUpdate()
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
NetworkString* ServerLobby::getLoadWorldMessage(
|
||||
std::vector<std::shared_ptr<NetworkPlayerProfile> >& players) const
|
||||
std::vector<std::shared_ptr<NetworkPlayerProfile> >& players,
|
||||
bool live_join) const
|
||||
{
|
||||
NetworkString* load_world_message = getNetworkString();
|
||||
load_world_message->setSynchronous(true);
|
||||
load_world_message->addUInt8(LE_LOAD_WORLD);
|
||||
load_world_message->addUInt32(m_winner_peer_id);
|
||||
m_default_vote->encode(load_world_message);
|
||||
load_world_message->addUInt8((uint8_t)players.size());
|
||||
load_world_message->addUInt8(live_join ? 1 : 0).
|
||||
addUInt8((uint8_t)players.size());
|
||||
for (unsigned i = 0; i < players.size(); i++)
|
||||
{
|
||||
std::shared_ptr<NetworkPlayerProfile>& player = players[i];
|
||||
@ -830,7 +833,8 @@ void ServerLobby::liveJoinRequest(Event* event)
|
||||
}
|
||||
players.push_back(player);
|
||||
}
|
||||
NetworkString* load_world_message = getLoadWorldMessage(players);
|
||||
NetworkString* load_world_message = getLoadWorldMessage(players,
|
||||
true/*live_join*/);
|
||||
peer->sendPacket(load_world_message, true/*reliable*/);
|
||||
delete load_world_message;
|
||||
peer->updateLastActivity();
|
||||
|
@ -281,7 +281,8 @@ private:
|
||||
void addLiveJoinPlaceholder(
|
||||
std::vector<std::shared_ptr<NetworkPlayerProfile> >& players) const;
|
||||
NetworkString* getLoadWorldMessage(
|
||||
std::vector<std::shared_ptr<NetworkPlayerProfile> >& players) const;
|
||||
std::vector<std::shared_ptr<NetworkPlayerProfile> >& players,
|
||||
bool live_join) const;
|
||||
void setPlayerKarts(const NetworkString& ns, STKPeer* peer) const;
|
||||
void liveJoinRequest(Event* event);
|
||||
void rejectLiveJoin(STKPeer* peer, BackLobbyReason blr);
|
||||
|
@ -584,7 +584,6 @@ void NetworkingLobby::eventCallback(Widget* widget, const std::string& name,
|
||||
auto cl = LobbyProtocol::get<ClientLobby>();
|
||||
if (m_client_live_joinable && cl)
|
||||
{
|
||||
cl->setSpectator(true);
|
||||
NetworkString start(PROTOCOL_LOBBY_ROOM);
|
||||
start.setSynchronous(true);
|
||||
start.addUInt8(LobbyProtocol::LE_LIVE_JOIN)
|
||||
|
Loading…
x
Reference in New Issue
Block a user