package core;
import entity.*;
public class CharSkill {
private SkillEntity skill;
private character character;
private int rank = 0;
private String abilityType;
private int abilityMod;
private int miscMod = 0;
private boolean classSkill = false;
private boolean acPen;
private boolean untrained = false;
public CharSkill(SkillEntity s, character c) {
skill = s;
character = c;
String charClass = character.getCharClass().getName();
classSkill = SkillInfo.isClassSkill(charClass, skill.getName());
abilityType = skill.skillParentAttribute;
abilityMod = setAbilityMod();
acPen = skill.armorCheckPenalty;
untrained = SkillInfo.useUntrained(skill.getName());
}
private int setAbilityMod() {
switch(skill.skillParentAttribute) {
case ("STR"):
return character.getAbilityModifiers()[GameState.STRENGTH];
case ("DEX"):
return character.getAbilityModifiers()[GameState.DEXTERITY];
case ("CON"):
return character.getAbilityModifiers()[GameState.CONSTITUTION];
case ("INT"):
return character.getAbilityModifiers()[GameState.INTELLIGENCE];
case ("WIS"):
return character.getAbilityModifiers()[GameState.WISDOM];
default: // CHA
return character.getAbilityModifiers()[GameState.CHARISMA];
}
}
public SkillEntity getSkill() { return skill; }
public int getRank() { return rank; }
public boolean incRank(int numSkillPoints) {
if (!tryIncRank(numSkillPoints))
return false;
rank++;
return true;
}
public boolean tryIncRank(int numSkillPoints) {
int max = getMaxClassSkillRank(character.getLevel());
if ((classSkill && rank == max) || (!classSkill && (rank == max/2 || numSkillPoints == 1)))
return false;
return true;
}
public boolean decRank() {
if (!tryDecRank())
return false;
rank--;
return true;
}
public boolean tryDecRank() {
if (rank == 0)
return false;
return true;
}
public String getAbilityType() { return abilityType; }
public int getAbilityMod() { return abilityMod; }
public int getMiscMod() { return miscMod; }
public int getTotal() { return rank + abilityMod + miscMod; }
public boolean isClassSkill() { return classSkill; }
public boolean hasACPen() { return acPen; }
public boolean useUntrained() { return untrained; }
public void setRank(int r) { rank = r ; }
public void modRank(int mod) { rank += mod; }
public void setMiscMod(int m) { miscMod = m; }
public int getMaxClassSkillRank(int level) {
return level + 3;
}
}