diff options
Diffstat (limited to 'src/video/cocoa/cocoa_v.mm')
-rw-r--r-- | src/video/cocoa/cocoa_v.mm | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index c9e6768a8..d065630b7 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -636,7 +636,8 @@ void VideoDriver_Cocoa::GameLoop() { auto cur_ticks = std::chrono::steady_clock::now(); auto last_realtime_tick = cur_ticks; - auto next_tick = cur_ticks; + auto next_game_tick = cur_ticks; + auto next_draw_tick = cur_ticks; for (;;) { @autoreleasepool { @@ -672,8 +673,14 @@ void VideoDriver_Cocoa::GameLoop() last_realtime_tick += delta; } - if (cur_ticks >= next_tick || (_fast_forward && !_pause_mode)) { - next_tick = cur_ticks + std::chrono::milliseconds(MILLISECONDS_PER_TICK); + if (cur_ticks >= next_game_tick || (_fast_forward && !_pause_mode)) { + next_game_tick = cur_ticks + std::chrono::milliseconds(MILLISECONDS_PER_TICK); + + ::GameLoop(); + } + + if (cur_ticks >= next_draw_tick) { + next_draw_tick = cur_ticks + std::chrono::milliseconds(MILLISECONDS_PER_TICK); bool old_ctrl_pressed = _ctrl_pressed; @@ -682,16 +689,15 @@ void VideoDriver_Cocoa::GameLoop() if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged(); - ::GameLoop(); - + InputLoop(); UpdateWindows(); this->CheckPaletteAnim(); + this->Draw(); - } else { + } + + if (!_fast_forward || _pause_mode) { CSleep(1); - NetworkDrawChatMessage(); - DrawMouseCursor(); - this->Draw(); } } } |