<commit_before>package frames;

import java.awt.Color;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import com.google.gson.Gson;

import cliente.Cliente;
import juego.Pantalla;
import mensajeria.Comando;

/**
 * The Class MenuAsignarSkills.
 */
public class MenuAsignarSkills extends JFrame implements MenuGenerico {

    private static final int SEPARATOR = 20;
    private static final int FILA_SEPARATOR_4 = 100;
    private static final int FILA_SEPARATOR_3 = 55;
    private static final int FILA_SEPARATOR_2 = 217;
    private static final int FILA_SEPARATOR = 155;
    private static final int COLUMNA_SEPARADOR_4 = 150;
    private static final int COLUMNA_SEPARADOR_3 = 12;
    private static final int COLUMNA_SEPARADOR_2 = 200;
    private static final int COLUMNA_SEPARADOR = 50;
    private static final int ATRIBUTO_MAX = 200;
    private static final int PUNTOS_ASIGNAR_INICIALES = 3;
    private static final int ATRIBUTO_GANANCIA = 5;
    private static final int ATRIBUTO_BASE = 10;
    private static final int FRAME_ALTO = 350;
    private static final int FRAME_ANCHO = 400;
    private static final int BOTON_ALTO = 23;
    private static final int BOTON_ANCHO = 110;
    private static final int FUENTE_SIZE = 15;
    private static final int LABEL_ALTO = 25;
    private static final int LABEL_ANCHO = 100;
    private static final int BOTON_CHICO_ANCHO = 34;

    private JPanel contentPane;
    private int puntosAsignarInicial = ATRIBUTO_BASE;
    private int puntosFuerzaInicial = 0;
    private int puntosDestrezaInicial = 0;
    private int puntosInteligenciaInicial = 0;
    private int puntosAsignar = puntosAsignarInicial;
    private int puntosFuerza = puntosFuerzaInicial;
    private int puntosDestreza = puntosDestrezaInicial;
    private int puntosInteligencia = puntosInteligenciaInicial;
    private final Gson gson = new Gson();

    /**
     * Declaracion de Botones.
     */
    private final JButton buttonConfirm = new JButton("Confirmar");
    private final JButton buttonCancel = new JButton("Cancelar");
    private final JButton buttonRestart = new JButton("Reiniciar");
    private final JButton buttonMinus = new JButton("");
    private final JButton buttonMinus1 = new JButton("");
    private final JButton buttonMinus2 = new JButton("");
    private final JButton buttonMore = new JButton("");
    private final JButton buttonMore1 = new JButton("");
    private final JButton buttonMore2 = new JButton("");

    /**
     * Create the frame.
     *
     * @param cliente
     *            the cliente
     */
    public MenuAsignarSkills(final Cliente cliente) {
        puntosAsignarInicial = cliente.getPaquetePersonaje().getPuntosSkill();
        puntosFuerzaInicial = cliente.getPaquetePersonaje().getFuerza();
        puntosDestrezaInicial = cliente.getPaquetePersonaje().getDestreza();
        puntosInteligenciaInicial = cliente.getPaquetePersonaje().getInteligencia();
        puntosAsignar = puntosAsignarInicial;
        puntosFuerza = puntosFuerzaInicial;
        puntosDestreza = puntosDestrezaInicial;
        puntosInteligencia = puntosInteligenciaInicial;

        if (cliente.getPaquetePersonaje().getNivel() == 1) {
            buttonRestart.setEnabled(false);
        }
        if (puntosAsignar == 0) {
            buttonMore.setEnabled(false);
            buttonMore1.setEnabled(false);
            buttonMore2.setEnabled(false);
            buttonMinus.setEnabled(false);
            buttonMinus1.setEnabled(false);
            buttonMinus2.setEnabled(false);
        } else if (puntosAsignar != 0) {
            buttonMinus.setEnabled(true);
            buttonMinus1.setEnabled(true);
            buttonMinus2.setEnabled(true);
            buttonMinus.setEnabled(true);
            buttonMinus1.setEnabled(true);
            buttonMinus2.setEnabled(true);
        }

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(FRAME_ANCHO, FRAME_ALTO);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        //contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        setIconImage(Toolkit.getDefaultToolkit().getImage("recursos//1up.png"));
        setTitle("Asignar");
        //setBounds(100, 100, 298, 294);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //getContentPane().setLayout(null);
        setVisible(true);
        setLocationRelativeTo(null);
        setResizable(false);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(final WindowEvent arg0) {
                Pantalla.menuAsignar = null;
                dispose();
            }
        });

        final JLabel labelFuerza = new JLabel("");
        labelFuerza.setForeground(Color.WHITE);
        labelFuerza.setHorizontalAlignment(SwingConstants.CENTER);
        labelFuerza.setText(String.valueOf(puntosFuerzaInicial));

        final JLabel labelDestreza = new JLabel("");
        labelDestreza.setForeground(Color.WHITE);
        labelDestreza.setHorizontalAlignment(SwingConstants.CENTER);
        labelDestreza.setText(String.valueOf(puntosDestrezaInicial));

        final JLabel labelInteligencia = new JLabel("");
        labelInteligencia.setForeground(Color.WHITE);
        labelInteligencia.setHorizontalAlignment(SwingConstants.CENTER);
        labelInteligencia.setText(String.valueOf(puntosInteligenciaInicial));

        final JLabel labelPuntos = new JLabel("");
        labelPuntos.setForeground(Color.WHITE);
        labelPuntos.setHorizontalAlignment(SwingConstants.CENTER);
        labelPuntos.setText(String.valueOf(puntosAsignarInicial));

        final JLabel lblCantidadDePuntos = new JLabel("Cantidad de Puntos a Asignar");
        lblCantidadDePuntos.setForeground(Color.WHITE);

        final JLabel lblInteligencia = new JLabel("Inteligencia");
        lblInteligencia.setForeground(Color.WHITE);
        lblInteligencia.setHorizontalAlignment(SwingConstants.CENTER);

        JLabel lblDestreza = new JLabel("Destreza");
        lblDestreza.setForeground(Color.WHITE);
        lblDestreza.setHorizontalAlignment(SwingConstants.CENTER);

        final JLabel lblFuerza = new JLabel("Fuerza");
        lblFuerza.setForeground(Color.WHITE);
        lblFuerza.setHorizontalAlignment(SwingConstants.CENTER);

        ImageIcon iconoConfirm = new ImageIcon("recursos//botonMenu.png");
        buttonConfirm.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonConfirm.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonConfirm.setFont(new Font("Arial", Font.PLAIN, FUENTE_SIZE));
        buttonConfirm.setForeground(Color.WHITE);
        buttonConfirm.setIcon(iconoConfirm);
        buttonConfirm.setEnabled(false);
        buttonConfirm.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                puntosAsignarInicial = puntosAsignar;
                int bonusF = puntosFuerza - puntosFuerzaInicial;
                int bonusD = puntosDestreza - puntosDestrezaInicial;
                int bonusI = puntosInteligencia - puntosInteligenciaInicial;
                cliente.getPaquetePersonaje().setPuntosSkill(puntosAsignar);
                cliente.getPaquetePersonaje().useBonus(0, 0, bonusF, bonusD, bonusI);
                cliente.getPaquetePersonaje().removerBonus();
                cliente.getPaquetePersonaje().setComando(Comando.ACTUALIZARPERSONAJELV);
                try {
                    cliente.getSalida().writeObject(gson.toJson(cliente.getPaquetePersonaje()));
                } catch (IOException e1) {
                    JOptionPane.showMessageDialog(null, "Error al actualizar stats");

                }
                JOptionPane.showMessageDialog(null, "Se han actualizado tus atributos.");
                Pantalla.menuAsignar = null;
                dispose();
            }
        });

        ImageIcon iconoCancel = new ImageIcon("recursos//botonMenu.png");
        buttonCancel.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonCancel.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonCancel.setFont(new Font("Arial", Font.PLAIN, FUENTE_SIZE));
        buttonCancel.setForeground(Color.WHITE);
        buttonCancel.setIcon(iconoCancel);
        buttonCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent arg0) {
                Pantalla.menuAsignar = null;
                dispose();
            }
        });

        /*
         * El boton de restart se encarga de colocar los puntos de skill
         * determinados dependiendo del nivel que posea el personaje y de la
         * Casta. Ademas se encarga de obtener los puntos de Skill
         * correspondientes para poder volverlos a asigar.<commit_msg>puntos de skill corregidos<commit_after>package frames;

import java.awt.Color;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import com.google.gson.Gson;

import cliente.Cliente;
import juego.Pantalla;
import mensajeria.Comando;

/**
 * The Class MenuAsignarSkills.
 */
public class MenuAsignarSkills extends JFrame implements MenuGenerico {

    private static final int SEPARATOR = 20;
    private static final int FILA_SEPARATOR_4 = 100;
    private static final int FILA_SEPARATOR_3 = 55;
    private static final int FILA_SEPARATOR_2 = 217;
    private static final int FILA_SEPARATOR = 155;
    private static final int COLUMNA_SEPARADOR_4 = 150;
    private static final int COLUMNA_SEPARADOR_3 = 12;
    private static final int COLUMNA_SEPARADOR_2 = 200;
    private static final int COLUMNA_SEPARADOR = 50;
    private static final int ATRIBUTO_MAX = 200;
    private static final int PUNTOS_ASIGNAR_INICIALES = 3;
    private static final int ATRIBUTO_GANANCIA = 5;
    private static final int ATRIBUTO_BASE = 10;
    private static final int FRAME_ALTO = 350;
    private static final int FRAME_ANCHO = 400;
    private static final int BOTON_ALTO = 23;
    private static final int BOTON_ANCHO = 110;
    private static final int FUENTE_SIZE = 15;
    private static final int LABEL_ALTO = 25;
    private static final int LABEL_ANCHO = 100;
    private static final int BOTON_CHICO_ANCHO = 34;

    private JPanel contentPane;
    private int puntosAsignarInicial = ATRIBUTO_BASE;
    private int puntosFuerzaInicial = 0;
    private int puntosDestrezaInicial = 0;
    private int puntosInteligenciaInicial = 0;
    private int puntosAsignar = puntosAsignarInicial;
    private int puntosFuerza = puntosFuerzaInicial;
    private int puntosDestreza = puntosDestrezaInicial;
    private int puntosInteligencia = puntosInteligenciaInicial;
    private final Gson gson = new Gson();

    /**
     * Declaracion de Botones.
     */
    private final JButton buttonConfirm = new JButton("Confirmar");
    private final JButton buttonCancel = new JButton("Cancelar");
    private final JButton buttonRestart = new JButton("Reiniciar");
    private final JButton buttonMinus = new JButton("");
    private final JButton buttonMinus1 = new JButton("");
    private final JButton buttonMinus2 = new JButton("");
    private final JButton buttonMore = new JButton("");
    private final JButton buttonMore1 = new JButton("");
    private final JButton buttonMore2 = new JButton("");

    /**
     * Create the frame.
     *
     * @param cliente
     *            the cliente
     */
    public MenuAsignarSkills(final Cliente cliente) {
        puntosAsignarInicial = cliente.getPaquetePersonaje().getPuntosSkill();
        puntosFuerzaInicial = cliente.getPaquetePersonaje().getFuerza();
        puntosDestrezaInicial = cliente.getPaquetePersonaje().getDestreza();
        puntosInteligenciaInicial = cliente.getPaquetePersonaje().getInteligencia();
        puntosAsignar = puntosAsignarInicial;
        puntosFuerza = puntosFuerzaInicial;
        puntosDestreza = puntosDestrezaInicial;
        puntosInteligencia = puntosInteligenciaInicial;

        if (cliente.getPaquetePersonaje().getNivel() == 1) {
            buttonRestart.setEnabled(false);
        }
        if (puntosAsignar == 0) {
            buttonMore.setEnabled(false);
            buttonMore1.setEnabled(false);
            buttonMore2.setEnabled(false);
            buttonMinus.setEnabled(false);
            buttonMinus1.setEnabled(false);
            buttonMinus2.setEnabled(false);
        } else if (puntosAsignar != 0) {
            buttonMinus.setEnabled(true);
            buttonMinus1.setEnabled(true);
            buttonMinus2.setEnabled(true);
            buttonMinus.setEnabled(true);
            buttonMinus1.setEnabled(true);
            buttonMinus2.setEnabled(true);
        }

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(FRAME_ANCHO, FRAME_ALTO);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        //contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        setIconImage(Toolkit.getDefaultToolkit().getImage("recursos//1up.png"));
        setTitle("Asignar");
        //setBounds(100, 100, 298, 294);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //getContentPane().setLayout(null);
        setVisible(true);
        setLocationRelativeTo(null);
        setResizable(false);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(final WindowEvent arg0) {
                Pantalla.menuAsignar = null;
                dispose();
            }
        });

        final JLabel labelFuerza = new JLabel("");
        labelFuerza.setForeground(Color.WHITE);
        labelFuerza.setHorizontalAlignment(SwingConstants.CENTER);
        labelFuerza.setText(String.valueOf(puntosFuerzaInicial));

        final JLabel labelDestreza = new JLabel("");
        labelDestreza.setForeground(Color.WHITE);
        labelDestreza.setHorizontalAlignment(SwingConstants.CENTER);
        labelDestreza.setText(String.valueOf(puntosDestrezaInicial));

        final JLabel labelInteligencia = new JLabel("");
        labelInteligencia.setForeground(Color.WHITE);
        labelInteligencia.setHorizontalAlignment(SwingConstants.CENTER);
        labelInteligencia.setText(String.valueOf(puntosInteligenciaInicial));

        final JLabel labelPuntos = new JLabel("");
        labelPuntos.setForeground(Color.WHITE);
        labelPuntos.setHorizontalAlignment(SwingConstants.CENTER);
        labelPuntos.setText(String.valueOf(puntosAsignarInicial));

        final JLabel lblCantidadDePuntos = new JLabel("Cantidad de Puntos a Asignar");
        lblCantidadDePuntos.setForeground(Color.WHITE);

        final JLabel lblInteligencia = new JLabel("Inteligencia");
        lblInteligencia.setForeground(Color.WHITE);
        lblInteligencia.setHorizontalAlignment(SwingConstants.CENTER);

        JLabel lblDestreza = new JLabel("Destreza");
        lblDestreza.setForeground(Color.WHITE);
        lblDestreza.setHorizontalAlignment(SwingConstants.CENTER);

        final JLabel lblFuerza = new JLabel("Fuerza");
        lblFuerza.setForeground(Color.WHITE);
        lblFuerza.setHorizontalAlignment(SwingConstants.CENTER);

        ImageIcon iconoConfirm = new ImageIcon("recursos//botonMenu.png");
        buttonConfirm.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonConfirm.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonConfirm.setFont(new Font("Arial", Font.PLAIN, FUENTE_SIZE));
        buttonConfirm.setForeground(Color.WHITE);
        buttonConfirm.setIcon(iconoConfirm);
        buttonConfirm.setEnabled(false);
        buttonConfirm.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                puntosAsignarInicial = puntosAsignar;
                int bonusF = puntosFuerza - puntosFuerzaInicial;
                int bonusD = puntosDestreza - puntosDestrezaInicial;
                int bonusI = puntosInteligencia - puntosInteligenciaInicial;
                cliente.getPaquetePersonaje().setPuntosSkill(puntosAsignar);
                cliente.getPaquetePersonaje().useBonus(0, 0, bonusF, bonusD, bonusI);
                cliente.getPaquetePersonaje().removerBonus();
                cliente.getPaquetePersonaje().setComando(Comando.ACTUALIZARPERSONAJE);
                try {
                    cliente.getSalida().writeObject(gson.toJson(cliente.getPaquetePersonaje()));
                } catch (IOException e1) {
                    JOptionPane.showMessageDialog(null, "Error al actualizar stats");

                }
                JOptionPane.showMessageDialog(null, "Se han actualizado tus atributos.");
                Pantalla.menuAsignar = null;
                dispose();
            }
        });

        ImageIcon iconoCancel = new ImageIcon("recursos//botonMenu.png");
        buttonCancel.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonCancel.setHorizontalTextPosition(SwingConstants.CENTER);
        buttonCancel.setFont(new Font("Arial", Font.PLAIN, FUENTE_SIZE));
        buttonCancel.setForeground(Color.WHITE);
        buttonCancel.setIcon(iconoCancel);
        buttonCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent arg0) {
                Pantalla.menuAsignar = null;
                dispose();
            }
        });

        /*
         * El boton de restart se encarga de colocar los puntos de skill
         * determinados dependiendo del nivel que posea el personaje y de la
         * Casta. Ademas se encarga de obtener los puntos de Skill
         * correspondientes para poder volverlos a asigar.
{'fraction_non_alphanumeric': 0.08390859956119227, 'fraction_numerical': 0.010274522395248033, 'mean_word_length': 3.046773495019489, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '814266', 'n_tokens_mistral': 5748, 'n_tokens_neox': 5495, 'n_words': 1100}