package vooga.towerdefense.factories.actionfactories;
import vooga.towerdefense.action.Action;
import vooga.towerdefense.factories.ActionAnnotation;
import vooga.towerdefense.gameelements.GameElement;
import vooga.towerdefense.model.GameMap;
import vooga.towerdefense.model.Player;
/**
* Factory creates an action combo that does an area of effect, for speeding up game creation.
*
* @author Zhen Gou
*
*/
public class AreaOfEffectPackageFactory extends ActionFactory {
private String myRadius;
private String myNumberOfTargets;
private String myTargets;
private String myAttributeToApply;
private String myTargetAttribute;
private FindTargetsFactory myFinderFactory;
private FilterTargetsFactory myFilterFactory;
private ApplyAttributeBuffFactory myBuffFactory;
/**
*
* @param attackRadius
* @param numTargets
* @param targetAffiliation
* @param attributeToApply
* @param targetAttribute
*/
public AreaOfEffectPackageFactory(
@ActionAnnotation(name = "attack radius", value = "attribute") String attackRadius,
@ActionAnnotation(name = "num targets", value = "attribute") String numTargets,
@ActionAnnotation(name = "target affiliation", value = "attribute") String targetAffiliation,
@ActionAnnotation(name = "attribute to apply", value = "attribute") String attributeToApply,
@ActionAnnotation(name = "target attribute", value = "attribute") String targetAttribute) {
super();
myRadius = attackRadius;
myNumberOfTargets = numTargets;
myTargets = targetAffiliation;
myAttributeToApply = attributeToApply;
myTargetAttribute = targetAttribute;
}
/**
* need to be called before creating actions
*/
public void initialize(GameMap map, Player player) {
super.initialize(map, player);
makeComboFactories();
myFinderFactory.initialize(map, player);
myFilterFactory.initialize(map, player);
myBuffFactory.initialize(map, player);
}
private void makeComboFactories() {
myFinderFactory = new FindTargetsFactory(myRadius);
myFilterFactory = new FilterTargetsFactory(myTargets, myNumberOfTargets);
myBuffFactory = new ApplyAttributeBuffFactory(myAttributeToApply,
myTargetAttribute);
}
/**
* creates the desired action
*/
@Override
public Action buildAction(GameElement e) {
Action aoe = myFinderFactory.buildAction(e);
Action filter = myFilterFactory.createAction(e);
Action buff = myBuffFactory.createAction(e);
aoe.addFollowUpAction(filter);
aoe.addFollowUpAction(buff);
return aoe;
}
}