/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package transientlibs.maps.utils.grid;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import java.util.ArrayList;
import java.util.List;
import transientlibs.slick2d.util.Log;
import transientlibs.bindedobjects.gamecontent.Terrain;
import transientlibs.maps.container.TransientAssembledMap;
import transientlibs.objects.primitives.Coords;
import transientlibs.preui.objects.gui.elements.Marker;
import transientlibs.preui.objects.gui.interfaces.IImage;
import transientlibs.preui.objects.gui.interfaces.IMarker;
import transientlibs.processors.misc.Detonator;
/**
*
* @author kibertoad
*/
public class FOVScreenGrid {
//public FOVBoard fov;
public List<List<Marker>> gridElements;
public TransientAssembledMap map;
public IImage fog;
public IImage fog_00000000;
public IImage fog_00000101;
public IImage fog_00000111;
public IImage fog_00010001;
public IImage fog_00010101;
public IImage fog_00010111;
public IImage fog_00011100;
public IImage fog_00011101;
public IImage fog_00011111;
public IImage fog_01000001;
public IImage fog_01000100;
public IImage fog_01000111;
public IImage fog_01010001;
public IImage fog_01010100;
public IImage fog_01010101;
public IImage fog_01011100;
public IImage fog_01011111;
public int startMapX;
public int startMapY;
public int endMapX;
public int endMapY;
public int screenWidthInTiles;
public int screenHeightInTiles;
public SpriteBatch batch;
public FOVScreenGrid(TransientAssembledMap map, SpriteBatch setBatch) {
this.map = map;
batch = setBatch;
recalculateBorder();
fillArrays();
}
public final void recalculateBorder (){
screenWidthInTiles = (Gdx.graphics.getWidth() / Terrain.tileWidth) + 2;
//screenWidthInTiles = (Gdx.graphics.getWidth() / Terrain.tileWidth);
screenHeightInTiles = (Gdx.graphics.getHeight() / Terrain.tileHeight);
}
public final void fillArrays (){
gridElements = new ArrayList<List<Marker>>();
for (int y = 0; y <= screenHeightInTiles; y++) {
gridElements.add(new ArrayList<Marker>());
for (int x = 0; x <= screenWidthInTiles; x++) {
gridElements.get(y).add (new Marker(null, 0, 0));
/*
gridElements.get(y).get(x).getScreenCoords().x = ((x - 1) * Terrain.tileWidth) ;
gridElements.get(y).get(x).getScreenCoords().x -= (Terrain.tileWidth / 3);
gridElements.get(y).get(x).getScreenCoords().y = ((y) * Terrain.tileHeight) ;
gridElements.get(y).get(x).getScreenCoords().x += Terrain.tileWidth * 1;
gridElements.get(y).get(x).getScreenCoords().y -= Terrain.tileHeight * 1;
*/
gridElements.get(y).get(x).getScreenCoords().x = Detonator.INSTANCE.screenCoordsCalculator.returnScreenCoords(x, y).x;
gridElements.get(y).get(x).getScreenCoords().y = Detonator.INSTANCE.screenCoordsCalculator.returnScreenCoords(x, y).y;
//Log.info("Height: "+Terrain.tileHeight);
if ((x == 0) && (y == 0)) {
Log.info("ScreenCoords for 0/0: "+gridElements.get(y).get(x).getScreenCoords().toRoundedString());
}
gridElements.get(y).get(x).setBothImages(fog);
//boolArray.get(y).add(false);
}
}
}
public boolean hasFogNeighbour (Coords fromSpot, int deltaX, int deltaY) {
return (!(map.fov.wasVisited(fromSpot.getIntX() + deltaX, fromSpot.getIntY() + deltaY)));
}
public void pickImageForSlot (int mapX, int mapY, IMarker slot) {
// if hasFogNeigh
slot.setBothImages(fog);
}
public void recalculateGrid (int setStartX, int setStartY) {
startMapX = setStartX;
startMapY = setStartY;
for (int y = 0; y <= screenHeightInTiles; y++) {
for (int x = 0; x <= screenWidthInTiles; x++) {
pickImageForSlot (startMapX, startMapY, gridElements.get(y).get(x));
//gridElements.get(y).get(x).setBothImages(fog);
//Log.warn("Map is not null: "+(map != null));
//Log.warn("MapFov is not null: "+(map.fov != null));
gridElements.get(y).get(x).isDrawn = (!(map.fov.wasVisited(startMapX + x, startMapY + y)));
//gridElements.get(y).get(x).isDrawn = false;
//if (!(map.fov.wasVisited(x, y))){
//Log.info(x+":"+y+" is invisible");
//} else {
//Log.info(x+":"+y+" is visible");
//}
//boolArray.get(y).add(false);
}
}
}
public void render (){
for (int y = 0; y <= screenHeightInTiles; y++) {
for (int x = 0; x <= screenWidthInTiles; x++) {
gridElements.get(y).get(x).draw(batch);
// Log.warn("Draw fog on: "+gridElements.get(y).get(x).screenCoords.toRoundedString());
// Log.warn("Draw fog MapCoords: "+(x + startMapX)+"/"+(y + startMapY));
//boolArray.get(y).add(false);
}
}
}
}