TileImages: share image-loading code between overlay map and main view
main view- tiles image is now loaded as a single buffered image, and selected into "sub-images" where needed overlay- the rgb drawing code is moved into TileImages class
This commit is contained in:
parent
7cfe0c1dc5
commit
6c0c9203a4
2 changed files with 41 additions and 65 deletions
|
@ -98,20 +98,6 @@ public class OverlayMapView extends JComponent
|
||||||
static final int TILE_HEIGHT = 3;
|
static final int TILE_HEIGHT = 3;
|
||||||
static final int TILE_OFFSET_Y = 3;
|
static final int TILE_OFFSET_Y = 3;
|
||||||
static TileImages tileArray = TileImages.getInstance("sm", TILE_HEIGHT);
|
static TileImages tileArray = TileImages.getInstance("sm", TILE_HEIGHT);
|
||||||
static BufferedImage tileArrayImage = loadImage(tileArray.getResourceName());
|
|
||||||
|
|
||||||
static BufferedImage loadImage(String resourceName)
|
|
||||||
{
|
|
||||||
URL iconUrl = MicropolisDrawingArea.class.getResource(resourceName);
|
|
||||||
Image refImage = new ImageIcon(iconUrl).getImage();
|
|
||||||
|
|
||||||
BufferedImage bi = new BufferedImage(refImage.getWidth(null), refImage.getHeight(null),
|
|
||||||
BufferedImage.TYPE_INT_RGB);
|
|
||||||
Graphics2D gr = bi.createGraphics();
|
|
||||||
gr.drawImage(refImage, 0, 0, null);
|
|
||||||
|
|
||||||
return bi;
|
|
||||||
}
|
|
||||||
|
|
||||||
static final Color VAL_LOW = new Color(0xbfbfbf);
|
static final Color VAL_LOW = new Color(0xbfbfbf);
|
||||||
static final Color VAL_MEDIUM = new Color(0xffff00);
|
static final Color VAL_MEDIUM = new Color(0xffff00);
|
||||||
|
@ -412,15 +398,8 @@ public class OverlayMapView extends JComponent
|
||||||
{
|
{
|
||||||
assert tile >= 0;
|
assert tile >= 0;
|
||||||
|
|
||||||
int imageNumber = tileArray.getTileImageNumber(tile);
|
TileImages.ImageInfo tileImg = tileArray.getTileImageInfo(tile);
|
||||||
for (int yy = 0; yy < TILE_HEIGHT; yy++)
|
tileImg.drawToBytes(img, x*TILE_WIDTH, y*TILE_HEIGHT);
|
||||||
{
|
|
||||||
for (int xx = 0; xx < TILE_WIDTH; xx++)
|
|
||||||
{
|
|
||||||
img.setRGB(x*TILE_WIDTH+xx,y*TILE_HEIGHT+yy,
|
|
||||||
tileArrayImage.getRGB(xx,imageNumber*TILE_OFFSET_Y+yy));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle getViewRect(ConnectedView cv)
|
Rectangle getViewRect(ConnectedView cv)
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class TileImages
|
||||||
final String name;
|
final String name;
|
||||||
final int TILE_WIDTH;
|
final int TILE_WIDTH;
|
||||||
final int TILE_HEIGHT;
|
final int TILE_HEIGHT;
|
||||||
Image [] images;
|
BufferedImage tileImages;
|
||||||
TileImage [] tileImageMap;
|
TileImage [] tileImageMap;
|
||||||
Map<SpriteKind, Map<Integer, Image> > spriteImages;
|
Map<SpriteKind, Map<Integer, Image> > spriteImages;
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ public class TileImages
|
||||||
this.TILE_WIDTH = size;
|
this.TILE_WIDTH = size;
|
||||||
this.TILE_HEIGHT = size;
|
this.TILE_HEIGHT = size;
|
||||||
|
|
||||||
|
this.tileImages = loadImage(getResourceName());
|
||||||
initTileImageMap();
|
initTileImageMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,16 +63,6 @@ public class TileImages
|
||||||
return "/" + name + "/tiles.png";
|
return "/" + name + "/tiles.png";
|
||||||
}
|
}
|
||||||
|
|
||||||
void initTileImages()
|
|
||||||
{
|
|
||||||
if (this.images != null) {
|
|
||||||
// already loaded
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.images = loadTileImages(getResourceName(), TILE_HEIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
SimpleTileImage readSimpleImage(XMLStreamReader in)
|
SimpleTileImage readSimpleImage(XMLStreamReader in)
|
||||||
throws XMLStreamException
|
throws XMLStreamException
|
||||||
{
|
{
|
||||||
|
@ -171,7 +162,6 @@ public class TileImages
|
||||||
public static TileImages getInstance(int size)
|
public static TileImages getInstance(int size)
|
||||||
{
|
{
|
||||||
TileImages self = getInstance(String.format("%dx%d", size, size), size);
|
TileImages self = getInstance(String.format("%dx%d", size, size), size);
|
||||||
self.initTileImages();
|
|
||||||
self.loadSpriteImages();
|
self.loadSpriteImages();
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -184,11 +174,6 @@ public class TileImages
|
||||||
return savedInstances.get(size);
|
return savedInstances.get(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTileImageNumber(int tileNumber)
|
|
||||||
{
|
|
||||||
return getTileImageInfo(tileNumber, 0).imageNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ImageInfo
|
public class ImageInfo
|
||||||
{
|
{
|
||||||
int imageNumber;
|
int imageNumber;
|
||||||
|
@ -199,8 +184,32 @@ public class TileImages
|
||||||
this.animated = animated;
|
this.animated = animated;
|
||||||
}
|
}
|
||||||
|
|
||||||
Image getImage() { return images[imageNumber]; }
|
|
||||||
boolean isAnimated() { return animated; }
|
boolean isAnimated() { return animated; }
|
||||||
|
|
||||||
|
public void drawToBytes(BufferedImage img, int x, int y)
|
||||||
|
{
|
||||||
|
for (int yy = 0; yy < TILE_HEIGHT; yy++)
|
||||||
|
{
|
||||||
|
for (int xx = 0; xx < TILE_WIDTH; xx++)
|
||||||
|
{
|
||||||
|
img.setRGB(x+xx,y+yy,
|
||||||
|
tileImages.getRGB(xx,imageNumber*TILE_HEIGHT+yy));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Image getImage()
|
||||||
|
{
|
||||||
|
return tileImages.getSubimage(
|
||||||
|
0, imageNumber*TILE_HEIGHT,
|
||||||
|
TILE_WIDTH, TILE_HEIGHT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ImageInfo getTileImageInfo(int tileNumber)
|
||||||
|
{
|
||||||
|
return getTileImageInfo(tileNumber, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageInfo getTileImageInfo(int tileNumber, int acycle)
|
public ImageInfo getTileImageInfo(int tileNumber, int acycle)
|
||||||
|
@ -232,30 +241,6 @@ public class TileImages
|
||||||
return getTileImageInfo(tile, 0).getImage();
|
return getTileImageInfo(tile, 0).getImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Image [] loadTileImages(String resourceName, int srcSize)
|
|
||||||
{
|
|
||||||
URL iconUrl = TileImages.class.getResource(resourceName);
|
|
||||||
Image refImage = new ImageIcon(iconUrl).getImage();
|
|
||||||
|
|
||||||
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
|
||||||
GraphicsDevice dev = env.getDefaultScreenDevice();
|
|
||||||
GraphicsConfiguration conf = dev.getDefaultConfiguration();
|
|
||||||
|
|
||||||
Image [] images = new Image[refImage.getHeight(null) / srcSize];
|
|
||||||
for (int i = 0; i < images.length; i++)
|
|
||||||
{
|
|
||||||
BufferedImage bi = conf.createCompatibleImage(TILE_WIDTH, TILE_HEIGHT, Transparency.OPAQUE);
|
|
||||||
Graphics2D gr = bi.createGraphics();
|
|
||||||
gr.drawImage(refImage, 0, 0, TILE_WIDTH, TILE_HEIGHT,
|
|
||||||
0, i * srcSize,
|
|
||||||
0 + srcSize, i * srcSize + srcSize,
|
|
||||||
null);
|
|
||||||
|
|
||||||
images[i] = bi;
|
|
||||||
}
|
|
||||||
return images;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Image getSpriteImage(SpriteKind kind, int frameNumber)
|
public Image getSpriteImage(SpriteKind kind, int frameNumber)
|
||||||
{
|
{
|
||||||
assert spriteImages != null;
|
assert spriteImages != null;
|
||||||
|
@ -321,4 +306,16 @@ public class TileImages
|
||||||
return bi;
|
return bi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BufferedImage loadImage(String resourceName)
|
||||||
|
{
|
||||||
|
URL iconUrl = TileImages.class.getResource(resourceName);
|
||||||
|
Image refImage = new ImageIcon(iconUrl).getImage();
|
||||||
|
|
||||||
|
BufferedImage bi = new BufferedImage(refImage.getWidth(null), refImage.getHeight(null),
|
||||||
|
BufferedImage.TYPE_INT_RGB);
|
||||||
|
Graphics2D gr = bi.createGraphics();
|
||||||
|
gr.drawImage(refImage, 0, 0, null);
|
||||||
|
|
||||||
|
return bi;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue