package Roguelike.Fields.OnDeathEffect; import java.util.HashMap; import net.objecthunter.exp4j.Expression; import net.objecthunter.exp4j.ExpressionBuilder; import Roguelike.Fields.Field; import Roguelike.StatusEffect.StatusEffect; import Roguelike.Tiles.GameTile; import com.badlogic.gdx.utils.XmlReader.Element; import exp4j.Helpers.EquationHelper; public class StatusOnDeathEffect extends AbstractOnDeathEffect { private String condition; private String[] reliesOn; public String stacksEqn; public Element status; @Override public void process(Field field, GameTile tile) { HashMap<String, Integer> variableMap = new HashMap<String, Integer>(); for (String name : reliesOn) { if (!variableMap.containsKey(name.toLowerCase())) { variableMap.put(name.toLowerCase(), 0); } } variableMap.put("stacks", field.stacks); if (condition != null) { int conditionVal = EquationHelper.evaluate( condition, variableMap ); if (conditionVal == 0) { return; } } int stacks = 1; if (stacksEqn != null) { stacks = EquationHelper.evaluate( stacksEqn, variableMap ); } for (int i = 0; i < stacks; i++) { if (tile.entity != null) { tile.entity.addStatusEffect(StatusEffect.load(status, field)); } if (tile.environmentEntity != null && tile.environmentEntity.canTakeDamage) { tile.environmentEntity.addStatusEffect(StatusEffect.load(status, field)); } } } @Override public void parse(Element xml) { condition = xml.getAttribute("Condition", null); if (condition != null) { condition = condition.toLowerCase(); } reliesOn = xml.getAttribute("ReliesOn", "").split(","); status = xml; stacksEqn = xml.getAttribute("Stacks", null); if (stacksEqn != null) { stacksEqn = stacksEqn.toLowerCase(); } } }