package com.clearlyspam23.GLE.basic.layers.tile.resources; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import com.clearlyspam23.GLE.basic.layers.tile.TilesetHandle; public class BasicTilesetHandle extends TilesetHandle{ /** * */ private static final long serialVersionUID = 1L; private int tileWidth; private int tileHeight; private int tileXSpacing; private int tileYSpacing; private String name; private String imageFile; private int id; private transient Image[][] tileset; public BasicTilesetHandle(){ this("", null, 0, 0, 0, 0, 0); } public BasicTilesetHandle(String name){ this(name, null, 0, 0, 0, 0, 0); } public BasicTilesetHandle(String name, String filename, int tileWidth, int tileHeight){ this(name, filename, tileWidth, tileHeight, 0, 0, 0); } public BasicTilesetHandle(String name, String filename, int tileWidth, int tileHeight, int xSpacing, int ySpacing){ this(name, filename, tileWidth, tileHeight, xSpacing, ySpacing, 0); } public BasicTilesetHandle(String name, String filename, int tileWidth, int tileHeight, int xSpacing, int ySpacing, int id){ this.name = name; this.imageFile = filename; this.tileWidth = tileWidth; this.tileHeight = tileHeight; this.tileXSpacing = xSpacing; this.tileYSpacing = ySpacing; this.id = id; checkLoad(); } private void checkLoad(){ if(imageFile!=null&&tileset==null){ reloadTileset(); } } private void reloadTileset(){ Image[][] tiles = null; try { BufferedImage temp = ImageIO.read(new File(imageFile)); tiles = new Image[(temp.getWidth()+getTileXSpacing())/(getTileWidth()+getTileXSpacing())] [(temp.getHeight()+getTileYSpacing())/(getTileHeight()+getTileYSpacing())]; for(int i = 0; i < tiles.length; i++) { for(int j = 0; j < tiles[i].length; j++) { tiles[i][j] = temp.getSubimage((getTileWidth()+getTileXSpacing())*i, (getTileHeight()+getTileYSpacing())*j, getTileWidth(), getTileHeight()); } } } catch (IOException e) { } tileset = tiles; } public Image[][] getTileset() { checkLoad(); return tileset; } public Image getTileAt(int x, int y){ checkLoad(); return tileset[x][y]; } public Image getTileByIndex(int index){ checkLoad(); return getTileAt(index%tileset.length, index/tileset.length); } public int getXFromIndex(int index){ checkLoad(); return index%tileset.length; } public int getYFromIndex(int index){ checkLoad(); return index/tileset.length; } public boolean isValidLocation(int x, int y){ checkLoad(); return x>=0&&x<tileset.length&&y>=0&&y<tileset[x].length; } public int getIndex(int x, int y){ checkLoad(); return y*tileset.length+x; } public int getWidth() { checkLoad(); return tileset.length; } public int getHeight() { checkLoad(); return (tileset.length>0 ? tileset[0].length : 0); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFilename() { return imageFile; } public void setFilename(String filename) { boolean b = imageFile!=filename; this.imageFile = filename; if(b) reloadTileset(); } public int getTileWidth() { return tileWidth; } public void setTileWidth(int tileWidth) { boolean b = tileWidth!=this.tileWidth; this.tileWidth = tileWidth; if(b) reloadTileset(); } public int getTileHeight() { return tileHeight; } public void setTileHeight(int tileHeight) { boolean b = tileHeight!=this.tileHeight; this.tileHeight = tileHeight; if(b) reloadTileset(); } public int getTileXSpacing() { return tileXSpacing; } public void setTileXSpacing(int tileXSpacing) { boolean b = tileXSpacing!=this.tileXSpacing; this.tileXSpacing = tileXSpacing; if(b) reloadTileset(); } public int getTileYSpacing() { return tileYSpacing; } public void setTileYSpacing(int tileYSpacing) { boolean b = tileYSpacing!=this.tileYSpacing; this.tileYSpacing = tileYSpacing; if(b) reloadTileset(); } public String toString(){ return name; } @Override public BasicTilesetHandle cloneAsBasic() { BasicTilesetHandle out = new BasicTilesetHandle(); out.tileWidth = tileWidth; out.tileHeight = tileHeight; out.tileXSpacing = tileXSpacing; out.tileYSpacing = tileYSpacing; out.name = name; out.imageFile = imageFile; out.id = id; out.checkLoad(); return out; } public boolean isValid(){ return tileset!=null; } @Override public int getID() { return id; } public void setID(int id){ this.id = id; } }