package vooga.towerdefense.model.rules;
import java.util.ArrayList;
import java.util.List;
import vooga.towerdefense.attributes.Attribute;
import vooga.towerdefense.attributes.AttributeConstantsEnum;
import vooga.towerdefense.gameelements.GameElement;
import vooga.towerdefense.model.GameModel;
import vooga.towerdefense.model.Tile;
/**
* This rule decrements your health when an enemy reaches the goal without
* dying.
*
* @author JLongley
*
*/
public class EnemyReachedEndRule extends Rule {
private final double HEALTH_COST = 1;
List<GameElement> enemiesAtEnd;
public EnemyReachedEndRule(GameModel model) {
super(model);
enemiesAtEnd = new ArrayList<GameElement>();
}
@Override
protected boolean condition() {
for (GameElement e : myModel.getMap().getAllGameElements()) {
if (myModel.getMap().isEnemy(e)) {
Tile enemyTile = myModel.getMap().getTile(e.getCenter());
Tile endTile = myModel.getMap().getTile(
myModel.getMap().getEndLocation());
if (enemyTile == endTile) { //enemy reached tile
enemiesAtEnd.add(e);
}
}
}
return (enemiesAtEnd.size() > 0);
}
@Override
protected void execute() {
for (GameElement e : enemiesAtEnd) {
Attribute health = myModel
.getPlayer()
.getAttributeManager()
.getAttribute(AttributeConstantsEnum.HEALTH.getStatusCode());
health.setValue(health.getValue() - HEALTH_COST);
myModel.getMap().removeGameElement(e);
}
enemiesAtEnd.clear();
}
}