package com.rzg.zombieland.server.juego; import com.rzg.zombieland.comunes.misc.Coordenada; import com.rzg.zombieland.comunes.misc.Movimiento; import com.rzg.zombieland.server.sesion.Jugador; import com.rzg.zombieland.server.sesion.ServicioSesion; import com.rzg.zombieland.server.sesion.Sesion; /** * Representa una entidad del tablero controlada por un jugador. * @author nicolas * */ public abstract class Personaje extends EntidadTablero implements Comparable<Personaje> { // Jugador que controla este personaje. private Jugador jugador; // Movimiento que ejecutar en el siguiente turno. private Movimiento siguienteMovimiento; // Tablero en el que el personaje est� inscrito. private Tablero tablero; public Personaje(Jugador jugador, Coordenada posicion, Tablero tablero) { super(posicion); this.jugador = jugador; Sesion sesion = ServicioSesion.getInstancia().getSesion(jugador); sesion.setPersonaje(this); siguienteMovimiento = Movimiento.NINGUNO; this.tablero = tablero; } /** * Establece el siguiente movimiento del personaje. * @param siguienteMovimiento - el siguiente movimiento. * @throws NullPointerException si el siguiente movimiento es null. */ public void setSiguienteMovimiento(Movimiento siguienteMovimiento) { if (siguienteMovimiento == null) throw new NullPointerException("El movimiento no puede ser null"); this.siguienteMovimiento = siguienteMovimiento; } /** * Realiza el siguiente movimiento. */ public void mover() { setPosicion(tablero.moverEntidad(getPosicion(), siguienteMovimiento.mover(getPosicion()))); siguienteMovimiento = Movimiento.NINGUNO; } public Jugador getJugador(){ return jugador; } @Override public final int compareTo(Personaje p2) { return siguienteMovimiento.compareTo(p2.siguienteMovimiento); } protected Tablero getTablero() { return tablero; } /** * @return true si el personaje es un zombie, false de lo contrario. */ public abstract boolean esZombie(); /** * @return un array cuyo primer elemento es la coordenada superior izquierda l�mite que el * personaje puede ver, y el segundo elemento la coordenada inferior derecha. */ public abstract Coordenada[] getRectanguloVision(); }