/* * Copyright 2011 BetaSteward_at_googlemail.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ package mage.game.tournament; import mage.cards.decks.Deck; import mage.constants.TournamentPlayerState; import mage.game.result.ResultProtos.TourneyPlayerProto; import mage.game.result.ResultProtos.TourneyQuitStatus; import mage.players.Player; import mage.players.PlayerType; import mage.util.TournamentUtil; import java.util.Set; /** * * @author BetaSteward_at_googlemail.com */ public class TournamentPlayer { protected int points; protected PlayerType playerType; protected TournamentPlayerState state; protected String stateInfo; protected String disconnectInfo; protected Player player; protected Deck deck; protected String results; protected boolean eliminated = false; protected boolean quit = false; protected boolean doneConstructing; protected boolean joined = false; protected TourneyQuitStatus quitStatus = TourneyQuitStatus.NO_TOURNEY_QUIT; protected TournamentPlayer replacedTournamentPlayer; public TournamentPlayer(Player player, PlayerType playerType) { this.player = player; this.playerType = playerType; this.state = TournamentPlayerState.JOINED; this.stateInfo = ""; this.disconnectInfo = ""; this.results = ""; } public Player getPlayer() { return player; } public PlayerType getPlayerType() { return playerType; } public Deck getDeck() { return deck; } public int getPoints() { return points; } public void setPoints(int points) { this.points = points; } public boolean isEliminated() { return eliminated; } public void setEliminated() { this.setDisconnectInfo(""); this.setState(TournamentPlayerState.ELIMINATED); this.eliminated = true; } public boolean isJoined() { return joined; } public void setJoined() { this.joined = true; } public void setConstructing() { this.setState(TournamentPlayerState.CONSTRUCTING); this.doneConstructing = false; } public void submitDeck(Deck deck) { this.deck = deck; // Check if player manipulated available cards??? this.doneConstructing = true; this.setState(TournamentPlayerState.WAITING); } public void updateDeck(Deck deck) { this.deck = deck; } public Deck generateDeck() { // user passed to submit deck in time // all all cards to deck deck.getCards().addAll(deck.getSideboard()); deck.getSideboard().clear(); // add lands to deck int landsPerType = 7; if (deck.getCards().size() >= 90) { landsPerType = 14; } Set<String> landSets = TournamentUtil.getLandSetCodeForDeckSets(deck.getExpansionSetCodes()); deck.getCards().addAll(TournamentUtil.getLands("Mountain", landsPerType, landSets)); deck.getCards().addAll(TournamentUtil.getLands("Plains", landsPerType, landSets)); deck.getCards().addAll(TournamentUtil.getLands("Swamp", landsPerType, landSets)); deck.getCards().addAll(TournamentUtil.getLands("Forest", landsPerType, landSets)); deck.getCards().addAll(TournamentUtil.getLands("Island", landsPerType, landSets)); this.doneConstructing = true; this.setState(TournamentPlayerState.WAITING); return deck; } public boolean isDoneConstructing() { return this.doneConstructing; } public void setDeck(Deck deck) { this.deck = deck; } public String getResults() { return this.results; } public void setResults(String results) { this.results = results; } public TournamentPlayerState getState() { return state; } public void setState(TournamentPlayerState state) { this.state = state; } public String getStateInfo() { return stateInfo; } public void setStateInfo(String stateInfo) { this.stateInfo = stateInfo; } public String getDisconnectInfo() { return disconnectInfo; } public void setDisconnectInfo(String disconnectInfo) { this.disconnectInfo = disconnectInfo; } public boolean hasQuit() { return quit; } public void setQuit(String info, TourneyQuitStatus status) { setEliminated(); this.setState(TournamentPlayerState.CANCELED); this.setStateInfo(info); this.quit = true; this.doneConstructing = true; this.quitStatus = status; } /** * Free resources no longer needed if tournament has ended * */ public void CleanUpOnTournamentEnd() { this.deck = null; } public void setStateAtTournamentEnd() { if (this.getState() == TournamentPlayerState.DRAFTING || this.getState() == TournamentPlayerState.CONSTRUCTING || this.getState() == TournamentPlayerState.DUELING || this.getState() == TournamentPlayerState.SIDEBOARDING || this.getState() == TournamentPlayerState.WAITING) { this.setState(TournamentPlayerState.FINISHED); } } public boolean isInTournament() { return !(this.getState() == TournamentPlayerState.CANCELED) && !(this.getState() == TournamentPlayerState.ELIMINATED) && !(this.getState() == TournamentPlayerState.FINISHED); } public TournamentPlayer getReplacedTournamentPlayer() { return this.replacedTournamentPlayer; } public void setReplacedTournamentPlayer(TournamentPlayer player) { this.replacedTournamentPlayer = player; } public TourneyPlayerProto toProto() { return TourneyPlayerProto.newBuilder() .setName(this.player.getName()) .setPlayerType(this.playerType.toString()) .setQuit(this.quitStatus) .build(); } }