(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
authortron
Thu, 31 Aug 2006 07:01:26 +0000
changeset 4467 156585f085d2
parent 4466 903dcec7aa88
child 4468 db797b21b432
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
station_cmd.c
--- a/station_cmd.c	Thu Aug 31 06:46:52 2006 +0000
+++ b/station_cmd.c	Thu Aug 31 07:01:26 2006 +0000
@@ -2238,61 +2238,32 @@
 
 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
-
-	// 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;
+	const AnimData* i;
+
+	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_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);
 	}
 }