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