diff options
author | tron <tron@openttd.org> | 2006-08-31 07:01:26 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2006-08-31 07:01:26 +0000 |
commit | b536c2e4e0cba87353d84d959f4e6dbbf1dc8297 (patch) | |
tree | 7315a04ea9f81876c8b8203684c4083148fa70bc | |
parent | 26b153b1dfdffb24fbeb2e5bc91154a2e8d3f78e (diff) | |
download | openttd-b536c2e4e0cba87353d84d959f4e6dbbf1dc8297.tar.xz |
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
-rw-r--r-- | station_cmd.c | 75 |
1 files changed, 23 insertions, 52 deletions
diff --git a/station_cmd.c b/station_cmd.c index 22833f174..8bd6f1a99 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) { - StationGfx gfx = GetStationGfx(tile); - //FIXME -- AnimateTile_Station -> not nice code, lots of things double - // again hardcoded...was a quick hack - - // 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; - } - 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; - } + 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 } + }; - 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; + StationGfx gfx = GetStationGfx(tile); + const AnimData* i; - if (++gfx == GFX_WINDSACK_INTERCON_LAST+1) { - gfx = GFX_WINDSACK_INTERCON_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; } - - SetStationGfx(tile, gfx); - MarkTileDirtyByTile(tile); } } |