TileImage: refactor: LoaderContext now returns a TileImage-derived class
This commit is contained in:
parent
73b2e65e39
commit
92776621d6
2 changed files with 27 additions and 16 deletions
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
Reference in a new issue