package com.rzg.zombieland.cliente.interfaz;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import org.jdeferred.DoneCallback;
import com.rzg.zombieland.cliente.comunicacion.ServicioCliente;
import com.rzg.zombieland.cliente.comunicacion.peticion.PeticionCreacionPartida;
import com.rzg.zombieland.cliente.meta.Estado;
import com.rzg.zombieland.cliente.misc.RutaImagen;
import com.rzg.zombieland.comunes.comunicacion.pojo.POJOCreacionPartida;
import com.rzg.zombieland.comunes.comunicacion.pojo.POJOPartida;
import com.rzg.zombieland.comunes.comunicacion.respuesta.RespuestaGenerica;
import com.rzg.zombieland.comunes.misc.ParametrosNoValidosException;
import com.rzg.zombieland.comunes.misc.ZombielandException;
/**
* UI de la creaci�n de partida.
*/
public class InterfazCrearPartida extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 875007553477403006L;
/**
* @author Ivan
*/
private JTextField nombrePartida;
private JTextField cantidadJugadores;
private JTextField cantidadRondas;
/**
* Create the frame.
*/
public InterfazCrearPartida() {
setBounds(100, 100, 800, 600);
setBorder(new EmptyBorder(5, 5, 5, 5));
setLayout(null);
JLabel lblCreacinPartida = new JLabel("Personaliza tu Partida");
lblCreacinPartida.setForeground(Color.LIGHT_GRAY);
lblCreacinPartida.setFont(new Font("Verdana", Font.PLAIN, 26));
lblCreacinPartida.setBounds(13, 28, 326, 44);
add(lblCreacinPartida);
JLabel lblLimiteJugadores = new JLabel("Cantidad de Jugadores:");
lblLimiteJugadores.setForeground(Color.WHITE);
lblLimiteJugadores.setFont(new Font("Sylfaen", Font.PLAIN, 16));
lblLimiteJugadores.setBounds(30, 170, 164, 14);
add(lblLimiteJugadores);
JLabel lblLimiteRondas = new JLabel("Cantidad de Rondas:");
lblLimiteRondas.setForeground(Color.WHITE);
lblLimiteRondas.setFont(new Font("Sylfaen", Font.PLAIN, 16));
lblLimiteRondas.setBounds(30, 230, 164, 14);
add(lblLimiteRondas);
JLabel lblNombrePartida = new JLabel("Nombre Partida:");
lblNombrePartida.setForeground(Color.WHITE);
lblNombrePartida.setFont(new Font("Sylfaen", Font.PLAIN, 16));
lblNombrePartida.setBounds(30, 110, 119, 14);
add(lblNombrePartida);
nombrePartida = new JTextField();
nombrePartida.setForeground(Color.WHITE);
nombrePartida.setBackground(Color.DARK_GRAY);
nombrePartida.setBorder(new LineBorder(new Color(51, 102, 255), 2, true));
nombrePartida.setOpaque(false);
nombrePartida.setBounds(200, 110, 170, 20);
add(nombrePartida);
nombrePartida.setColumns(10);
cantidadJugadores = new JTextField();
cantidadJugadores.setHorizontalAlignment(SwingConstants.CENTER);
cantidadJugadores.setOpaque(false);
cantidadJugadores.setForeground(Color.WHITE);
cantidadJugadores.setBackground(Color.DARK_GRAY);
cantidadJugadores.setBorder(new LineBorder(new Color(51, 102, 255), 2, true));
cantidadJugadores.setBounds(200, 170, 170, 20);
add(cantidadJugadores);
cantidadJugadores.setColumns(10);
cantidadRondas = new JTextField();
cantidadRondas.setHorizontalAlignment(SwingConstants.CENTER);
cantidadRondas.setOpaque(false);
cantidadRondas.setForeground(Color.WHITE);
cantidadRondas.setBackground(Color.DARK_GRAY);
cantidadRondas.setBorder(new LineBorder(new Color(51, 102, 255), 2, true));
cantidadRondas.setBounds(200, 230, 170, 20);
add(cantidadRondas);
cantidadRondas.setColumns(10);
JButton btnAceptarCambios = new JButton("Aceptar");
btnAceptarCambios.setBounds(50, 300, 175, 40);
btnAceptarCambios.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
crearPartida();
}
});
add(btnAceptarCambios);
JButton btnCancelarCambios = new JButton("Cancelar");
btnCancelarCambios.setBounds(250, 300, 175, 40);
btnCancelarCambios.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Main.irA(Main.LISTADO_PARTIDAS);
}
});
add(btnCancelarCambios);
JLabel label = new JLabel("RZG - 2015");
label.setForeground(SystemColor.textInactiveText);
label.setBounds(700, 515, 63, 14);
add(label);
JLabel lblFondo = new JLabel("");
lblFondo.setIcon(new ImageIcon(RutaImagen.get("imagenes/Fondos/zombie-fondo.png")));
lblFondo.setBounds(0, 0, 944, 574);
add(lblFondo);
}
/**
* Realiza la petici�n de creaci�n de partida al servidor.
*/
public void crearPartida() {
try {
final POJOCreacionPartida pojo =
new POJOCreacionPartida(Integer.parseInt(cantidadRondas.getText()),
Integer.parseInt(cantidadJugadores.getText()),
nombrePartida.getText());
PeticionCreacionPartida peticion = new PeticionCreacionPartida(pojo);
ServicioCliente.enviarPeticion(peticion);
final Component this_ = this;
peticion.getRespuesta().done(new DoneCallback<RespuestaGenerica>() {
@Override
public void onDone(RespuestaGenerica respuesta) {
if (respuesta.fuePeticionExitosa()) {
POJOPartida estadoLobby =
new POJOPartida(pojo, Estado.getInstancia().getNombreJugador());
Estado.getInstancia().setEstadoLobby(estadoLobby);
Estado.getInstancia().setEspectador(false);
Main.irA(Main.LOBBY);
return;
}
JOptionPane.showMessageDialog(this_,
respuesta.getMensajeError(),
"Creaci�n de partida",
JOptionPane.ERROR_MESSAGE);
}
});
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this,
"Los datos no son v�lidos",
"Creaci�n de partida",
JOptionPane.WARNING_MESSAGE);
} catch (ParametrosNoValidosException e) {
JOptionPane.showMessageDialog(this,
e.getMensaje(),
"Creaci�n de partida",
JOptionPane.WARNING_MESSAGE);
} catch (ZombielandException e) {
JOptionPane.showMessageDialog(this,
e.getMessage(),
"Creaci�n de partida",
JOptionPane.ERROR_MESSAGE);
}
}
}