summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Nelson <peter1138@openttd.org>2018-05-11 17:52:06 +0100
committerPeterN <peter@fuzzle.org>2019-01-11 11:56:21 +0000
commit59fe4f28c8f0bf47e7af40095dc6fba145188930 (patch)
treec8007886b450f167b31804315b4011284ec11201
parentead9c9eab5d206cb13eb169e392e1291e767efaf (diff)
downloadopenttd-59fe4f28c8f0bf47e7af40095dc6fba145188930.tar.xz
Change: Animate text effects by real time instead of game ticks.
-rw-r--r--src/openttd.cpp2
-rw-r--r--src/texteff.cpp12
-rw-r--r--src/texteff.hpp2
-rw-r--r--src/window.cpp2
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();