having a context (such as time) may come back in the future, but for now it seems better to not do this.
79 lines
1.7 KiB
Java
79 lines
1.7 KiB
Java
package micropolisj.graphics;
|
|
|
|
import java.awt.*;
|
|
import java.awt.image.BufferedImage;
|
|
|
|
public abstract class TileImage
|
|
{
|
|
public static final int STD_SIZE = 16;
|
|
|
|
public abstract void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY);
|
|
|
|
public static class TileImageLayer extends TileImage
|
|
{
|
|
public final TileImageLayer below;
|
|
public final TileImage above;
|
|
|
|
public TileImageLayer(TileImageLayer below, TileImage above)
|
|
{
|
|
this.below = below;
|
|
this.above = above;
|
|
}
|
|
|
|
@Override
|
|
public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY)
|
|
{
|
|
if (below != null) {
|
|
below.drawTo(gr, destX, destY, srcX, srcY);
|
|
}
|
|
above.drawTo(gr, destX, destY, srcX, srcY);
|
|
}
|
|
}
|
|
|
|
public static class TileImageSprite extends TileImage
|
|
{
|
|
public final TileImage source;
|
|
public int offsetX;
|
|
public int offsetY;
|
|
|
|
public TileImageSprite(TileImage source)
|
|
{
|
|
this.source = source;
|
|
}
|
|
|
|
@Override
|
|
public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY)
|
|
{
|
|
source.drawTo(gr, destX, destY, srcX+offsetX, srcY+offsetY);
|
|
}
|
|
}
|
|
|
|
public static class SourceImage extends TileImage
|
|
{
|
|
public final Image image;
|
|
public final int basisSize;
|
|
public final int targetSize;
|
|
|
|
public SourceImage(Image image, int basisSize, int targetSize)
|
|
{
|
|
this.image = image;
|
|
this.basisSize = basisSize;
|
|
this.targetSize = targetSize;
|
|
}
|
|
|
|
@Override
|
|
public void drawTo(Graphics2D gr, int destX, int destY, int srcX, int srcY)
|
|
{
|
|
srcX = srcX * basisSize / STD_SIZE;
|
|
srcY = srcY * basisSize / STD_SIZE;
|
|
|
|
gr.drawImage(
|
|
image,
|
|
destX, destY,
|
|
destX+targetSize, destY+targetSize,
|
|
srcX, srcY,
|
|
srcX+basisSize, srcY+basisSize,
|
|
null);
|
|
}
|
|
}
|
|
}
|