use of pcgen.core.prereq.Prerequisite in project pcgen by PCGen.
the class TotalCostToken method parseNonEmptyToken.
@Override
protected ParseResult parseNonEmptyToken(LoadContext context, Kit kit, String value) {
ParsingSeparator sep = new ParsingSeparator(value, '|');
sep.addGroupingPair('[', ']');
sep.addGroupingPair('(', ')');
String activeValue = sep.next();
if (looksLikeAPrerequisite(activeValue)) {
return new ParseResult.Fail("Cannot have only PRExxx subtoken in " + getTokenName(), context);
}
Formula f = FormulaFactory.getFormulaFor(activeValue);
if (!f.isValid()) {
return new ParseResult.Fail("Formula in " + getTokenName() + " was not valid: " + f.toString(), context);
}
List<Prerequisite> prereqs = new ArrayList<>();
while (sep.hasNext()) {
activeValue = sep.next();
Prerequisite prereq = getPrerequisite(activeValue);
if (prereq == null) {
return new ParseResult.Fail(" (Did you put total costs after the " + "PRExxx tags in " + getTokenName() + ":?)", context);
}
prereqs.add(prereq);
}
kit.put(ObjectKey.KIT_TOTAL_COST, new QualifiedObject<>(f, prereqs));
return ParseResult.SUCCESS;
}
use of pcgen.core.prereq.Prerequisite in project pcgen by PCGen.
the class TotalCostToken method unparse.
@Override
public String[] unparse(LoadContext context, Kit kit) {
QualifiedObject<Formula> qo = kit.get(ObjectKey.KIT_TOTAL_COST);
if (qo == null) {
return null;
}
Formula f = qo.getRawObject();
List<Prerequisite> prereqs = qo.getPrerequisiteList();
String ab = f.toString();
if (prereqs != null && !prereqs.isEmpty()) {
ab = ab + Constants.PIPE + getPrerequisiteString(context, prereqs);
}
return new String[] { ab };
}
use of pcgen.core.prereq.Prerequisite in project pcgen by PCGen.
the class PreCSkillWriter method specialCase.
@Override
public boolean specialCase(Writer writer, Prerequisite prereq) throws IOException {
PrerequisiteOperator po = getConsolidateMethod(kindHandled(), prereq, false);
if (po == null) {
return false;
}
if (po != prereq.getOperator()) {
writer.write('!');
}
writer.write("PRE" + kindHandled().toUpperCase() + ':' + (prereq.isOverrideQualify() ? "Q:" : ""));
writer.write(po == PrerequisiteOperator.GTEQ ? prereq.getOperand() : "1");
for (Prerequisite p : prereq.getPrerequisites()) {
writer.write(',');
writer.write(p.getKey());
}
return true;
}
use of pcgen.core.prereq.Prerequisite in project pcgen by PCGen.
the class PreCampaignWriter method specialCase.
/**
* @see pcgen.persistence.lst.output.prereq.AbstractPrerequisiteWriter#specialCase(java.io.Writer writer, pcgen.core.prereq.Prerequisite prereq)
*/
@Override
public boolean specialCase(Writer writer, Prerequisite prereq) throws IOException {
PrerequisiteOperator po = getConsolidateMethod(kindHandled(), prereq, false);
if (po == null) {
return false;
}
if (!po.equals(prereq.getOperator())) {
writer.write('!');
}
writer.write("PRE" + kindHandled().toUpperCase() + ':' + (prereq.isOverrideQualify() ? "Q:" : ""));
writer.write(po.equals(PrerequisiteOperator.GTEQ) ? prereq.getOperand() : "1");
for (Prerequisite p : prereq.getPrerequisites()) {
writer.write(',');
writer.write(p.getKey());
}
return true;
}
use of pcgen.core.prereq.Prerequisite in project pcgen by PCGen.
the class PreRuleTester method passes.
/**
* @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.prereq.Prerequisite, pcgen.core.Equipment)
*/
@Override
public int passes(final Prerequisite prereq, final Equipment equipment, PlayerCharacter aPC) throws PrerequisiteException {
int runningTotal = 0;
int targetNumber;
try {
targetNumber = Integer.parseInt(prereq.getOperand());
} catch (NumberFormatException ne) {
// Not an error, just a string
targetNumber = 1;
}
if (Globals.checkRule(prereq.getKey())) {
runningTotal = 1;
}
for (Prerequisite element : prereq.getPrerequisites()) {
final PrerequisiteTestFactory factory = PrerequisiteTestFactory.getInstance();
final PrerequisiteTest test = factory.getTest(element.getKind());
if (test != null) {
runningTotal += test.passes(element, equipment, aPC);
}
}
return countedTotal(prereq, prereq.getOperator().compare(runningTotal, targetNumber));
}
Aggregations