Lobby and NetServer moved out of FControl to allow their usage without Gui loaded (and FControl instantiated)

This commit is contained in:
Maxmtg
2013-07-22 06:40:36 +00:00
parent f3a6b9f536
commit ec1f2aa35a
27 changed files with 114 additions and 83 deletions

3
.gitattributes vendored
View File

@@ -14579,7 +14579,6 @@ src/main/java/forge/control/FControlGameEventHandler.java -text
src/main/java/forge/control/FControlGamePlayback.java -text src/main/java/forge/control/FControlGamePlayback.java -text
src/main/java/forge/control/InputQueue.java svneol=native#text/plain src/main/java/forge/control/InputQueue.java svneol=native#text/plain
src/main/java/forge/control/KeyboardShortcuts.java -text src/main/java/forge/control/KeyboardShortcuts.java -text
src/main/java/forge/control/Lobby.java -text
src/main/java/forge/control/RestartUtil.java -text src/main/java/forge/control/RestartUtil.java -text
src/main/java/forge/control/package-info.java -text src/main/java/forge/control/package-info.java -text
src/main/java/forge/deck/CardCollections.java -text src/main/java/forge/deck/CardCollections.java -text
@@ -14975,8 +14974,10 @@ src/main/java/forge/model/BuildInfo.java -text
src/main/java/forge/model/FModel.java svneol=native#text/plain src/main/java/forge/model/FModel.java svneol=native#text/plain
src/main/java/forge/model/MultipleForgeJarsFoundError.java -text src/main/java/forge/model/MultipleForgeJarsFoundError.java -text
src/main/java/forge/model/package-info.java svneol=native#text/plain src/main/java/forge/model/package-info.java svneol=native#text/plain
src/main/java/forge/net/FServer.java -text
src/main/java/forge/net/IClientSocket.java -text src/main/java/forge/net/IClientSocket.java -text
src/main/java/forge/net/IConnectionObserver.java -text src/main/java/forge/net/IConnectionObserver.java -text
src/main/java/forge/net/Lobby.java -text
src/main/java/forge/net/NetServer.java -text src/main/java/forge/net/NetServer.java -text
src/main/java/forge/net/client/INetClient.java -text src/main/java/forge/net/client/INetClient.java -text
src/main/java/forge/net/client/InvalidFieldInPacketException.java -text src/main/java/forge/net/client/InvalidFieldInPacketException.java -text

View File

@@ -29,6 +29,7 @@ import forge.game.player.LobbyPlayer;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerStatistics; import forge.game.player.PlayerStatistics;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.net.FServer;
import forge.util.Lang; import forge.util.Lang;
import forge.util.maps.MapOfLists; import forge.util.maps.MapOfLists;
@@ -42,7 +43,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base<GameLogEntry> {
@Override @Override
public GameLogEntry visit(GameEventGameOutcome ev) { public GameLogEntry visit(GameEventGameOutcome ev) {
// add result entries to the game log // add result entries to the game log
final LobbyPlayer human = Singletons.getControl().getLobby().getGuiPlayer(); final LobbyPlayer human = FServer.instance.getLobby().getGuiPlayer();
// This adds some extra entries to log // This adds some extra entries to log
final List<String> outcomes = new ArrayList<String>(); final List<String> outcomes = new ArrayList<String>();

View File

@@ -62,7 +62,7 @@ import forge.gui.match.controllers.CStack;
import forge.gui.match.nonsingleton.VField; import forge.gui.match.nonsingleton.VField;
import forge.gui.match.views.VAntes; import forge.gui.match.views.VAntes;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.net.NetServer; import forge.net.FServer;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.properties.NewConstants; import forge.properties.NewConstants;
import forge.quest.QuestController; import forge.quest.QuestController;
@@ -316,27 +316,16 @@ public enum FControl {
if (children.length != 0) { children[0].setSize(display.getSize()); } if (children.length != 0) { children[0].setSize(display.getSize()); }
} }
/**
* TODO: Write javadoc for this method.
* @return
*/
private Lobby lobby = null;
public Lobby getLobby() {
if (lobby == null) {
lobby = new Lobby();
}
return lobby;
}
public Player getCurrentPlayer() { public Player getCurrentPlayer() {
// try current priority // try current priority
Player currentPriority = game.getPhaseHandler().getPriorityPlayer(); Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
if( null != currentPriority && currentPriority.getLobbyPlayer() == getLobby().getGuiPlayer() ) if( null != currentPriority && currentPriority.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() )
return currentPriority; return currentPriority;
// otherwise find just any player, belonging to this lobbyplayer // otherwise find just any player, belonging to this lobbyplayer
for(Player p : game.getPlayers()) for(Player p : game.getPlayers())
if(p.getLobbyPlayer() == getLobby().getGuiPlayer() ) if(p.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() )
return p; return p;
return null; return null;
@@ -354,16 +343,6 @@ public enum FControl {
return soundSystem; return soundSystem;
} }
/**
* TODO: Write javadoc for this method.
* @return
*/
private final NetServer server = new NetServer();
public NetServer getServer() {
// TODO Auto-generated method stub
return server;
}
private Game game; private Game game;
private boolean gameHasHumanPlayer; private boolean gameHasHumanPlayer;
@@ -374,7 +353,7 @@ public enum FControl {
public final void stopGame() { public final void stopGame() {
List<Player> pp = new ArrayList<Player>(); List<Player> pp = new ArrayList<Player>();
for(Player p : game.getPlayers()) { for(Player p : game.getPlayers()) {
if ( p.getOriginalLobbyPlayer() == getLobby().getGuiPlayer() ) if ( p.getOriginalLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() )
pp.add(p); pp.add(p);
} }
boolean hasHuman = !pp.isEmpty(); boolean hasHuman = !pp.isEmpty();
@@ -386,7 +365,7 @@ public enum FControl {
p.concede(); p.concede();
Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer(); Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer();
boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == getLobby().getGuiPlayer(); boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer();
if ( hasHuman && humanHasPriority ) if ( hasHuman && humanHasPriority )
game.getAction().checkGameOverCondition(); game.getAction().checkGameOverCondition();
@@ -428,7 +407,7 @@ public enum FControl {
this.game = game0; this.game = game0;
game.subscribeToEvents(Singletons.getControl().getSoundSystem()); game.subscribeToEvents(Singletons.getControl().getSoundSystem());
LobbyPlayer humanLobbyPlayer = getLobby().getGuiPlayer(); LobbyPlayer humanLobbyPlayer = FServer.instance.getLobby().getGuiPlayer();
// The UI controls should use these game data as models // The UI controls should use these game data as models
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer); CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer); CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer);
@@ -449,7 +428,7 @@ public enum FControl {
// Add playback controls to match if needed // Add playback controls to match if needed
gameHasHumanPlayer = false; gameHasHumanPlayer = false;
for(Player p : game.getPlayers()) { for(Player p : game.getPlayers()) {
if ( p.getController().getLobbyPlayer() == getLobby().getGuiPlayer() ) if ( p.getController().getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() )
gameHasHumanPlayer = true; gameHasHumanPlayer = true;
} }

View File

@@ -53,6 +53,7 @@ import forge.gui.match.controllers.CMessage;
import forge.gui.match.controllers.CStack; import forge.gui.match.controllers.CStack;
import forge.gui.match.nonsingleton.VHand; import forge.gui.match.nonsingleton.VHand;
import forge.gui.toolbox.special.PhaseLabel; import forge.gui.toolbox.special.PhaseLabel;
import forge.net.FServer;
import forge.util.maps.MapOfLists; import forge.util.maps.MapOfLists;
public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> { public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@@ -138,7 +139,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
return null; return null;
FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() { FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() {
CMatchUI.SINGLETON_INSTANCE.initHandViews(fc.getLobby().getGuiPlayer()); CMatchUI.SINGLETON_INSTANCE.initHandViews(FServer.instance.getLobby().getGuiPlayer());
VMatchUI.SINGLETON_INSTANCE.populate(); VMatchUI.SINGLETON_INSTANCE.populate();
for(VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) { for(VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) {
h.getLayoutControl().updateHand(); h.getLayoutControl().updateHand();
@@ -282,7 +283,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@Override @Override
public Void visit(GameEventAttackersDeclared event) { public Void visit(GameEventAttackersDeclared event) {
// Skip redraw for GUI player? // Skip redraw for GUI player?
if ( event.player.getLobbyPlayer() == fc.getLobby().getGuiPlayer() ) if ( event.player.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() )
return null; return null;
// Update all attackers. // Update all attackers.

View File

@@ -24,12 +24,13 @@ import javax.swing.SwingUtilities;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.GameType; import forge.game.GameType;
import forge.game.Match; import forge.game.Match;
import forge.game.RegisteredPlayer; import forge.game.RegisteredPlayer;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* <p> * <p>
@@ -162,7 +163,7 @@ public class GauntletMini {
}); });
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
starter.add(RegisteredPlayer.fromDeck(humanDeck).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(humanDeck).setPlayer(lobby.getGuiPlayer()));
starter.add(aiOpponents.get(currentRound - 1).setPlayer(lobby.getAiPlayer())); starter.add(aiOpponents.get(currentRound - 1).setPlayer(lobby.getAiPlayer()));
final Match mc = new Match(gauntletType, starter); final Match mc = new Match(gauntletType, starter);

View File

@@ -17,14 +17,14 @@ import javax.swing.ScrollPaneConstants;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.Singletons;
import forge.control.ChatArea; import forge.control.ChatArea;
import forge.control.Lobby;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FTextArea; import forge.gui.toolbox.FTextArea;
import forge.gui.toolbox.FTextField; import forge.gui.toolbox.FTextField;
import forge.gui.toolbox.SmartScroller; import forge.gui.toolbox.SmartScroller;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
@@ -57,7 +57,7 @@ public enum FNetOverlay {
if ( StringUtils.isBlank(message) ) if ( StringUtils.isBlank(message) )
return; return;
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
lobby.speak(ChatArea.Room, lobby.getGuiPlayer(), message); lobby.speak(ChatArea.Room, lobby.getGuiPlayer(), message);
} }
}; };

View File

@@ -9,6 +9,7 @@ import forge.gui.deckeditor.controllers.CEditorConstructed;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.home.sanctioned.VSubmenuConstructed; import forge.gui.home.sanctioned.VSubmenuConstructed;
import forge.net.FServer;
import forge.net.NetServer; import forge.net.NetServer;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.NewConstants; import forge.properties.NewConstants;
@@ -81,7 +82,7 @@ public enum CHomeUI implements ICDoc {
VHomeUI.SINGLETON_INSTANCE.getLblStartServer().setCommand(new Runnable() { VHomeUI.SINGLETON_INSTANCE.getLblStartServer().setCommand(new Runnable() {
@Override @Override
public void run() { public void run() {
NetServer srv = Singletons.getControl().getServer(); NetServer srv = FServer.instance.getServer();
srv.listen(NewConstants.SERVER_PORT_NUMBER); srv.listen(NewConstants.SERVER_PORT_NUMBER);
VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setEnabled(true); VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setEnabled(true);
@@ -94,7 +95,7 @@ public enum CHomeUI implements ICDoc {
VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setCommand(new Runnable() { VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setCommand(new Runnable() {
@Override @Override
public void run() { public void run() {
Singletons.getControl().getServer().stop(); FServer.instance.getServer().stop();
VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setEnabled(false); VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setEnabled(false);
VHomeUI.SINGLETON_INSTANCE.getLblStartServer().setEnabled(true); VHomeUI.SINGLETON_INSTANCE.getLblStartServer().setEnabled(true);

View File

@@ -14,7 +14,6 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
import forge.game.GameType; import forge.game.GameType;
@@ -24,6 +23,8 @@ import forge.gauntlet.GauntletData;
import forge.gauntlet.GauntletIO; import forge.gauntlet.GauntletIO;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* Controls the "gauntlet contests" submenu in the home UI. * Controls the "gauntlet contests" submenu in the home UI.
@@ -118,7 +119,7 @@ public enum CSubmenuGauntletContests implements ICDoc {
Deck aiDeck = gd.getDecks().get(gd.getCompleted()); Deck aiDeck = gd.getDecks().get(gd.getCompleted());
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer()));

View File

@@ -12,7 +12,6 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.GameType; import forge.game.GameType;
import forge.game.Match; import forge.game.Match;
@@ -22,6 +21,8 @@ import forge.gauntlet.GauntletIO;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.home.VHomeUI; import forge.gui.home.VHomeUI;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* Controls the "quick gauntlet" submenu in the home UI. * Controls the "quick gauntlet" submenu in the home UI.
@@ -110,7 +111,7 @@ public enum CSubmenuGauntletLoad implements ICDoc {
final Deck aiDeck = gd.getDecks().get(gd.getCompleted()); final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer()));

View File

@@ -13,7 +13,6 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
import forge.deck.DeckgenUtil.DeckTypes; import forge.deck.DeckgenUtil.DeckTypes;
@@ -24,6 +23,8 @@ import forge.gauntlet.GauntletData;
import forge.gauntlet.GauntletIO; import forge.gauntlet.GauntletIO;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* Controls the "quick gauntlet" submenu in the home UI. * Controls the "quick gauntlet" submenu in the home UI.
@@ -144,7 +145,7 @@ public enum CSubmenuGauntletQuick implements ICDoc {
final Deck aiDeck = gd.getDecks().get(gd.getCompleted()); final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer()));

View File

@@ -14,7 +14,6 @@ import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.control.FControl; import forge.control.FControl;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.GameType; import forge.game.GameType;
import forge.game.Match; import forge.game.Match;
@@ -25,6 +24,8 @@ import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorQuestCardShop; import forge.gui.deckeditor.controllers.CEditorQuestCardShop;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.net.FServer;
import forge.net.Lobby;
import forge.quest.QuestController; import forge.quest.QuestController;
import forge.quest.QuestEvent; import forge.quest.QuestEvent;
import forge.quest.QuestEventChallenge; import forge.quest.QuestEventChallenge;
@@ -433,10 +434,9 @@ public class SSubmenuQuestUtil {
} }
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
starter.add(humanStart.setPlayer(lobby.getQuestPlayer())); starter.add(humanStart.setPlayer(lobby.getQuestPlayer()));
LobbyPlayer aiPlayer = FServer.instance.getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent());
LobbyPlayer aiPlayer = Singletons.getControl().getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent());
aiPlayer.setIconImageKey(event.getIconImageKey()); aiPlayer.setIconImageKey(event.getIconImageKey());
starter.add(aiStart.setPlayer(aiPlayer)); starter.add(aiStart.setPlayer(aiPlayer));

View File

@@ -10,13 +10,14 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.game.GameType; import forge.game.GameType;
import forge.game.Match; import forge.game.Match;
import forge.game.RegisteredPlayer; import forge.game.RegisteredPlayer;
import forge.game.player.LobbyPlayer; import forge.game.player.LobbyPlayer;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.net.FServer;
import forge.net.Lobby;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
@@ -116,8 +117,7 @@ public enum CSubmenuConstructed implements ICDoc {
JOptionPane.showMessageDialog(null, "Left-side deck " + aiDeckErrorMessage, "Invalid deck", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null, "Left-side deck " + aiDeckErrorMessage, "Invalid deck", JOptionPane.ERROR_MESSAGE);
return; return;
} }
Lobby lobby = FServer.instance.getLobby();
Lobby lobby = Singletons.getControl().getLobby();
LobbyPlayer rightPlayer = view.isRightPlayerAi() ? lobby.getAiPlayer() : lobby.getGuiPlayer(); LobbyPlayer rightPlayer = view.isRightPlayerAi() ? lobby.getAiPlayer() : lobby.getGuiPlayer();
LobbyPlayer leftPlayer = view.isLeftPlayerAi() ? lobby.getAiPlayer() : lobby.getGuiPlayer(); LobbyPlayer leftPlayer = view.isLeftPlayerAi() ? lobby.getAiPlayer() : lobby.getGuiPlayer();

View File

@@ -13,7 +13,6 @@ import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl; import forge.control.FControl;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
import forge.game.GameType; import forge.game.GameType;
@@ -26,6 +25,8 @@ import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorDraftingProcess; import forge.gui.deckeditor.controllers.CEditorDraftingProcess;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* Controls the draft submenu in the home UI. * Controls the draft submenu in the home UI.
@@ -132,7 +133,7 @@ public enum CSubmenuDraft implements ICDoc {
} }
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
starter.add(RegisteredPlayer.fromDeck(humanDeck).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(humanDeck).setPlayer(lobby.getGuiPlayer()));
starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer()));

View File

@@ -14,7 +14,6 @@ import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl; import forge.control.FControl;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
@@ -30,6 +29,8 @@ import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FList; import forge.gui.toolbox.FList;
import forge.gui.toolbox.special.FDeckChooser; import forge.gui.toolbox.special.FDeckChooser;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.net.FServer;
import forge.net.Lobby;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.util.Aggregates; import forge.util.Aggregates;
@@ -218,7 +219,7 @@ public enum CSubmenuArchenemy implements ICDoc {
SOverlayUtils.startGameOverlay(); SOverlayUtils.startGameOverlay();
SOverlayUtils.showOverlay(); SOverlayUtils.showOverlay();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>();
for (int i = 0; i < view.getNumPlayers(); i++) { for (int i = 0; i < view.getNumPlayers(); i++) {

View File

@@ -14,7 +14,6 @@ import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl; import forge.control.FControl;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
@@ -31,6 +30,8 @@ import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FList; import forge.gui.toolbox.FList;
import forge.gui.toolbox.special.FDeckChooser; import forge.gui.toolbox.special.FDeckChooser;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.net.FServer;
import forge.net.Lobby;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.util.Aggregates; import forge.util.Aggregates;
@@ -149,7 +150,7 @@ public enum CSubmenuPlanechase implements ICDoc {
/** @param lists0 &emsp; {@link java.util.List}<{@link javax.swing.JList}> */ /** @param lists0 &emsp; {@link java.util.List}<{@link javax.swing.JList}> */
private void startGame() { private void startGame() {
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
List<RegisteredPlayer> helper = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> helper = new ArrayList<RegisteredPlayer>();
List<Deck> playerDecks = new ArrayList<Deck>(); List<Deck> playerDecks = new ArrayList<Deck>();
for (int i = 0; i < view.getNumPlayers(); i++) { for (int i = 0; i < view.getNumPlayers(); i++) {

View File

@@ -13,7 +13,6 @@ import com.google.common.collect.Iterables;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
import forge.game.GameType; import forge.game.GameType;
@@ -25,6 +24,8 @@ import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.toolbox.special.FDeckChooser; import forge.gui.toolbox.special.FDeckChooser;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.net.FServer;
import forge.net.Lobby;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
@@ -171,7 +172,7 @@ public enum CSubmenuVanguard implements ICDoc {
GuiDialog.message(defaultAvatarInfo.toString()); GuiDialog.message(defaultAvatarInfo.toString());
} }
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
List<RegisteredPlayer> helper = new ArrayList<RegisteredPlayer>(); List<RegisteredPlayer> helper = new ArrayList<RegisteredPlayer>();
for (int i = 0; i < view.getNumPlayers(); i++) { for (int i = 0; i < view.getNumPlayers(); i++) {
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer(); LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();

View File

@@ -22,6 +22,7 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.net.FServer;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
/** /**
@@ -144,10 +145,10 @@ public class ControlWinLose {
for (int i = 0; i < cntPlayers; i++ ) { for (int i = 0; i < cntPlayers; i++ ) {
Player fromGame = lastGame.getRegisteredPlayers().get(i); Player fromGame = lastGame.getRegisteredPlayers().get(i);
if( !fromGame.hasWon()) continue; // not a loser if( !fromGame.hasWon()) continue;
// offer to winner, if he is local human // offer to winner, if he is local human
if (fromGame.getController().getLobbyPlayer() == Singletons.getControl().getLobby().getGuiPlayer()) { if (fromGame.getController().getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer()) {
List<PaperCard> chosen = GuiChoose.noneOrMany("Select cards to add to your deck", losses); List<PaperCard> chosen = GuiChoose.noneOrMany("Select cards to add to your deck", losses);
if (null != chosen) { if (null != chosen) {
RegisteredPlayer psc = match.getPlayers().get(i); RegisteredPlayer psc = match.getPlayers().get(i);

View File

@@ -28,7 +28,6 @@ import com.google.common.collect.Lists;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.Singletons; import forge.Singletons;
import forge.control.Lobby;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.Game; import forge.game.Game;
import forge.game.GameType; import forge.game.GameType;
@@ -40,6 +39,8 @@ import forge.gauntlet.GauntletIO;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.net.FServer;
import forge.net.Lobby;
/** /**
* The Win/Lose handler for 'gauntlet' type tournament * The Win/Lose handler for 'gauntlet' type tournament
@@ -81,13 +82,13 @@ public class GauntletWinLose extends ControlWinLose {
lstEventRecords.set(gd.getCompleted(), "Ongoing"); lstEventRecords.set(gd.getCompleted(), "Ongoing");
final Match match = lastGame.getMatch(); final Match match = lastGame.getMatch();
// Match won't be saved until it is over. This opens up a cheat // Match won't be saved until it is over. This opens up a cheat
// or failsafe mechanism (depending on your perspective) in which // or failsafe mechanism (depending on your perspective) in which
// the player can restart Forge to replay a match. // the player can restart Forge to replay a match.
// Pretty sure this can't be fixed until in-game states can be // Pretty sure this can't be fixed until in-game states can be
// saved. Doublestrike 07-10-12 // saved. Doublestrike 07-10-12
LobbyPlayer questPlayer = Singletons.getControl().getLobby().getQuestPlayer(); LobbyPlayer questPlayer = FServer.instance.getLobby().getQuestPlayer();
// In all cases, update stats. // In all cases, update stats.
lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - " lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - "
@@ -201,7 +202,7 @@ public class GauntletWinLose extends ControlWinLose {
GauntletData gd = Singletons.getModel().getGauntletData(); GauntletData gd = Singletons.getModel().getGauntletData();
Deck aiDeck = gd.getDecks().get(gd.getCompleted()); Deck aiDeck = gd.getDecks().get(gd.getCompleted());
List<RegisteredPlayer> players = Lists.newArrayList(); List<RegisteredPlayer> players = Lists.newArrayList();
Lobby lobby = Singletons.getControl().getLobby(); Lobby lobby = FServer.instance.getLobby();
players.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); players.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
players.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); players.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer()));

View File

@@ -29,6 +29,7 @@ import forge.game.Game;
import forge.game.limited.GauntletMini; import forge.game.limited.GauntletMini;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.net.FServer;
/** /**
* The Win/Lose handler for 'gauntlet' type tournament * The Win/Lose handler for 'gauntlet' type tournament
@@ -58,7 +59,7 @@ public class LimitedWinLose extends ControlWinLose {
super(view0, lastGame); super(view0, lastGame);
this.view = view0; this.view = view0;
gauntlet = Singletons.getModel().getGauntletMini(); gauntlet = Singletons.getModel().getGauntletMini();
this.wonMatch = lastGame.getMatch().isWonBy(Singletons.getControl().getLobby().getGuiPlayer()); this.wonMatch = lastGame.getMatch().isWonBy(FServer.instance.getLobby().getGuiPlayer());
} }
@@ -79,7 +80,7 @@ public class LimitedWinLose extends ControlWinLose {
resetView(); resetView();
nextRound = false; nextRound = false;
if (lastGame.getOutcome().isWinner(Singletons.getControl().getLobby().getGuiPlayer())) { if (lastGame.getOutcome().isWinner(FServer.instance.getLobby().getGuiPlayer())) {
gauntlet.addWin(); gauntlet.addWin();
} else { } else {
gauntlet.addLoss(); gauntlet.addLoss();

View File

@@ -60,6 +60,7 @@ import forge.item.PaperCard;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.OpenablePack; import forge.item.OpenablePack;
import forge.item.TournamentPack; import forge.item.TournamentPack;
import forge.net.FServer;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.quest.IQuestRewardCard; import forge.quest.IQuestRewardCard;
import forge.quest.QuestController; import forge.quest.QuestController;
@@ -108,7 +109,7 @@ public class QuestWinLose extends ControlWinLose {
this.view = view0; this.view = view0;
qData = Singletons.getModel().getQuest(); qData = Singletons.getModel().getQuest();
qEvent = qData.getCurrentEvent(); qEvent = qData.getCurrentEvent();
this.wonMatch = lastGame.getMatch().isWonBy(Singletons.getControl().getLobby().getQuestPlayer()); this.wonMatch = lastGame.getMatch().isWonBy(FServer.instance.getLobby().getQuestPlayer());
this.isAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); this.isAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE);
} }
@@ -127,7 +128,7 @@ public class QuestWinLose extends ControlWinLose {
this.getView().getBtnRestart().setVisible(false); this.getView().getBtnRestart().setVisible(false);
QuestController qc = Singletons.getModel().getQuest(); QuestController qc = Singletons.getModel().getQuest();
LobbyPlayer questPlayer = Singletons.getControl().getLobby().getQuestPlayer(); LobbyPlayer questPlayer = FServer.instance.getLobby().getQuestPlayer();
if (isAnte) { if (isAnte) {
//do per-game actions //do per-game actions
GameOutcome outcome = lastGame.getOutcome(); GameOutcome outcome = lastGame.getOutcome();
@@ -342,7 +343,7 @@ public class QuestWinLose extends ControlWinLose {
// Gameplay bonuses (for each game win) // Gameplay bonuses (for each game win)
boolean hasNeverLost = true; boolean hasNeverLost = true;
LobbyPlayer localHuman = Singletons.getControl().getLobby().getQuestPlayer(); LobbyPlayer localHuman = FServer.instance.getLobby().getQuestPlayer();
for (final GameOutcome game : lastGame.getMatch().getPlayedGames()) { for (final GameOutcome game : lastGame.getMatch().getPlayedGames()) {
if (!game.isWinner(localHuman)) { if (!game.isWinner(localHuman)) {
hasNeverLost = false; hasNeverLost = false;

View File

@@ -29,6 +29,7 @@ import forge.gui.toolbox.FOverlay;
import forge.gui.toolbox.FScrollPane; import forge.gui.toolbox.FScrollPane;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FTextArea; import forge.gui.toolbox.FTextArea;
import forge.net.FServer;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
@@ -192,7 +193,7 @@ public class ViewWinLose {
} }
private String composeTitle(GameOutcome outcome) { private String composeTitle(GameOutcome outcome) {
LobbyPlayer guiPlayer = Singletons.getControl().getLobby().getGuiPlayer(); LobbyPlayer guiPlayer = FServer.instance.getLobby().getGuiPlayer();
int nHumansInGame = 0; int nHumansInGame = 0;
for(Pair<LobbyPlayer, PlayerStatistics> pps : outcome) { for(Pair<LobbyPlayer, PlayerStatistics> pps : outcome) {
if( pps.getKey() == guiPlayer ) if( pps.getKey() == guiPlayer )

View File

@@ -0,0 +1,31 @@
package forge.net;
/**
* TODO: Write javadoc for this type.
*
*/
public enum FServer {
instance();
private Lobby lobby = null;
public Lobby getLobby() {
if (lobby == null) {
lobby = new Lobby();
}
return lobby;
}
/**
* TODO: Write javadoc for this method.
* @return
*/
private final NetServer server = new NetServer();
public NetServer getServer() {
// TODO Auto-generated method stub
return server;
}
}

View File

@@ -1,9 +1,10 @@
package forge.control; package forge.net;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import forge.control.ChatArea;
import forge.game.player.LobbyPlayer; import forge.game.player.LobbyPlayer;
import forge.game.player.LobbyPlayerAi; import forge.game.player.LobbyPlayerAi;
import forge.game.player.LobbyPlayerHuman; import forge.game.player.LobbyPlayerHuman;

View File

@@ -3,8 +3,8 @@ package forge.net.client;
import java.util.concurrent.BlockingDeque; import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingDeque;
import forge.Singletons;
import forge.game.player.LobbyPlayer; import forge.game.player.LobbyPlayer;
import forge.net.FServer;
import forge.net.IClientSocket; import forge.net.IClientSocket;
import forge.net.IConnectionObserver; import forge.net.IConnectionObserver;
import forge.net.client.state.ConnectedClientState; import forge.net.client.state.ConnectedClientState;
@@ -44,7 +44,9 @@ public class NetClient implements IConnectionObserver, INetClient{
@Override @Override
public void onConnectionClosed() { public void onConnectionClosed() {
// Tell the game, the client is gone. // Tell the game, the client is gone.
if ( player != null ) Singletons.getControl().getLobby().disconnectPlayer(player); if ( player != null ) {
FServer.instance.getLobby().disconnectPlayer(player);
}
} }
@@ -81,7 +83,7 @@ public class NetClient implements IConnectionObserver, INetClient{
*/ */
@Override @Override
public final void createPlayer(String name) { public final void createPlayer(String name) {
player = Singletons.getControl().getLobby().findOrCreateRemotePlayer(name, this); player = FServer.instance.getLobby().findOrCreateRemotePlayer(name, this);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -1,7 +1,7 @@
package forge.net.client.state; package forge.net.client.state;
import forge.Singletons;
import forge.control.ChatArea; import forge.control.ChatArea;
import forge.net.FServer;
import forge.net.client.INetClient; import forge.net.client.INetClient;
import forge.net.protocol.toserver.ChatPacketSrv; import forge.net.protocol.toserver.ChatPacketSrv;
import forge.net.protocol.toserver.IPacketSrv; import forge.net.protocol.toserver.IPacketSrv;
@@ -22,7 +22,7 @@ public class InLobbyClientState implements IClientState {
if( data instanceof ChatPacketSrv) { if( data instanceof ChatPacketSrv) {
ChatPacketSrv cp = (ChatPacketSrv) data; ChatPacketSrv cp = (ChatPacketSrv) data;
// if ( not muted ) // if ( not muted )
Singletons.getControl().getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage()); FServer.instance.getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage());
// else // else
// client.send("You are banned and cannot speak"); // client.send("You are banned and cannot speak");
return true; return true;

View File

@@ -33,6 +33,7 @@ import forge.game.event.GameEvent;
import forge.game.event.GameEventMulligan; import forge.game.event.GameEventMulligan;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.item.PreconDeck; import forge.item.PreconDeck;
import forge.net.FServer;
import forge.properties.NewConstants; import forge.properties.NewConstants;
import forge.quest.bazaar.QuestBazaarManager; import forge.quest.bazaar.QuestBazaarManager;
import forge.quest.bazaar.QuestItemType; import forge.quest.bazaar.QuestItemType;
@@ -430,7 +431,7 @@ public class QuestController {
if ( ev instanceof GameEventMulligan ) { if ( ev instanceof GameEventMulligan ) {
GameEventMulligan mev = (GameEventMulligan)ev; GameEventMulligan mev = (GameEventMulligan)ev;
// First mulligan is free // First mulligan is free
if (mev.player.getLobbyPlayer() == Singletons.getControl().getLobby().getQuestPlayer() if (mev.player.getLobbyPlayer() == FServer.instance.getLobby().getQuestPlayer()
&& getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() == 0) { && getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() == 0) {
mev.player.drawCard(); mev.player.drawCard();
} }

View File

@@ -3,7 +3,6 @@ package forge.sound;
import java.util.Collection; import java.util.Collection;
import forge.Card; import forge.Card;
import forge.Singletons;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
import forge.game.event.GameEventBlockersDeclared; import forge.game.event.GameEventBlockersDeclared;
import forge.game.event.GameEventCardChangeZone; import forge.game.event.GameEventCardChangeZone;
@@ -29,6 +28,7 @@ import forge.game.zone.ZoneType;
import forge.gui.events.IUiEventVisitor; import forge.gui.events.IUiEventVisitor;
import forge.gui.events.UiEventAttackerDeclared; import forge.gui.events.UiEventAttackerDeclared;
import forge.gui.events.UiEventBlockerAssigned; import forge.gui.events.UiEventBlockerAssigned;
import forge.net.FServer;
import forge.util.maps.MapOfLists; import forge.util.maps.MapOfLists;
/** /**
@@ -60,7 +60,7 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
public SoundEffectType visit(GameEventShuffle event) { return SoundEffectType.Shuffle; } public SoundEffectType visit(GameEventShuffle event) { return SoundEffectType.Shuffle; }
public SoundEffectType visit(GameEventTokenCreated event) { return SoundEffectType.Token; } public SoundEffectType visit(GameEventTokenCreated event) { return SoundEffectType.Token; }
public SoundEffectType visit(GameEventBlockersDeclared event) { public SoundEffectType visit(GameEventBlockersDeclared event) {
boolean isLocalHuman = event.defendingPlayer.getLobbyPlayer() == Singletons.getControl().getLobby().getGuiPlayer(); boolean isLocalHuman = event.defendingPlayer.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer();
if (isLocalHuman) if (isLocalHuman)
return null; // already played sounds in interactive mode return null; // already played sounds in interactive mode
@@ -79,7 +79,7 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
* Plays the sound corresponding to the outcome of the duel. * Plays the sound corresponding to the outcome of the duel.
*/ */
public SoundEffectType visit(GameEventGameOutcome event) { public SoundEffectType visit(GameEventGameOutcome event) {
boolean humanWonTheDuel = event.result.getWinner() == Singletons.getControl().getLobby().getGuiPlayer(); boolean humanWonTheDuel = event.result.getWinner() == FServer.instance.getLobby().getGuiPlayer();
return humanWonTheDuel ? SoundEffectType.WinDuel : SoundEffectType.LoseDuel; return humanWonTheDuel ? SoundEffectType.WinDuel : SoundEffectType.LoseDuel;
} }