Search in sources :

Example 71 with PCStat

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

the class PCGVer2Creator method appendStatLines.

/*
	 * ###############################################################
	 * Character Attributes methods
	 * ###############################################################
	 */
private void appendStatLines(StringBuilder buffer) {
    for (PCStat aStat : charDisplay.getStatSet()) {
        buffer.append(IOConstants.TAG_STAT).append(':');
        buffer.append(aStat.getKeyName());
        buffer.append('|');
        buffer.append(IOConstants.TAG_SCORE).append(':');
        buffer.append(charDisplay.getStat(aStat));
        buffer.append(IOConstants.LINE_SEP);
    }
}
Also used : PCStat(pcgen.core.PCStat)

Example 72 with PCStat

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

the class UnlockedStatFacetTest method setUp.

@Override
public void setUp() throws Exception {
    super.setUp();
    CDOMObject cdo1 = new PCTemplate();
    cdo1.setName("Templ");
    CDOMObject cdo2 = new Race();
    cdo2.setName("Race");
    PCStat st1 = new PCStat();
    PCStat st2 = new PCStat();
    cdo1.addToListFor(ListKey.UNLOCKED_STATS, CDOMDirectSingleRef.getRef(st1));
    cdo2.addToListFor(ListKey.UNLOCKED_STATS, CDOMDirectSingleRef.getRef(st2));
    source = new CDOMObject[] { cdo1, cdo2 };
    stat = new PCStat[] { st1, st2 };
}
Also used : CDOMObject(pcgen.cdom.base.CDOMObject) Race(pcgen.core.Race) PCTemplate(pcgen.core.PCTemplate) PCStat(pcgen.core.PCStat)

Example 73 with PCStat

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

the class StatLockFacetTest method setUp.

@Override
public void setUp() throws Exception {
    facet = new StatLockFacet();
    super.setUp();
    facet.setFormulaResolvingFacet(new FormulaResolvingFacet());
    CDOMObject cdo1 = new PCTemplate();
    cdo1.setName("Templ");
    CDOMObject cdo2 = new Race();
    cdo2.setName("Race");
    PCStat pcs1 = new PCStat();
    pcs1.setName("Stat1");
    PCStat pcs2 = new PCStat();
    pcs2.setName("Stat2");
    StatLock st1 = new StatLock(CDOMDirectSingleRef.getRef(pcs1), FormulaFactory.getFormulaFor(4));
    StatLock st2 = new StatLock(CDOMDirectSingleRef.getRef(pcs2), FormulaFactory.getFormulaFor(2));
    cdo1.addToListFor(ListKey.STAT_LOCKS, st1);
    cdo2.addToListFor(ListKey.STAT_LOCKS, st2);
    source = new CDOMObject[] { cdo1, cdo2 };
    target = new StatLock[] { st1, st2 };
}
Also used : CDOMObject(pcgen.cdom.base.CDOMObject) Race(pcgen.core.Race) PCTemplate(pcgen.core.PCTemplate) PCStat(pcgen.core.PCStat) FormulaResolvingFacet(pcgen.cdom.facet.FormulaResolvingFacet) StatLock(pcgen.cdom.helper.StatLock)

Example 74 with PCStat

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

the class SkillCostDisplay method getModifierExplanation.

/**
	 * Builds up a string describing what makes up the misc modifier for a skill
	 * for a character. This can either be in long form '+2[skill TUMBLE gteq
	 * 5|TYPE=SYNERGY.STACK]' or in short form '+2[TUMBLE]'. Any modifiers that
	 * cannot be determined will be displayed as a single entry of 'OTHER'.
	 * 
	 * @param aPC
	 *            The character associated with this skill.
	 * @param shortForm
	 *            True if the abbreviated form should be used.
	 * @return The explanation of the misc modifier's make-up.
	 */
public static String getModifierExplanation(Skill sk, PlayerCharacter aPC, boolean shortForm) {
    double bonusObjTotal = 0.0;
    List<String> explanation = new ArrayList<>();
    String keyName = sk.getKeyName();
    String bonusKey = ("SKILL." + keyName).toUpperCase();
    for (BonusObj bonus : aPC.getActiveBonusList()) {
        // calculate bonus and add to activeBonusMap
        if (aPC.isApplied(bonus) && "SKILL".equals(bonus.getBonusName())) {
            boolean include = bonusForThisSkill(bonus, keyName);
            if (!include) {
                for (BonusPair bp : aPC.getStringListFromBonus(bonus)) {
                    String bpKey = bp.fullyQualifiedBonusType.toUpperCase();
                    if (bpKey.equals(bonusKey)) {
                        include = true;
                        break;
                    }
                }
            }
            if (include) {
                double iBonus = 0;
                for (BonusPair bp : aPC.getStringListFromBonus(bonus)) {
                    String bpKey = bp.fullyQualifiedBonusType.toUpperCase();
                    if (bpKey.startsWith(bonusKey)) {
                        iBonus += bp.resolve(aPC).doubleValue();
                    }
                }
                if (!CoreUtility.doublesEqual(iBonus, 0.0)) {
                    explanation.add(Delta.toString((int) iBonus) + aPC.getBonusContext(bonus, shortForm));
                    bonusObjTotal += iBonus;
                }
            }
        }
    }
    StringBuilder bonusDetails = new StringBuilder();
    bonusDetails.append(StringUtil.joinToStringBuilder(explanation, " "));
    // TODO: Need to add other bonuses which are not encoded as bonus
    // objects
    // - familiars, racial, feats - and add them to bonusObjTotal
    double bonus;
    CDOMSingleRef<PCStat> statref = sk.get(ObjectKey.KEY_STAT);
    if (statref != null) {
        PCStat stat = statref.get();
        bonus = aPC.getStatModFor(stat);
        bonus += aPC.getTotalBonusTo("SKILL", "STAT." + stat.getKeyName());
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "STAT");
    }
    // The catch-all for non-bonusObj modifiers.
    bonus = aPC.getTotalBonusTo("SKILL", keyName) - bonusObjTotal;
    SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "OTHER");
    // loop through all current skill types checking for boni
    for (Type singleType : sk.getTrueTypeList(false)) {
        bonus = aPC.getTotalBonusTo("SKILL", "TYPE." + singleType);
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "TYPE." + singleType);
    }
    // now check for any lists of skills, etc
    bonus = aPC.getTotalBonusTo("SKILL", "LIST");
    SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "LIST");
    // now check for ALL
    bonus = aPC.getTotalBonusTo("SKILL", "ALL");
    SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "ALL");
    // function
    if (aPC.isClassSkill(sk)) {
        bonus = aPC.getTotalBonusTo("CSKILL", keyName);
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CSKILL");
        // loop through all current skill types checking for boni
        for (Type singleType : sk.getTrueTypeList(false)) {
            bonus = aPC.getTotalBonusTo("CSKILL", "TYPE." + singleType);
            SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CSKILL");
        }
        bonus = aPC.getTotalBonusTo("CSKILL", "LIST");
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CSKILL");
    }
    if (!aPC.isClassSkill(sk) && !sk.getSafe(ObjectKey.EXCLUSIVE)) {
        bonus = aPC.getTotalBonusTo("CCSKILL", keyName);
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CCSKILL");
        // loop through all current skill types checking for boni
        for (Type singleType : sk.getTrueTypeList(false)) {
            bonus = aPC.getTotalBonusTo("CCSKILL", "TYPE." + singleType);
            SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CCSKILL");
        }
        bonus = aPC.getTotalBonusTo("CCSKILL", "LIST");
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "CCSKILL");
    }
    // Encumbrance
    int aCheckMod = sk.getSafe(ObjectKey.ARMOR_CHECK).calculateBonus(aPC);
    SkillCostDisplay.appendBonusDesc(bonusDetails, aCheckMod, "ARMOR");
    String aString = SettingsHandler.getGame().getRankModFormula();
    if (!aString.isEmpty()) {
        aString = aString.replaceAll(Pattern.quote("$$RANK$$"), SkillRankControl.getTotalRank(aPC, sk).toString());
        bonus = aPC.getVariableValue(aString, "").intValue();
        SkillCostDisplay.appendBonusDesc(bonusDetails, bonus, "RANKS");
    }
    return bonusDetails.toString();
}
Also used : Type(pcgen.cdom.enumeration.Type) BonusObj(pcgen.core.bonus.BonusObj) ArrayList(java.util.ArrayList) BonusPair(pcgen.core.bonus.BonusPair) PCStat(pcgen.core.PCStat)

Example 75 with PCStat

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

the class TemplateModifier method modifierString.

/**
	 * Generate a string that represents the changes this Template will apply.
	 * 
	 * @param aPC
	 *            the Pc we'd like the string generated with reference to
	 * 
	 * @return a string explaining the Template
	 */
public static String modifierString(PCTemplate pct, PlayerCharacter aPC) {
    // More likely to be
    StringBuilder mods = new StringBuilder(50);
    // true than 16
    // (the default)
    CharID id = aPC.getCharID();
    for (PCStat stat : statFacet.getSet(id)) {
        if (NonAbilityDisplay.isNonAbilityForObject(stat, pct)) {
            mods.append(stat.getKeyName()).append(":nonability ");
        } else {
            int statMod = BonusCalc.getStatMod(pct, stat, aPC);
            if (statMod != 0) {
                mods.append(stat.getKeyName()).append(':').append(statMod).append(' ');
            }
        }
    }
    Map<DamageReduction, Set<Object>> drMap = new IdentityHashMap<>();
    CharacterDisplay display = aPC.getDisplay();
    int totalLevels = display.getTotalLevels();
    int totalHitDice = display.totalHitDice();
    List<PCTemplate> templList = new ArrayList<>();
    templList.add(pct);
    templList.addAll(pct.getConditionalTemplates(totalLevels, totalHitDice));
    for (PCTemplate subt : templList) {
        List<DamageReduction> tList = subt.getListFor(ListKey.DAMAGE_REDUCTION);
        if (tList != null) {
            for (DamageReduction dr : tList) {
                Set<Object> set = drMap.get(dr);
                if (set == null) {
                    set = new HashSet<>();
                    drMap.put(dr, set);
                }
                set.add(pct);
            }
        }
    }
    if (!drMap.isEmpty()) {
        mods.append("DR:").append(drFacet.getDRString(id, drMap));
    }
    if (!aPC.hasControl(CControl.ACVARTOTAL)) {
        int nat = (int) BonusCalc.charBonusTo(pct, "COMBAT", "AC", aPC);
        if (nat != 0) {
            mods.append("AC BONUS:").append(nat);
        }
    }
    float cr = pct.getCR(totalLevels, totalHitDice);
    if (cr != 0) {
        mods.append("CR:").append(cr).append(' ');
    }
    if (display.getTemplateSR(pct, totalLevels, totalHitDice) != 0) {
        mods.append("SR:").append(display.getTemplateSR(pct, totalLevels, totalHitDice)).append(' ');
    }
    return mods.toString();
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) IdentityHashMap(java.util.IdentityHashMap) ArrayList(java.util.ArrayList) CharID(pcgen.cdom.enumeration.CharID) DamageReduction(pcgen.cdom.content.DamageReduction) PCStat(pcgen.core.PCStat) PCTemplate(pcgen.core.PCTemplate)

Aggregations

PCStat (pcgen.core.PCStat)78 CDOMObject (pcgen.cdom.base.CDOMObject)10 GameMode (pcgen.core.GameMode)10 Before (org.junit.Before)9 Race (pcgen.core.Race)9 PCClass (pcgen.core.PCClass)7 PlayerCharacter (pcgen.core.PlayerCharacter)7 AbstractReferenceContext (pcgen.rules.context.AbstractReferenceContext)7 CDOMSingleRef (pcgen.cdom.reference.CDOMSingleRef)6 PCTemplate (pcgen.core.PCTemplate)6 Skill (pcgen.core.Skill)6 ArrayList (java.util.ArrayList)5 StatLock (pcgen.cdom.helper.StatLock)5 BonusObj (pcgen.core.bonus.BonusObj)5 Test (org.junit.Test)4 Formula (pcgen.base.formula.Formula)4 CharID (pcgen.cdom.enumeration.CharID)4 LoadContext (pcgen.rules.context.LoadContext)4 StringTokenizer (java.util.StringTokenizer)3 Type (pcgen.cdom.enumeration.Type)3