use of pcgen.core.PlayerCharacter in project pcgen by PCGen.
the class TemplateFeatFacet method dataAdded.
/**
* Adds all of the feats to the Player Character triggered by the FEAT token'
* on the given PCTemplate
*
* Triggered when one of the Facets to which ConditionalTemplateFacet
* listens fires a DataFacetChangeEvent to indicate a PCTemplate 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, PCTemplate> dfce) {
CharID id = dfce.getCharID();
PCTemplate source = dfce.getCDOMObject();
if (!containsFrom(id, source)) {
PersistentTransitionChoice<CNAbilitySelection> choice = source.get(ObjectKey.TEMPLATE_FEAT);
if (choice != null) {
PlayerCharacter pc = trackingFacet.getPC(id);
Collection<? extends CNAbilitySelection> result = choice.driveChoice(pc);
choice.act(result, source, pc);
for (CNAbilitySelection cas : result) {
add(id, cas, source);
}
}
}
}
use of pcgen.core.PlayerCharacter in project pcgen by PCGen.
the class MonsterClassFacet method dataRemoved.
/**
* Removes monster classes from the Player Character when the CDOMObject
* which granted the monster classes is removed from the Player Character.
*
* Triggered when one of the Facets to which MonsterClassFacet listens fires
* a DataFacetChangeEvent to indicate a CDOMObject was removed from a Player
* Character.
*
* @param dfce
* The DataFacetChangeEvent containing the information about the
* change
*
* @see pcgen.cdom.facet.event.DataFacetChangeListener#dataRemoved(pcgen.cdom.facet.event.DataFacetChangeEvent)
*/
@Override
public void dataRemoved(DataFacetChangeEvent<CharID, CDOMObject> dfce) {
CDOMObject cdo = dfce.getCDOMObject();
LevelCommandFactory lcf = cdo.get(ObjectKey.MONSTER_CLASS);
if (lcf != null) {
CharID id = dfce.getCharID();
int levelCount = formulaResolvingFacet.resolve(id, lcf.getLevelCount(), "").intValue();
PlayerCharacter pc = trackingFacet.getPC(id);
pc.incrementClassLevel(-levelCount, lcf.getPCClass(), true);
}
}
use of pcgen.core.PlayerCharacter 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);
}
}
}
}
use of pcgen.core.PlayerCharacter in project pcgen by PCGen.
the class HitPointFacet method rollHP.
/**
* Rolls the hit points for a given PCClass and level.
*
* @param id
* The CharID identifying the Player Character on which the hit
* points are to be rolled
* @param pcc
* The PCClass for which the hit points are to be rolled
* @param level
* The class level for which the hit points are to be rolled
* @param first
* And identifier indicating if this is the Player Character's
* first level.
*/
public void rollHP(CharID id, PCClass pcc, int level, boolean first) {
int roll = 0;
HitDie lvlDie = getLevelHitDie(id, pcc, level);
if ((lvlDie == null) || (lvlDie.getDie() == 0)) {
roll = 0;
} else {
final int min = 1 + (int) bonusCheckingFacet.getBonus(id, "HD", "MIN") + (int) bonusCheckingFacet.getBonus(id, "HD", "MIN;CLASS." + pcc.getKeyName());
final int max = getLevelHitDie(id, pcc, level).getDie() + (int) bonusCheckingFacet.getBonus(id, "HD", "MAX") + (int) bonusCheckingFacet.getBonus(id, "HD", "MAX;CLASS." + pcc.getKeyName());
if (SettingsHandler.getGame().getHPFormula().isEmpty()) {
if (first && level == 1 && SettingsHandler.isHPMaxAtFirstLevel() && (!SettingsHandler.isHPMaxAtFirstPCClassLevelOnly() || pcc.isType("PC"))) {
roll = max;
} else {
PlayerCharacter pc = trackingFacet.getPC(id);
if (!pc.isImporting()) {
roll = rollHP(min, max, levelFacet.getTotalLevels(id));
}
}
}
roll += ((int) bonusCheckingFacet.getBonus(id, "HP", "CURRENTMAXPERLEVEL"));
}
PCClassLevel classLevel = classFacet.getClassLevel(id, pcc, level - 1);
set(id, classLevel, roll);
}
use of pcgen.core.PlayerCharacter in project pcgen by PCGen.
the class PrerequisiteFacet method qualifies.
/**
* Returns true if the Player Character identified by the given CharID
* qualifies for the given QualifyingObject when the QualifyingObject is
* from the given source.
*
* @param id
* The CharID identifying the Player Character on which the
* prerequisite test will be performed
* @param obj
* The QualifyingObject which contains the prerequisite(s) to be
* tested
* @param source
* The source of the QualifyingObject, which is used to given
* context to the prerequisites being tested
* @return true if the Player Character identified by the given CharID
* qualifies for the given QualifyingObject when the
* QualifyingObject is from the given source; false otherwise
*/
public boolean qualifies(CharID id, QualifyingObject obj, Object source) {
PlayerCharacter pc = trackingFacet.getPC(id);
CDOMObject cdo = null;
if (source instanceof CDOMObject) {
cdo = (CDOMObject) source;
}
return obj.qualifies(pc, cdo);
}
Aggregations