/*
* 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.maps.units.GenericUnit;
import transientlibs.preui.objects.gui.elements.Marker;
import transientlibs.preui.objects.gui.interfaces.IImage;
/**
*
* @author kibertoad
*/
public class UnitScreenGrid {
//public FOVBoard fov;
public List<List<Marker>> gridElements;
public TransientAssembledMap map;
public int startMapX;
public int startMapY;
public int endMapX;
public int endMapY;
public int screenWidthInTiles;
public int screenHeightInTiles;
public SpriteBatch batch;
public UnitScreenGrid(TransientAssembledMap map, SpriteBatch setBatch) {
this.map = map;
batch = setBatch;
recalculateBorder();
fillArrays();
}
public final void recalculateBorder (){
screenWidthInTiles = (Gdx.graphics.getWidth() / Terrain.tileWidth) + 2;
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().x += Terrain.tileWidth * 1;
gridElements.get(y).get(x).getScreenCoords().y = ((y) * Terrain.tileHeight) ;
gridElements.get(y).get(x).getScreenCoords().y -= Terrain.tileHeight * 1;
//Log.info("Height: "+Terrain.tileHeight);
if ((x == 0) && (y == 0)) {
Log.info("ScreenCoords for 0/0: "+gridElements.get(y).get(x).getScreenCoords().toRoundedString());
}
Log.info("Cell coords: "+gridElements.get(y).get(x).getScreenCoords().toRoundedString());
//gridElements.get(y).get(x).setBothImages((IImage)null);
resetElement (x, y);
//boolArray.get(y).add(false);
}
}
}
public void resetElement (int onX, int onY) {
gridElements.get(onY).get(onX).setBothImages((IImage)null);
}
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++) {
{
//GenericUnit u = map.getTile(startMapX + x, startMapY + y).units.get(0);
GenericUnit u =map.getUnit(startMapX + x, startMapY + y, 0);
if (u != null ) {
//Log.info("HAVE ONE");
gridElements.get(y).get(x).setBothImages(u.getCreatures().visualInformation.cutImages.get(u.getDirection()).get(0).get(0).referencedImages);
gridElements.get(y).get(x).isDrawn = true;
} else {
resetElement (x, y);
gridElements.get(y).get(x).isDrawn = false;
}
//gridElements.get(y).get(x).isDrawn = (!(map.fov.wasVisited(startMapX + x, startMapY + y)));
}
}
}
}
public void render (){
for (int y = 0; y <= screenHeightInTiles; y++) {
for (int x = 0; x <= screenWidthInTiles; x++) {
gridElements.get(y).get(x).drawTextureRegion(batch);
}
}
}
}