package forge.quest.data.pet;
import java.util.*;
/**
* <p>QuestPetManager class.</p>
*
* @author Forge
* @version $Id: $
*/
public class QuestPetManager {
public Map<String, QuestPetAbstract> pets = new HashMap<String, QuestPetAbstract>();
public QuestPetAbstract selectedPet;
public QuestPetAbstract plant;
public boolean usePlant;
/**
* <p>Constructor for QuestPetManager.</p>
*/
public QuestPetManager() {
plant = new QuestPetPlant();
for (QuestPetAbstract pet : getAllPets()) {
addPet(pet);
}
}
/**
* <p>Setter for the field <code>selectedPet</code>.</p>
*
* @param pet a {@link java.lang.String} object.
*/
public void setSelectedPet(String pet) {
selectedPet = (pet == null) ? null : getPet(pet);
}
/**
* <p>Getter for the field <code>selectedPet</code>.</p>
*
* @return a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public QuestPetAbstract getSelectedPet() {
return selectedPet;
}
/**
* <p>Getter for the field <code>plant</code>.</p>
*
* @return a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public QuestPetAbstract getPlant() {
return plant;
}
/**
* <p>addPlantLevel.</p>
*/
public void addPlantLevel() {
if (plant == null) {
plant = new QuestPetPlant();
} else {
plant.incrementLevel();
}
}
/**
* <p>getPet.</p>
*
* @param petName a {@link java.lang.String} object.
* @return a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public QuestPetAbstract getPet(String petName) {
return pets.get(petName);
}
/**
* <p>addPet.</p>
*
* @param newPet a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public void addPet(QuestPetAbstract newPet) {
pets.put(newPet.getName(), newPet);
}
/**
* <p>getPetNames.</p>
*
* @return a {@link java.util.Set} object.
*/
public Set<String> getPetNames() {
return pets.keySet();
}
/**
* <p>addPetLevel.</p>
*
* @param s a {@link java.lang.String} object.
*/
public void addPetLevel(String s) {
pets.get(s).incrementLevel();
}
/**
* <p>shouldPlantBeUsed.</p>
*
* @return a boolean.
*/
public boolean shouldPlantBeUsed() {
return usePlant;
}
/**
* <p>shouldPetBeUsed.</p>
*
* @return a boolean.
*/
public boolean shouldPetBeUsed() {
return selectedPet != null;
}
/**
* <p>getAllPets.</p>
*
* @return a {@link java.util.Set} object.
*/
private static Set<QuestPetAbstract> getAllPets() {
SortedSet<QuestPetAbstract> set = new TreeSet<QuestPetAbstract>();
set.add(new QuestPetBird());
set.add(new QuestPetCrocodile());
set.add(new QuestPetHound());
set.add(new QuestPetWolf());
return set;
}
/**
* <p>getAvailablePetNames.</p>
*
* @return a {@link java.util.Set} object.
*/
public Set<String> getAvailablePetNames() {
SortedSet<String> set = new TreeSet<String>();
for (Map.Entry<String, QuestPetAbstract> pet : pets.entrySet()) {
if (pet.getValue().getLevel() > 0) {
set.add(pet.getKey());
}
}
return set;
}
/**
* <p>getPetsAndPlants.</p>
*
* @return a {@link java.util.Collection} object.
*/
public Collection<QuestPetAbstract> getPetsAndPlants() {
Set<QuestPetAbstract> petsAndPlants = new HashSet<QuestPetAbstract>(pets.values());
petsAndPlants.add(plant);
return petsAndPlants;
}
//Magic to support added pet types when reading saves.
/**
* <p>readResolve.</p>
*
* @return a {@link java.lang.Object} object.
*/
private Object readResolve() {
for (QuestPetAbstract pet : getAllPets()) {
if (!pets.containsKey(pet.getName())) {
addPet(pet);
}
}
return this;
}
}