package mage.game.match; import mage.constants.MatchTimeLimit; import mage.constants.MultiplayerAttackOption; import mage.constants.RangeOfInfluence; import mage.constants.SkillLevel; import mage.game.result.ResultProtos; import mage.players.PlayerType; import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * * @author BetaSteward_at_googlemail.com */ public class MatchOptions implements Serializable { protected String name; protected MultiplayerAttackOption attackOption; protected RangeOfInfluence range; protected int winsNeeded; protected int freeMulligans; protected String gameType; protected String deckType; protected boolean limited; protected List playerTypes = new ArrayList<>(); protected boolean multiPlayer; protected int numSeats; protected String password; protected SkillLevel skillLevel; protected boolean rollbackTurnsAllowed; protected boolean spectatorsAllowed; protected boolean planeChase; protected int quitRatio; protected int minimumRating; protected int edhPowerLevel; protected boolean rated; protected int numSeatsForMatch; protected Set bannedUsers = new HashSet<>(); /** * Time each player has during the game to play using his\her priority. */ protected MatchTimeLimit matchTimeLimit; // 0 = no priorityTime handling /*public MatchOptions(String name, String gameType) { this.name = name; this.gameType = gameType; this.password = ""; this.multiPlayer = false; this.numSeats = 2; }*/ public MatchOptions(String name, String gameType, boolean multiPlayer, int numSeats) { this.name = name; this.gameType = gameType; this.password = ""; this.multiPlayer = multiPlayer; this.numSeats = numSeats; } public void setNumSeats (int numSeats) { this.numSeats = numSeats; } public int getNumSeats () { return numSeats; } public void setMultiPlayer(boolean multiPlayer) { this.multiPlayer = multiPlayer; } public boolean getMultiPlayer() { return multiPlayer; } public String getName() { return name; } public MultiplayerAttackOption getAttackOption() { return attackOption; } public void setAttackOption(MultiplayerAttackOption attackOption) { this.attackOption = attackOption; } public RangeOfInfluence getRange() { return range; } public void setRange(RangeOfInfluence range) { this.range = range; } public int getWinsNeeded() { return winsNeeded; } public void setWinsNeeded(int winsNeeded) { this.winsNeeded = winsNeeded; } public int getFreeMulligans() { return freeMulligans; } public void setFreeMulligans(int freeMulligans) { this.freeMulligans = freeMulligans; } public String getGameType() { return gameType; } public void setGameType(String gameType) { this.gameType = gameType; } public String getDeckType() { return deckType; } public void setDeckType(String deckType) { this.deckType = deckType; } public List getPlayerTypes() { return playerTypes; } public boolean isLimited() { return limited; } public void setLimited(boolean limited) { this.limited = limited; } public int getPriorityTime() { if (matchTimeLimit == null) { return MatchTimeLimit.NONE.getTimeLimit(); } return matchTimeLimit.getTimeLimit(); } public MatchTimeLimit getMatchTimeLimit() { return this.matchTimeLimit; } public void setMatchTimeLimit(MatchTimeLimit matchTimeLimit) { this.matchTimeLimit = matchTimeLimit; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public SkillLevel getSkillLevel() { return skillLevel; } public void setSkillLevel(SkillLevel skillLevel) { this.skillLevel = skillLevel; } public boolean isRollbackTurnsAllowed() { return rollbackTurnsAllowed; } public void setRollbackTurnsAllowed(boolean rollbackTurnsAllowed) { this.rollbackTurnsAllowed = rollbackTurnsAllowed; } public boolean isSpectatorsAllowed() { return spectatorsAllowed; } public void setSpectatorsAllowed(boolean spectatorsAllowed) { this.spectatorsAllowed = spectatorsAllowed; } public boolean isPlaneChase() { return planeChase; } public void setPlaneChase(boolean planeChase) { this.planeChase = planeChase; } public int getQuitRatio() { return quitRatio; } public void setQuitRatio(int quitRatio) { this.quitRatio = quitRatio; } public int getMinimumRating() { return minimumRating; } public void setMinimumRating(int minimumRating) { this.minimumRating = minimumRating; } public int getEdhPowerLevel() { return edhPowerLevel; } public void setEdhPowerLevel(int edhPowerLevel) { this.edhPowerLevel = edhPowerLevel; } public boolean isRated() { return rated; } public void setRated(boolean rated) { this.rated = rated; } public Set getBannedUsers() { return bannedUsers; } public void setBannedUsers(Set bannedUsers) { this.bannedUsers = bannedUsers; } public ResultProtos.MatchOptionsProto toProto() { ResultProtos.MatchOptionsProto.Builder builder = ResultProtos.MatchOptionsProto.newBuilder() .setName(this.getName()) .setLimited(this.isLimited()) .setRated(this.isRated()) .setWinsNeeded(this.getWinsNeeded()); ResultProtos.SkillLevel skillLevel = ResultProtos.SkillLevel.BEGINNER; switch (this.getSkillLevel()) { case BEGINNER: skillLevel = ResultProtos.SkillLevel.BEGINNER; break; case CASUAL: skillLevel = ResultProtos.SkillLevel.CASUAL; break; case SERIOUS: skillLevel = ResultProtos.SkillLevel.SERIOUS; break; } builder.setSkillLevel(skillLevel); return builder.build(); } }