From bdd163080d0f4a450c5c05beb1a215f9cadfaf62 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 12 Oct 2014 22:37:39 +0200 Subject: [PATCH] * Draft - Show draft time and draft progress. Show game threads and ma games. Fixed a problem with AI player and password. --- .../src/main/java/mage/client/chat/ChatPanel.java | 11 +++++++---- .../mage/client/dialog/NewTournamentDialog.form | 15 ++++++++++++++- .../mage/client/dialog/NewTournamentDialog.java | 12 ++++++++++-- .../main/java/mage/client/table/TablesPanel.java | 1 - .../mage/client/tournament/TournamentPanel.java | 13 +++++++------ Mage.Common/src/mage/view/RoomUsersView.java | 14 +++++++++++++- Mage.Common/src/mage/view/TournamentView.java | 10 ++++++++++ .../BoosterDraftEliminationTournament.java | 2 +- .../main/java/mage/server/TableController.java | 2 +- .../main/java/mage/server/game/GamesRoomImpl.java | 6 +++++- Mage/src/mage/game/tournament/Tournament.java | 2 ++ Mage/src/mage/game/tournament/TournamentImpl.java | 9 ++++++++- 12 files changed, 78 insertions(+), 19 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java index aaf2a916297..695db98429f 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java @@ -283,8 +283,8 @@ public class ChatPanel extends javax.swing.JPanel { // this.txtConversation.setBackground(new Color(0, 0, 0, 0)); // this.txtConversation.setForeground(new Color(255, 255, 255)); this.txtConversation.setSelectionColor(Color.LIGHT_GRAY); - this.jScrollPaneTxt.setOpaque(false); - this.jScrollPaneTxt.getViewport().setOpaque(false); + this.jScrollPaneTxt.setOpaque(!chatType.equals(ChatType.TABLES)); + this.jScrollPaneTxt.getViewport().setOpaque(!chatType.equals(ChatType.TABLES)); } public void setSplitDividerLocation(int location) { @@ -310,8 +310,11 @@ public class ChatPanel extends javax.swing.JPanel { this.players = roomUserInfo.getUsersView().toArray(new UsersView[0]); JTableHeader th = jTablePlayers.getTableHeader(); TableColumnModel tcm = th.getColumnModel(); - tcm.getColumn(0).setHeaderValue(new StringBuilder("Players").append(" (").append(this.players.length).append(")").toString()); - tcm.getColumn(2).setHeaderValue(new StringBuilder("Games").append(" (").append(roomUserInfo.getNumberActiveGames()).append(")").toString()); + tcm.getColumn(0).setHeaderValue("Players (" + this.players.length + ")"); + tcm.getColumn(2).setHeaderValue( + "Games (" + roomUserInfo.getNumberActiveGames() + + (roomUserInfo.getNumberActiveGames() != roomUserInfo.getNumberGameThreads() ? " T:" + roomUserInfo.getNumberGameThreads():"") + + " max: " + roomUserInfo.getNumberMaxGames() + ")"); th.repaint(); this.fireTableDataChanged(); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form index 2b2ea027583..2f7ffaa1d29 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.form @@ -212,21 +212,26 @@ + + + + + - + @@ -284,6 +289,9 @@ + + + @@ -311,9 +319,13 @@ + + + + @@ -403,6 +415,7 @@ + diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java index 89e6ae1619d..b4397b1d5de 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java @@ -170,13 +170,17 @@ public class NewTournamentDialog extends MageDialog { lblName.setText("Name:"); lbTimeLimit.setText("Time Limit:"); + lbTimeLimit.setToolTipText("The time a player has for the whole match. If a player runs out of time during a game, he loses the complete match. "); org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, cbTimeLimit, org.jdesktop.beansbinding.ObjectProperty.create(), lbTimeLimit, org.jdesktop.beansbinding.BeanProperty.create("labelFor")); bindingGroup.addBinding(binding); - lblPassword.setText("Password:"); + cbTimeLimit.setToolTipText("The time a player has for the whole match. If a player runs out of time during a game, he loses the complete match. "); - txtPassword.setToolTipText("Players have to enter this password to be able to enter the created table."); + lblPassword.setText("Password:"); + lblPassword.setToolTipText("Players have to enter the password to be able to join this table."); + + txtPassword.setToolTipText("Players have to enter the password to be able to join this table."); lblTournamentType.setText("Tournament Type:"); @@ -205,6 +209,7 @@ public class NewTournamentDialog extends MageDialog { lblNumWins.setText("Wins:"); + spnNumWins.setToolTipText("To win a match a player has to win this number of games."); spnNumWins.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spnNumWinsnumPlayersChanged(evt); @@ -221,7 +226,9 @@ public class NewTournamentDialog extends MageDialog { }); lblNumRounds.setText("Number of Swiss Rounds:"); + lblNumRounds.setToolTipText("The number of rounds the swiss tournament has in total.
\nThe tournaments ends after that number of rounds or
\nif there are less than two players left in the tournament."); + spnNumRounds.setToolTipText("The number of rounds the swiss tournament has in total.
\nThe tournaments ends after that number of rounds or
\nif there are less than two players left in the tournament."); spnNumRounds.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { spnNumRoundsnumPlayersChanged(evt); @@ -272,6 +279,7 @@ public class NewTournamentDialog extends MageDialog { ); cbAllowSpectators.setText("Allow spectators"); + cbAllowSpectators.setToolTipText("Allow other players to watch the games of this table."); lblPlayer1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N lblPlayer1.setText("Player 1 (You)"); 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 5c46245c291..82623154538 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -83,7 +83,6 @@ import mage.remote.Session; import mage.view.MatchView; import mage.view.RoomUsersView; import mage.view.TableView; -import mage.view.UsersView; import org.apache.log4j.Logger; /** diff --git a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java index 4da305ff202..cbb5465c023 100644 --- a/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java +++ b/Mage.Client/src/main/java/mage/client/tournament/TournamentPanel.java @@ -213,18 +213,19 @@ public class TournamentPanel extends javax.swing.JPanel { } switch (tournament.getTournamentState()) { case "Constructing": - String constructionTime = ""; + String timeLeft = ""; if (tournament.getStepStartTime() != null) { - constructionTime = Format.getDuration(tournament.getConstructionTime() - (tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000); + timeLeft = Format.getDuration(tournament.getConstructionTime() - (tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000); } - txtTournamentState.setText(new StringBuilder(tournament.getTournamentState()).append(" (").append(constructionTime).append(")").toString()); + txtTournamentState.setText(new StringBuilder(tournament.getTournamentState()).append(" (").append(timeLeft).append(")").toString()); break; case "Dueling": - String duelingTime = ""; + case "Drafting": + String usedTime = ""; if (tournament.getStepStartTime() != null) { - duelingTime = Format.getDuration((tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000); + usedTime = Format.getDuration((tournament.getServerTime().getTime() - tournament.getStepStartTime().getTime())/1000); } - txtTournamentState.setText(new StringBuilder(tournament.getTournamentState()).append(" (").append(duelingTime).append(")").toString()); + txtTournamentState.setText(tournament.getTournamentState() + " (" + usedTime + ") " + tournament.getRunningInfo()); break; default: txtTournamentState.setText(tournament.getTournamentState()); diff --git a/Mage.Common/src/mage/view/RoomUsersView.java b/Mage.Common/src/mage/view/RoomUsersView.java index d9385b31636..1b69f77f35a 100644 --- a/Mage.Common/src/mage/view/RoomUsersView.java +++ b/Mage.Common/src/mage/view/RoomUsersView.java @@ -39,12 +39,16 @@ public class RoomUsersView implements Serializable { private static final long serialVersionUID = 1L; private final int numberActiveGames; + private final int numberGameThreads; + private final int numberMaxGames; private final List usersView; - public RoomUsersView(List usersView, int numberActiveGames) { + public RoomUsersView(List usersView, int numberActiveGames, int numberGameThreads, int numberMaxGames) { this.numberActiveGames = numberActiveGames; + this.numberGameThreads = numberGameThreads; + this.numberMaxGames = numberMaxGames; this.usersView = usersView; } @@ -53,6 +57,14 @@ public class RoomUsersView implements Serializable { return numberActiveGames; } + public int getNumberGameThreads() { + return numberGameThreads; + } + + public int getNumberMaxGames() { + return numberMaxGames; + } + public List getUsersView() { return usersView; } diff --git a/Mage.Common/src/mage/view/TournamentView.java b/Mage.Common/src/mage/view/TournamentView.java index ad07273a02c..ae6ca94a64a 100644 --- a/Mage.Common/src/mage/view/TournamentView.java +++ b/Mage.Common/src/mage/view/TournamentView.java @@ -57,6 +57,7 @@ public class TournamentView implements Serializable { private final List rounds = new ArrayList<>(); private final List players = new ArrayList<>(); + private final String runningInfo; public TournamentView(Tournament tournament) { @@ -77,6 +78,11 @@ public class TournamentView implements Serializable { serverTime = new Date(); tournamentState = tournament.getTournamentState(); + if (tournament.getTournamentState().equals("Drafting") && tournament.getDraft() != null) { + runningInfo = "booster/card: " + tournament.getDraft().getBoosterNum() +"/" + (tournament.getDraft().getCardNum() -1); + } else { + runningInfo = ""; + } for (TournamentPlayer player: tournament.getPlayers()) { players.add(new TournamentPlayerView(player)); } @@ -132,5 +138,9 @@ public class TournamentView implements Serializable { public Date getServerTime() { return serverTime; } + + public String getRunningInfo() { + return runningInfo; + } } 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 f375a816eb6..dd833badda2 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 @@ -55,7 +55,7 @@ public class BoosterDraftEliminationTournament extends TournamentSingleEliminati } protected void draft() { - Draft draft = new BoosterDraft((DraftOptions) options.getLimitedOptions(), getSets()); + draft = new BoosterDraft((DraftOptions) options.getLimitedOptions(), getSets()); for (TournamentPlayer player: players.values()) { draft.addPlayer(player.getPlayer()); player.setState(TournamentPlayerState.DRAFTING); diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 3e993a826ba..f987b539c89 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -249,7 +249,7 @@ public class TableController { return false; } // check password - if (!table.getMatch().getOptions().getPassword().isEmpty()) { + if (!table.getMatch().getOptions().getPassword().isEmpty() && playerType.equals("Human")) { if (!table.getMatch().getOptions().getPassword().equals(password)) { user.showUserMessage("Join Table", "Wrong password."); return false; 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 de9495f36a6..9c669e6af5f 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -129,7 +129,11 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { Collections.sort(users, new UserNameSorter()); List roomUserInfo = new ArrayList<>(); - roomUserInfo.add(new RoomUsersView(users, GameManager.getInstance().getNumberActiveGames())); + roomUserInfo.add(new RoomUsersView(users, + GameManager.getInstance().getNumberActiveGames(), + ThreadExecutor.getInstance().getActiveThreads(ThreadExecutor.getInstance().getGameExecutor()), + ConfigSettings.getInstance().getMaxGameThreads() + )); roomUsersView = roomUserInfo; } diff --git a/Mage/src/mage/game/tournament/Tournament.java b/Mage/src/mage/game/tournament/Tournament.java index 046afbe0a93..9f4abe7a861 100644 --- a/Mage/src/mage/game/tournament/Tournament.java +++ b/Mage/src/mage/game/tournament/Tournament.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.UUID; import mage.cards.ExpansionSet; import mage.cards.decks.Deck; +import mage.game.draft.Draft; import mage.game.events.Listener; import mage.game.events.PlayerQueryEvent; import mage.game.events.TableEvent; @@ -93,4 +94,5 @@ public interface Tournament { void cleanUpOnTournamentEnd(); boolean isAbort(); void setAbort(boolean abort); + Draft getDraft(); } diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java index 7dd636b8d62..e92f50ee41c 100644 --- a/Mage/src/mage/game/tournament/TournamentImpl.java +++ b/Mage/src/mage/game/tournament/TournamentImpl.java @@ -41,6 +41,7 @@ import mage.cards.Card; import mage.cards.ExpansionSet; import mage.cards.decks.Deck; import mage.constants.TournamentPlayerState; +import mage.game.draft.Draft; import mage.game.draft.DraftCube; import mage.game.events.Listener; import mage.game.events.PlayerQueryEvent; @@ -77,9 +78,11 @@ public abstract class TournamentImpl implements Tournament { protected Date stepStartTime; protected boolean abort; protected String tournamentState; - + protected Draft draft; + public TournamentImpl(TournamentOptions options) { this.options = options; + draft = null; startTime = new Date(); abort = false; } @@ -501,5 +504,9 @@ public abstract class TournamentImpl implements Tournament { this.stepStartTime = stepStartTime; } + @Override + public Draft getDraft() { + return draft; + } }