Fixed incorrect server-start-delay (caused by the start delay
being delivered in a different thread, so adding DT in the main thread was not the right time step).
This commit is contained in:
parent
742be06c21
commit
34af963cc1
@ -237,7 +237,6 @@ void ServerLobby::update(float dt)
|
|||||||
m_client_ready_count.getData() == m_game_setup->getPlayerCount())
|
m_client_ready_count.getData() == m_game_setup->getPlayerCount())
|
||||||
{
|
{
|
||||||
signalRaceStartToClients();
|
signalRaceStartToClients();
|
||||||
m_server_delay = 0.1f;
|
|
||||||
m_client_ready_count.getData() = 0;
|
m_client_ready_count.getData() = 0;
|
||||||
}
|
}
|
||||||
m_client_ready_count.unlock();
|
m_client_ready_count.unlock();
|
||||||
@ -249,9 +248,10 @@ void ServerLobby::update(float dt)
|
|||||||
// next state.
|
// next state.
|
||||||
break;
|
break;
|
||||||
case DELAY_SERVER:
|
case DELAY_SERVER:
|
||||||
m_server_delay -= dt;
|
if (m_server_delay < StkTime::getRealTime())
|
||||||
if (m_server_delay < 0)
|
|
||||||
{
|
{
|
||||||
|
Log::verbose("ServerLobby", "End delay at %lf",
|
||||||
|
StkTime::getRealTime());
|
||||||
m_state = RACING;
|
m_state = RACING;
|
||||||
World::getWorld()->setReadyToRace();
|
World::getWorld()->setReadyToRace();
|
||||||
}
|
}
|
||||||
@ -350,7 +350,8 @@ void ServerLobby::registerServer()
|
|||||||
*/
|
*/
|
||||||
void ServerLobby::signalRaceStartToClients()
|
void ServerLobby::signalRaceStartToClients()
|
||||||
{
|
{
|
||||||
Log::verbose("Server", "Signaling race start to clients");
|
Log::verbose("Server", "Signaling race start to clients at %lf",
|
||||||
|
StkTime::getRealTime());
|
||||||
const std::vector<STKPeer*> &peers = STKHost::get()->getPeers();
|
const std::vector<STKPeer*> &peers = STKHost::get()->getPeers();
|
||||||
NetworkString *ns = getNetworkString(1);
|
NetworkString *ns = getNetworkString(1);
|
||||||
ns->addUInt8(LE_START_RACE);
|
ns->addUInt8(LE_START_RACE);
|
||||||
@ -935,12 +936,16 @@ void ServerLobby::finishedLoadingWorldClient(Event *event)
|
|||||||
void ServerLobby::startedRaceOnClient(Event *event)
|
void ServerLobby::startedRaceOnClient(Event *event)
|
||||||
{
|
{
|
||||||
m_client_ready_count.lock();
|
m_client_ready_count.lock();
|
||||||
Log::verbose("ServerLobby", "Host %d has started race.",
|
Log::verbose("ServerLobby", "Host %d has started race at %lf.",
|
||||||
event->getPeer()->getHostId());
|
event->getPeer()->getHostId(), StkTime::getRealTime());
|
||||||
m_client_ready_count.getData()++;
|
m_client_ready_count.getData()++;
|
||||||
if (m_client_ready_count.getData() == m_game_setup->getPlayerCount())
|
if (m_client_ready_count.getData() == m_game_setup->getPlayerCount())
|
||||||
{
|
{
|
||||||
m_state = DELAY_SERVER;
|
m_state = DELAY_SERVER;
|
||||||
|
m_server_delay = StkTime::getRealTime() + 0.1f;
|
||||||
|
Log::verbose("ServerLobby", "Started delay at %lf set delay to %lf",
|
||||||
|
StkTime::getRealTime(),
|
||||||
|
m_server_delay);
|
||||||
terminateLatencyProtocol();
|
terminateLatencyProtocol();
|
||||||
}
|
}
|
||||||
m_client_ready_count.unlock();
|
m_client_ready_count.unlock();
|
||||||
|
@ -43,8 +43,9 @@ private:
|
|||||||
|
|
||||||
/** Keeps track of an artificial server delay (which makes sure that the
|
/** Keeps track of an artificial server delay (which makes sure that the
|
||||||
* data from all clients has arrived when the server computes a certain
|
* data from all clients has arrived when the server computes a certain
|
||||||
* timestep. */
|
* timestep.(. It stores the real time since epoch + delta (atm 0.1
|
||||||
float m_server_delay;
|
* seconds), which is the real time at which the server should start. */
|
||||||
|
double m_server_delay;
|
||||||
|
|
||||||
Protocol *m_current_protocol;
|
Protocol *m_current_protocol;
|
||||||
bool m_selection_enabled;
|
bool m_selection_enabled;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user