Search in sources :

Example 1 with ClassInfo

use of pcgen.cdom.facet.model.ClassFacet.ClassInfo in project pcgen by PCGen.

the class MonsterClassFacet method dataAdded.

/**
	 * Adds monster classes to the Player Character when a CDOMObject which
	 * grants monster classes is added to the Player Character.
	 * 
	 * Triggered when one of the Facets to which MonsterClassFacet listens fires
	 * a DataFacetChangeEvent to indicate a CDOMObject was added to a Player
	 * Character.
	 * 
	 * @param dfce
	 *            The DataFacetChangeEvent containing the information about the
	 *            change
	 * 
	 * @see pcgen.cdom.facet.event.DataFacetChangeListener#dataAdded(pcgen.cdom.facet.event.DataFacetChangeEvent)
	 */
@Override
public void dataAdded(DataFacetChangeEvent<CharID, CDOMObject> dfce) {
    CharID id = dfce.getCharID();
    CDOMObject cdo = dfce.getCDOMObject();
    // Get existing classes
    ClassInfo ci = classFacet.removeAllClasses(id);
    //
    for (int i = levelInfoFacet.getCount(id) - 1; i >= 0; --i) {
        PCLevelInfo pli = levelInfoFacet.get(id, i);
        final String classKeyName = pli.getClassKeyName();
        final PCClass aClass = Globals.getContext().getReferenceContext().silentlyGetConstructedCDOMObject(PCClass.class, classKeyName);
        if (aClass.isMonster()) {
            levelInfoFacet.remove(id, pli);
        }
    }
    PlayerCharacter pc = trackingFacet.getPC(id);
    final List<PCLevelInfo> existingLevelInfo = new ArrayList<>(levelInfoFacet.getSet(id));
    levelInfoFacet.removeAll(id);
    // Make sure monster classes are added first
    if (!pc.isImporting()) {
        LevelCommandFactory lcf = cdo.get(ObjectKey.MONSTER_CLASS);
        if (lcf != null) {
            int levelCount = formulaResolvingFacet.resolve(id, lcf.getLevelCount(), "").intValue();
            pc.incrementClassLevel(levelCount, lcf.getPCClass(), true);
        }
    }
    levelInfoFacet.addAll(id, existingLevelInfo);
    //
    if (!pc.isImporting() && ci != null && !ci.isEmpty()) {
        int totalLevels = levelFacet.getTotalLevels(id);
        for (PCClass pcClass : ci.getClassSet()) {
            //
            if (!pcClass.isMonster()) {
                classFacet.addClass(id, pcClass);
                int cLevels = ci.getLevel(pcClass);
                classFacet.setLevel(id, pcClass, cLevels);
                pc.setSkillPool(pcClass, 0);
                int cMod = 0;
                for (int j = 0; j < cLevels; ++j) {
                    cMod += pc.recalcSkillPointMod(pcClass, ++totalLevels);
                }
                pc.setSkillPool(pcClass, cMod);
            }
        }
    }
}
Also used : PlayerCharacter(pcgen.core.PlayerCharacter) LevelCommandFactory(pcgen.cdom.content.LevelCommandFactory) CDOMObject(pcgen.cdom.base.CDOMObject) ArrayList(java.util.ArrayList) PCLevelInfo(pcgen.core.pclevelinfo.PCLevelInfo) PCClass(pcgen.core.PCClass) CharID(pcgen.cdom.enumeration.CharID) ClassInfo(pcgen.cdom.facet.model.ClassFacet.ClassInfo)

Example 2 with ClassInfo

use of pcgen.cdom.facet.model.ClassFacet.ClassInfo in project pcgen by PCGen.

the class ClassFacetTest method testPCClassRemoveAll.

@Test
public void testPCClassRemoveAll() {
    assertNull(facet.removeAllClasses(id));
    PCClass t1 = new PCClass();
    t1.setName("MyClass");
    PCClass t2 = new PCClass();
    t2.setName("OtherClass");
    facet.addClass(id, t1);
    facet.setLevel(id, t1, 3);
    facet.addClass(id, t2);
    facet.setLevel(id, t2, 5);
    assertEventCount(2, 0, 2);
    ClassInfo ci = facet.removeAllClasses(id);
    Set<PCClass> setoftwo = ci.getClassSet();
    assertEventCount(2, 2, 4);
    assertNotNull(setoftwo);
    assertEquals(2, setoftwo.size());
    assertTrue(setoftwo.contains(t1));
    assertTrue(setoftwo.contains(t2));
    testPCClassUnsetZeroCount();
    testPCClassUnsetEmpty();
    testPCClassUnsetEmptySet();
}
Also used : PCClass(pcgen.core.PCClass) ClassInfo(pcgen.cdom.facet.model.ClassFacet.ClassInfo) Test(org.junit.Test)

Aggregations

ClassInfo (pcgen.cdom.facet.model.ClassFacet.ClassInfo)2 PCClass (pcgen.core.PCClass)2 ArrayList (java.util.ArrayList)1 Test (org.junit.Test)1 CDOMObject (pcgen.cdom.base.CDOMObject)1 LevelCommandFactory (pcgen.cdom.content.LevelCommandFactory)1 CharID (pcgen.cdom.enumeration.CharID)1 PlayerCharacter (pcgen.core.PlayerCharacter)1 PCLevelInfo (pcgen.core.pclevelinfo.PCLevelInfo)1