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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
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)
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Reference in a new issue