package vooga.towerdefense.action.attack; import java.util.ArrayList; import java.util.List; import vooga.towerdefense.action.TargetedAction; import vooga.towerdefense.attributes.Attribute; import vooga.towerdefense.attributes.AttributeConstantsEnum; import vooga.towerdefense.gameelements.GameElement; /** * Filters targets using an affiliation system; only retain targets with * corresponding targetAffiliationID. * * * @author Matthew Roy * @author XuRui * */ public class FilterTargets extends TargetedAction { Attribute myTargetAffiliation; Attribute myNumTargets; public FilterTargets (Attribute targetAffiliation) { super(); myTargetAffiliation = targetAffiliation; } /** * Returns a specific number of targets. * * @param targetAffiliation * @param numTargets */ public FilterTargets (Attribute targetAffiliation, Attribute numTargets) { super(); myTargetAffiliation = targetAffiliation; myNumTargets = numTargets; } /** * Filters targets and update the target list of all follow up actions. * * @param elapsedTime */ @Override public void executeAction (double elapsedTime) { List<GameElement> filteredTargets = new ArrayList<GameElement>(); for (int i = 0; i < getTargets().size(); i++) { GameElement e = getTargets().get(i); Attribute affiliation = e.getAttributeManager().getAttribute( AttributeConstantsEnum.AFFILIATION .getStatusCode()); if (affiliation != null && affiliation.getValue() == myTargetAffiliation.getValue()) { filteredTargets.add(e); if (myNumTargets != null && myNumTargets.getValue() <= filteredTargets.size()) { break; } } } updateTargetedFollowUpActions(filteredTargets); } }