newnet: Fix corner case which resulted in updating before all messages had arrived. Make NET_FIREUP start the game before processing more messages (fixes case where one client is running under valgrind, or is just very very slow).
parent
65196b0bd9
commit
36a6036b9f
|
@ -130,6 +130,8 @@ void gameTimeUpdate()
|
|||
// Do not update the game time if gameTimeStop has been called
|
||||
if (stopCount == 0)
|
||||
{
|
||||
bool mayUpdate = true;
|
||||
|
||||
// Calculate the new game time
|
||||
uint32_t scaledCurrTime = (currTime - baseTime)*modifier + timeOffset;
|
||||
if (scaledCurrTime < graphicsTime) // Make sure the clock doesn't step back at all.
|
||||
|
@ -147,8 +149,9 @@ void gameTimeUpdate()
|
|||
baseTime = currTime;
|
||||
timeOffset = graphicsTime;
|
||||
|
||||
debug(LOG_NET, "Waiting for other players. gameTime = %u, player times are {%u, %u, %u, %u, %u, %u, %u, %u}", gameTime, gameQueueTime[0], gameQueueTime[1], gameQueueTime[2], gameQueueTime[3], gameQueueTime[4], gameQueueTime[5], gameQueueTime[6], gameQueueTime[7]);
|
||||
//debug(LOG_NET, "Waiting for other players.");
|
||||
debug(LOG_SYNC, "Waiting for other players. gameTime = %u, player times are {%u, %u, %u, %u, %u, %u, %u, %u}", gameTime, gameQueueTime[0], gameQueueTime[1], gameQueueTime[2], gameQueueTime[3], gameQueueTime[4], gameQueueTime[5], gameQueueTime[6], gameQueueTime[7]);
|
||||
//debug(LOG_SYNC, "Waiting for other players.");
|
||||
mayUpdate = false;
|
||||
}
|
||||
|
||||
// Calculate the time for this frame
|
||||
|
@ -157,7 +160,7 @@ void gameTimeUpdate()
|
|||
// Adjust deltas.
|
||||
if (sane)
|
||||
{
|
||||
if (scaledCurrTime >= gameTime)
|
||||
if (scaledCurrTime >= gameTime && mayUpdate)
|
||||
{
|
||||
if (scaledCurrTime > gameTime + GAME_TICKS_PER_UPDATE)
|
||||
{
|
||||
|
|
|
@ -3759,7 +3759,7 @@ void recvDebugSync(NETQUEUE queue)
|
|||
debug(LOG_ERROR, "Inconsistent GAME_SYNC_DEBUG_STRING at gameTime %u. My version is: (%u lines)", syncDebugGameTime[rsyncDebugNext], syncDebugNum[rsyncDebugNext]);
|
||||
for (i = 0; i < syncDebugNum[rsyncDebugNext]; ++i)
|
||||
{
|
||||
_debug(LOG_SYNC, syncDebugFunctions[rsyncDebugNext][i], "%s", syncDebugStrings[rsyncDebugNext][i]);
|
||||
_debug(LOG_SYNC, syncDebugFunctions[rsyncDebugNext][i], "[%03u] %s", i, syncDebugStrings[rsyncDebugNext][i]);
|
||||
free(syncDebugFunctions[rsyncDebugNext][i]);
|
||||
free(syncDebugStrings[rsyncDebugNext][i]);
|
||||
}
|
||||
|
|
|
@ -3031,8 +3031,10 @@ void frontendMultiMessages(void)
|
|||
bMultiMessages = true;
|
||||
changeTitleMode(STARTGAME);
|
||||
bHosted = false;
|
||||
break;
|
||||
return; // Start the game before processing more messages.
|
||||
}
|
||||
ASSERT(false, "NET_FIREUP was received, but !ingame.localOptionsReceived.");
|
||||
break;
|
||||
|
||||
case NET_KICK: // player is forcing someone to leave
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue