summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron@openttd.org>2006-08-31 07:01:26 +0000
committertron <tron@openttd.org>2006-08-31 07:01:26 +0000
commitb536c2e4e0cba87353d84d959f4e6dbbf1dc8297 (patch)
tree7315a04ea9f81876c8b8203684c4083148fa70bc
parent26b153b1dfdffb24fbeb2e5bc91154a2e8d3f78e (diff)
downloadopenttd-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.c75
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);
}
}