package com.lateensoft.pathfinder.toolkit.util; import android.content.Context; import android.content.res.Resources; import com.lateensoft.pathfinder.toolkit.R; import com.lateensoft.pathfinder.toolkit.model.character.stats.Ability; import com.lateensoft.pathfinder.toolkit.model.character.stats.AbilitySet; public class AbilitySetCalculator { public static final int[] RACE_MOD_RES = { R.array.HumanMods, R.array.DwarfMods, R.array.ElfMods, R.array.HalflingMods, R.array.GnomeMods, R.array.HumanMods, R.array.HumanMods }; /** * This ability set uses the temp bonus for the race mods */ private AbilitySet m_abilitySet; public AbilitySetCalculator() { this(new AbilitySet()); } public AbilitySetCalculator(AbilitySet abilitySet) { m_abilitySet = abilitySet; } /** * Sets the racial mods of the contained ability set * @param raceIndex the index for the race, as defined by RACE_MODS_RES * @param context * @return true if race is at least half human */ public boolean setRacialMods(int raceIndex, Context context) { Resources r = context.getResources(); int[] raceMods = r.getIntArray(RACE_MOD_RES[raceIndex]); for (int i = 0; i < m_abilitySet.size(); i++) { m_abilitySet.getAbilityAtIndex(i).setTempBonus(raceMods[i]); } return (RACE_MOD_RES[raceIndex] == R.array.HumanMods); } /** * Sets the racial mods of the contained ability set to human, * with the +2 bonus applied to the ability for abilityIndex * @param abilityIndex * @param context */ public void setHumanRacialMods(int abilityIndex, Context context) { Resources r = context.getResources(); int[] humanMods = r.getIntArray(R.array.HumanMods); for (int i = 0; i < m_abilitySet.size(); i++) { m_abilitySet.getAbilityAtIndex(i).setTempBonus(humanMods[i]); } m_abilitySet.getAbilityAtIndex(abilityIndex).setTempBonus(2); } /** * @return the point buy cost of the set */ public int getPointBuyCost() { int total = 0; for(int i = 0; i < m_abilitySet.size(); i++) { total += m_abilitySet.getAbilityAtIndex(i).getAbilityPointCost(); } return total; } /** * Increments the ability score with the corresponding * ability id */ public void incAbilityScore(int index) { m_abilitySet.getAbilityAtIndex(index).incScore(); } /** * Decrements the ability score with the corresponding * ability id */ public void decAbilityScore(int index) { m_abilitySet.getAbilityAtIndex(index).decScore(); } public int getScorePostRaceMod(int index) { Ability ability = m_abilitySet.getAbilityAtIndex(index); return ability.getScore() + ability.getTempBonus(); } public int getBaseScore(int index) { return m_abilitySet.getAbilityAtIndex(index).getScore(); } public int getModPostRaceMod(int index) { return m_abilitySet.getAbilityAtIndex(index).getTempModifier(); } public int getRaceMod(int index) { return m_abilitySet.getAbilityAtIndex(index).getTempBonus(); } public void setCustomRaceMods(int[] mods) { for (int i = 0; i < m_abilitySet.size(); i++) { m_abilitySet.getAbilityAtIndex(i).setTempBonus(mods[i]); } } public void setCalculatedAbilityScores(AbilitySet abilitySet) { for (int i = 0; i < abilitySet.size(); i++) { Ability calcAb = m_abilitySet.getAbilityAtIndex(i); abilitySet.getAbilityAtIndex(i) .setScore(calcAb.getScore() + calcAb.getTempBonus()); } } }