use of pcgen.core.Domain in project pcgen by PCGen.
the class SpellSupportFacadeImpl method getClassInfo.
/**
* @see pcgen.core.facade.SpellSupportFacade#getClassInfo(pcgen.core.facade.ClassFacade)
*/
@Override
public String getClassInfo(ClassFacade spellcaster) {
if (!(spellcaster instanceof PCClass)) {
return "";
}
PCClass aClass = (PCClass) spellcaster;
SpellSupportForPCClass spellSupport = pc.getSpellSupport(aClass);
int highestSpellLevel = spellSupport.getHighestLevelSpell(pc);
final HtmlInfoBuilder b = new HtmlInfoBuilder();
//$NON-NLS-1$
b.append("<table border=1><tr><td><font size=-2><b>");
//$NON-NLS-1$
b.append(OutputNameFormatting.piString(aClass, false)).append(" [");
b.append(String.valueOf(charDisplay.getLevel(aClass) + //$NON-NLS-1$
(int) pc.getTotalBonusTo("PCLEVEL", aClass.getKeyName())));
//$NON-NLS-1$
b.append("]</b></font></td>");
for (int i = 0; i <= highestSpellLevel; ++i) {
//$NON-NLS-1$
b.append("<td><font size=-2><b><center> ");
b.append(String.valueOf(i));
//$NON-NLS-1$
b.append(" </b></center></font></td>");
}
//$NON-NLS-1$
b.append("</tr>");
//$NON-NLS-1$
b.append("<tr><td><font size=-1><b>Cast</b></font></td>");
for (int i = 0; i <= highestSpellLevel; ++i) {
//$NON-NLS-1$
b.append("<td><font size=-1><center>");
b.append(getNumCast(aClass, i, pc));
//$NON-NLS-1$
b.append("</center></font></td>");
}
//$NON-NLS-1$
b.append("</tr>");
// Making sure KnownList can be handled safely and produces the correct behaviour
if (spellSupport.hasKnownList() || spellSupport.hasKnownSpells(pc)) {
//$NON-NLS-1$
b.append("<tr><td><font size=-1><b>Known</b></font></td>");
for (int i = 0; i <= highestSpellLevel; ++i) {
final int a = spellSupport.getKnownForLevel(i, pc);
final int bonus = spellSupport.getSpecialtyKnownForLevel(i, pc);
//$NON-NLS-1$
b.append("<td><font size=-1><center>");
b.append(String.valueOf(a));
if (bonus > 0) {
b.append('+').append(Integer.toString(bonus));
}
//$NON-NLS-1$
b.append("</center></font></td>");
}
//$NON-NLS-1$
b.append("</tr>");
}
//$NON-NLS-1$
b.append("<tr><td><font size=-1><b>DC</b></font></td>");
for (int i = 0; i <= highestSpellLevel; ++i) {
//$NON-NLS-1$
b.append("<td><font size=-1><center>");
b.append(String.valueOf(getDC(aClass, i, pc)));
//$NON-NLS-1$
b.append("</center></font></td>");
}
//$NON-NLS-1$
b.append("</tr></table>");
//$NON-NLS-1$
b.appendI18nElement("InfoSpells.caster.type", aClass.getSpellType());
b.appendLineBreak();
//$NON-NLS-1$
b.appendI18nElement("InfoSpells.stat.bonus", aClass.getSpellBaseStat());
if (pc.hasAssocs(aClass, AssociationKey.SPECIALTY) || charDisplay.hasDomains()) {
boolean needComma = false;
StringBuilder schoolInfo = new StringBuilder();
String spec = pc.getAssoc(aClass, AssociationKey.SPECIALTY);
if (spec != null) {
schoolInfo.append(spec);
needComma = true;
}
for (Domain d : charDisplay.getSortedDomainSet()) {
if (needComma) {
schoolInfo.append(',');
}
needComma = true;
schoolInfo.append(d.getKeyName());
}
b.appendLineBreak();
//$NON-NLS-1$
b.appendI18nElement("InfoSpells.school", schoolInfo.toString());
}
Set<String> set = new TreeSet<>();
for (SpellProhibitor sp : aClass.getSafeListFor(ListKey.PROHIBITED_SPELLS)) {
set.addAll(sp.getValueList());
}
Collection<? extends SpellProhibitor> prohibList = charDisplay.getProhibitedSchools(aClass);
if (prohibList != null) {
for (SpellProhibitor sp : prohibList) {
set.addAll(sp.getValueList());
}
}
if (!set.isEmpty()) {
b.appendLineBreak();
//$NON-NLS-1$
b.appendI18nElement(//$NON-NLS-1$
"InfoSpells.prohibited.school", //$NON-NLS-1$
StringUtil.join(set, ","));
}
String bString = SourceFormat.getFormattedString(aClass, Globals.getSourceDisplay(), true);
if (bString.length() > 0) {
b.appendLineBreak();
//$NON-NLS-1$
b.appendI18nElement("in_source", bString);
}
return b.toString();
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class CcskillToken method applyChoice.
@Override
public void applyChoice(ChooseDriver obj, Skill skill, PlayerCharacter pc) {
PCClass pcc = pc.getDomainSource((Domain) obj).getPcclass();
pc.addLocalCost(pcc, skill, SkillCost.CROSS_CLASS, obj);
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class CskillToken method applyChoice.
@Override
public void applyChoice(ChooseDriver obj, Skill skill, PlayerCharacter pc) {
PCClass pcc = pc.getDomainSource((Domain) obj).getPcclass();
pc.addLocalCost(pcc, skill, SkillCost.CLASS, obj);
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class PreSpellTester method passes.
/**
* @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 requiredNumber = 0;
try {
requiredNumber = Integer.parseInt(prereq.getOperand());
} catch (NumberFormatException e) {
Logging.errorPrint(LanguageBundle.getString("PreSpell.error.badly_formed_attribute") + //$NON-NLS-1$
prereq.toString());
}
// Build a list of all possible spells
final List<Spell> aArrayList = //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
character.aggregateSpellList("", "", "", 0, 20);
//Needs to add domain spells as well
for (Domain d : display.getDomainSet()) {
aArrayList.addAll(character.getAllSpellsInLists(Collections.singletonList(d.get(ObjectKey.DOMAIN_SPELLLIST))));
}
//Are there Innate Spell-like abilities?
if (character.getAutoSpells()) {
Collection<CDOMReference<Spell>> mods = display.getRace().getListMods(Spell.SPELLS);
if (mods != null) {
for (CDOMReference<Spell> ref : mods) {
aArrayList.addAll(ref.getContainedObjects());
}
}
}
final String spellName = prereq.getKey();
int runningTotal = 0;
for (Spell aSpell : aArrayList) {
if (aSpell != null && aSpell.getKeyName() != null && aSpell.getKeyName().equalsIgnoreCase(spellName)) {
runningTotal++;
}
}
runningTotal = prereq.getOperator().compare(runningTotal, requiredNumber);
return countedTotal(prereq, runningTotal);
}
Aggregations