package game.model.inventory;
import beans.enumeration.InventoryMode;
import beans.enumeration.TypeEquipment;
import beans.serializable.Equipment;
import game.entity.Fighter;
import game.model.ListModel;
import game.view.inventory.InventoryEquipmentScreen;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Modele de l'inventaire d'equipement
* @see InventoryEquipmentScreen
* @author mastersnes
*/
public class InventoryEquipmentModel extends InventoryModelPatern {
//Equipement du joueur
private final Map<TypeEquipment, Equipment> typeEquipmentsMap;
//Liste d'affichage des types dequipement
private final ListModel typeEquipmentsArray = new ListModel(20);
//Liste d'affichage des equipements
private final ListModel equipmentsArray = new ListModel(20);
private boolean sousList = false;
//Joueur courant
private final Fighter selectedFighter;
public InventoryEquipmentModel() {
//Initialisation de la sous liste permettant de recuperer
//les differents equipement dans l'inventaire
listModel = new ListModel(10);
//On recupere l'equipement du joueur
selectedFighter = fighterListModel.get(currentFighter);
typeEquipmentsMap = selectedFighter.getEquipment();
//On initialise la liste d'equipement avec ceux deja en base
updateEquipmentArray();
//On desactive le curseur pour la liste des equipement car il est deja sur la liste de type dequipement
equipmentsArray.setCursorDisplayable(false);
//On active la bordure pour la sous liste
listModel.setBordure(true);
}
@Override
public InventoryMode EnterRequest() {
// On recupere le type d'equipement
final TypeEquipment currentType = TypeEquipment.getMap().get(typeEquipmentsArray.getSelected());
// Puis la liste des equipements filtrés du joueur
final List<Equipment> listEquipment = selectedFighter.getStat().getListEquipment(currentType);
if (sousList) {
//Si nous etions dans la sous liste on recupere l'equipement choisie
final Equipment currentEquipment = listEquipment.get(listModel.getCurrentPosition());
//Puis on l'applique au type correspondant
typeEquipmentsMap.put(currentType, currentEquipment);
resetCursor();
sousList = false;
//Et on recalcule la liste d'affichage de lequipement
updateEquipmentArray();
} else {
//Si nous n'etions pas dans la sous liste on active la sous liste et on laffiche
listModel.clear();
for (final Equipment equipment : listEquipment) {
listModel.add(equipment.getName());
}
if (!listModel.isEmpty()) {
sousList = true;
}
}
//Et on retourne au meme endroit
return InventoryMode.SAME;
}
@Override
public InventoryMode back() {
if (sousList) {
sousList = false;
return InventoryMode.SAME;
} else {
return InventoryMode.MENU;
}
}
@Override
public void moveCursor(final int x, final int y) {
if (!sousList) {
typeEquipmentsArray.updateCursorPosition(x, y);
equipmentsArray.updateCursorPosition(x, y);
} else {
listModel.updateCursorPosition(x, y);
}
}
@Override
public void resetCursor() {
listModel.resetCursor();
}
/**
* A t'on choisis un type d'equipement à poser?
* @return
*/
public boolean isSousList() {
return sousList;
}
/**
* Renvoie le model associé à la liste des type d'equipements
* @return
*/
public ListModel getTypeEquipmentArray() {
return typeEquipmentsArray;
}
/**
* Renvoie le couple typeEquipement / equipement
* @return
*/
public Map<TypeEquipment, Equipment> getTypeEquipmentsMap() {
return typeEquipmentsMap;
}
/**
* Renvoie le model associé à la liste des d'equipements
* @return
*/
public ListModel getEquipmentsArray() {
return equipmentsArray;
}
/**
* Recalcule la liste d'equipement associé aux types
*/
private void updateEquipmentArray() {
final List<String> listEquipments = new ArrayList<String>();
final List<String> listTypeEquipments = new ArrayList<String>();
for (final TypeEquipment typeEquipment : TypeEquipment.values()) {
final Equipment equipment = typeEquipmentsMap.get(typeEquipment);
if (equipment != null) {
listEquipments.add(equipment.getName());
} else {
listEquipments.add(" ");
}
listTypeEquipments.add(typeEquipment.toString());
}
equipmentsArray.setModel(listEquipments);
typeEquipmentsArray.setModel(listTypeEquipments);
}
}