From 8acf22d790929a493c3c8e7efae87c0514c7fc9f Mon Sep 17 00:00:00 2001 From: Jason Long Date: Thu, 19 Jun 2014 16:13:57 -0400 Subject: [PATCH] MakeTiles: Animation: draw the frames for different times during the animation --- src/micropolisj/build_tool/Animation.java | 17 ++++++++++++++--- src/micropolisj/build_tool/MakeTiles.java | 7 +++++-- src/micropolisj/build_tool/TileImage.java | 19 ++++++++++++------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/micropolisj/build_tool/Animation.java b/src/micropolisj/build_tool/Animation.java index 7fc91ed..b3dafa4 100644 --- a/src/micropolisj/build_tool/Animation.java +++ b/src/micropolisj/build_tool/Animation.java @@ -81,10 +81,21 @@ class Animation extends TileImage } @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + public void drawWithTimeTo(Graphics2D gr, int time, int destX, int destY, int srcX, int srcY) { - if (frames.isEmpty()) { return; } - frames.get(0).frame.drawTo(gr, destX, destY, srcX, srcY); + int t = 0; + for (int i = 0; i < frames.size(); i++) { + Frame f = frames.get(i); + int d = t + f.duration; + if (time < d) { + f.frame.drawTo(gr, destX, destY, srcX, srcY); + return; + } + t = d; + } + + // draw nothing + return; } @Override diff --git a/src/micropolisj/build_tool/MakeTiles.java b/src/micropolisj/build_tool/MakeTiles.java index b03ca1d..a0046d4 100644 --- a/src/micropolisj/build_tool/MakeTiles.java +++ b/src/micropolisj/build_tool/MakeTiles.java @@ -135,9 +135,12 @@ public class MakeTiles if (m.dest instanceof Animation) { Animation ani = (Animation) m.dest; - for (Animation.Frame f : ani.frames) { + int t = 0; + for (int i = 0; i < ani.frames.size(); i++) { + Animation.Frame f = ani.frames.get(i); TileImageSprite s = (TileImageSprite) f.frame; - m.ref.drawTo(gr, s.offsetX, s.offsetY, 0, 0); + m.ref.drawWithTimeTo(gr, t, s.offsetX, s.offsetY, 0, 0); + t += f.duration; } } else { diff --git a/src/micropolisj/build_tool/TileImage.java b/src/micropolisj/build_tool/TileImage.java index 37561f6..4831c10 100644 --- a/src/micropolisj/build_tool/TileImage.java +++ b/src/micropolisj/build_tool/TileImage.java @@ -7,7 +7,12 @@ public abstract class TileImage { public static final int STD_SIZE = 16; - public abstract void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY); + public abstract void drawWithTimeTo(Graphics2D gr, int time, int destX, int destY, int srcX, int srcY); + public final void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + { + drawWithTimeTo(gr, 0, destX, destY, srcX, srcY); + } + /** * @return the end-time of the animation frame identified by frameTime; * -1 if not an animation, or if frameTime is past the end of the animation @@ -21,12 +26,12 @@ public abstract class TileImage TileImage above; @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + public void drawWithTimeTo(Graphics2D gr, int time, int destX, int destY, int srcX, int srcY) { if (below != null) { - below.drawTo(gr, destX, destY, srcX, srcY); + below.drawWithTimeTo(gr, time, destX, destY, srcX, srcY); } - above.drawTo(gr, destX, destY, srcX, srcY); + above.drawWithTimeTo(gr, time, destX, destY, srcX, srcY); } @Override @@ -58,9 +63,9 @@ public abstract class TileImage int offsetY; @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + public void drawWithTimeTo(Graphics2D gr, int time, int destX, int destY, int srcX, int srcY) { - source.drawTo(gr, destX, destY, srcX+offsetX, srcY+offsetY); + source.drawWithTimeTo(gr, time, destX, destY, srcX+offsetX, srcY+offsetY); } @Override @@ -82,7 +87,7 @@ public abstract class TileImage } @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + public void drawWithTimeTo(Graphics2D gr, int time, int destX, int destY, int srcX, int srcY) { srcX = srcX * basisSize / STD_SIZE; srcY = srcY * basisSize / STD_SIZE;