Package game.view.fight

Source Code of game.view.fight.ListPerso

package game.view.fight;

import beans.core.GeneralConstant;
import beans.enumeration.Stat;
import game.entity.Fighter;
import game.model.ListModel;
import game.model.fight.ListPersoModel;
import game.view.Displayable;
import game.view.ListScreen;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

/**
* Vues des personnages utilisables en combat par le joueur.
*
* @author Alexandre
* @since Game 1.0
* @version ListPerso 1.0
*/
public class ListPerso implements Observer, Displayable {

    private List<ListScreen> fightersStats = new ArrayList<ListScreen>();
    private ListPersoModel listPersoModel;
    /**
     * Longueur de l'image représentant la liste.
     *
     * @since ListPerso 1.0
     */
    public final int SIZE_X = GeneralConstant.TAILLE_ECRAN_X / 2;
    /**
     * Largeur de l'image représentant la liste.
     *
     * @since ListPerso 1.0
     */
    public final int SIZE_Y = 200;

    /**
     * Créer la vue des personnages utilisables en combat par le joueur.
     *
     * @param fighters La liste des combattants.
     * @param toDisplay Le nombre de personnages à afficher en même temps.
     * @since ListPerso 1.0
     * @see Fighter
     */
    public ListPerso(final ListPersoModel listPersoModel) {
        this.listPersoModel = listPersoModel;
       
        listPersoModel.addObserver(this);

        ListScreen list = new ListScreen(new ListModel(listPersoModel.getToDisplay()));
        fightersStats.add(list);

        list = new ListScreen(new ListModel(listPersoModel.getToDisplay()));
        list.displayCursor(false);
        fightersStats.add(list);



        list = new ListScreen(new ListModel(listPersoModel.getToDisplay()));
        list.displayCursor(false);
        fightersStats.add(list);




        fightersStats.get(0).getListModel().setHead("Name");
        fightersStats.get(1).getListModel().setHead(Stat.HP.name().toLowerCase());
        fightersStats.get(2).getListModel().setHead(Stat.MP.name().toLowerCase());
        // Pour chaque personnage
        for (final Fighter current : listPersoModel.getFightersList()) {
            // Observer ce combattant
            //current.addObserver(this);

            fightersStats.get(0).getListModel().add(current.getName());
            fightersStats.get(1).getListModel().add(current.getStat().getCurrentHP().toString() + " / " + current.getStat().getTotalHPMax().toString());
            fightersStats.get(2).getListModel().add(current.getStat().getCurrentMP().toString() + " / " + current.getStat().getTotalMPMax().toString());
        }
    }

    /**
     * Met à jour le contenu de la liste correspondant à la caractéristique mis
     * à jour.
     *
     * @param updatedStat La caractéristique mise à jour.
     * @since ListPerso 1.0
     * @see Fighter
     */
    private void updateList(final Stat updatedStat) {
        if (updatedStat != null) {
            int indexStat = 0;

            switch (updatedStat) {
                case HP:
                    indexStat = 1;
                    break;
                case MP:
                    indexStat = 2;
                    break;
            }

            fightersStats.set(indexStat, new ListScreen(new ListModel(listPersoModel.getToDisplay())));
               
            fightersStats.get(indexStat).getListModel().add(updatedStat.name().toLowerCase());
            // Pour chaque personnage
            for (final Fighter current : listPersoModel.getFightersList()) {

                // Regarder quelle stat a été mise à jour
                switch (updatedStat) {
                    // Si HP
                    case HP:
                        // Ajouter ses HPs dans la liste des HPs
                        fightersStats.get(1).getListModel().add(current.getStat().getCurrentHP().toString() + "/" + current.getStat().getTotalHPMax().toString());
                        break;
                    // Si MP
                    case MP:
                        // Ajouter ses MP dans la liste des HPs
                        fightersStats.get(2).getListModel().add(current.getStat().getCurrentMP().toString() + "/" + current.getStat().getTotalMPMax().toString());
                        break;
                }
            }
        }
    }

    /**
     * Renvoie l'image correspondant à la liste des personnages ainsi que leurs
     * statistiques courantes.
     *
     * @return L'image affichant les stats du personnage
     * @since ListPerso 1.0
     */
    @Override
    public Image getImage() {
        //Initialiser l'affichage
        final BufferedImage image = new BufferedImage(SIZE_X, SIZE_Y, BufferedImage.TYPE_INT_ARGB);
        final Graphics2D graphic = image.createGraphics();

        graphic.setColor(Color.red);
        graphic.fillRect(0, 0, SIZE_X, SIZE_Y);

        int i = 0;
        int previewMaxSize = 0;
        for (final ListScreen entry : fightersStats) {
            graphic.drawImage(entry.getImage(), i * (previewMaxSize + 20), 0, null);
            i++;
            previewMaxSize = entry.getImage().getWidth(null);
        }

        // Fin du dessin
        graphic.dispose();
        return image;
    }

    /**
     * Mettre à jour la liste.
     *
     * @param o Le modèle mis à jour (un objet de classe Fighter).
     * @param arg Les paramètres de modification. Doit être un Stat.
     * @since ListPerso 1.0
     */
    @Override
    public void update(final Observable o, final Object arg) {
        listPersoModel = (ListPersoModel)o;
        final int previewCursorPosition = fightersStats.get(0).getListModel().getCurrentPosition();
        fightersStats.get(0).getListModel().updateCursorPosition(0, listPersoModel.getCurrentPersoIndex() - previewCursorPosition);
    }
}
TOP

Related Classes of game.view.fight.ListPerso

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.