From b536c2e4e0cba87353d84d959f4e6dbbf1dc8297 Mon Sep 17 00:00:00 2001 From: tron Date: Thu, 31 Aug 2006 07:01:26 +0000 Subject: [PATCH] (svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it --- station_cmd.c | 75 ++++++++++++++++----------------------------------- 1 file changed, 23 insertions(+), 52 deletions(-) diff --git a/station_cmd.c b/station_cmd.c index 22833f1748..8bd6f1a995 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -2238,61 +2238,32 @@ static void TileLoop_Station(TileIndex tile) static void AnimateTile_Station(TileIndex tile) { + typedef struct AnimData { + StationGfx from; // first sprite + StationGfx to; // last sprite + byte delay; + } AnimData; + + static const AnimData data[] = { + { GFX_RADAR_LARGE_FIRST, GFX_RADAR_LARGE_LAST, 3 }, + { GFX_WINDSACK_FIRST, GFX_WINDSACK_LAST, 1 }, + { GFX_RADAR_INTERNATIONAL_FIRST, GFX_RADAR_INTERNATIONAL_LAST, 3 }, + { GFX_RADAR_METROPOLITAN_FIRST, GFX_RADAR_METROPOLITAN_LAST, 3 }, + { GFX_RADAR_DISTRICTWE_FIRST, GFX_RADAR_DISTRICTWE_LAST, 3 }, + { GFX_WINDSACK_INTERCON_FIRST, GFX_WINDSACK_INTERCON_LAST, 1 } + }; + StationGfx gfx = GetStationGfx(tile); - //FIXME -- AnimateTile_Station -> not nice code, lots of things double - // again hardcoded...was a quick hack + const AnimData* i; - // turning radar / windsack on airport - if (IS_BYTE_INSIDE(gfx, GFX_RADAR_LARGE_FIRST, GFX_RADAR_LARGE_LAST+1)) { - if (_tick_counter & 3) - return; - - if (++gfx == GFX_RADAR_LARGE_LAST+1) - gfx = GFX_RADAR_LARGE_FIRST; - - SetStationGfx(tile, gfx); - MarkTileDirtyByTile(tile); - //added - begin - } else if (IS_BYTE_INSIDE(gfx, GFX_RADAR_INTERNATIONAL_FIRST, GFX_RADAR_METROPOLITAN_LAST + 1) || IS_BYTE_INSIDE(gfx, GFX_RADAR_DISTRICTWE_FIRST, GFX_RADAR_DISTRICTWE_LAST + 1) ) { - if (_tick_counter & 3) - return; - - gfx++; - - if (gfx == GFX_RADAR_INTERNATIONAL_LAST+1) { - gfx = GFX_RADAR_INTERNATIONAL_FIRST; + for (i = data; i != endof(data); i++) { + if (i->from <= gfx && gfx <= i->to) { + if ((_tick_counter & i->delay) == 0) { + SetStationGfx(tile, gfx < i->to ? gfx + 1 : i->from); + MarkTileDirtyByTile(tile); + } + break; } - else if (gfx == GFX_RADAR_METROPOLITAN_LAST+1) { - gfx = GFX_RADAR_METROPOLITAN_FIRST; - } - else if (gfx == GFX_RADAR_DISTRICTWE_LAST + 1) { - gfx = GFX_RADAR_DISTRICTWE_FIRST; - } - - SetStationGfx(tile, gfx); - MarkTileDirtyByTile(tile); - //added - end - } else if (IS_BYTE_INSIDE(gfx, GFX_WINDSACK_FIRST, GFX_WINDSACK_LAST+1)) { - if (_tick_counter & 1) - return; - - if (++gfx == GFX_WINDSACK_LAST+1) { - gfx = GFX_WINDSACK_FIRST; - } - - SetStationGfx(tile, gfx); - MarkTileDirtyByTile(tile); - // handle intercontinental windsock - } else if (IS_BYTE_INSIDE(gfx, GFX_WINDSACK_INTERCON_FIRST, GFX_WINDSACK_INTERCON_LAST+1)) { - if (_tick_counter & 1) - return; - - if (++gfx == GFX_WINDSACK_INTERCON_LAST+1) { - gfx = GFX_WINDSACK_INTERCON_FIRST; - } - - SetStationGfx(tile, gfx); - MarkTileDirtyByTile(tile); } }