108 lines
3.3 KiB
Java
108 lines
3.3 KiB
Java
|
package net.anxuiz.tourney;
|
||
|
|
||
|
import java.util.Set;
|
||
|
import java.util.logging.Logger;
|
||
|
import javax.annotation.Nullable;
|
||
|
import javax.inject.Inject;
|
||
|
|
||
|
import com.google.common.base.Preconditions;
|
||
|
import net.anxuiz.tourney.event.TourneyStateChangeEvent;
|
||
|
import net.anxuiz.tourney.listener.GameplayListener;
|
||
|
import net.anxuiz.tourney.listener.ReadyListener;
|
||
|
import net.anxuiz.tourney.listener.TeamListener;
|
||
|
import tc.oc.commons.core.logging.Loggers;
|
||
|
import tc.oc.pgm.match.Match;
|
||
|
import tc.oc.pgm.match.inject.MatchScoped;
|
||
|
import tc.oc.pgm.teams.Team;
|
||
|
|
||
|
@MatchScoped
|
||
|
public class MatchManager {
|
||
|
|
||
|
private final Logger logger;
|
||
|
private final Tourney tourney;
|
||
|
private final Match match;
|
||
|
private final Set<Team> teams;
|
||
|
private final TeamManager teamManager;
|
||
|
|
||
|
private final TeamListener teamListener;
|
||
|
private final GameplayListener gameplayListener;
|
||
|
private final ReadyListener readyListener;
|
||
|
|
||
|
private @Nullable ReadyManager readyManager;
|
||
|
|
||
|
private TourneyState state = TourneyState.DISABLED;
|
||
|
private boolean recordQueued = true;
|
||
|
|
||
|
@Inject MatchManager(Loggers loggers, Tourney tourney, Match match, Set<Team> teams, TeamManager teamManager, TeamListener teamListener, GameplayListener gameplayListener, ReadyListener readyListener, ReadyManager readyManager) {
|
||
|
this.logger = loggers.get(getClass());
|
||
|
this.tourney = tourney;
|
||
|
this.match = match;
|
||
|
this.teams = teams;
|
||
|
this.teamManager = teamManager;
|
||
|
this.teamListener = teamListener;
|
||
|
this.gameplayListener = gameplayListener;
|
||
|
this.readyListener = readyListener;
|
||
|
this.readyManager = readyManager;
|
||
|
}
|
||
|
|
||
|
public Match getMatch() {
|
||
|
return this.match;
|
||
|
}
|
||
|
|
||
|
public TeamManager getTeamManager() {
|
||
|
return this.teamManager;
|
||
|
}
|
||
|
|
||
|
public @Nullable ReadyManager getReadyManager() {
|
||
|
return this.readyManager;
|
||
|
}
|
||
|
|
||
|
/** Permanently clears the {@link ReadyManager} for the remainder of the match. */
|
||
|
public void clearReadyManager() {
|
||
|
this.readyManager = null;
|
||
|
}
|
||
|
|
||
|
public Set<Team> getTeams() {
|
||
|
return teams;
|
||
|
}
|
||
|
|
||
|
public boolean isRecordQueued() {
|
||
|
return recordQueued;
|
||
|
}
|
||
|
|
||
|
public void setRecordQueued(boolean recordQueued) {
|
||
|
this.recordQueued = recordQueued;
|
||
|
}
|
||
|
|
||
|
public void recordMatchIfQueued() {
|
||
|
if(recordQueued && tourney.getKDMSession() == null) {
|
||
|
recordQueued = false;
|
||
|
tourney.recordMatch(match.getId());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void setState(TourneyState newState) {
|
||
|
if (this.state.equals(Preconditions.checkNotNull(newState, "State"))) return;
|
||
|
TourneyState oldState = this.state;
|
||
|
this.state = newState;
|
||
|
|
||
|
logger.info("Transitioning to state " + newState);
|
||
|
|
||
|
if(oldState == TourneyState.DISABLED) {
|
||
|
match.registerEvents(teamListener);
|
||
|
match.registerEvents(gameplayListener);
|
||
|
match.registerEvents(readyListener);
|
||
|
} else if(newState == TourneyState.DISABLED) {
|
||
|
match.unregisterEvents(readyListener);
|
||
|
match.unregisterEvents(gameplayListener);
|
||
|
match.unregisterEvents(teamListener);
|
||
|
}
|
||
|
|
||
|
match.callEvent(new TourneyStateChangeEvent(match, oldState, newState));
|
||
|
}
|
||
|
|
||
|
public TourneyState getState() {
|
||
|
return state;
|
||
|
}
|
||
|
}
|