TileImage: refactor: LoaderContext now returns a TileImage-derived class

This commit is contained in:
Jason Long 2014-08-15 12:57:50 -07:00
parent 73b2e65e39
commit 92776621d6
2 changed files with 27 additions and 16 deletions

View file

@ -60,21 +60,31 @@ public abstract class TileImage
} }
} }
/** public static class SourceImage extends TileImage
* Supports rescaling of tile images.
*/
public static abstract class SourceImage extends TileImage
{ {
public final BufferedImage image; public final BufferedImage image;
public final int basisSize; public final int basisSize;
protected SourceImage(BufferedImage image, int basisSize) public SourceImage(BufferedImage image, int basisSize)
{ {
this.image = image; this.image = image;
this.basisSize = basisSize; 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 static class ScaledSourceImage extends SourceImage
{ {
public final int targetSize; public final int targetSize;
@ -103,7 +113,8 @@ public abstract class TileImage
public static class SimpleTileImage extends TileImage public static class SimpleTileImage extends TileImage
{ {
public BufferedImage srcImage; public SourceImage srcImage;
public int offsetX;
public int offsetY; public int offsetY;
@Override @Override
@ -114,8 +125,8 @@ public abstract class TileImage
public interface LoaderContext public interface LoaderContext
{ {
BufferedImage getDefaultImage(); SourceImage getDefaultImage();
BufferedImage getImage(String name); SourceImage getImage(String name);
} }
static SimpleTileImage readSimpleImage(XMLStreamReader in, LoaderContext ctx) static SimpleTileImage readSimpleImage(XMLStreamReader in, LoaderContext ctx)

View file

@ -47,19 +47,19 @@ public class TileImages
class MyLoaderContext implements LoaderContext class MyLoaderContext implements LoaderContext
{ {
Map<String,BufferedImage> images = new HashMap<String,BufferedImage>(); Map<String,SourceImage> images = new HashMap<String,SourceImage>();
//implements LoaderContext //implements LoaderContext
public BufferedImage getDefaultImage() public SourceImage getDefaultImage()
{ {
return getImage("tiles.png"); return getImage("tiles.png");
} }
//implements LoaderContext //implements LoaderContext
public BufferedImage getImage(String fileName) public SourceImage getImage(String fileName)
{ {
if (!images.containsKey(fileName)) { if (!images.containsKey(fileName)) {
images.put(fileName, loadImage("/"+name+"/"+fileName)); images.put(fileName, loadImage("/"+name+"/"+fileName, TILE_HEIGHT));
} }
return images.get(fileName); return images.get(fileName);
} }
@ -161,7 +161,7 @@ public class TileImages
public void drawToBytes(BufferedImage img, int x, int y) public void drawToBytes(BufferedImage img, int x, int y)
{ {
BufferedImage srcImage = image.srcImage; BufferedImage srcImage = image.srcImage.image;
int offsetY = image.offsetY; int offsetY = image.offsetY;
for (int yy = 0; yy < TILE_HEIGHT; yy++) for (int yy = 0; yy < TILE_HEIGHT; yy++)
@ -176,7 +176,7 @@ public class TileImages
public Image getImage() public Image getImage()
{ {
return image.srcImage.getSubimage( return image.srcImage.image.getSubimage(
0, image.offsetY, 0, image.offsetY,
TILE_WIDTH, TILE_HEIGHT TILE_WIDTH, TILE_HEIGHT
); );
@ -280,13 +280,13 @@ public class TileImages
return bi; return bi;
} }
static BufferedImage loadImage(String resourceName) static SourceImage loadImage(String resourceName, int basisSize)
{ {
URL url = TileImages.class.getResource(resourceName); URL url = TileImages.class.getResource(resourceName);
try { try {
BufferedImage bi = ImageIO.read(url); BufferedImage bi = ImageIO.read(url);
return bi; return new SourceImage(bi, basisSize);
} }
catch (IOException e) { catch (IOException e) {