package tc.oc.pgm.controlpoint;
import java.time.Duration;
import java.util.List;
import javax.inject.Inject;
import org.bukkit.event.HandlerList;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.MatchModule;
import tc.oc.pgm.match.Repeatable;
import tc.oc.time.Time;
import static tc.oc.commons.core.stream.Collectors.toImmutableList;
public class ControlPointMatchModule extends MatchModule {
private static final long MILLIS = 100;
private static final Duration INTERVAL = Duration.ofMillis(MILLIS); // milliseconds, two ticks
private final List<ControlPoint> controlPoints;
private final ControlPointAnnouncer announcer;
@Inject private ControlPointMatchModule(Match match) {
this.announcer = new ControlPointAnnouncer(match);
this.controlPoints = match.featureDefinitions()
.all(ControlPointDefinition.class)
.map(cp -> cp.getGoal(match))
.collect(toImmutableList());
}
@Override
public void load() {
super.load();
getMatch().registerEvents(this.announcer);
}
@Override
public void unload() {
for(ControlPoint controlPoint : this.controlPoints) {
controlPoint.unregisterEvents();
}
HandlerList.unregisterAll(this.announcer);
super.unload();
}
@Repeatable(interval = @Time(milliseconds = MILLIS))
public void tick() {
for(ControlPoint controlPoint : controlPoints) {
controlPoint.tick(INTERVAL);
}
}
}