package tc.oc.pgm.goals.events; import java.util.Collections; import java.util.List; import java.util.function.Predicate; import com.google.common.collect.ImmutableList; import tc.oc.pgm.goals.Contribution; import tc.oc.pgm.goals.Goal; import tc.oc.pgm.match.Competitor; public class GoalCompleteEvent<T extends Goal> extends GoalEvent<T> { private final boolean completed; private final Predicate<Competitor> wasCompletedFor, isCompletedFor; private final ImmutableList<? extends Contribution> contributions; public GoalCompleteEvent(T goal, boolean completed, Predicate<Competitor> wasCompletedFor, Predicate<Competitor> isCompletedFor) { this(goal, completed, wasCompletedFor, isCompletedFor, Collections.emptyList()); } public GoalCompleteEvent(T goal, boolean completed, Predicate<Competitor> wasCompletedFor, Predicate<Competitor> isCompletedFor, List<? extends Contribution> contributions) { super(goal); this.completed = completed; this.wasCompletedFor = wasCompletedFor; this.isCompletedFor = isCompletedFor; this.contributions = ImmutableList.copyOf(contributions); } public ImmutableList<? extends Contribution> getContributions() { return contributions; } public boolean isCompleted() { return completed; } public Predicate<Competitor> wasCompletedFor() { return wasCompletedFor; } public Predicate<Competitor> isCompletedFor() { return isCompletedFor; } public boolean wasCompletedFor(Competitor competitor) { return wasCompletedFor.test(competitor); } /** * @return true if the event was beneficial to the affected team, false if it was detrimental */ public boolean isCompletedFor(Competitor competitor) { return isCompletedFor.test(competitor); } }