package com.rebelkeithy.ftl.view;
import java.util.HashMap;
import java.util.Map;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.rebelkeithy.ftl.FTLGame;
import com.rebelkeithy.ftl.ship.Direction;
import com.rebelkeithy.ftl.ship.Door;
public class DoorRenderer
{
private static Map<Door, DoorRenderer> renderers = new HashMap<Door, DoorRenderer>();
private int spriteState = 0;
public static DoorRenderer getRenderer(Door door)
{
if(!renderers.containsKey(door))
{
renderers.put(door, new DoorRenderer());
}
return renderers.get(door);
}
public void render(SpriteBatch batch, Door door, int shipOffsetX, int shipOffsetY)
{
Texture texture = TextureRegistry.getTexture("doors");
if(spriteState < 4 && (door.open || door.forceOpen || (door.getLink() != null && door.getLink().open)))
{
spriteState++;
if(spriteState > 4)
spriteState = 4;
}
if(spriteState > 0 && !(door.open || door.forceOpen || (door.getLink() != null && door.getLink().open)))
{
spriteState--;
if(spriteState < 0)
spriteState = 0;
}
int u = spriteState;
int v = 0;
v = door.room1.getShip().getSystem("doors").getPower() - 1;
TextureRegion region = new TextureRegion(texture, u*35, v*35, 35, 35);
int mouseX = Gdx.input.getX() - shipOffsetX;
int mouseY = (Gdx.graphics.getHeight() - Gdx.input.getY()) - shipOffsetY;
boolean hover = false;
int shrinkH = 5;
int shrinkV = 10;
float doorAlpha = 0.75f;
if(FTLGame.instance().getPlayer() != null && FTLGame.instance().getPlayer().getName().equals(door.room1.getShip().getName()))
{
if(door.direction == Direction.RIGHT || door.direction == Direction.LEFT)
if(mouseX > door.getX()*35 - 35/2 + shrinkV && mouseX < door.getX()*35 + 35/2 - shrinkV && mouseY > door.getY()*35 + shrinkH && mouseY < door.getY()*35 + 35 - shrinkH)
hover = true;
if(door.direction == Direction.UP || door.direction == Direction.DOWN)
if(mouseX > door.getX()*35 + shrinkH && mouseX < door.getX()*35 + 35 - shrinkH && mouseY > door.getY()*35 - 35/2 + shrinkV && mouseY < door.getY()*35 + 35/2 - shrinkV)
hover = true;
}
if(FTLView.inputHandler.selected != null)
hover = false;
Texture doorHighlight = TextureRegistry.getTexture("door_highlight");
if(door.direction == Direction.LEFT)
{
if(hover)
{
batch.setColor(1, 1, 1, doorAlpha);
batch.draw(doorHighlight, shipOffsetX + (float)(door.getX()-0.5)*35 + 1, shipOffsetY + (float)(door.getY())*35);
batch.setColor(1, 1, 1, 1);
}
batch.draw(region, shipOffsetX + (float)(door.getX()-0.5)*35 + 1, shipOffsetY + (float)(door.getY())*35);
}
if(door.direction == Direction.RIGHT)
{
if(hover)
{
batch.setColor(1, 1, 1, doorAlpha);
if(door.getLink() == null)
batch.draw(doorHighlight, shipOffsetX + (float)(door.getX()-0.5)*35 + 1, shipOffsetY + (float)(door.getY())*35);
batch.setColor(1, 1, 1, 1);
}
batch.draw(region, shipOffsetX + (float)(door.getX()-0.5)*35 + 1, shipOffsetY + (float)(door.getY())*35);
}
if(door.direction == Direction.DOWN)
{
if(hover)
{
batch.setColor(1, 1, 1, doorAlpha);
batch.draw(new TextureRegion(doorHighlight), shipOffsetX + (float)(door.getX())*35-1, shipOffsetY + (float)(door.getY() - 0.5)*35 + 1, 36/2, 36/2, 35, 35, 1, 1, 90);
batch.setColor(1, 1, 1, 1);
}
batch.draw(region, shipOffsetX + (float)(door.getX())*35-1, shipOffsetY + (float)(door.getY() - 0.5)*35 + 1, 36/2, 36/2, 35, 35, 1, 1, 90);
}
if(door.direction == Direction.UP)
{
if(hover)
{
batch.setColor(1, 1, 1, doorAlpha);
if(door.getLink() == null)
batch.draw(new TextureRegion(doorHighlight), shipOffsetX + (float)(door.getX())*35-1, shipOffsetY + (float)(door.getY() - 0.5)*35 + 1, 36/2, 36/2, 35, 35, 1, 1, 90);
batch.setColor(1, 1, 1, 1);
}
batch.draw(region, shipOffsetX + (float)(door.getX())*35-1, shipOffsetY + (float)(door.getY() - 0.5)*35 + 1, 36/2, 36/2, 35, 35, 1, 1, 90);
}
}
}