From 59fe4f28c8f0bf47e7af40095dc6fba145188930 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 11 May 2018 17:52:06 +0100 Subject: [PATCH] Change: Animate text effects by real time instead of game ticks. --- src/openttd.cpp | 2 -- src/texteff.cpp | 12 +++++++++--- src/texteff.hpp | 2 +- src/window.cpp | 2 ++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 0e0b4188a4..49d5e8250c 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1495,8 +1495,6 @@ void GameLoop() if (!_pause_mode && HasBit(_display_opt, DO_FULL_ANIMATION)) DoPaletteAnimations(); - if (!_pause_mode || _game_mode == GM_EDITOR || _settings_game.construction.command_pause_level > CMDPL_NO_CONSTRUCTION) MoveAllTextEffects(); - InputLoop(); SoundDriver::GetInstance()->MainLoop(); diff --git a/src/texteff.cpp b/src/texteff.cpp index cdb8b8ce6a..0f79f51c12 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -16,6 +16,7 @@ #include "core/smallvec_type.hpp" #include "viewport_func.h" #include "settings_type.h" +#include "window_func.h" #include "safeguards.h" @@ -82,20 +83,25 @@ void RemoveTextEffect(TextEffectID te_id) _text_effects[te_id].Reset(); } -void MoveAllTextEffects() +void MoveAllTextEffects(uint delta_ms) { + static uint texteffecttimer = 0; + uint count = CountIntervalElapsed(texteffecttimer, delta_ms, MILLISECONDS_PER_TICK); + if (count == 0) return; + const TextEffect *end = _text_effects.End(); for (TextEffect *te = _text_effects.Begin(); te != end; te++) { if (te->string_id == INVALID_STRING_ID) continue; if (te->mode != TE_RISING) continue; - if (te->duration-- == 0) { + if (te->duration < count) { te->Reset(); continue; } te->MarkDirty(ZOOM_LVL_OUT_8X); - te->top -= ZOOM_LVL_BASE; + te->duration -= count; + te->top -= count * ZOOM_LVL_BASE; te->MarkDirty(ZOOM_LVL_OUT_8X); } } diff --git a/src/texteff.hpp b/src/texteff.hpp index 9ef74c1714..114cebed02 100644 --- a/src/texteff.hpp +++ b/src/texteff.hpp @@ -28,7 +28,7 @@ enum TextEffectMode { typedef uint16 TextEffectID; -void MoveAllTextEffects(); +void MoveAllTextEffects(uint delta_ms); TextEffectID AddTextEffect(StringID msg, int x, int y, uint8 duration, TextEffectMode mode); void InitTextEffects(); void DrawTextEffects(DrawPixelInfo *dpi); diff --git a/src/window.cpp b/src/window.cpp index 64bb8fcbbb..efa206d565 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3126,6 +3126,8 @@ void UpdateWindows() _window_highlight_colour = !_window_highlight_colour; } + if (!_pause_mode || _game_mode == GM_EDITOR || _settings_game.construction.command_pause_level > CMDPL_NO_CONSTRUCTION) MoveAllTextEffects(delta_ms); + FOR_ALL_WINDOWS_FROM_FRONT(w) { w->ProcessScheduledInvalidations(); w->ProcessHighlightedInvalidations();