diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.form b/Mage.Client/src/main/java/mage/client/table/TablesPanel.form index 3046a0f5b9b..7d5dea9d538 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.form +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.form @@ -1,4 +1,4 @@ - +
@@ -21,8 +21,8 @@ - - + + @@ -32,12 +32,12 @@ - + - + @@ -131,7 +131,7 @@ - + @@ -218,7 +218,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 6277fe040c2..87299957b40 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -162,8 +162,10 @@ public class TablesPanel extends javax.swing.JPanel { session.removeTable(roomId, tableId); } } else if (state.equals("Watch")) { - logger.info("Watching table " + tableId); - session.watchTable(roomId, tableId); + if (!isTournament) { + logger.info("Watching table " + tableId); + session.watchTable(roomId, tableId); + } } else if (state.equals("Replay")) { logger.info("Replaying game " + gameId); // no replay because of memory leaks @@ -653,7 +655,12 @@ class TableTableModel extends AbstractTableModel { if (session != null && owner.equals(session.getUserName())) { return "Remove"; } - return "Watch"; + if (tables[arg0].isTournament()) { + return "None"; + } else { + return "Watch"; + } + case FINISHED: owner = tables[arg0].getControllerName(); if (session != null && owner.equals(session.getUserName())) { diff --git a/Mage.Common/src/mage/view/MatchView.java b/Mage.Common/src/mage/view/MatchView.java index b88b0f52a50..d81cb964357 100644 --- a/Mage.Common/src/mage/view/MatchView.java +++ b/Mage.Common/src/mage/view/MatchView.java @@ -32,8 +32,10 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; import mage.game.Game; +import mage.game.Table; import mage.game.match.Match; import mage.game.match.MatchPlayer; +import mage.game.tournament.TournamentPlayer; /** * @@ -69,6 +71,25 @@ public class MatchView implements Serializable { } + // used for tournaments + public MatchView(Table table) { + this.matchId = table.getTournament().getId(); + this.matchName = table.getName(); + this.gameType = table.getGameType(); + this.deckType = table.getDeckType(); + + StringBuilder sb1 = new StringBuilder(); + for (TournamentPlayer tPlayer : table.getTournament().getPlayers()) { + sb1.append(tPlayer.getPlayer().getName()).append(" (").append(tPlayer.getPoints()).append(" P.) "); + } + this.players = sb1.toString(); + StringBuilder sb2 = new StringBuilder(); + for (TournamentPlayer tPlayer : table.getTournament().getPlayers()) { + sb2.append(tPlayer.getPlayer().getName()).append(": ").append(tPlayer.getResults()).append(" "); + } + this.result = sb2.toString(); + } + public UUID getMatchId() { return matchId; } diff --git a/Mage.Common/src/mage/view/TableView.java b/Mage.Common/src/mage/view/TableView.java index 192ac2bacf9..9d4ef14e825 100644 --- a/Mage.Common/src/mage/view/TableView.java +++ b/Mage.Common/src/mage/view/TableView.java @@ -75,7 +75,11 @@ public class TableView implements Serializable { games.add(game.getId()); } } else { - this.additionalInfo = new StringBuilder("Seats: ").append(table.getTournament().getPlayers().size()).append("/").append(table.getNumberOfSeats()).toString(); + StringBuilder sb = new StringBuilder("Seats: ").append(table.getTournament().getPlayers().size()).append("/").append(table.getNumberOfSeats()); + if (table.getState().equals(TableState.DUELING)) { + sb.append(" - Running round: ").append(table.getTournament().getRounds().size()); + } + this.additionalInfo = sb.toString(); } } diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java index 249a76dbbfc..d541f4537df 100644 --- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java +++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/src/mage/tournament/BoosterDraftEliminationTournament.java @@ -62,7 +62,8 @@ public class BoosterDraftEliminationTournament extends TournamentSingleEliminati } protected void winners() { - throw new UnsupportedOperationException("Not supported yet."); + // TODO: Show winners and tournament result + // throw new UnsupportedOperationException("Not supported yet."); } @Override @@ -83,6 +84,7 @@ public class BoosterDraftEliminationTournament extends TournamentSingleEliminati case COMPETE: currentStep = TournamentStep.WINNERS; winners(); + end(); break; } } diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/src/mage/tournament/SealedEliminationTournament.java b/Mage.Server.Plugins/Mage.Tournament.Sealed/src/mage/tournament/SealedEliminationTournament.java index 19f8808048f..7f8689f9545 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Sealed/src/mage/tournament/SealedEliminationTournament.java +++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/src/mage/tournament/SealedEliminationTournament.java @@ -49,7 +49,8 @@ public class SealedEliminationTournament extends TournamentSingleElimination { } protected void winners() { - throw new UnsupportedOperationException("Not supported yet."); + // TODO: Show winners and tournament result + // throw new UnsupportedOperationException("Not supported yet."); } @Override @@ -70,6 +71,7 @@ public class SealedEliminationTournament extends TournamentSingleElimination { case COMPETE: currentStep = TournamentStep.WINNERS; winners(); + end(); break; } } diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index a2c3a242f7a..870cb3e9cb9 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -418,6 +418,14 @@ public class TableController { table.construct(); } + public void initTournament() { + table.initTournament(); + } + + public void endTournament(Tournament tournament) { + table.endTournament(); + } + public MatchOptions getOptions() { return options; } @@ -483,10 +491,6 @@ public class TableController { tournament.nextStep(); } - public void endTournament(Tournament tournament) { - //TODO: implement this - } - public void swapSeats(int seatNum1, int seatNum2) { if (table.getState() == TableState.STARTING) { if (seatNum1 >= 0 && seatNum2 >= 0 && seatNum1 < table.getSeats().length && seatNum2 < table.getSeats().length) { diff --git a/Mage.Server/src/main/java/mage/server/TableManager.java b/Mage.Server/src/main/java/mage/server/TableManager.java index d1ad2b37e71..2cde70aed9c 100644 --- a/Mage.Server/src/main/java/mage/server/TableManager.java +++ b/Mage.Server/src/main/java/mage/server/TableManager.java @@ -273,6 +273,12 @@ public class TableManager { } } + public void initTournament(UUID tableId) { + if (controllers.containsKey(tableId)) { + controllers.get(tableId).initTournament(); + } + } + public void addPlayer(UUID userId, UUID tableId, Player player, String playerType, Deck deck) throws GameException { if (controllers.containsKey(tableId)) { controllers.get(tableId).addPlayer(userId, player, playerType, deck); diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index c274bb58bec..1984c2242cc 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -95,11 +95,14 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { tableList.add(new TableView(table)); } else if (matchList.size() < 50) { - matchList.add(new MatchView(table.getMatch())); - } else { - // more since 50 matches finished since this match so remobe it if (table.isTournament()) { - // is this possible? + matchList.add(new MatchView(table)); + } else { + matchList.add(new MatchView(table.getMatch())); + } + } else { + // more since 50 matches finished since this match so remove it + if (table.isTournament()) { // Any special action needed? } this.removeTable(table.getId()); diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java index 2a03b42ad20..48edb9c3218 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java @@ -39,6 +39,7 @@ import mage.game.draft.Draft; import mage.game.events.Listener; import mage.game.events.PlayerQueryEvent; import mage.game.events.TableEvent; +import static mage.game.events.TableEvent.EventType.CONSTRUCT; import mage.game.match.MatchOptions; import mage.game.tournament.Tournament; import mage.game.tournament.TournamentPairing; @@ -89,15 +90,17 @@ public class TournamentController { case START_DRAFT: startDraft(event.getDraft()); break; + case CONSTRUCT: + construct(); + break; case START_MATCH: + initTournament(); // set state startMatch(event.getPair(), event.getMatchOptions()); break; // case SUBMIT_DECK: // submitDeck(event.getPlayerId(), event.getDeck()); // break; - case CONSTRUCT: - construct(); - break; + case END: endTournament(); break; @@ -185,6 +188,7 @@ public class TournamentController { tournamentSession.removeTournament(); } TableManager.getInstance().endTournament(tableId, tournament); + } private void startMatch(TournamentPairing pair, MatchOptions matchOptions) { @@ -210,6 +214,10 @@ public class TournamentController { TableManager.getInstance().construct(tableId); } + private void initTournament() { + TableManager.getInstance().initTournament(tableId); + } + private void construct(UUID playerId, int timeout) throws MageException { if (tournamentSessions.containsKey(playerId)) { TournamentSession tournamentSession = tournamentSessions.get(playerId); diff --git a/Mage/src/mage/game/Table.java b/Mage/src/mage/game/Table.java index bfe37b6c9b6..e7a34109e53 100644 --- a/Mage/src/mage/game/Table.java +++ b/Mage/src/mage/game/Table.java @@ -112,6 +112,10 @@ public class Table implements Serializable { state = TableState.DUELING; } + public void endTournament() { + state = TableState.FINISHED; + } + public void initDraft() { state = TableState.DRAFTING; } diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java index c92b799a268..bb35d9e44ed 100644 --- a/Mage/src/mage/game/tournament/TournamentImpl.java +++ b/Mage/src/mage/game/tournament/TournamentImpl.java @@ -278,6 +278,10 @@ public abstract class TournamentImpl implements Tournament { tableEventSource.fireTableEvent(EventType.START_MATCH, pair, options.getMatchOptions()); } + public void end() { + tableEventSource.fireTableEvent(EventType.END); + } + protected abstract void runTournament(); }