package com.galvarez.ttw.rendering.map;
import java.util.Map;
import java.util.Map.Entry;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion;
import com.badlogic.gdx.math.MathUtils;
import com.galvarez.ttw.model.map.MapPosition;
import com.galvarez.ttw.model.map.MapTools;
import com.galvarez.ttw.utils.FloatPair;
import com.galvarez.ttw.utils.Font;
public class MapHighlighter extends AbstractRenderer {
private final AtlasRegion highlight;
private float t;
private float r, g, b, a;
private final BitmapFont font;
public MapHighlighter(OrthographicCamera camera, SpriteBatch batch) {
super(camera, batch);
TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("textures/maptiles.atlas"), Gdx.files.internal("textures"));
highlight = atlas.findRegion("hex_blank");
font = Font.IRIS_UPC.get();
font.setColor(Color.BLACK);
t = 0;
}
public void render(Map<MapPosition, String> tiles) {
if (tiles == null || tiles.size() < 1)
return;
// Get bottom left and top right coordinates of camera viewport and convert
// into grid coordinates for the map
int x0 = MathUtils.floor(camera.frustum.planePoints[0].x / MapTools.col_multiple) - 1;
int y0 = MathUtils.floor(camera.frustum.planePoints[0].y / MapTools.row_multiple);
int x1 = MathUtils.floor(camera.frustum.planePoints[2].x / MapTools.col_multiple);
int y1 = MathUtils.floor(camera.frustum.planePoints[2].y / MapTools.row_multiple);
begin();
batch.setColor(r, g, b, a / 8 * (7 + MathUtils.cos(8 * t)));
for (Entry<MapPosition, String> e : tiles.entrySet()) {
MapPosition tile = e.getKey();
if (tile.x < x0 || tile.x > x1 || tile.y < y0 || tile.y > y1)
continue;
FloatPair coords = MapTools.world2window(tile);
batch.draw(highlight, coords.x - highlight.getRegionWidth() / 2, coords.y - highlight.getRegionHeight() / 2);
// then draw the remaining cost for each cell
String msg = e.getValue();
if (msg != null)
font.draw(batch, msg, coords.x, coords.y);
}
t += Gdx.graphics.getDeltaTime();
end();
}
public void setColor(float r, float g, float b, float a) {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
}