diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 3be247d4b1..e71c4370c3 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -572,8 +572,8 @@ void ShowCostOrIncomeAnimation(int x, int y, int z, Money cost) cost = -cost; msg = STR_INCOME_FLOAT_INCOME; } - SetDParam(0, cost); - AddTextEffect(msg, pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); + + AddTextEffect(msg, MakeParameters(cost), pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); } /** @@ -588,17 +588,15 @@ void ShowFeederIncomeAnimation(int x, int y, int z, Money transfer, Money income { Point pt = RemapCoords(x, y, z); - SetDParam(0, transfer); if (income == 0) { - AddTextEffect(STR_FEEDER, pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); + AddTextEffect(STR_FEEDER, MakeParameters(transfer), pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); } else { StringID msg = STR_FEEDER_COST; if (income < 0) { income = -income; msg = STR_FEEDER_INCOME; } - SetDParam(1, income); - AddTextEffect(msg, pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); + AddTextEffect(msg, MakeParameters(transfer, income), pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); } } @@ -617,8 +615,7 @@ TextEffectID ShowFillingPercent(int x, int y, int z, uint8_t percent, StringID s assert(string != STR_NULL); - SetDParam(0, percent); - return AddTextEffect(string, pt.x, pt.y, 0, TE_STATIC); + return AddTextEffect(string, MakeParameters(percent), pt.x, pt.y, 0, TE_STATIC); } /** @@ -630,8 +627,9 @@ void UpdateFillingPercent(TextEffectID te_id, uint8_t percent, StringID string) { assert(string != STR_NULL); - SetDParam(0, percent); - UpdateTextEffect(te_id, string); + auto params = MakeParameters(1); + params.SetParam(0, percent); + UpdateTextEffect(te_id, string, std::move(params)); } /** diff --git a/src/texteff.cpp b/src/texteff.cpp index 01dca6087c..001d45f2d2 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -38,7 +38,7 @@ struct TextEffect : public ViewportSign { static std::vector _text_effects; ///< Text effects are stored there /* Text Effects */ -TextEffectID AddTextEffect(StringID msg, int center, int y, uint8_t duration, TextEffectMode mode) +TextEffectID AddTextEffect(StringID msg, StringParameters &¶ms, int center, int y, uint8_t duration, TextEffectMode mode) { if (_game_mode == GM_MENU) return INVALID_TE_ID; @@ -54,24 +54,25 @@ TextEffectID AddTextEffect(StringID msg, int center, int y, uint8_t duration, Te /* Start defining this object */ te.string_id = msg; te.duration = duration; - CopyOutDParam(te.params, 2); + CopyOutDParam(te.params, std::move(params)); te.mode = mode; /* Make sure we only dirty the new area */ te.width_normal = 0; + CopyInDParam(te.params); te.UpdatePosition(center, y, msg); return static_cast(it - std::begin(_text_effects)); } -void UpdateTextEffect(TextEffectID te_id, StringID msg) +void UpdateTextEffect(TextEffectID te_id, StringID msg, StringParameters &¶ms) { /* Update details */ TextEffect &te = _text_effects[te_id]; - if (msg == te.string_id && !HaveDParamChanged(te.params)) return; te.string_id = msg; - CopyOutDParam(te.params, 2); + CopyOutDParam(te.params, std::move(params)); + CopyInDParam(te.params); te.UpdatePosition(te.center, te.top, te.string_id, te.string_id - 1); } diff --git a/src/texteff.hpp b/src/texteff.hpp index dad9b5888d..8df8de5480 100644 --- a/src/texteff.hpp +++ b/src/texteff.hpp @@ -26,10 +26,10 @@ using TextEffectID = uint16_t; static const TextEffectID INVALID_TE_ID = UINT16_MAX; -TextEffectID AddTextEffect(StringID msg, int x, int y, uint8_t duration, TextEffectMode mode); +TextEffectID AddTextEffect(StringID msg, class StringParameters &¶ms, int x, int y, uint8_t duration, TextEffectMode mode); void InitTextEffects(); void DrawTextEffects(DrawPixelInfo *dpi); -void UpdateTextEffect(TextEffectID effect_id, StringID msg); +void UpdateTextEffect(TextEffectID effect_id, StringID msg, StringParameters &¶ms); void RemoveTextEffect(TextEffectID effect_id); void UpdateAllTextEffectVirtCoords(); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 4d1df21501..0802d20fb8 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2899,7 +2899,8 @@ void CcStartStopVehicle(Commands, const CommandCost &result, VehicleID veh_id, b StringID msg = (v->vehstatus & VS_STOPPED) ? STR_VEHICLE_COMMAND_STOPPED : STR_VEHICLE_COMMAND_STARTED; Point pt = RemapCoords(v->x_pos, v->y_pos, v->z_pos); - AddTextEffect(msg, pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); + + AddTextEffect(msg, MakeParameters(), pt.x, pt.y, Ticks::DAY_TICKS, TE_RISING); } /**