use of pcgen.core.Race in project pcgen by PCGen.
the class RaceTypeFacetTest method testGetFromTemplateSecondOverrides.
@Test
public void testGetFromTemplateSecondOverrides() {
Race r = new Race();
r.put(ObjectKey.RACETYPE, TEST_RACE_TYPE);
rfacet.set(id, r);
assertSame(TEST_RACE_TYPE, facet.getRaceType(id));
PCTemplate t = new PCTemplate();
t.setName("PCT");
t.put(ObjectKey.RACETYPE, RACE_TYPE_TOO);
tfacet.add(id, t, this);
assertSame(RACE_TYPE_TOO, facet.getRaceType(id));
PCTemplate t2 = new PCTemplate();
t2.setName("Other");
t2.put(ObjectKey.RACETYPE, LAST_RACE_TYPE);
tfacet.add(id, t2, this);
assertSame(LAST_RACE_TYPE, facet.getRaceType(id));
tfacet.remove(id, t, this);
assertSame(LAST_RACE_TYPE, facet.getRaceType(id));
tfacet.add(id, t, this);
assertSame(RACE_TYPE_TOO, facet.getRaceType(id));
tfacet.remove(id, t, this);
assertSame(LAST_RACE_TYPE, facet.getRaceType(id));
tfacet.remove(id, t2, this);
assertSame(TEST_RACE_TYPE, facet.getRaceType(id));
}
use of pcgen.core.Race in project pcgen by PCGen.
the class QualifiedQualifierTokenTest method initializeObjects.
private void initializeObjects() {
s1 = new Race();
s1.setName("s1");
primaryContext.getReferenceContext().importObject(s1);
s2 = new Race();
s2.setName("s2");
primaryContext.getReferenceContext().importObject(s2);
primaryContext.unconditionallyProcess(s2, "TYPE", "Masterful");
Race s3 = new Race();
s3.setName("s3");
primaryContext.getReferenceContext().importObject(s3);
primaryContext.unconditionallyProcess(s3, "TYPE", "Masterful");
}
use of pcgen.core.Race in project pcgen by PCGen.
the class EncounterPlugin method generateXofYEL.
/**
* Generates creatures for an encounter based on a specified Encounter
* Level and number of creatures.
* @param size the number of creatures needed for encounter.
* @param totalEL total experience level.
*/
private void generateXofYEL(String size, String totalEL) {
File f = new File(getDataDirectory() + File.separator + DIR_ENCOUNTER + File.separator + "4_1.xml");
ReadXML xml;
VectorTable table41;
Random roll = new Random(System.currentTimeMillis());
List<Race> critters = new ArrayList<>();
if (!f.exists()) {
//$NON-NLS-1$
Logging.errorPrintLocalised("in_plugin_encounter_error_missing", f);
return;
}
xml = new ReadXML(f);
if ((table41 = xml.getTable()) == null) {
Logging.errorPrint("ACK! error getting table41! " + f.toString());
return;
}
xml = null;
f = null;
// verrify values on the table.
String crs = (String) table41.crossReference(totalEL, size);
table41 = null;
if (crs == null) {
Logging.errorPrint("Tables do not match the given parameters (" + totalEL + ", " + size + ')');
return;
}
Formula crFormula = FormulaFactory.getFormulaFor(crs);
if (!crFormula.isValid()) {
Logging.errorPrint("CR Formula " + crs + " was not valid: " + crFormula.toString());
}
ChallengeRating cr = new ChallengeRating(crFormula);
// populate critters with a list of matching monsters with the right CR.
for (final Race race : Globals.getContext().getReferenceContext().getConstructedCDOMObjects(Race.class)) {
if (cr.equals(race.get(ObjectKey.CHALLENGE_RATING))) {
critters.add(race);
}
}
int i = roll.nextInt(critters.size());
for (int x = 0; x < Integer.parseInt(size); x++) {
theModel.addElement(critters.get(i).toString());
}
}
use of pcgen.core.Race in project pcgen by PCGen.
the class EncounterPlugin method handleRace.
private boolean handleRace(PlayerCharacter aPC, int number) {
Race race = Globals.getContext().getReferenceContext().silentlyGetConstructedCDOMObject(Race.class, (String) theModel.getElementAt(number));
if (race == null) {
return false;
}
aPC.setRace(race);
aPC.setName(race.toString());
return true;
}
use of pcgen.core.Race in project pcgen by PCGen.
the class PreRaceTester method passes.
/**
* @see pcgen.core.prereq.PrerequisiteTest#passes(pcgen.core.PlayerCharacter)
*/
@Override
public int passes(final Prerequisite prereq, final CharacterDisplay display, CDOMObject source) {
final int reqnumber = Integer.parseInt(prereq.getOperand());
final String requiredRace = prereq.getKey();
int runningTotal = 0;
final Race pcRace = display.getRace();
Set<Race> racesImitated = getRacesImitatedBy(pcRace);
if (//$NON-NLS-1$ //$NON-NLS-2$
requiredRace.startsWith("TYPE=") || requiredRace.startsWith("TYPE.")) {
StringTokenizer tok = new StringTokenizer(requiredRace.substring(5), ".");
String type;
boolean match = false;
int count = 0;
int matchCount = 0;
while (tok.hasMoreTokens()) {
count++;
match = false;
type = tok.nextToken();
if (pcRace.isType(type)) {
matchCount++;
match = true;
continue;
}
if (!match) {
for (Race mock : racesImitated) {
if (mock.isType(type)) {
matchCount++;
match = true;
break;
}
}
}
}
if (count == matchCount) {
++runningTotal;
}
} else if (//$NON-NLS-1$ //$NON-NLS-2$
requiredRace.startsWith("RACETYPE=") || requiredRace.startsWith("RACETYPE.")) {
String raceToMatch = requiredRace.substring(9);
String raceType = display.getRaceType();
boolean isMatchingRaceType = raceType.equalsIgnoreCase(requiredRace.substring(9)) ? true : false;
if (isMatchingRaceType) {
++runningTotal;
} else {
for (Race mock : racesImitated) {
RaceType mockRaceType = mock.get(ObjectKey.RACETYPE);
if (mockRaceType != null && mockRaceType.toString().equalsIgnoreCase(raceToMatch)) {
++runningTotal;
}
}
}
} else if (requiredRace.startsWith("RACESUBTYPE=") || requiredRace.startsWith("RACESUBTYPE.")) {
final String reqType = requiredRace.substring(12);
RaceSubType st = RaceSubType.getConstant(reqType);
if (display.containsRacialSubType(st)) {
++runningTotal;
}
if (runningTotal == 0) {
for (Race mock : racesImitated) {
if (mock.containsInList(ListKey.RACESUBTYPE, st)) {
++runningTotal;
break;
}
}
}
} else {
final String characterRace = pcRace == null ? Constants.NONESELECTED : pcRace.getKeyName();
final int wild = requiredRace.indexOf('%');
if (wild == 0) {
//
if (!characterRace.equalsIgnoreCase(Constants.NONESELECTED)) {
++runningTotal;
}
} else if (wild > 0) {
if (characterRace.regionMatches(true, 0, requiredRace, 0, wild)) {
++runningTotal;
} else {
runningTotal += checkForServesAsRaceWildcard(requiredRace, wild, racesImitated);
}
} else {
if (characterRace.equalsIgnoreCase(requiredRace)) {
++runningTotal;
} else {
for (Race mock : racesImitated) {
if (mock.getDisplayName().equalsIgnoreCase(requiredRace)) {
++runningTotal;
break;
}
}
}
}
}
if (runningTotal > reqnumber) {
runningTotal = reqnumber;
}
runningTotal = prereq.getOperator().compare(runningTotal, reqnumber);
return countedTotal(prereq, runningTotal);
}
Aggregations