From 92776621d68ba70a77c4213e663be68df47fe2ed Mon Sep 17 00:00:00 2001 From: Jason Long Date: Fri, 15 Aug 2014 12:57:50 -0700 Subject: [PATCH] TileImage: refactor: LoaderContext now returns a TileImage-derived class --- src/micropolisj/graphics/TileImage.java | 27 +++++++++++++++++-------- src/micropolisj/gui/TileImages.java | 16 +++++++-------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/micropolisj/graphics/TileImage.java b/src/micropolisj/graphics/TileImage.java index def2512..0bff983 100644 --- a/src/micropolisj/graphics/TileImage.java +++ b/src/micropolisj/graphics/TileImage.java @@ -60,21 +60,31 @@ public abstract class TileImage } } - /** - * Supports rescaling of tile images. - */ - public static abstract class SourceImage extends TileImage + public static class SourceImage extends TileImage { public final BufferedImage image; public final int basisSize; - protected SourceImage(BufferedImage image, int basisSize) + public SourceImage(BufferedImage image, int basisSize) { this.image = image; this.basisSize = basisSize; } + + @Override + public void drawFragment(Graphics2D gr, int destX, int destY, int srcX, int srcY) + { + gr.drawImage( + image.getSubimage(srcX, srcY, basisSize, basisSize), + destX, + destY, + null); + } } + /** + * Supports rescaling of tile images. + */ public static class ScaledSourceImage extends SourceImage { public final int targetSize; @@ -103,7 +113,8 @@ public abstract class TileImage public static class SimpleTileImage extends TileImage { - public BufferedImage srcImage; + public SourceImage srcImage; + public int offsetX; public int offsetY; @Override @@ -114,8 +125,8 @@ public abstract class TileImage public interface LoaderContext { - BufferedImage getDefaultImage(); - BufferedImage getImage(String name); + SourceImage getDefaultImage(); + SourceImage getImage(String name); } static SimpleTileImage readSimpleImage(XMLStreamReader in, LoaderContext ctx) diff --git a/src/micropolisj/gui/TileImages.java b/src/micropolisj/gui/TileImages.java index afc6afe..6b2f866 100644 --- a/src/micropolisj/gui/TileImages.java +++ b/src/micropolisj/gui/TileImages.java @@ -47,19 +47,19 @@ public class TileImages class MyLoaderContext implements LoaderContext { - Map images = new HashMap(); + Map images = new HashMap(); //implements LoaderContext - public BufferedImage getDefaultImage() + public SourceImage getDefaultImage() { return getImage("tiles.png"); } //implements LoaderContext - public BufferedImage getImage(String fileName) + public SourceImage getImage(String fileName) { if (!images.containsKey(fileName)) { - images.put(fileName, loadImage("/"+name+"/"+fileName)); + images.put(fileName, loadImage("/"+name+"/"+fileName, TILE_HEIGHT)); } return images.get(fileName); } @@ -161,7 +161,7 @@ public class TileImages public void drawToBytes(BufferedImage img, int x, int y) { - BufferedImage srcImage = image.srcImage; + BufferedImage srcImage = image.srcImage.image; int offsetY = image.offsetY; for (int yy = 0; yy < TILE_HEIGHT; yy++) @@ -176,7 +176,7 @@ public class TileImages public Image getImage() { - return image.srcImage.getSubimage( + return image.srcImage.image.getSubimage( 0, image.offsetY, TILE_WIDTH, TILE_HEIGHT ); @@ -280,13 +280,13 @@ public class TileImages return bi; } - static BufferedImage loadImage(String resourceName) + static SourceImage loadImage(String resourceName, int basisSize) { URL url = TileImages.class.getResource(resourceName); try { BufferedImage bi = ImageIO.read(url); - return bi; + return new SourceImage(bi, basisSize); } catch (IOException e) {