Search in sources :

Example 91 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class CompanionListLst method parseTokenWithSeparator.

@Override
protected ParseResult parseTokenWithSeparator(LoadContext context, CDOMObject obj, String value) {
    if (obj instanceof Ungranted) {
        return new ParseResult.Fail("Cannot use " + getTokenName() + " on an Ungranted object type: " + obj.getClass().getSimpleName(), context);
    }
    StringTokenizer tok = new StringTokenizer(value, LstUtils.PIPE);
    String companionType = tok.nextToken();
    if (!tok.hasMoreTokens()) {
        return new ParseResult.Fail(getTokenName() + " requires more than just a Type: " + value, context);
    }
    String list = tok.nextToken();
    ParseResult pr = checkForIllegalSeparator(',', list);
    if (!pr.passed()) {
        return pr;
    }
    StringTokenizer subTok = new StringTokenizer(list, LstUtils.COMMA);
    Set<CDOMReference<Race>> races = new HashSet<>();
    boolean foundAny = false;
    while (subTok.hasMoreTokens()) {
        String tokString = subTok.nextToken();
        if (Constants.LST_ANY.equalsIgnoreCase(tokString)) {
            foundAny = true;
            races.add(context.getReferenceContext().getCDOMAllReference(Race.class));
        } else if (tokString.startsWith("RACETYPE=")) {
            String raceType = tokString.substring(9);
            if (raceType.isEmpty()) {
                return new ParseResult.Fail(getTokenName() + " Error: RaceType was not specified.", context);
            }
            races.add(new ObjectMatchingReference<>(tokString, Race.class, context.getReferenceContext().getCDOMAllReference(Race.class), ObjectKey.RACETYPE, RaceType.getConstant(raceType)));
        } else if (tokString.startsWith("RACESUBTYPE=")) {
            String raceSubType = tokString.substring(12);
            if (raceSubType.isEmpty()) {
                return new ParseResult.Fail(getTokenName() + " Error: RaceSubType was not specified.", context);
            }
            races.add(new ListMatchingReference<>(tokString, Race.class, context.getReferenceContext().getCDOMAllReference(Race.class), ListKey.RACESUBTYPE, RaceSubType.getConstant(raceSubType)));
        } else if (looksLikeAPrerequisite(tokString)) {
            return new ParseResult.Fail(getTokenName() + " Error: " + tokString + " found where companion race expected.", context);
        } else {
            races.add(context.getReferenceContext().getCDOMReference(Race.class, tokString));
        }
    }
    if (foundAny && races.size() > 1) {
        return new ParseResult.Fail("Non-sensical Race List includes Any and specific races: " + value, context);
    }
    if (!tok.hasMoreTokens()) {
        // No other args, so we're done
        finish(context, obj, companionType, races, null, null);
        return ParseResult.SUCCESS;
    }
    // The remainder of the elements are optional.
    Integer followerAdjustment = null;
    String optArg = tok.nextToken();
    while (true) {
        if (optArg.startsWith(FOLLOWERADJUSTMENT)) {
            if (followerAdjustment != null) {
                return new ParseResult.Fail(getTokenName() + " Error: Multiple " + FOLLOWERADJUSTMENT + " tags specified.", context);
            }
            int faStringLength = FOLLOWERADJUSTMENT.length();
            if (optArg.length() <= faStringLength + 1) {
                return new ParseResult.Fail("Empty FOLLOWERADJUSTMENT value in " + getTokenName() + " is prohibited", context);
            }
            String adj = optArg.substring(faStringLength + 1);
            try {
                followerAdjustment = Integer.valueOf(adj);
            } catch (NumberFormatException nfe) {
                ComplexParseResult cpr = new ComplexParseResult();
                cpr.addErrorMessage("Expecting a number for FOLLOWERADJUSTMENT: " + adj);
                cpr.addErrorMessage("  was parsing Token " + getTokenName());
                return cpr;
            }
        } else if (looksLikeAPrerequisite(optArg)) {
            break;
        } else {
            return new ParseResult.Fail(getTokenName() + ": Unknown argument (was expecting FOLLOWERADJUSTMENT: or PRExxx): " + optArg, context);
        }
        if (!tok.hasMoreTokens()) {
            // No prereqs, so we're done
            finish(context, obj, companionType, races, followerAdjustment, null);
            return ParseResult.SUCCESS;
        }
        optArg = tok.nextToken();
    }
    List<Prerequisite> prereqs = new ArrayList<>();
    while (true) {
        Prerequisite prereq = getPrerequisite(optArg);
        if (prereq == null) {
            return new ParseResult.Fail("   (Did you put items after the " + "PRExxx tags in " + getTokenName() + ":?)", context);
        }
        prereqs.add(prereq);
        if (!tok.hasMoreTokens()) {
            break;
        }
        optArg = tok.nextToken();
    }
    finish(context, obj, companionType, races, followerAdjustment, prereqs);
    return ParseResult.SUCCESS;
}
Also used : ComplexParseResult(pcgen.rules.persistence.token.ComplexParseResult) ParseResult(pcgen.rules.persistence.token.ParseResult) ArrayList(java.util.ArrayList) ComplexParseResult(pcgen.rules.persistence.token.ComplexParseResult) Ungranted(pcgen.cdom.base.Ungranted) StringTokenizer(java.util.StringTokenizer) Race(pcgen.core.Race) CDOMReference(pcgen.cdom.base.CDOMReference) ObjectMatchingReference(pcgen.cdom.reference.ObjectMatchingReference) HashSet(java.util.HashSet) Prerequisite(pcgen.core.prereq.Prerequisite)

Example 92 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class CompanionListLst method finish.

private void finish(LoadContext context, CDOMObject obj, String companionType, Set<CDOMReference<Race>> races, Integer followerAdjustment, List<Prerequisite> prereqs) {
    context.getReferenceContext().constructIfNecessary(CompanionList.class, companionType);
    CDOMSingleRef<CompanionList> ref = context.getReferenceContext().getCDOMReference(CompanionList.class, companionType);
    for (CDOMReference<Race> race : races) {
        final FollowerOption option = new FollowerOption(race, ref);
        if (prereqs != null && !prereqs.isEmpty()) {
            option.addAllPrerequisites(prereqs);
        }
        if (followerAdjustment != null && followerAdjustment != 0) {
            option.setAdjustment(followerAdjustment.intValue());
        }
        context.getObjectContext().addToList(obj, ListKey.COMPANIONLIST, option);
    }
}
Also used : FollowerOption(pcgen.core.FollowerOption) CompanionList(pcgen.cdom.list.CompanionList) Race(pcgen.core.Race)

Example 93 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class DomainChoiceManagerTest method test001.

/**
	 * Test the constructor
	 */
public void test001() {
    Race pObj = new Race();
    pObj.setName("My PObject");
    LoadContext context = Globals.getContext();
    Domain foo = context.getReferenceContext().constructCDOMObject(Domain.class, "KEY_Foo");
    Domain bar = context.getReferenceContext().constructCDOMObject(Domain.class, "KEY_Bar");
    Domain baz = context.getReferenceContext().constructCDOMObject(Domain.class, "KEY_Baz");
    Domain qux = context.getReferenceContext().constructCDOMObject(Domain.class, "KEY_Qux");
    Domain quux = context.getReferenceContext().constructCDOMObject(Domain.class, "KEY_Quux");
    context.unconditionallyProcess(pObj, "CHOOSE", "DOMAIN|KEY_Foo|KEY_Bar|KEY_Baz|KEY_Qux|KEY_Quux");
    assertTrue(context.getReferenceContext().resolveReferences(null));
    assertNotNull(pObj.get(ObjectKey.CHOOSE_INFO));
    pObj.put(FormulaKey.NUMCHOICES, FormulaFactory.getFormulaFor(4));
    PlayerCharacter aPC = getCharacter();
    ChoiceManagerList choiceManager = ChooserUtilities.getChoiceManager(pObj, aPC);
    is(choiceManager, not(eq(null)), "Found the chooser");
    List<Domain> aList = new ArrayList<>();
    List<Domain> sList = new ArrayList<>();
    choiceManager.getChoices(aPC, aList, sList);
    assertEquals(5, aList.size());
    assertTrue(aList.contains(foo));
    assertTrue(aList.contains(bar));
    assertTrue(aList.contains(baz));
    assertTrue(aList.contains(qux));
    assertTrue(aList.contains(quux));
    assertEquals(0, sList.size());
}
Also used : PlayerCharacter(pcgen.core.PlayerCharacter) Race(pcgen.core.Race) ArrayList(java.util.ArrayList) LoadContext(pcgen.rules.context.LoadContext) Domain(pcgen.core.Domain)

Example 94 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class RaceFavClassTest method testList.

@Test
public void testList() throws PersistenceLayerException {
    Race source = create(Race.class, "Source");
    ParseResult result = token.parseToken(context, source, "%LIST");
    if (result != ParseResult.SUCCESS) {
        result.printMessages();
        fail("Test Setup Failed");
    }
    result = CHOOSE_CLASS_TOKEN.parseToken(context, source, "Favorite");
    if (result != ParseResult.SUCCESS) {
        result.printMessages();
        fail("Test Setup Failed");
    }
    finishLoad();
    assertEquals(baseCount(), targetFacetCount());
    raceInputFacet.set(id, source);
    assertTrue(containsExpected());
    assertEquals(baseCount() + 1, targetFacetCount());
    raceInputFacet.remove(id);
    assertEquals(baseCount(), targetFacetCount());
}
Also used : ParseResult(pcgen.rules.persistence.token.ParseResult) Race(pcgen.core.Race) Test(org.junit.Test) AbstractTokenModelTest(tokenmodel.testsupport.AbstractTokenModelTest)

Example 95 with Race

use of pcgen.core.Race in project pcgen by PCGen.

the class RaceFavClassTest method testDirect.

@Test
public void testDirect() throws PersistenceLayerException {
    Race source = create(Race.class, "Source");
    ParseResult result = token.parseToken(context, source, "Favorite");
    if (result != ParseResult.SUCCESS) {
        result.printMessages();
        fail("Test Setup Failed");
    }
    finishLoad();
    assertEquals(baseCount(), targetFacetCount());
    raceFacet.directSet(id, source, getAssoc());
    assertTrue(containsExpected());
    assertEquals(baseCount() + 1, targetFacetCount());
    raceFacet.remove(id);
    assertEquals(baseCount(), targetFacetCount());
}
Also used : ParseResult(pcgen.rules.persistence.token.ParseResult) Race(pcgen.core.Race) Test(org.junit.Test) AbstractTokenModelTest(tokenmodel.testsupport.AbstractTokenModelTest)

Aggregations

Race (pcgen.core.Race)167 Test (org.junit.Test)78 PCTemplate (pcgen.core.PCTemplate)66 PlayerCharacter (pcgen.core.PlayerCharacter)28 CDOMObject (pcgen.cdom.base.CDOMObject)16 LoadContext (pcgen.rules.context.LoadContext)16 PCClass (pcgen.core.PCClass)15 ArrayList (java.util.ArrayList)10 SizeAdjustment (pcgen.core.SizeAdjustment)10 ParseResult (pcgen.rules.persistence.token.ParseResult)10 AbstractTokenModelTest (tokenmodel.testsupport.AbstractTokenModelTest)10 PCStat (pcgen.core.PCStat)9 FixedSizeFormula (pcgen.cdom.formula.FixedSizeFormula)8 Equipment (pcgen.core.Equipment)8 BonusObj (pcgen.core.bonus.BonusObj)7 Formula (pcgen.base.formula.Formula)6 WieldCategory (pcgen.core.character.WieldCategory)6 GameMode (pcgen.core.GameMode)5 Skill (pcgen.core.Skill)5 CompanionList (pcgen.cdom.list.CompanionList)4