/* * Copyright (c) 2010 Tom Parker <thpr@users.sourceforge.net> * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package plugin.lsttokens.testsupport; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import pcgen.base.util.DoubleKeyMap; import pcgen.base.util.ListSet; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.Category; import pcgen.cdom.content.CNAbility; import pcgen.cdom.enumeration.CharID; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.enumeration.SkillCost; import pcgen.core.Ability; import pcgen.core.Deity; import pcgen.core.Domain; import pcgen.core.Language; import pcgen.core.PCClass; import pcgen.core.PCTemplate; import pcgen.core.PlayerCharacter; import pcgen.core.Race; import pcgen.core.Skill; import pcgen.core.WeaponProf; import pcgen.core.display.CharacterDisplay; public class TransparentPlayerCharacter extends PlayerCharacter { public final TransparentCharacterDisplay display; public Set<WeaponProf> weaponProfSet = new ListSet<>(); public Set<CNAbility> abilitySet = new ListSet<>(); public Set<PCTemplate> templateSet = new ListSet<>(); public Map<Skill, Integer> skillSet = new HashMap<>(); public Race race = null; public int spellcastinglevel = -1; public Set<Race> qualifiedSet = new ListSet<>(); public DoubleKeyMap<Skill, PCClass, SkillCost> skillCostMap = new DoubleKeyMap<>(); public Map<PCClass, Integer> classMap = new LinkedHashMap<>(); public TransparentPlayerCharacter() { super(); display = new TransparentCharacterDisplay(getCharID()); } public class TransparentCharacterDisplay extends CharacterDisplay { public TransparentCharacterDisplay(CharID id) { super(id); } public Deity deity = null; public Set<Domain> domainSet = new ListSet<>(); public Set<Language> languageSet = new ListSet<>(); @Override public Deity getDeity() { return deity; } @Override public Set<Domain> getDomainSet() { return domainSet; } @Override public Set<Language> getLanguageSet() { return languageSet; } @Override public Set<PCClass> getClassSet() { return classMap.keySet(); } @Override public Race getRace() { return race; } // @Override // public SkillCost skillCostForPCClass(Skill sk, PCClass aClass) // { // SkillCost sc = skillCostMap.get(sk, aClass); // if (sc == null) // { // if (sk.getSafe(ObjectKey.EXCLUSIVE)) // { // return SkillCost.EXCLUSIVE; // } // return SkillCost.CROSS_CLASS; // } // return sc; // } // @Override public Set<Skill> getSkillSet() { return (skillSet == null) ? new ListSet<>() : skillSet.keySet(); } // @Override // public boolean isClassSkill(PCClass aClass, Skill sk) // { // return SkillCost.CLASS.equals(skillCostMap.get(sk, aClass)); // } // @Override public Set<WeaponProf> getWeaponProfSet() { return weaponProfSet; } @Override public Set<PCTemplate> getTemplateSet() { return templateSet; } @Override public Float getRank(Skill sk) { return ((skillSet == null) || (skillSet.get(sk) == null)) ? 0.0f : new Float(skillSet.get(sk)); } } @Override public Set<PCTemplate> getTemplateSet() { return templateSet; } @Override public Set<Skill> getSkillSet() { return (skillSet == null) ? new ListSet<>() : skillSet.keySet(); } @Override public boolean isClassSkill(PCClass aClass, Skill sk) { return SkillCost.CLASS.equals(skillCostMap.get(sk, aClass)); } @Override public SkillCost skillCostForPCClass(Skill sk, PCClass aClass) { SkillCost sc = skillCostMap.get(sk, aClass); if (sc == null) { if (sk.getSafe(ObjectKey.EXCLUSIVE)) { return SkillCost.EXCLUSIVE; } return SkillCost.CROSS_CLASS; } return sc; } @Override public Race getRace() { return race; } @Override public boolean isSpellCaster(int level) { return (level <= spellcastinglevel); } @Override public Float getRank(Skill sk) { return ((skillSet == null) || (skillSet.get(sk) == null)) ? 0.0f : new Float(skillSet.get(sk)); } @Override public boolean isQualified(CDOMObject po) { return qualifiedSet.contains(po); } @Override public CharacterDisplay getDisplay() { return display; } @Override public Set<PCClass> getClassSet() { return classMap.keySet(); } @Override public ArrayList<PCClass> getClassList() { return new ArrayList<>(classMap.keySet()); } @Override public Float getMaxRank(Skill sk, PCClass cl) { return new Float(classMap.get(cl) + 3); } @Override public List<CNAbility> getCNAbilities(Category<Ability> cat) { List<CNAbility> list = new ArrayList<>(); for (CNAbility cna : abilitySet) { if (cna.getAbilityCategory().equals(cat)) { list.add(cna); } } return list; } }