package com.rzg.zombieland.comunes.comunicacion.pojo;
import java.util.ArrayList;
import java.util.List;
import com.rzg.zombieland.comunes.comunicacion.ProyeccionTablero;
import com.rzg.zombieland.comunes.misc.EstadoPartida;
/**
* Representa el estado actual de un lobby: cantidad de jugadores, nombres, etc.
* @author nicolas
*
*/
public class POJOPartida {
/**
* Una partida vac�a.
*/
public static final POJOPartida PARTIDA_VACIA;
static {
PARTIDA_VACIA =
new POJOPartida(null,
null,
new ArrayList<String>(),
new ArrayList<String>(),
0,
0,
"",
null,
null);
}
/**
* El ID que identifica un�vocamente a la partida.
*/
private String id;
/**
* El administrador de la partida.
*/
private String administrador;
/**
* Listado de nombres de jugadores, incluyendo al administrador.
*/
private List<String> jugadores;
/**
* Listado de nombres de espectadores.
*/
private List<String> espectadores;
private int cantidadRondas;
private int cantidadMaximaJugadores;
private String nombre;
private EstadoPartida estado;
// La proyecci�n del tablero asociada a la partida, si existe.
private ProyeccionTablero proyeccion;
/**
* Construye un POJO de partida.
* @param administrador - incluye al administrador.
* @param jugadores
* @param espectadores
* @param cantidadRondas
* @param cantidadJugadores
* @param nombre
* @param estado
*/
public POJOPartida(String id, String administrador, List<String> jugadores,
List<String> espectadores, int cantidadRondas, int cantidadJugadores,
String nombre, EstadoPartida estado, ProyeccionTablero proyeccion) {
this.id = id;
this.administrador = administrador;
this.jugadores = jugadores;
this.espectadores = espectadores;
this.cantidadRondas = cantidadRondas;
this.cantidadMaximaJugadores = cantidadJugadores;
this.nombre = nombre;
this.estado = estado;
this.proyeccion = proyeccion;
}
/**
* Construye un pojo de partida a partir del pojo de creaci�n de partida.
* @param pojo
* @param nombreAdmin
*/
public POJOPartida(POJOCreacionPartida pojo, String nombreAdmin) {
this(null, nombreAdmin, crearListadoJugadores(nombreAdmin), new ArrayList<String>(),
pojo.getCantidadRondas(), pojo.getCantidadMaximaJugadores(), pojo.getNombre(),
EstadoPartida.EN_ESPERA, null);
}
/**
* @param nombreAdmin
* @return un listado de jugadores que solo contiene el nombre dado.
*/
private static List<String> crearListadoJugadores(String nombre) {
List<String> listado = new ArrayList<String>();
listado.add(nombre);
return listado;
}
/**
* @return el administrador.
*/
public String getAdministrador() {
return administrador;
}
/**
* @return los jugadores.
*/
public List<String> getJugadores() {
return jugadores;
}
/**
* @return los espectadores.
*/
public List<String> getEspectadores() {
return espectadores;
}
/**
* @return the cantidadRondas
*/
public int getCantidadRondas() {
return cantidadRondas;
}
/**
* @return the cantidadJugadores
*/
public int getCantidadMaximaJugadores() {
return cantidadMaximaJugadores;
}
/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}
/**
* @return the id
*/
public String getId() {
return id;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (!(getClass().isAssignableFrom(obj.getClass())))
return false;
POJOPartida otro = (POJOPartida)obj;
return otro.administrador.equals(administrador) &&
otro.cantidadMaximaJugadores == cantidadMaximaJugadores &&
otro.cantidadRondas == cantidadRondas &&
otro.espectadores.equals(espectadores) &&
otro.jugadores.equals(jugadores) &&
otro.nombre.equals(nombre) &&
(proyeccion == null ? otro.proyeccion == null : proyeccion.equals(otro.proyeccion));
}
@Override
public String toString() {
return "POJOPartida [administrador=" + administrador + ", jugadores=" + jugadores
+ ", espectadores=" + espectadores + ", cantidadRondas=" + cantidadRondas
+ ", cantidadMaximaJugadores=" + cantidadMaximaJugadores + ", nombre=" + nombre
+ "]";
}
public EstadoPartida getEstado() {
return estado;
}
public ProyeccionTablero getProyeccion() {
return proyeccion;
}
/**
* Establece la proyecci�n de la partida.
* @param proyeccion2
*/
public void setProyeccion(ProyeccionTablero proyeccion) {
this.proyeccion = proyeccion;
}
}