/* * Created on 02-Dec-2003 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package plugin.pretokens.test; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.CDOMReference; import pcgen.cdom.enumeration.ListKey; import pcgen.core.Equipment; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; import pcgen.core.display.CharacterDisplay; import pcgen.core.prereq.AbstractPrerequisiteTest; import pcgen.core.prereq.Prerequisite; import pcgen.core.prereq.PrerequisiteTest; import pcgen.util.Logging; import pcgen.system.LanguageBundle; /** * @author wardc * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class PreClassTester extends AbstractPrerequisiteTest implements PrerequisiteTest { /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) */ @Override public int passes(final Prerequisite prereq, final Equipment equipment, PlayerCharacter aPC) { Logging.debugPrint("PreClass on equipment: " + equipment.getName() + " pre: " + toHtmlString(prereq)); if (aPC == null) { return 0; } return passes(prereq, aPC, equipment); } /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter) */ @Override public int passes(final Prerequisite prereq, final PlayerCharacter character, CDOMObject source) { CharacterDisplay display = character.getDisplay(); int runningTotal = 0; int countedTotal = 0; final boolean sumLevels = prereq.isTotalValues(); final String aString = prereq.getKey().toUpperCase(); final int preClass = Integer.parseInt(prereq.getOperand()); if ("SPELLCASTER".equals(aString)) //$NON-NLS-1$ { int spellCaster = character.isSpellCaster(preClass, sumLevels); if (spellCaster > 0) { if (prereq.isCountMultiples()) { countedTotal = spellCaster; } else { runningTotal = preClass; } } } else if (aString.startsWith("SPELLCASTER.")) //$NON-NLS-1$ { int spellCaster = character.isSpellCaster(aString.substring(12), preClass, sumLevels); if (spellCaster > 0) { if (prereq.isCountMultiples()) { countedTotal = spellCaster; } else { runningTotal = preClass; } } } else if (aString.equals("ANY")) { for (PCClass cl : display.getClassSet()) { if (prereq.isCountMultiples()) { if (display.getLevel(cl) >= preClass) { countedTotal++; } } else { runningTotal = Math.max(runningTotal, display.getLevel(cl)); } } } else if (aString.startsWith("TYPE=") || aString.startsWith("TYPE.")) { String typeString = aString.substring(5); for (PCClass cl : display.getClassSet()) { if (cl.isType(typeString)) { if (prereq.isCountMultiples()) { if (display.getLevel(cl) >= preClass) { countedTotal++; } } else { runningTotal = Math.max(runningTotal, display.getLevel(cl)); } } else { for(CDOMReference<PCClass> ref: cl.getSafeListFor(ListKey.SERVES_AS_CLASS)) { for (PCClass fakeClass : ref.getContainedObjects()) { if (fakeClass.isType(typeString)) { if (prereq.isCountMultiples()) { if (display.getLevel(cl) >= preClass) { countedTotal++; } } else { runningTotal += display.getLevel(cl); } break; } } } } } } else { PCClass aClass = character.getClassKeyed(aString); if (aClass != null) { if (prereq.isCountMultiples()) { if (display.getLevel(aClass) >= preClass) { countedTotal++; } } else { runningTotal += display.getLevel(aClass); } } else { CLASSLIST: for(PCClass theClass: display.getClassSet()) { for (CDOMReference<PCClass> ref : theClass .getSafeListFor(ListKey.SERVES_AS_CLASS)) { for (PCClass fakeClass : ref.getContainedObjects()) { if (fakeClass.getKeyName().equalsIgnoreCase(aString)) { if (prereq.isCountMultiples()) { if (display.getLevel(theClass) >= preClass) { countedTotal++; } } else { runningTotal += display.getLevel(theClass); } break CLASSLIST; } } } } } } runningTotal = prereq.getOperator().compare(runningTotal, preClass); return countedTotal(prereq, prereq.isCountMultiples() ? countedTotal : runningTotal); } /** * Get the type of prerequisite handled by this token. * @return the type of prerequisite handled by this token. */ @Override public String kindHandled() { return "CLASS"; //$NON-NLS-1$ } /* (non-Javadoc) * @see pcgen.core.prereq.PrerequisiteTest#toHtmlString(pcgen.core.prereq.Prerequisite) */ @Override public String toHtmlString(final Prerequisite prereq) { final String level = prereq.getOperand(); final String operator = prereq.getOperator().toDisplayString(); return LanguageBundle.getFormattedString( "PreClass.toHtml", prereq.getKey(), operator, level); //$NON-NLS-1$ } }