Mercurial > hg > openttd
changeset 13959:1956f0f15f37 draft
(svn r18495) -Codechange: make sure we don't taint the vehicle cache with finding refit options and unmagify a constant
author | rubidium <rubidium@openttd.org> |
---|---|
date | Sun, 13 Dec 2009 22:19:19 +0000 |
parents | 158476c4d72c |
children | c57dcc0026df |
files | src/vehicle_gui.cpp |
diffstat | 1 files changed, 12 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -156,6 +156,9 @@ DrawSprite(SPR_BLOT, pal, x, y); } +/** Maximum number of refit cycles we try, to prevent infinite loops. */ +static const int MAX_REFIT_CYCLE = 16; + struct RefitOption { CargoID cargo; byte subtype; @@ -200,11 +203,15 @@ u->cargo_type = cid; - for (refit_cyc = 0; refit_cyc < 16 && num_lines < max_lines; refit_cyc++) { + for (refit_cyc = 0; refit_cyc < MAX_REFIT_CYCLE && num_lines < max_lines; refit_cyc++) { bool duplicate = false; uint16 callback; u->cargo_subtype = refit_cyc; + + /* Make sure we don't pick up anything cached. */ + u->First()->InvalidateNewGRFCache(); + u->InvalidateNewGRFCache(); callback = GetVehicleCallback(CBID_VEHICLE_CARGO_SUFFIX, 0, 0, u->engine_type, u); if (callback == 0xFF) callback = CALLBACK_FAILED; @@ -227,6 +234,10 @@ /* Reset the vehicle's cargo type */ u->cargo_type = temp_cargo; u->cargo_subtype = temp_subtype; + + /* And make sure we haven't tainted the cache */ + u->First()->InvalidateNewGRFCache(); + u->InvalidateNewGRFCache(); } else { /* No cargo suffix callback -- use no subtype */ bool duplicate = false;