From 56a4b3da27faa5c965418be4b3520201926060c7 Mon Sep 17 00:00:00 2001 From: Jason Long Date: Thu, 19 Jun 2014 16:02:52 -0400 Subject: [PATCH] MakeTiles: refactor: move TileImage classes into separate file --- graphics/fountain.ani | 7 ++ src/micropolisj/build_tool/Animation.java | 6 +- src/micropolisj/build_tool/MakeTiles.java | 99 +------------------- src/micropolisj/build_tool/TileImage.java | 104 ++++++++++++++++++++++ 4 files changed, 115 insertions(+), 101 deletions(-) create mode 100644 graphics/fountain.ani create mode 100644 src/micropolisj/build_tool/TileImage.java diff --git a/graphics/fountain.ani b/graphics/fountain.ani new file mode 100644 index 0000000..3877351 --- /dev/null +++ b/graphics/fountain.ani @@ -0,0 +1,7 @@ + + +misc_animation@0,208 +misc_animation@0,224 +misc_animation@0,240 +misc_animation@0,256 + diff --git a/src/micropolisj/build_tool/Animation.java b/src/micropolisj/build_tool/Animation.java index 3c7eb8a..7fc91ed 100644 --- a/src/micropolisj/build_tool/Animation.java +++ b/src/micropolisj/build_tool/Animation.java @@ -6,7 +6,7 @@ import java.util.*; import javax.xml.stream.*; import static micropolisj.XML_Helper.*; -class Animation extends MakeTiles.TileImage +class Animation extends TileImage { static final int DEFAULT_DURATION = 125; List frames = new ArrayList(); @@ -70,10 +70,10 @@ class Animation extends MakeTiles.TileImage static class Frame { - MakeTiles.TileImage frame; + TileImage frame; int duration; - public Frame(MakeTiles.TileImage frame, int duration) + public Frame(TileImage frame, int duration) { this.frame = frame; this.duration = duration; diff --git a/src/micropolisj/build_tool/MakeTiles.java b/src/micropolisj/build_tool/MakeTiles.java index 104bc58..b03ca1d 100644 --- a/src/micropolisj/build_tool/MakeTiles.java +++ b/src/micropolisj/build_tool/MakeTiles.java @@ -11,6 +11,7 @@ import javax.swing.ImageIcon; import javax.xml.stream.*; import static micropolisj.engine.TileSpec.generateTileNames; +import static micropolisj.build_tool.TileImage.*; public class MakeTiles { @@ -20,7 +21,6 @@ public class MakeTiles static final Charset UTF8 = Charset.forName("UTF-8"); static int SKIP_TILES = 0; static int COUNT_TILES = -1; - static final int STD_SIZE = 16; static int TILE_SIZE = STD_SIZE; public static void main(String [] args) @@ -208,103 +208,6 @@ public class MakeTiles } } - static abstract class TileImage - { - public abstract void drawTo(Graphics2D gr, int destX, int destY, int srcX, int 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 - */ - public abstract int getFrameEndTime(int frameTime); - } - - static class TileImageLayer extends TileImage - { - TileImageLayer below; - TileImage above; - - @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) - { - if (below != null) { - below.drawTo(gr, destX, destY, srcX, srcY); - } - above.drawTo(gr, destX, destY, srcX, srcY); - } - - @Override - public int getFrameEndTime(int frameTime) - { - if (below == null) { - return above.getFrameEndTime(frameTime); - } - - int belowEnd = below.getFrameEndTime(frameTime); - int aboveEnd = above.getFrameEndTime(frameTime); - - if (belowEnd < 0) { - return aboveEnd; - } - else if (aboveEnd < 0 || belowEnd < aboveEnd) { - return belowEnd; - } - else { - return aboveEnd; - } - } - } - - static class TileImageSprite extends TileImage - { - TileImage source; - int offsetX; - int offsetY; - - @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) - { - source.drawTo(gr, destX, destY, srcX+offsetX, srcY+offsetY); - } - - @Override - public int getFrameEndTime(int frameTime) { - return source.getFrameEndTime(frameTime); - } - } - - static class SourceImage extends TileImage - { - Image image; - int basisSize; - int targetSize; - - SourceImage(Image image, int basisSize, int targetSize) { - this.image = image; - this.basisSize = basisSize; - this.targetSize = targetSize; - } - - @Override - public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) - { - srcX = srcX * basisSize / STD_SIZE; - srcY = srcY * basisSize / STD_SIZE; - - gr.drawImage( - image, - destX, destY, - destX+targetSize, destY+targetSize, - srcX, srcY, - srcX+basisSize, srcY+basisSize, - null); - } - - @Override - public int getFrameEndTime(int frameTime) { - return -1; - } - } - static TileImage parseFrameSpec(TileSpec spec) throws IOException { diff --git a/src/micropolisj/build_tool/TileImage.java b/src/micropolisj/build_tool/TileImage.java new file mode 100644 index 0000000..37561f6 --- /dev/null +++ b/src/micropolisj/build_tool/TileImage.java @@ -0,0 +1,104 @@ +package micropolisj.build_tool; + +import java.awt.*; +import java.awt.image.BufferedImage; + +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); + /** + * @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 + */ + public abstract int getFrameEndTime(int frameTime); + + + static class TileImageLayer extends TileImage + { + TileImageLayer below; + TileImage above; + + @Override + public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + { + if (below != null) { + below.drawTo(gr, destX, destY, srcX, srcY); + } + above.drawTo(gr, destX, destY, srcX, srcY); + } + + @Override + public int getFrameEndTime(int frameTime) + { + if (below == null) { + return above.getFrameEndTime(frameTime); + } + + int belowEnd = below.getFrameEndTime(frameTime); + int aboveEnd = above.getFrameEndTime(frameTime); + + if (belowEnd < 0) { + return aboveEnd; + } + else if (aboveEnd < 0 || belowEnd < aboveEnd) { + return belowEnd; + } + else { + return aboveEnd; + } + } + } + + static class TileImageSprite extends TileImage + { + TileImage source; + int offsetX; + int offsetY; + + @Override + public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + { + source.drawTo(gr, destX, destY, srcX+offsetX, srcY+offsetY); + } + + @Override + public int getFrameEndTime(int frameTime) { + return source.getFrameEndTime(frameTime); + } + } + + static class SourceImage extends TileImage + { + Image image; + int basisSize; + int targetSize; + + SourceImage(Image image, int basisSize, int targetSize) { + this.image = image; + this.basisSize = basisSize; + this.targetSize = targetSize; + } + + @Override + public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY) + { + srcX = srcX * basisSize / STD_SIZE; + srcY = srcY * basisSize / STD_SIZE; + + gr.drawImage( + image, + destX, destY, + destX+targetSize, destY+targetSize, + srcX, srcY, + srcX+basisSize, srcY+basisSize, + null); + } + + @Override + public int getFrameEndTime(int frameTime) { + return -1; + } + } +}