package maps;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import javax.swing.JPanel;
public class MapGenerator{
private static int tW; // tile width
private static int tH; // tile height
private static int mH; // map height
private static int mW; // map height
private static int tX,tY;
private static MapParser mapReader;
private static Transparency transpire;
private static int[][][] map;
private static int[][] tileSet;
private static int[][] gids;
private static int[] tileAmount;
private static int[] firstGID;
private static int fGID;
private static String[] mapSource;
private static int tR; // amount of rows in tileset
private static int tilesetX;
private static int tilesetY;
private Image[] tileset = new Image[2];
private static int imgSrc;
public MapGenerator() {
mapReader = new MapParser();
//Gets map resource
mapSource = mapReader.getMapResource();
firstGID = mapReader.getFirstGID();
tilesetFinder();
//Point aP = new Point();
tW = mapReader.getTileSize().x;
tH = mapReader.getTileSize().y;
//gets amount of tiles in row of tileset
tR = (256/tW);
//gets map size
mW = mapReader.getMapSize().x;
mH = mapReader.getMapSize().y;
tileAmount = new int[mapReader.getTileAmount()];
setupMapArray();
}
protected void setupMapArray(){
gids = mapReader.getGIDS();
map = new int [gids.length][mW][mH];
for(int lay=0; lay < gids.length; lay++){
int i=0;
for(int y = 0; y <mH; y++){
for(int x = 0; x < mW; x++){
map[lay][x][y] = gids[lay][i];
tX = (map[lay][x][y] - firstGID[i]) % tR * tW;
tY = (map[lay][x][y] - firstGID[i]) / tR * tW;
i++;
}
}
}
}
/**
* First attempt at merging MapGen with Game
*/
public void tilesetFinder(){
for(int i=0; i < firstGID.length; i++){
tileset[i] = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(mapSource[i]));
// Set Transparent Colour
Color TransparentColor = new Color(0x000000);
tileset[i] = transpire.makeColorTransparent(tileset[i], TransparentColor);
fGID = firstGID[i];
imgSrc = i;
}
}
public void switchMap(int ch){
if(ch < 257){
imgSrc = 0;
}
else {
imgSrc = 1;
}
}
public int getMapWidth(){
return mW;
}
public int getMapHeight(){
return mH;
}
public int getTileWidth(){
return tW;
}
public int getTileHeight(){
return tH;
}
public int[][][] getSendMap(){
return map;
}
public Image getImage(){
return tileset[imgSrc];
}
public int[][] getGIDS(){
return gids;
}
public int getTileSetRow(){
return tR;
}
public int[] getFirstGIDArray(){
return firstGID;
}
public int getfirstGID(){
return fGID;
}
public void drawTile(Graphics g, int layer, int mx, int my){
int set = 0;
if (map[layer][mx][my] > firstGid[1]) set = 1;
int tile = map[layer][mx][my] - firstGid[set];
g.drawImage(tileset[set], (mx*getTileWidth()), (my*getTileHeight()), (mx*getTileWidth())+getTileWidth(), (my*getTileHeight())+getTileHeight(), getTilesetX(), getTilesetY(), getTilesetX() + getTileWidth(), getTilesetY() + getTileHeight(), this );
}
}