package tc.oc.pgm.victory;
import tc.oc.pgm.match.Competitor;
/**
* Extends {@link MatchResult} with a priority property, and the ability to
* decide when the match is over.
*/
public interface VictoryCondition {
/**
* It's lame that all the subclasses need to be listed here,
* but I can't come up with a better way to ensure they are
* evaluated in the right order that isn't overly complex
* or prone to bugs.
*/
enum Priority {
IMMEDIATE,
TIME_LIMIT,
SCORE,
GOALS,
BLITZ
}
Priority priority();
/**
* Test if this victory condition has been satisfied for the given match.
* When this returns true, the match will end, and the lowest {@link Competitor}s
* in the ordering will be the winners.
*/
boolean isCompleted();
MatchResult result();
}