001import java.util.Stack;
002//import java.util.HashMap;
003
004/**
005 * Classe player servant à personnaliser le jeu : nom du joueur, pièce de départ pouvant être choisie, etc.
006 *
007 * @author Alban FERRACANI
008 * @version 04-2021
009 */
010public class Player
011{
012    //Attributs
013    private String   aNomJoueur;
014    private Room     aCurrentRoom;
015    private UserInterface aGui;
016    private Stack<Room>   aStackPreviousRoom; 
017    //private HashMap<String, Item> aInventory;
018    private ItemList    aInventory;
019    private double aItemPoidsMax; 
020    private double aPoids; 
021    private double aPoidsActuel;
022    private int    aInputCounter; 
023    
024
025    /**
026     * Constructeur naturel d'objets de classe Player
027     */
028    public Player(final String pNomJoueur, final Room pCurrentRoom)
029    {
030        // initialisation des variables d'instance
031        this.aNomJoueur = pNomJoueur;
032        this.aCurrentRoom = pCurrentRoom; 
033        this.aStackPreviousRoom = new Stack <Room>();  
034        //this.aInventory = new HashMap<String, Item>();
035        this.aInventory = new ItemList();
036        this.aPoids=700;//Poids du joueur
037        //this.aItemPoidsMax = 2865;  //Poids max pouvant être porté par le joueur
038        this.aItemPoidsMax = 2865;  //Poids max pouvant être porté par le joueur
039        this.aPoidsActuel = this.aPoids; 
040        this.aInputCounter = 0; 
041        
042    }
043    
044    // Accesseur et modificateur du nom du joueur
045    /**
046     *  Accesseur du nom du joueur
047     */
048    public String getNomJoueur(){
049        return this.aNomJoueur;
050    } //getNomJoueur()
051    
052    /**
053     *  Modificateur du nom du joueur
054     */
055    public void setNomJoueur(final String pNomJoueur ){
056        this.aNomJoueur= pNomJoueur;
057    } //setNomJoueur()
058    
059    // Accesseur et modificateur de l'emplacement actuel
060    /**
061     * Accesseur de l'emplacement actuel
062     */
063    public Room getCurrentRoom(){
064        return this.aCurrentRoom;
065    } // getCurrentRoom()
066    
067    /**
068     * Modificateur de l'emplacement actuel
069     */
070    public void setCurrentRoom(final Room pCurrentRoom ){
071        this.aCurrentRoom = pCurrentRoom;
072    } //setCurrentRoom()
073    
074    //Accesseur et modificateur de l'emplacement précédent
075    /**
076     * Accesseur de l'emplacement précédent
077     */
078    public Stack<Room> getStackPreviousRoom(){
079        return this.aStackPreviousRoom;
080    } //getStackPreviousRoom()
081    
082    /**
083     * Modificateur de l'emplacement précédent
084     */
085    public void setStackPreviousRoom(final Room pPreviousRoom ){
086        this.aStackPreviousRoom.push(pPreviousRoom); 
087    } //setStackPreviousRoom()
088    
089    /**
090     * getItemsDescriptionPlayer() : retourne une string contenant la description des items du joueur.
091     */
092    public String getItemsDescriptionPlayer()
093    {
094        String vTest = this.aInventory.getItemStringInventaire();
095        return vTest; 
096    } //getItemsDescriptionPlayer()
097    
098    /** 
099     * goRoomPlayer 
100     */
101    public void goRoomPlayer(final Room pRoom) 
102    {
103        this.aStackPreviousRoom.push(this.aCurrentRoom);
104        this.aCurrentRoom = pRoom;
105    } //goRoomPlayer()
106    
107    /** 
108     * Back player - complète la procédure back de game engine.
109     */
110    public void backPlayer() 
111    {
112        this.aCurrentRoom = this.aStackPreviousRoom.pop();
113    } //backPlayer() 
114   
115    // Take et drop pour prendre et lacher les items
116    /**
117     * Take item pour prendre l'item de la pièce
118     */
119    public void takeItem(final String pDescriptionItem, final Item pItem)
120    {
121        //this.aInventory.put(pDescriptionItem, pItem);
122        this.aInventory.putItem(pDescriptionItem, pItem);
123        this.aPoidsActuel += pItem.getPoids();
124    } //takeItem
125    
126    /**
127     * Drop item pour lacher un objet pris
128     */
129    public void dropItem(final String pDescriptionItem, final Item pItem)
130    {
131        //this.aInventory.remove(pDescriptionItem);
132        this.aInventory.removeItem(pDescriptionItem);
133        this.aPoidsActuel -= pItem.getPoids();
134    } //dropItem
135    
136    
137    /**
138     * getItem accesseur 
139     */
140    public Item getItem(final String pDescriptionItem)
141    {
142        return this.aInventory.getCurrentItem(pDescriptionItem);
143    } //getItem()
144    
145    
146    //Accesseur et modificateur du poids max de l'item que le joueur peut porter.
147    /**
148     * Accesseur  du poids max de l'item que le joueur peut porter.
149     */
150    public double getItemPoidsMax() {
151        return this.aItemPoidsMax;
152    } //getItemPoidsMax()
153    
154    /**
155     * Modificateur du poids max de l'item que le joueur peut porter.
156     */
157    public void setItemPoidsMax(final double pItemPoidsMax) {
158        this.aItemPoidsMax = pItemPoidsMax;
159    } //setItemPoidsMax()
160    
161    
162    /**
163     * Méthode booléenne pour voir si l'item est trop lourd à porter ou non (poids du joueur inclus).
164     */
165    public boolean tooHeavyItem(final double pWeight){
166        return (pWeight + this.aPoids <= this.aItemPoidsMax);
167    } //tooHeavyItem()
168    
169    //Accesseur et modificateurs du poids total du joueur avec les items
170    /**
171     * Accesseur du poids total du joueur avec les items
172     */
173    public double getPoidsPlayer() {
174        return this.aPoidsActuel;
175    } //getPoidsPlayer()
176    
177    /**
178     * Modificateur du poids total du joueur avec les items
179     */
180    public void setPoidsPlayer(final double pPoidsJoueur) {
181         this.aPoidsActuel = pPoidsJoueur;
182    } //setPoidsPlayer()
183    
184    //Accesseurs et modificateurs du compteur d'entrées 
185    /**
186     * Accesseur du compteur d'entrées / de saisies.
187     */
188    public int getInputCounter() {
189        return this.aInputCounter;
190    } //getInputCounter()
191    
192    /**
193     * Modificateurs du compteur d'entrées / de saisies.
194     */
195    public void setInputCounter(final int pInputCounter) {
196        this.aInputCounter = pInputCounter;
197    } //setInputCounter()
198
199}