package game.model.inventory;
import beans.enumeration.InventoryMode;
import game.model.GameModel;
import java.util.Observable;
/**
* Modele principale de l'inventaire, il se chargera de deleguer les differents
* changements recu au modele de l'ecran courant.
*
* @author mastersnes
*/
public class InventoryModel extends Observable {
private GameModel gameModel;
private final InventoryExitModel inventoryExitModel;
private final InventoryObjetModel inventoryItemModel;
private InventoryMenuModel inventoryMenuModel;
private final InventoryOptionModel inventoryOptionModel;
private final InventorySaveModel inventorySaveModel;
private final InventorySkillModel inventorySkillModel;
private final InventorySpellModel inventorySpellModel;
private final InventoryStatModel inventoryStatModel;
private final InventoryEquipmentModel inventoryEquipmentModel;
private InventoryModelPatern currentInventory;
/**
* Constructeur du modele d'inventaire, initialise les differents
* sous-modeles
*
* @param gameModel
* @since InventoryModel 1.0
*/
public InventoryModel(final GameModel gameModel) {
this.gameModel = gameModel;
InventoryModelPatern.setFighterListModel(gameModel.getPlayer().getEquipe());
inventoryExitModel = new InventoryExitModel();
inventoryItemModel = new InventoryObjetModel();
inventoryMenuModel = new InventoryMenuModel();
inventoryOptionModel = new InventoryOptionModel();
inventorySaveModel = new InventorySaveModel();
inventorySkillModel = new InventorySkillModel();
inventorySpellModel = new InventorySpellModel();
inventoryStatModel = new InventoryStatModel();
inventoryEquipmentModel = new InventoryEquipmentModel();
setCurrentInventory(inventoryMenuModel);
}
/**
* Deplace le curseur du sous-modele courant
* @param x
* @param y
* @since InventoryModel 1.0
*/
public void moveCursor(final int x, final int y) {
currentInventory.moveCursor(x, y);
gameModel.inventoryHasChanged();
}
/**
* Demande au sous-modele courant de revenir en arriere
* Si le mode recupéré est null on quitte linventaire
* @since InventoryModel 1.0
*/
public void back() {
//On recupere le mode d'inventaire qui precede l'inventaire courant
final InventoryMode mode = currentInventory.back();
//Si le mode est null on quitte l'inventaire
if (mode == null) {
backToGame();
return;
}
//Sinon on redirige vers l'inventaire recherché
switch (mode) {
case EXIT:
setCurrentInventory(inventoryExitModel);
break;
case STAT:
setCurrentInventory(inventoryStatModel);
break;
case ITEM:
setCurrentInventory(inventoryItemModel);
break;
case MENU:
setCurrentInventory(inventoryMenuModel);
break;
case OPTION:
setCurrentInventory(inventoryOptionModel);
break;
case SAVE:
setCurrentInventory(inventorySaveModel);
break;
case SKILL:
setCurrentInventory(inventorySkillModel);
break;
case SPELL:
setCurrentInventory(inventorySpellModel);
break;
case EQUIPMENT:
setCurrentInventory(inventoryEquipmentModel);
break;
default:
setCurrentInventory(inventoryMenuModel);
break;
}
}
/**
* Demande au sous-modele courant de gerer l'appuie sur la touche entrée
* Si le mode recupéré est null, on quitte le jeu
* @since InventoryModel 1.0
*/
public void EnterRequest() {
//On recupere le mode d'inventaire suivant
final InventoryMode mode = currentInventory.EnterRequest();
//si c'est null on quitte le jeu
if (mode == null) {
gameModel.stop();
return;
}
//Sinon on redirige
switch (mode) {
case EXIT:
setCurrentInventory(inventoryExitModel);
break;
case STAT:
setCurrentInventory(inventoryStatModel);
break;
case ITEM:
setCurrentInventory(inventoryItemModel);
break;
case MENU:
setCurrentInventory(inventoryMenuModel);
break;
case OPTION:
setCurrentInventory(inventoryOptionModel);
break;
case SAVE:
setCurrentInventory(inventorySaveModel);
break;
case SKILL:
setCurrentInventory(inventorySkillModel);
break;
case SPELL:
setCurrentInventory(inventorySpellModel);
break;
case EQUIPMENT:
setCurrentInventory(inventoryEquipmentModel);
break;
default:
setChanged();
notifyObservers();
gameModel.inventoryHasChanged();
break;
}
}
/**
* Retour à l'ecran de jeu
* @since InventoryModel 1.0
*/
public void backToGame() {
gameModel.switchInventory();
}
/**
* Renvoie le sous-modele courant
* @return le sous-modèle courant
* @since InventoryModel 1.0
*/
public InventoryModelPatern getCurrentModel() {
return currentInventory;
}
/**
* Renvoie le modele relatif au menu principal
* @return Le menu principal
* @since InventoryModel 1.0
*/
public InventoryMenuModel getMenuModel() {
return inventoryMenuModel;
}
/**
* Renvoie le modele relatif au menu des objets
* @return Le menu des objets
* @since InventoryModel 1.0
*/
public InventoryObjetModel getItemModel() {
return inventoryItemModel;
}
/**
* Renvoie le modele relatif au menu des sorts
* @return Le menu des sorts
* @since InventoryModel 1.0
*/
public InventorySpellModel getSpellModel() {
return inventorySpellModel;
}
/**
* Renvoie le modele relatif au menu des competences
* @return Le menu des sorts
* @since InventoryModel 1.0
*/
public InventorySkillModel getSkillModel() {
return inventorySkillModel;
}
/**
* Renvoie le modele relatif au menu pour quitter le jeu
* @return Le menu pour quitter le jeu
* @since InventoryModel 1.0
*/
public InventoryExitModel getExitModel() {
return inventoryExitModel;
}
/**
* Renvoie le modele relatif au menu de stat
* @return Le menu pour quitter le jeu
* @since InventoryModel 1.0
*/
public InventoryStatModel getStatModel() {
return inventoryStatModel;
}
/**
* Renvoie le modele relatif au menu d'equipement
* @return Le menu pour quitter le jeu
* @since InventoryModel 1.0
*/
public InventoryEquipmentModel getEquipmentModel() {
return inventoryEquipmentModel;
}
/**
* Renvoie le modele relatif aux options
* @return Le menu pour quitter le jeu
* @since InventoryModel 1.0
*/
public InventoryOptionModel getOptionModel() {
return inventoryOptionModel;
}
/**
* Reinitialise l'inventaire sur l'ecran de menu
* @since InventoryModel 1.0
*/
public void reset() {
setCurrentInventory(inventoryMenuModel);
}
private void setCurrentInventory(final InventoryModelPatern inventory) {
currentInventory = inventory;
currentInventory.resetCursor();
setChanged();
notifyObservers();
gameModel.inventoryHasChanged();
}
//FIXME : test!
public void hit() {
InventoryModelPatern.fighterListModel.get(InventoryModelPatern.currentFighter).regainHP(-5);
}
}