diff options
author | Peter Nelson <peter1138@openttd.org> | 2018-05-11 17:52:06 +0100 |
---|---|---|
committer | PeterN <peter@fuzzle.org> | 2019-01-11 11:56:21 +0000 |
commit | 59fe4f28c8f0bf47e7af40095dc6fba145188930 (patch) | |
tree | c8007886b450f167b31804315b4011284ec11201 | |
parent | ead9c9eab5d206cb13eb169e392e1291e767efaf (diff) | |
download | openttd-59fe4f28c8f0bf47e7af40095dc6fba145188930.tar.xz |
Change: Animate text effects by real time instead of game ticks.
-rw-r--r-- | src/openttd.cpp | 2 | ||||
-rw-r--r-- | src/texteff.cpp | 12 | ||||
-rw-r--r-- | src/texteff.hpp | 2 | ||||
-rw-r--r-- | src/window.cpp | 2 |
4 files changed, 12 insertions, 6 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp index 0e0b4188a..49d5e8250 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 cdb8b8ce6..0f79f51c1 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 9ef74c171..114cebed0 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 64bb8fcbb..efa206d56 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(); |