package Roguelike.Ability.ActiveAbility.CostType; import java.util.HashMap; import net.objecthunter.exp4j.Expression; import net.objecthunter.exp4j.ExpressionBuilder; import Roguelike.Ability.ActiveAbility.ActiveAbility; import com.badlogic.gdx.utils.XmlReader.Element; import exp4j.Helpers.EquationHelper; public class CostTypeCondition extends AbstractCostType { private String[] reliesOn; private String equation; @Override public boolean isCostAvailable(ActiveAbility aa) { HashMap<String, Integer> variableMap = aa.getVariableMap(); for (String name : reliesOn) { if (!variableMap.containsKey(name.toLowerCase())) { variableMap.put(name.toLowerCase(), 0); } } int raw = EquationHelper.evaluate( equation, variableMap ); return raw > 0; } @Override public void spendCost(ActiveAbility aa) { } @Override public void parse(Element xml) { reliesOn = xml.getAttribute("ReliesOn", "").split(","); equation = xml.getText().toLowerCase(); } @Override public AbstractCostType copy() { CostTypeCondition cost = new CostTypeCondition(); cost.reliesOn = reliesOn; cost.equation = equation; return cost; } @Override public String toString(ActiveAbility aa) { String colour = isCostAvailable(aa) ? "[GREEN]" : "[RED]"; return colour+"Requires "+equation+"."; } }