Package game.model.fight

Source Code of game.model.fight.FightModel

package game.model.fight;

import beans.enumeration.Target;
import beans.serializable.ChangeStatut;
import game.core.event.Event;
import game.core.event.FightEvent;
import game.entity.Fighter;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

/**
* Modèle représentant un combat.
*
* Ce modèle comprents 2 groupes : le groupe du joueur et le groupe des adversaires.
* Le groupe du joueur se décompose en 3 sous-groupes : <ul>
* <li>Les combattants du joueur, accessibles de façon permanents</li>
* <li>Les alliés temporaires jouables, accessibles uniquement pour ce combat</li>
* <li>Les alliés temporaires non-jouables, accessibles uniquement pour ce combat</li>
* </ul>
* @author Alexandre
* @version FigthModel 1.0
* @since Game 1.0
*/
public class FightModel extends Observable {

    /**
     * Listes de combattants appartenant aux joueurs (qui gagneront de l'XP).
     *
     * @since FightModel 1.0
     * @see Fighter
     */
    private List<Fighter> fighters;
    /**
     * Listes de combattants aidant le joueurs mais non jouable.
     *
     * @since FightModel 1.0
     * @see Fighter
     */
    private List<Fighter> nonPlayableAllies;
    /**
     * Liste de combattants aidant le joueur et jouable (ne reçoit pas d'XP).
     *
     * @since FightModel 1.0
     * @see Fighter
     */
    private List<Fighter> playableAllies;
    /**
     * Liste de combattants affrontant l'équipe du joueur.
     *
     * @since FightModel 1.0
     * @see Fighter
     */
    private List<Fighter> ennemies;
    /**
     * Liste des persos
     */
    private ListPersoModel listPersoModel;

    /**
     * Créer un combat.
     *
     * @param fighters
     * @param nonPlayableAllies
     * @param playableAllies
     * @since GameModel 1.0
     * @see Fighter
     */
    public FightModel(final List<Fighter> fighters, final List<Fighter> nonPlayableAllies, final List<Fighter> playableAllies, final List<Fighter> ennemies) {
        this.fighters = fighters;
        this.nonPlayableAllies = nonPlayableAllies;
        this.playableAllies = playableAllies;
        this.ennemies = ennemies;
        listPersoModel = new ListPersoModel(this);
        Event.setFightEvent(new FightEvent(this));
    }

    /**
     * Récupérer un combattant dans un groupe ciblé.
     *
     * @param who Le combattant à chercher.
     * @param whichGroup Dans quel groupe le chercher.
     * @return Le combattant,
     * <code>null</code> si non trouvé.
     * @since GameModel 1.0
     * @see Fighter
     * @see Target
     */
    public Fighter getFighter(final Fighter who, final Target whichGroup) {
        // Index du combattant à modifier
        int index;
        // Valeur de retour
        Fighter ret = null;

        // Regarder dans quel type de groupe le combattant est
        switch (whichGroup) {
            // C'est un allié
            case ALLY:
            case GROUP:
                // Récupérer l'index du combattant dans la liste des combattants du joueur
                index = fighters.indexOf(who);
                // Si non trouvé
                if (index < 0) {
                    // Récupérer dans la liste des alliés jouables
                    index = playableAllies.indexOf(who);
                    // Si non trouvé
                    if (index < 0) {
                        // Récupérer dans la liste des alliés PnJ
                        index = nonPlayableAllies.indexOf(who);
                        // Si non trouvé
                        if (index < 0) {
                            // Renvoyer une erreur (combattant non trouvé)
                            // TODO: Ecrire dans le fichier de logs l'erreur
                        } // Sinon
                        else {
                            // Appliquer le changement de statut
                            ret = nonPlayableAllies.get(index);
                        }
                    } // Sinon
                    else {
                        // Appliquer le changement de statut
                        ret = playableAllies.get(index);
                    }
                } // Sinon
                else {
                    // Appliquer le changement de statut
                    ret = fighters.get(index);
                }
                break;
            // C'est un ennemi
            case ENEMIES:
            case ENEMY:
                // Récupérer dans la liste des ennemis
                index = ennemies.indexOf(who);
                // Si non trouvé
                if (index < 0) {
                    // Renvoyer une erreur (combattant non trouvé)
                    // TODO: Ecrire dans le fichier de logs l'erreur
                } // Sinon
                else {
                    // Appliquer le changement de statut
                    ret = ennemies.get(index);
                }
                break;
            // Cas par défaut
            default:
                // Renvoyer une erreur (type de groupe invalide)
                // TODO: Ecrire dans le fichier de logs l'erreur
                break;
        }

        // Renvoyer le personnage trouvé
        return ret;
    }
   
    /**
     * Récupérer la liste des combattants d'un groupe.
     * @param whichGroup Le groupe à récupérer.
     * @return  La liste des combattants de ce groupe.
     * @since FightModel 1.0
     * @see Fighter
     */
    public List<Fighter> getFighters(final Target whichGroup){
        // Liste retourné
        List<Fighter> ret = new ArrayList<Fighter>();
       
        // Regarder le type de groupe souhaité
        switch (whichGroup) {
            // C'est un allié
            case ALLY:
            case GROUP:
               // Ajouter les combattants du joueur
                ret.addAll(fighters);
               // Ajouter les PnJ jouables
                ret.addAll(playableAllies);
               // Ajouter les PnJ non jouables
                ret.addAll(nonPlayableAllies);
                break;
            // C'est un ennemi
            case ENEMIES:
            case ENEMY:
               // Ajouter les ennemis
                ret.addAll(ennemies);
            // Cas par défaut
            default:
                // Renvoyer une erreur (type de groupe invalide)
                // TODO: Ecrire dans le fichier de logs l'erreur
                break;
        }
       
        return ret;
    }

    /**
     * Appliquer un changement de statut pour un combattant.
     *
     * @param who Le combattant sur lequel appliquer les changements
     * @param whichGroup Dans quel groupe est le combattant
     * @param changeStatus Les changements à appliquer
     * @since FightModel 1.0
     * @see Fighter
     * @see Target
     * @see ChangeStatut
     */
    public void changeStatus(final Fighter who, final Target whichGroup, final List<ChangeStatut> changeStatus) {
        // Récupérer le combattant
        final Fighter toChange = getFighter(who, whichGroup);
        // Si non trouvé
        if (toChange == null) {
            // Renvoyer une erreur
            // TODO: Ecrire dans le fichier de logs l'erreur
        } // Sinon
        else {
            // Appliquer les changements
            toChange.appliqueChangeStatut(changeStatus);
        }
       
        // Notifier d'un changement
        setChanged();
        notifyObservers();
    }

    /**
     * Appliquer un changement de statut pour des combattant d'un même groupe.
     *
     * @param who Les combattant sur lequel appliquer les changements
     * @param whichGroup Dans quel groupe est le combattant
     * @param changeStatus Les changements à appliquer
     * @since FightModel 1.0
     * @see Fighter
     * @see Target
     * @see ChangeStatut
     */
    public void changeStatus(final List<Fighter> who, final Target whichGroup, final List<ChangeStatut> changeStatus) {
        // Pour chaque combattant
        for (final Fighter toChange : who) {
            // Appliquer le changement
            changeStatus(toChange, whichGroup, changeStatus);
        }
    }

    public ListPersoModel getListPersoModel() {
        return listPersoModel;
    }

    public void escape() {
       
    }

    public void listPersoHasChanged (final ListPersoModel listPersoModel) {
        this.listPersoModel = listPersoModel;
        setChanged();
        notifyObservers();
    }
}
TOP

Related Classes of game.model.fight.FightModel

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.