package br.augustoicaro.pathfindercombat.modifier;
import br.augustoicaro.pathfindercombat.PFCombatApplication;
import br.augustoicaro.pathfindercombat.models.PFCharacter;
public abstract class ModifierBase {
public enum ModifierField {
_none,
/* stats */
_str, _dex, _con, _int, _wis, _cha,
/* stat mods */
_str_mod, _dex_mod, _con_mod, _int_mod, _wis_mod, _cha_mod,
/* attacks */
_hit, _damage, _damage_dice, _extra_attack, _attacks,
_size, _ac, _dex_ac, _actions, _init, _speed,
_saves, _skill_checks, _ability_checks, _cmd,
/* critical */
_critical_damage, _critical_damage_dice
}
public static final String _r_melee = "melee";
public static final String _r_ranged = "ranged";
public static final String _all = "all";
public boolean enabled;
public ModifierBase() {
this.enabled = false;
}
// public abstract String apply(String field, String value);
public abstract String name();
public String apply(ModifierField field, String value) {
if (!this.enabled) {
return value;
}
switch (field) {
case _str:
return String.valueOf(applyStr(parseInt(value)));
case _dex:
return String.valueOf(applyDex(parseInt(value)));
case _con:
return String.valueOf(applyCon(parseInt(value)));
case _int:
return String.valueOf(applyInt(parseInt(value)));
case _wis:
return String.valueOf(applyWis(parseInt(value)));
case _cha:
return String.valueOf(applyCha(parseInt(value)));
case _str_mod:
return String.valueOf(applyStrMod(parseInt(value)));
case _dex_mod:
return String.valueOf(applyDexMod(parseInt(value)));
case _con_mod:
return String.valueOf(applyConMod(parseInt(value)));
case _int_mod:
return String.valueOf(applyIntMod(parseInt(value)));
case _wis_mod:
return String.valueOf(applyWisMod(parseInt(value)));
case _cha_mod:
return String.valueOf(applyChaMod(parseInt(value)));
case _hit:
return String.valueOf(applyHit(parseInt(value)));
case _damage:
return String.valueOf(applyDamage(parseInt(value)));
case _damage_dice:
return applyDamageDice(value);
case _extra_attack:
return String.valueOf(applyExtraAttack(parseInt(value)));
case _attacks:
return applyAttacks(value);
case _size:
return String.valueOf(applySize(parseInt(value)));
case _ac:
return String.valueOf(applyAC(parseInt(value)));
case _dex_ac:
return String.valueOf(applyDexAC(parseInt(value)));
case _actions:
return applyActions(value);
case _init:
return String.valueOf(applyInit(parseInt(value)));
case _speed:
return String.valueOf(applySpeed(parseInt(value)));
case _saves:
return String.valueOf(applySaves(parseInt(value)));
case _skill_checks:
return String.valueOf(applySkillChecks(parseInt(value)));
case _ability_checks:
return String.valueOf(applyAbilityChecks(parseInt(value)));
case _critical_damage:
return String.valueOf(applyCriticalDamage(parseInt(value)));
case _critical_damage_dice:
return applyCriticalDamageDice(value);
}
return value;
}
/* stats */
protected int applyStr(int value) {
return value;
}
protected int applyDex(int value) {
return value;
}
protected int applyCon(int value) {
return value;
}
protected int applyInt(int value) {
return value;
}
protected int applyWis(int value) {
return value;
}
protected int applyCha(int value) {
return value;
}
/* stat mods */
protected int applyStrMod(int value) {
return value;
}
protected int applyDexMod(int value) {
return value;
}
protected int applyConMod(int value) {
return value;
}
protected int applyIntMod(int value) {
return value;
}
protected int applyWisMod(int value) {
return value;
}
protected int applyChaMod(int value) {
return value;
}
protected int applyHit(int value) {
return value;
}
protected int applyDamage(int value) {
return value;
}
protected String applyDamageDice(String value) {
return value;
}
protected int applyAC(int value) {
return value;
}
protected int applyDexAC(int value) {
return value;
}
protected int applySpeed(int value) {
return value;
}
protected int applySize(int value) {
return value;
}
protected int applySaves(int value) {
return value;
}
protected int applyInit(int value) {
return value;
}
protected int applySkillChecks(int value) {
return value;
}
protected int applyAbilityChecks(int value) {
return value;
}
protected int applyExtraAttack(int value) {
return value;
}
protected String applyAttacks(String value) {
return value;
}
protected int applyCritical(int value) {
return value;
}
protected String applyActions(String value) {
return value;
}
protected int applyCriticalDamage(int value) {
return value;
}
protected String applyCriticalDamageDice(String value) {
return value;
}
/* informational methods */
public String classes() {
return _all;
}
public String range() {
return _all;
}
public String shortDescription() {
return "";
}
protected int parseInt(String s) {
if (s.equals("")) {
return 0;
}
s = s.replace("+", "");
return Integer.parseInt(s);
}
protected PFCharacter character() {
PFCombatApplication app = PFCombatApplication.getApplication();
return app.getCurrentCharacter();
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isEnabled() {
return enabled;
}
public boolean appliesToCharacterClass(String characterClass) {
String clas = classes();
if (clas.equals(_all)) {
return true;
}
return clas.equals(characterClass);
}
public boolean appliesToRange(String characterRange) {
String range = range();
if (range.equals(_all)) {
return true;
}
return range.equals(characterRange);
}
}