package system.battle;

import java.io.Serializable;

import graphics.sprite.TileSprite;
import system.character.BaseCharacter;

/**
 * Esta classe se refere às imagens dos Tiles do jogo, logo utilizá-las apenas para este fim.
 * */
public class Tile implements Serializable {
	private static final long serialVersionUID = -2241612583704351205L;
	/**
	 * Valor que determina a altura deste tile
	 */
	private int height;
	/**
	 * O custo para passar por este tile caso ele esteja desocupado
	 */
	private int cost;

	/**
	 * O ocupante presente no tile. Valor null significa tile sem ocupante.
	 */
	private BaseCharacter occupant;
	
	/**
	 * Coordenadas lógicas do tile no mapa
	 */
	private Coordinate coordinate;
	
	/**
	 * Estado atual do tile, usado para determinar o sprite a ser usado
	 */
	public int state;
	
	private TileSprite sprite;
	private TileSprite spriteUser;
	
	/**
	 * Inicializa uma posição sem ocupantes.
	 * @param cost - custo de movimentação horizontal
	 * @param height - custo de movimentação vertical
	 * @param coordinate - coordenadas lógicas
	 */
	public Tile(int cost, int height, Coordinate coordinate) {
		this.cost = cost;
		this.height = height;
		this.coordinate = coordinate;
		sprite = new TileSprite(coordinate.getX() * 48, coordinate.getY() * 48);
		spriteUser = sprite;
	}

	// -------------------------------------------
	// Getters
	// -------------------------------------------
	
	public int getHeight() {
		return height;
	}

	public int getCost() {
		return cost;
	}

	/**
	 * Atribui um ocupante para esta posição
	 * @param occupant - um ocupante válido para esta posição
	 */
	public void setOccupant(BaseCharacter occupant) {
		this.occupant = occupant;
	}

	public BaseCharacter getOccupant() {
		return occupant;
	}

	public Coordinate getCoordinate() {
		return coordinate;
	}

	public TileSprite getSprite() {
		return sprite;
	}

	public TileSprite getSpriteUser() {
		return spriteUser;
	}
}
