From 9c5c41e0f4ae4f441282d67ef865323dec75916c Mon Sep 17 00:00:00 2001
From: Jason Long <jason@long.name>
Date: Thu, 19 Jun 2014 20:47:44 -0400
Subject: [PATCH] TileImages: draw animated frames

(still need to implement redrawing of animated frames)
---
 src/micropolisj/engine/Micropolis.java        |  5 +++++
 .../gui/MicropolisDrawingArea.java            |  3 ++-
 src/micropolisj/gui/TileImages.java           | 21 ++++++++++++++++---
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/micropolisj/engine/Micropolis.java b/src/micropolisj/engine/Micropolis.java
index d4b94c8..d3f9e68 100644
--- a/src/micropolisj/engine/Micropolis.java
+++ b/src/micropolisj/engine/Micropolis.java
@@ -2956,4 +2956,9 @@ public class Micropolis
 	{
 		budget.totalFunds = totalFunds;
 	}
+
+	public int getAnimationCycle()
+	{
+		return acycle;
+	}
 }
diff --git a/src/micropolisj/gui/MicropolisDrawingArea.java b/src/micropolisj/gui/MicropolisDrawingArea.java
index 0ff67a7..8c71581 100644
--- a/src/micropolisj/gui/MicropolisDrawingArea.java
+++ b/src/micropolisj/gui/MicropolisDrawingArea.java
@@ -196,7 +196,8 @@ public class MicropolisDrawingArea extends JComponent
 					}
 				}
 
-				gr.drawImage(tileImages.getTileImage(cell),
+				Image img = tileImages.getTileImage(cell, m.getAnimationCycle());
+				gr.drawImage(img,
 					x*TILE_WIDTH + (shakeStep != 0 ? getShakeModifier(y) : 0),
 					y*TILE_HEIGHT,
 					null);
diff --git a/src/micropolisj/gui/TileImages.java b/src/micropolisj/gui/TileImages.java
index c00e420..2fb2f09 100644
--- a/src/micropolisj/gui/TileImages.java
+++ b/src/micropolisj/gui/TileImages.java
@@ -41,6 +41,11 @@ public class TileImages
 	static class AnimatedTile extends TileImage
 	{
 		SimpleTileImage [] frames;
+
+		public SimpleTileImage getFrameByTime(int acycle)
+		{
+			return frames[acycle % frames.length];
+		}
 	}
 
 	private TileImages(String name, int size)
@@ -180,6 +185,11 @@ public class TileImages
 	}
 
 	public int getTileImageNumber(int tileNumber)
+	{
+		return getTileImageNumber(tileNumber, 0);
+	}
+
+	public int getTileImageNumber(int tileNumber, int acycle)
 	{
 		assert (tileNumber & LOMASK) == tileNumber;
 		assert tileNumber >= 0 && tileNumber < tileImageMap.length;
@@ -190,7 +200,7 @@ public class TileImages
 		}
 		else if (ti instanceof AnimatedTile) {
 			AnimatedTile anim = (AnimatedTile) ti;
-			return anim.frames[0].imageNumber;
+			return anim.getFrameByTime(acycle).imageNumber;
 		}
 		else {
 			assert false;
@@ -198,14 +208,19 @@ public class TileImages
 		}
 	}
 
-	public Image getTileImage(int tileNumber)
+	public Image getTileImage(int tile, int acycle)
 	{
 		assert images != null;
 
-		int imageNumber = getTileImageNumber(tileNumber);
+		int imageNumber = getTileImageNumber(tile, acycle);
 		return images[imageNumber];
 	}
 
+	public Image getTileImage(int tile)
+	{
+		return getTileImage(tile, 0);
+	}
+
 	private Image [] loadTileImages(String resourceName, int srcSize)
 	{
 		URL iconUrl = TileImages.class.getResource(resourceName);