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
}
}
/**
* 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)

View file

@ -47,19 +47,19 @@ public class TileImages
class MyLoaderContext implements LoaderContext
{
Map<String,BufferedImage> images = new HashMap<String,BufferedImage>();
Map<String,SourceImage> images = new HashMap<String,SourceImage>();
//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) {