package org.csdgn.cddatse.data;
import java.awt.image.BufferedImage;
import org.csdgn.maru.util.Tuple;
public class InternalTile {
public InternalTile() {
}
public InternalTile(BaseTile tile) {
this.id = tile.id;
this.rotates = tile.rotates;
fillTuple(image,tile);
if(tile.additional_tiles != null) {
for(Tile at : tile.additional_tiles) {
switch(at.id) {
case "broken":
broken = true;
fillTuple(brokenImage,at);
break;
case "center":
center = true;
fillTuple(centerImage,at);
break;
case "corner":
corner = true;
fillTuple(cornerImage,at);
break;
case "edge":
edge = true;
fillTuple(edgeImage,at);
break;
case "end_piece":
endPiece = true;
fillTuple(endPieceImage,at);
break;
case "open":
open = true;
fillTuple(openImage,at);
break;
case "t_connection":
tConnection = true;
fillTuple(tConnectionImage,at);
break;
case "unconnected":
unconnected = true;
fillTuple(unconnectedImage,at);
break;
default: //unknown type :(
}
}
}
}
public static void fillTuple(Tuple<BufferedImage> it, Tile tile) {
if(tile.fg != null && tile.fg >= 0) {
it.first = GFX.instance.images.get(tile.fg);
}
if(tile.bg != null && tile.bg >= 0) {
it.second = GFX.instance.images.get(tile.bg);
}
}
public int getImageId(BufferedImage img) {
//TODO optimize this with a hashmap
int index = GFX.instance.images.indexOf(img);
if(index < 0) {
System.out.println("ERROR -1 image index in \"" + id + "\"");
}
return index;
}
public boolean broken = false;
public final Tuple<BufferedImage> brokenImage = new Tuple<BufferedImage>();
public boolean center = false;
public final Tuple<BufferedImage> centerImage = new Tuple<BufferedImage>();
public boolean corner = false;
public final Tuple<BufferedImage> cornerImage = new Tuple<BufferedImage>();
public boolean edge = false;
public final Tuple<BufferedImage> edgeImage = new Tuple<BufferedImage>();
public boolean endPiece = false;
public final Tuple<BufferedImage> endPieceImage = new Tuple<BufferedImage>();
public String id = "";
public final Tuple<BufferedImage> image = new Tuple<BufferedImage>();
public boolean open = false;
public final Tuple<BufferedImage> openImage = new Tuple<BufferedImage>();
public boolean rotates = false;
public boolean tConnection = false;
public final Tuple<BufferedImage> tConnectionImage = new Tuple<BufferedImage>();
public boolean unconnected = false;
public final Tuple<BufferedImage> unconnectedImage = new Tuple<BufferedImage>();
private Tile createMultitile(String id, Tuple<BufferedImage> tuple) {
Tile tile = new Tile();
tile.id = id;
if (tuple.first != null) {
tile.fg = getImageId(tuple.first);
}
if (tuple.second != null) {
tile.bg = getImageId(tuple.second);
}
return tile;
}
public boolean isMultitile() {
return corner || edge || center || tConnection || endPiece || unconnected || open || broken;
}
public boolean isImageless() {
if(!image.isNull() || !brokenImage.isNull()
|| !centerImage.isNull() || !cornerImage.isNull()
|| !edgeImage.isNull() || !endPieceImage.isNull()
|| !openImage.isNull() || !tConnectionImage.isNull()
|| !unconnectedImage.isNull())
return false;
return true;
}
public void setBroken(boolean broken) {
this.broken = broken;
}
public void setCenter(boolean center) {
this.center = center;
}
public void setCorner(boolean corner) {
this.corner = corner;
}
public void setEdge(boolean edge) {
this.edge = edge;
}
public void setEndPiece(boolean endPiece) {
this.endPiece = endPiece;
}
public void setId(String id) {
this.id = id;
}
public void setOpen(boolean open) {
this.open = open;
}
public void setRotates(boolean rotates) {
this.rotates = rotates;
}
public void setTConnection(boolean tConnection) {
this.tConnection = tConnection;
}
public void setUnconnected(boolean unconnected) {
this.unconnected = unconnected;
}
public BaseTile toBaseTile() {
BaseTile tile = new BaseTile();
tile.id = id;
if (image.first != null) {
tile.fg = getImageId(image.first);
}
if (image.second != null) {
tile.bg = getImageId(image.second);
}
tile.rotates = rotates;
if (isMultitile()) {
tile.multitile = true;
if (center) {
tile.additional_tiles.add(createMultitile("center", centerImage));
}
if (corner) {
tile.additional_tiles.add(createMultitile("corner", cornerImage));
}
if (edge) {
tile.additional_tiles.add(createMultitile("edge", edgeImage));
}
if (tConnection) {
tile.additional_tiles.add(createMultitile("t_connection", tConnectionImage));
}
if (endPiece) {
tile.additional_tiles.add(createMultitile("end_piece", endPieceImage));
}
if (unconnected) {
tile.additional_tiles.add(createMultitile("unconnected", unconnectedImage));
}
if (open) {
tile.additional_tiles.add(createMultitile("open", openImage));
}
if (broken) {
tile.additional_tiles.add(createMultitile("broken", brokenImage));
}
} else {
tile.multitile = null;
tile.additional_tiles = null;
}
return tile;
}
@Override
public String toString() {
if (id.length() == 0) {
return " ";
}
return id;
}
}