use of pcgen.core.Vision in project pcgen by PCGen.
the class PreVisionTest method testVisionZeroZero.
/**
* @throws Exception
*/
public void testVisionZeroZero() throws Exception {
final PlayerCharacter character = getCharacter();
final PCTemplate template = new PCTemplate();
final Prerequisite prereq = new Prerequisite();
prereq.setKind("vision");
prereq.setKey("darkvision");
prereq.setOperator(PrerequisiteOperator.GTEQ);
prereq.setOperand("0");
boolean passes = PrereqHandler.passes(prereq, character, null);
assertTrue(passes);
template.putToList(Vision.VISIONLIST, CDOMDirectSingleRef.getRef(new Vision(VisionType.getVisionType("Darkvision"), FormulaFactory.ZERO)), new SimpleAssociatedObject());
character.addTemplate(template);
passes = PrereqHandler.passes(prereq, character, null);
assertTrue(passes);
}
use of pcgen.core.Vision in project pcgen by PCGen.
the class PreVisionTest method testVisionFail.
/**
* @throws Exception
*/
public void testVisionFail() throws Exception {
final PlayerCharacter character = getCharacter();
final PCTemplate template = new PCTemplate();
template.putToList(Vision.VISIONLIST, CDOMDirectSingleRef.getRef(new Vision(VisionType.getVisionType("Normal"), FormulaFactory.getFormulaFor(60))), new SimpleAssociatedObject());
character.addTemplate(template);
final Prerequisite prereq = new Prerequisite();
prereq.setKind("vision");
prereq.setKey("darkvision");
prereq.setOperator(PrerequisiteOperator.GTEQ);
prereq.setOperand("30");
final boolean passes = PrereqHandler.passes(prereq, character, null);
assertFalse(passes);
}
use of pcgen.core.Vision in project pcgen by PCGen.
the class VisionLst method unparse.
@Override
public String[] unparse(LoadContext context, CDOMObject obj) {
AssociatedChanges<CDOMReference<Vision>> changes = context.getListContext().getChangesInList(getTokenName(), obj, Vision.VISIONLIST);
List<String> list = new ArrayList<>();
Collection<CDOMReference<Vision>> removedItems = changes.getRemoved();
if (changes.includesGlobalClear()) {
if (removedItems != null && !removedItems.isEmpty()) {
context.addWriteMessage("Non-sensical relationship in " + getTokenName() + ": global .CLEAR and local .CLEAR. performed");
return null;
}
list.add(Constants.LST_DOT_CLEAR);
} else if (removedItems != null && !removedItems.isEmpty()) {
list.add(Constants.LST_DOT_CLEAR_DOT + ReferenceUtilities.joinLstFormat(removedItems, "|.CLEAR."));
}
MapToList<CDOMReference<Vision>, AssociatedPrereqObject> mtl = changes.getAddedAssociations();
if (mtl != null && !mtl.isEmpty()) {
MapToList<Set<Prerequisite>, Vision> m = new HashMapToList<>();
for (CDOMReference<Vision> ab : mtl.getKeySet()) {
for (AssociatedPrereqObject assoc : mtl.getListFor(ab)) {
m.addAllToListFor(new HashSet<>(assoc.getPrerequisiteList()), ab.getContainedObjects());
}
}
Set<String> set = new TreeSet<>();
for (Set<Prerequisite> prereqs : m.getKeySet()) {
StringBuilder sb = new StringBuilder(StringUtil.join(m.getListFor(prereqs), Constants.PIPE));
if (prereqs != null && !prereqs.isEmpty()) {
sb.append(Constants.PIPE);
sb.append(getPrerequisiteString(context, prereqs));
}
set.add(sb.toString());
}
list.addAll(set);
}
if (list.isEmpty()) {
return null;
}
return list.toArray(new String[list.size()]);
}
use of pcgen.core.Vision in project pcgen by PCGen.
the class VisionDisplay method getVision.
public static String getVision(final PlayerCharacter aPC, CDOMObject cdo) {
if (aPC == null) {
return "";
}
Collection<CDOMReference<Vision>> mods = cdo.getListMods(Vision.VISIONLIST);
if (mods == null) {
return "";
}
StringBuilder visionString = new StringBuilder(25);
for (CDOMReference<Vision> ref : mods) {
for (Vision v : ref.getContainedObjects()) {
if (visionString.length() > 0) {
visionString.append(';');
}
visionString.append(v.toString(aPC));
}
}
return visionString.toString();
}
use of pcgen.core.Vision in project pcgen by PCGen.
the class PreVisionTester method passes.
/**
* @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter)
*/
@Override
public int passes(final Prerequisite prereq, final CharacterDisplay display, CDOMObject source) {
String range = prereq.getOperand();
VisionType requiredVisionType = VisionType.getVisionType(prereq.getKey());
int runningTotal = 0;
if (range.equals("ANY")) {
Vision v = display.getVision(requiredVisionType);
if (v == null) {
runningTotal += prereq.getOperator().compare(0, 1);
} else {
runningTotal += prereq.getOperator().compare(1, 0);
}
} else {
int requiredRange = Integer.parseInt(range);
Vision v = display.getVision(requiredVisionType);
if (v == null) {
runningTotal += prereq.getOperator().compare(0, requiredRange);
} else {
int visionRange = Integer.parseInt(v.getDistance().toString());
runningTotal += prereq.getOperator().compare(visionRange, requiredRange);
}
}
return countedTotal(prereq, runningTotal);
}
Aggregations