mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r8028) -Fix: overflow of ticks was not handled properly, possibly resulting a non-reacting gameserver/gameclient.
This commit is contained in:
parent
f3b4cf10b6
commit
4c2b993d1d
|
@ -652,8 +652,8 @@ static bool QZ_PollEvent(void)
|
||||||
|
|
||||||
static void QZ_GameLoop(void)
|
static void QZ_GameLoop(void)
|
||||||
{
|
{
|
||||||
uint32 next_tick = GetTick() + 30;
|
uint32 cur_ticks = GetTick();
|
||||||
uint32 cur_ticks;
|
uint32 next_tick = cur_ticks + 30;
|
||||||
uint32 pal_tick = 0;
|
uint32 pal_tick = 0;
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
uint32 et0, et, st0, st;
|
uint32 et0, et, st0, st;
|
||||||
|
@ -680,6 +680,7 @@ static void QZ_GameLoop(void)
|
||||||
CSleep(1);
|
CSleep(1);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
uint32 prev_cur_ticks; // to check for wrapping
|
||||||
InteractiveRandom(); // randomness
|
InteractiveRandom(); // randomness
|
||||||
|
|
||||||
while (QZ_PollEvent()) {}
|
while (QZ_PollEvent()) {}
|
||||||
|
@ -698,11 +699,8 @@ static void QZ_GameLoop(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_ticks = GetTick();
|
cur_ticks = GetTick();
|
||||||
if ((_fast_forward && !_pause) || cur_ticks > next_tick)
|
if (cur_ticks >= next_tick || (_fast_forward && !_pause) || cur_ticks < prev_cur_ticks) {
|
||||||
next_tick = cur_ticks;
|
next_tick = cur_ticks + 30;
|
||||||
|
|
||||||
if (cur_ticks == next_tick) {
|
|
||||||
next_tick += 30;
|
|
||||||
|
|
||||||
_ctrl_pressed = !!(_cocoa_video_data.current_mods & NSControlKeyMask);
|
_ctrl_pressed = !!(_cocoa_video_data.current_mods & NSControlKeyMask);
|
||||||
_shift_pressed = !!(_cocoa_video_data.current_mods & NSShiftKeyMask);
|
_shift_pressed = !!(_cocoa_video_data.current_mods & NSShiftKeyMask);
|
||||||
|
|
|
@ -223,10 +223,8 @@ static void DedicatedHandleKeyInput(void)
|
||||||
|
|
||||||
static void DedicatedVideoMainLoop(void)
|
static void DedicatedVideoMainLoop(void)
|
||||||
{
|
{
|
||||||
uint32 next_tick;
|
uint32 cur_ticks = GetTime();
|
||||||
uint32 cur_ticks;
|
uint32 next_tick = cur_ticks + 30;
|
||||||
|
|
||||||
next_tick = GetTime() + 30;
|
|
||||||
|
|
||||||
/* Signal handlers */
|
/* Signal handlers */
|
||||||
#ifdef UNIX
|
#ifdef UNIX
|
||||||
|
@ -268,15 +266,15 @@ static void DedicatedVideoMainLoop(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!_exit_game) {
|
while (!_exit_game) {
|
||||||
|
uint32 prev_cur_ticks = cur_ticks; // to check for wrapping
|
||||||
InteractiveRandom(); // randomness
|
InteractiveRandom(); // randomness
|
||||||
|
|
||||||
if (!_dedicated_forks)
|
if (!_dedicated_forks)
|
||||||
DedicatedHandleKeyInput();
|
DedicatedHandleKeyInput();
|
||||||
|
|
||||||
cur_ticks = GetTime();
|
cur_ticks = GetTime();
|
||||||
|
if (cur_ticks >= next_tick || cur_ticks < prev_cur_ticks) {
|
||||||
if (cur_ticks >= next_tick) {
|
next_tick = cur_ticks + 30;
|
||||||
next_tick += 30;
|
|
||||||
|
|
||||||
GameLoop();
|
GameLoop();
|
||||||
_screen.dst_ptr = _dedicated_video_mem;
|
_screen.dst_ptr = _dedicated_video_mem;
|
||||||
|
|
|
@ -422,14 +422,15 @@ static void SdlVideoStop(void)
|
||||||
|
|
||||||
static void SdlVideoMainLoop(void)
|
static void SdlVideoMainLoop(void)
|
||||||
{
|
{
|
||||||
uint32 next_tick = SDL_CALL SDL_GetTicks() + 30;
|
uint32 cur_ticks = SDL_CALL SDL_GetTicks();
|
||||||
uint32 cur_ticks;
|
uint32 next_tick = cur_ticks + 30;
|
||||||
uint32 pal_tick = 0;
|
uint32 pal_tick = 0;
|
||||||
uint32 mod;
|
uint32 mod;
|
||||||
int numkeys;
|
int numkeys;
|
||||||
Uint8 *keys;
|
Uint8 *keys;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
uint32 prev_cur_ticks = cur_ticks; // to check for wrapping
|
||||||
InteractiveRandom(); // randomness
|
InteractiveRandom(); // randomness
|
||||||
|
|
||||||
while (PollEvent() == -1) {}
|
while (PollEvent() == -1) {}
|
||||||
|
@ -451,11 +452,8 @@ static void SdlVideoMainLoop(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_ticks = SDL_CALL SDL_GetTicks();
|
cur_ticks = SDL_CALL SDL_GetTicks();
|
||||||
if ((_fast_forward && !_pause) || cur_ticks > next_tick)
|
if (cur_ticks >= next_tick || (_fast_forward && !_pause) || cur_ticks < prev_cur_ticks) {
|
||||||
next_tick = cur_ticks;
|
next_tick = cur_ticks + 30;
|
||||||
|
|
||||||
if (cur_ticks == next_tick) {
|
|
||||||
next_tick += 30;
|
|
||||||
|
|
||||||
_ctrl_pressed = !!(mod & KMOD_CTRL);
|
_ctrl_pressed = !!(mod & KMOD_CTRL);
|
||||||
_shift_pressed = !!(mod & KMOD_SHIFT);
|
_shift_pressed = !!(mod & KMOD_SHIFT);
|
||||||
|
|
|
@ -786,11 +786,14 @@ static void CheckPaletteAnim(void)
|
||||||
static void Win32GdiMainLoop(void)
|
static void Win32GdiMainLoop(void)
|
||||||
{
|
{
|
||||||
MSG mesg;
|
MSG mesg;
|
||||||
uint32 next_tick = GetTickCount() + 30, cur_ticks;
|
uint32 cur_ticks = GetTickCount();
|
||||||
|
uint32 next_tick = cur_ticks + 30;
|
||||||
|
|
||||||
_wnd.running = true;
|
_wnd.running = true;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
uint32 prev_cur_ticks = cur_ticks; // to check for wrapping
|
||||||
|
|
||||||
while (PeekMessage(&mesg, NULL, 0, 0, PM_REMOVE)) {
|
while (PeekMessage(&mesg, NULL, 0, 0, PM_REMOVE)) {
|
||||||
InteractiveRandom(); // randomness
|
InteractiveRandom(); // randomness
|
||||||
DispatchMessage(&mesg);
|
DispatchMessage(&mesg);
|
||||||
|
@ -810,11 +813,8 @@ static void Win32GdiMainLoop(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_ticks = GetTickCount();
|
cur_ticks = GetTickCount();
|
||||||
if ((_fast_forward && !_pause) || cur_ticks > next_tick)
|
if (cur_ticks >= next_tick || (_fast_forward && !_pause) || cur_ticks < prev_cur_ticks) {
|
||||||
next_tick = cur_ticks;
|
next_tick = cur_ticks + 30;
|
||||||
|
|
||||||
if (cur_ticks == next_tick) {
|
|
||||||
next_tick += 30;
|
|
||||||
_ctrl_pressed = _wnd.has_focus && GetAsyncKeyState(VK_CONTROL)<0;
|
_ctrl_pressed = _wnd.has_focus && GetAsyncKeyState(VK_CONTROL)<0;
|
||||||
_shift_pressed = _wnd.has_focus && GetAsyncKeyState(VK_SHIFT)<0;
|
_shift_pressed = _wnd.has_focus && GetAsyncKeyState(VK_SHIFT)<0;
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
Loading…
Reference in New Issue