package tc.oc.pgm.flag.event;
import tc.oc.pgm.flag.Flag;
import tc.oc.pgm.flag.FlagDefinition;
import tc.oc.pgm.flag.Net;
import tc.oc.pgm.goals.events.GoalCompleteEvent;
import tc.oc.pgm.match.MatchPlayer;
import static com.google.common.base.Preconditions.checkNotNull;
public class FlagCaptureEvent extends GoalCompleteEvent {
private final Net net;
private final MatchPlayer carrier;
private final boolean allFlagsCaptured;
public FlagCaptureEvent(Flag flag, MatchPlayer carrier, Net net) {
super(flag, true, c -> false, c -> c.equals(carrier.getParty()));
this.net = checkNotNull(net);
this.carrier = checkNotNull(carrier);
boolean allFlagsCaptured = true;
for(FlagDefinition def : this.net.getCapturableFlags()) {
if(!def.getGoal(getMatch()).isCaptured()) allFlagsCaptured = false;
}
this.allFlagsCaptured = allFlagsCaptured;
}
@Override
public Flag getGoal() {
return (Flag) super.getGoal();
}
public Net getNet() {
return net;
}
public MatchPlayer getCarrier() {
return carrier;
}
/**
* True if all the flags that can be captured in this net are currently in the
* {@link tc.oc.pgm.flag.state.Captured} state, as of the moment the event was fired.
* (they may not necessarily be in that state when the listener receives the event).
*/
public boolean areAllFlagsCaptured() {
return allFlagsCaptured;
}
}