diff --git a/forge-core/src/main/java/forge/LobbyPlayer.java b/forge-core/src/main/java/forge/LobbyPlayer.java index 6cce4d739e1..19acd971e4c 100644 --- a/forge-core/src/main/java/forge/LobbyPlayer.java +++ b/forge-core/src/main/java/forge/LobbyPlayer.java @@ -1,5 +1,7 @@ package forge; +import org.apache.commons.lang3.StringUtils; + /** * This means a player's part unchanged for all games. * @@ -7,11 +9,9 @@ package forge; * */ public abstract class LobbyPlayer { - - protected final String name; + protected String name; private int avatarIndex = -1; - public LobbyPlayer(String name) { this.name = name; } @@ -19,6 +19,10 @@ public abstract class LobbyPlayer { public String getName() { return name; } + public void setName(String name0) { + if (StringUtils.isEmpty(name0)) { return; } //don't allow setting name to nothing + name = name0; + } @Override public int hashCode() { diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index 95f557f3055..e7d4306b5ea 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -51,6 +51,7 @@ import forge.interfaces.IGuiBase; import forge.item.PaperCard; import forge.match.input.InputQueue; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.controllers.CEditorQuestCardShop; import forge.screens.match.CMatchUI; @@ -250,7 +251,7 @@ public class GuiDesktop implements IGuiBase { @Override public void updatePlayerControl() { - CMatchUI.SINGLETON_INSTANCE.initHandViews(getGuiPlayer()); + CMatchUI.SINGLETON_INSTANCE.initHandViews(GamePlayerUtil.getGuiPlayer()); SLayoutIO.loadLayout(null); VMatchUI.SINGLETON_INSTANCE.populate(); for (VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) { @@ -504,31 +505,6 @@ public class GuiDesktop implements IGuiBase { Desktop.getDesktop().browse(new URI(url)); } - @Override - public LobbyPlayer getGuiPlayer() { - return FControl.instance.getGuiPlayer(); - } - - @Override - public LobbyPlayer getAiPlayer(String name) { - return FControl.instance.getAiPlayer(name); - } - - @Override - public LobbyPlayer createAiPlayer() { - return FControl.instance.getAiPlayer(); - } - - @Override - public LobbyPlayer createAiPlayer(String name, int avatarIndex) { - return FControl.instance.getAiPlayer(name, avatarIndex); - } - - @Override - public LobbyPlayer getQuestPlayer() { - return getGuiPlayer(); - } - @Override public IAudioClip createAudioClip(String filename) { return AudioClip.fileExists(filename) ? new AudioClip(filename) : null; diff --git a/forge-gui-desktop/src/main/java/forge/control/FControl.java b/forge-gui-desktop/src/main/java/forge/control/FControl.java index 2b62e533600..78e14393261 100644 --- a/forge-gui-desktop/src/main/java/forge/control/FControl.java +++ b/forge-gui-desktop/src/main/java/forge/control/FControl.java @@ -42,7 +42,6 @@ import forge.GuiBase; import forge.ImageCache; import forge.LobbyPlayer; import forge.Singletons; -import forge.ai.AiProfileUtil; import forge.ai.LobbyPlayerAi; import forge.assets.FSkinProp; import forge.control.KeyboardShortcuts.Shortcut; @@ -88,9 +87,6 @@ import forge.sound.SoundSystem; import forge.toolbox.FOptionPane; import forge.toolbox.FSkin; import forge.toolbox.special.PhaseIndicator; -import forge.util.GuiDisplayUtil; -import forge.util.MyRandom; -import forge.util.NameGenerator; import forge.view.FFrame; import forge.view.FView; import forge.view.IGameView; @@ -730,38 +726,8 @@ public enum FControl implements KeyEventDispatcher { //Singletons.getView().getViewMatch().setLayoutParams(prefs.getPref(FPref.UI_LAYOUT_PARAMS)); } - // Ai player creation, will stay here for a while - - /** Returns a random name from the supplied list. */ - public String getRandomName() { - String playerName = GuiDisplayUtil.getPlayerName(); - String aiName = NameGenerator.getRandomName("Any", "Generic", playerName); - return aiName; - } - - public final LobbyPlayer getAiPlayer() { return getAiPlayer(getRandomName()); } - public final LobbyPlayer getAiPlayer(String name) { - int avatarCount = GuiBase.getInterface().getAvatarCount(); - return getAiPlayer(name, avatarCount == 0 ? 0 : MyRandom.getRandom().nextInt(avatarCount)); - } - public final LobbyPlayer getAiPlayer(String name, int avatarIndex) { - LobbyPlayerAi player = new LobbyPlayerAi(name); - - // TODO: implement specific AI profiles for quest mode. - String lastProfileChosen = FModel.getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE); - player.setRotateProfileEachGame(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_DUEL)); - if(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_MATCH)) { - lastProfileChosen = AiProfileUtil.getRandomProfile(); - System.out.println(String.format("AI profile %s was chosen for the lobby player %s.", lastProfileChosen, player.getName())); - } - player.setAiProfile(lastProfileChosen); - player.setAvatarIndex(avatarIndex); - return player; - } - - private final LobbyPlayer guiPlayer = new LobbyPlayerHuman("Human", GuiBase.getInterface()); public final LobbyPlayer getGuiPlayer() { - return guiPlayer; + return GamePlayerUtil.getGuiPlayer(); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletContests.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletContests.java index 931ce7384c7..8fbeb761d7a 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletContests.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletContests.java @@ -1,6 +1,6 @@ package forge.screens.home.gauntlet; -import forge.GuiBase; +import forge.Singletons; import forge.UiCommand; import forge.deck.Deck; import forge.game.GameType; @@ -9,8 +9,9 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; -import forge.interfaces.IGuiBase; import forge.model.FModel; +import forge.player.GamePlayerUtil; + import javax.swing.*; import java.awt.event.ActionEvent; @@ -102,11 +103,10 @@ public enum CSubmenuGauntletContests implements ICDoc { List starter = new ArrayList(); - IGuiBase fc = GuiBase.getInterface(); - starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer())); - starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer())); + starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); + starter.add(new RegisteredPlayer(aiDeck).setPlayer(GamePlayerUtil.createAiPlayer())); - fc.startMatch(GameType.Gauntlet, starter); + Singletons.getControl().startMatch(GameType.Gauntlet, starter); } /* (non-Javadoc) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletLoad.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletLoad.java index 0be964bd918..1aa67b21db7 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletLoad.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletLoad.java @@ -1,6 +1,6 @@ package forge.screens.home.gauntlet; -import forge.GuiBase; +import forge.Singletons; import forge.UiCommand; import forge.deck.Deck; import forge.deck.DeckType; @@ -11,8 +11,8 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; -import forge.interfaces.IGuiBase; import forge.model.FModel; +import forge.player.GamePlayerUtil; import javax.swing.*; @@ -130,11 +130,10 @@ public enum CSubmenuGauntletLoad implements ICDoc { }); List starter = new ArrayList(); - IGuiBase fc = GuiBase.getInterface(); - starter.add(new RegisteredPlayer(userDeck).setPlayer(fc.getGuiPlayer())); - starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer())); + starter.add(new RegisteredPlayer(userDeck).setPlayer(GamePlayerUtil.getGuiPlayer())); + starter.add(new RegisteredPlayer(aiDeck).setPlayer(GamePlayerUtil.createAiPlayer())); - fc.startMatch(GameType.Gauntlet, starter); + Singletons.getControl().startMatch(GameType.Gauntlet, starter); } /* (non-Javadoc) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java index 67c426898e9..6b95769cf33 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletQuick.java @@ -2,7 +2,6 @@ package forge.screens.home.gauntlet; import forge.UiCommand; import forge.Singletons; -import forge.control.FControl; import forge.deck.DeckType; import forge.game.GameType; import forge.game.player.RegisteredPlayer; @@ -10,6 +9,8 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletUtil; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; +import forge.player.GamePlayerUtil; + import javax.swing.*; import java.awt.event.ActionEvent; @@ -73,11 +74,10 @@ public enum CSubmenuGauntletQuick implements ICDoc { final GauntletData gd = GauntletUtil.createQuickGauntlet(view.getLstDecks().getPlayer().getDeck(), view.getSliOpponents().getValue(), allowedDeckTypes); List starter = new ArrayList(); - FControl fc = Singletons.getControl(); - starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer())); - starter.add(new RegisteredPlayer(gd.getDecks().get(gd.getCompleted())).setPlayer(fc.getAiPlayer())); + starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); + starter.add(new RegisteredPlayer(gd.getDecks().get(gd.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer())); - fc.startMatch(GameType.Gauntlet, starter); + Singletons.getControl().startMatch(GameType.Gauntlet, starter); } /* (non-Javadoc) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuConstructed.java index d31f3f10e02..d193795c7bb 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuConstructed.java @@ -1,6 +1,5 @@ package forge.screens.home.sanctioned; -import forge.GuiBase; import forge.LobbyPlayer; import forge.UiCommand; import forge.Singletons; @@ -13,12 +12,12 @@ import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.gui.GuiDialog; import forge.gui.framework.ICDoc; -import forge.interfaces.IGuiBase; import forge.item.PaperCard; import forge.menus.IMenuProvider; import forge.menus.MenuUtil; import forge.model.CardCollections; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.toolbox.FList; @@ -224,13 +223,12 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider { } } - IGuiBase fc = GuiBase.getInterface(); List players = new ArrayList(); for (final int i : view.getParticipants()) { String name = view.getPlayerName(i); LobbyPlayer lobbyPlayer = view.isPlayerAI(i) - ? fc.createAiPlayer(name, view.getPlayerAvatar(i)) - : fc.getGuiPlayer(); + ? GamePlayerUtil.createAiPlayer(name, view.getPlayerAvatar(i)) + : GamePlayerUtil.getGuiPlayer(name, i); RegisteredPlayer rp = view.getDeckChooser(i).getPlayer(); if (variantTypes.isEmpty()) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java index 448f1eeee55..1a2a959619b 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java @@ -16,6 +16,7 @@ import forge.itemmanager.ItemManagerConfig; import forge.limited.BoosterDraft; import forge.limited.LimitedPoolType; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences.FPref; import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.controllers.CEditorDraftingProcess; @@ -137,13 +138,13 @@ public enum CSubmenuDraft implements ICDoc { } List starter = new ArrayList(); - starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(GuiBase.getInterface().getGuiPlayer())); - starter.add(new RegisteredPlayer(aiDeck).setPlayer(GuiBase.getInterface().createAiPlayer())); + starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); + starter.add(new RegisteredPlayer(aiDeck).setPlayer(GamePlayerUtil.createAiPlayer())); for (RegisteredPlayer pl : starter) { pl.assignConspiracies(); } - GuiBase.getInterface().startMatch(GameType.Draft, starter); + Singletons.getControl().startMatch(GameType.Draft, starter); } /** */ diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java index 157c77ea59a..546044e88da 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java @@ -9,7 +9,6 @@ import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.gui.GuiChoose; import forge.gui.SOverlayUtils; -import forge.interfaces.IGuiBase; import forge.model.FModel; import forge.screens.deckeditor.CDeckEditorUI; import forge.deck.DeckProxy; @@ -20,6 +19,7 @@ import forge.toolbox.FOptionPane; import forge.itemmanager.ItemManagerConfig; import forge.limited.LimitedPoolType; import forge.limited.WinstonDraft; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences.FPref; import javax.swing.*; @@ -128,10 +128,9 @@ public enum CSubmenuWinston implements ICDoc { throw new IllegalStateException("Draft: Computer deck is null!"); } - IGuiBase fc = GuiBase.getInterface(); List starter = new ArrayList(); - starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(fc.getGuiPlayer())); - starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer())); + starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); + starter.add(new RegisteredPlayer(aiDeck).setPlayer(GamePlayerUtil.createAiPlayer())); Singletons.getControl().startMatch(GameType.Winston, starter); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java b/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java index 03f198ed5d2..1a96bd877ca 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java @@ -27,6 +27,7 @@ import forge.assets.FSkinProp; import forge.gui.SOverlayUtils; import forge.gui.framework.FScreen; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.quest.QuestController; import forge.quest.QuestDraftUtils; import forge.screens.home.quest.CSubmenuChallenges; @@ -78,7 +79,7 @@ public class QuestDraftWinLose extends ControlWinLose { QuestController quest = FModel.getQuest(); - final LobbyPlayer questLobbyPlayer = GuiBase.getInterface().getQuestPlayer(); + final LobbyPlayer questLobbyPlayer = GamePlayerUtil.getQuestPlayer(); final List players = lastGame.getPlayers(); boolean gameHadHumanPlayer = false; for (final PlayerView p : players) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java index 5825fccfde3..db86f5ddfee 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java @@ -31,6 +31,7 @@ import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; import forge.gui.framework.SLayoutIO; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.FileLocation; import forge.properties.ForgePreferences.FPref; import forge.screens.match.CMatchUI; @@ -115,7 +116,7 @@ public enum CDock implements ICDoc { * View deck list. */ public void viewDeckList() { - final Deck deck = FControl.instance.getGameView().getDeck(GuiBase.getInterface().getGuiPlayer()); + final Deck deck = FControl.instance.getGameView().getDeck(GamePlayerUtil.getGuiPlayer()); if (deck != null) { FDeckViewer.show(deck); } diff --git a/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java b/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java index 395aabd76f1..5bf96b3a179 100644 --- a/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java +++ b/forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java @@ -17,6 +17,7 @@ import forge.game.GameType; import forge.game.Match; import forge.game.player.RegisteredPlayer; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.util.Lang; public class SimulateMatch { @@ -44,12 +45,13 @@ public class SimulateMatch { System.out.println(String.format("Ai-%s vs Ai_%s - %s", d1.getName(), d2.getName(), Lang.nounWithNumeral(nGames, "game"))); List pp = new ArrayList(); - pp.add(new RegisteredPlayer(d1).setPlayer(GuiBase.getInterface().createAiPlayer("Ai-" + d1.getName(), 0))); - pp.add(new RegisteredPlayer(d2).setPlayer(GuiBase.getInterface().createAiPlayer("Ai_" + d2.getName(), 1))); + pp.add(new RegisteredPlayer(d1).setPlayer(GamePlayerUtil.createAiPlayer("Ai-" + d1.getName(), 0))); + pp.add(new RegisteredPlayer(d2).setPlayer(GamePlayerUtil.createAiPlayer("Ai_" + d2.getName(), 1))); GameRules rules = new GameRules(GameType.Constructed); Match mc = new Match(rules, pp); - for(int iGame = 0; iGame < nGames; iGame++) + for (int iGame = 0; iGame < nGames; iGame++) { simulateSingleMatch(mc, iGame); + } System.out.flush(); } /** diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index 99aab8917d7..d6e9175e081 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -35,7 +35,6 @@ import forge.interfaces.IButton; import forge.interfaces.IGuiBase; import forge.item.PaperCard; import forge.match.input.InputQueue; -import forge.player.LobbyPlayerHuman; import forge.properties.ForgeConstants; import forge.screens.match.FControl; import forge.screens.match.views.VPlayerPanel; @@ -443,32 +442,6 @@ public class GuiMobile implements IGuiBase { Gdx.net.openURI(url); } - private final LobbyPlayer guiPlayer = new LobbyPlayerHuman("Human", this); - @Override - public LobbyPlayer getGuiPlayer() { - return guiPlayer; - } - - @Override - public LobbyPlayer getAiPlayer(String name) { - return FControl.getAiPlayer(name); - } - - @Override - public LobbyPlayer createAiPlayer() { - return FControl.getAiPlayer(); - } - - @Override - public LobbyPlayer createAiPlayer(String name, int avatarIndex) { - return FControl.getAiPlayer(name, avatarIndex); - } - - @Override - public LobbyPlayer getQuestPlayer() { - return getGuiPlayer(); - } - @Override public IAudioClip createAudioClip(String filename) { return AudioClip.createClip(ForgeConstants.SOUND_DIR + filename); diff --git a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java index 539fb91b251..ae439144c2b 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java @@ -29,6 +29,7 @@ import forge.item.PaperCard; import forge.itemmanager.CardManager; import forge.itemmanager.DeckManager; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.screens.FScreen; @@ -294,8 +295,8 @@ public class ConstructedScreen extends LaunchScreen { for (int i = 0; i < getNumPlayers(); i++) { PlayerPanel playerPanel = playerPanels.get(i); String name = getPlayerName(i); - LobbyPlayer lobbyPlayer = playerPanel.isPlayerAI() ? GuiBase.getInterface().createAiPlayer(name, - getPlayerAvatar(i)) : GuiBase.getInterface().getGuiPlayer(); + LobbyPlayer lobbyPlayer = playerPanel.isPlayerAI() ? GamePlayerUtil.createAiPlayer(name, + getPlayerAvatar(i)) : GamePlayerUtil.getGuiPlayer(name, i); RegisteredPlayer rp = playerPanel.deckChooser.getPlayer(); if (appliedVariants.isEmpty()) { diff --git a/forge-gui-mobile/src/forge/screens/gauntlet/GauntletScreen.java b/forge-gui-mobile/src/forge/screens/gauntlet/GauntletScreen.java index cfc6cacf9f8..042df792fab 100644 --- a/forge-gui-mobile/src/forge/screens/gauntlet/GauntletScreen.java +++ b/forge-gui-mobile/src/forge/screens/gauntlet/GauntletScreen.java @@ -26,6 +26,7 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gauntlet.GauntletUtil; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.quest.QuestUtil; import forge.screens.LaunchScreen; import forge.screens.settings.SettingsScreen; @@ -270,8 +271,8 @@ public class GauntletScreen extends LaunchScreen { protected boolean buildLaunchParams(LaunchParams launchParams) { final GauntletData gauntlet = FModel.getGauntletData(); launchParams.gameType = GameType.Gauntlet; - launchParams.players.add(new RegisteredPlayer(gauntlet.getUserDeck()).setPlayer(GuiBase.getInterface().getGuiPlayer())); - launchParams.players.add(new RegisteredPlayer(gauntlet.getDecks().get(gauntlet.getCompleted())).setPlayer(GuiBase.getInterface().createAiPlayer())); + launchParams.players.add(new RegisteredPlayer(gauntlet.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); + launchParams.players.add(new RegisteredPlayer(gauntlet.getDecks().get(gauntlet.getCompleted())).setPlayer(GamePlayerUtil.createAiPlayer())); return true; } diff --git a/forge-gui-mobile/src/forge/screens/match/FControl.java b/forge-gui-mobile/src/forge/screens/match/FControl.java index e0662e72ec2..568746113d7 100644 --- a/forge-gui-mobile/src/forge/screens/match/FControl.java +++ b/forge-gui-mobile/src/forge/screens/match/FControl.java @@ -23,7 +23,6 @@ import forge.Forge; import forge.Graphics; import forge.GuiBase; import forge.LobbyPlayer; -import forge.ai.AiProfileUtil; import forge.ai.LobbyPlayerAi; import forge.assets.FImage; import forge.assets.FSkin; @@ -49,6 +48,7 @@ import forge.game.zone.ZoneType; import forge.match.input.InputPlaybackControl; import forge.match.input.InputQueue; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.player.PlayerControllerHuman; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; @@ -65,7 +65,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FOptionPane; import forge.util.Callback; import forge.util.GuiDisplayUtil; -import forge.util.MyRandom; import forge.util.NameGenerator; import forge.util.WaitCallback; import forge.view.CardView; @@ -841,29 +840,9 @@ public class FControl { String aiName = NameGenerator.getRandomName("Any", "Generic", playerName); return aiName; } - - public final static LobbyPlayer getAiPlayer() { return getAiPlayer(getRandomName()); } - public final static LobbyPlayer getAiPlayer(String name) { - int avatarCount = GuiBase.getInterface().getAvatarCount(); - return getAiPlayer(name, avatarCount == 0 ? 0 : MyRandom.getRandom().nextInt(avatarCount)); - } - public final static LobbyPlayer getAiPlayer(String name, int avatarIndex) { - LobbyPlayerAi player = new LobbyPlayerAi(name); - - // TODO: implement specific AI profiles for quest mode. - String lastProfileChosen = FModel.getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE); - player.setRotateProfileEachGame(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_DUEL)); - if(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_MATCH)) { - lastProfileChosen = AiProfileUtil.getRandomProfile(); - System.out.println(String.format("AI profile %s was chosen for the lobby player %s.", lastProfileChosen, player.getName())); - } - player.setAiProfile(lastProfileChosen); - player.setAvatarIndex(avatarIndex); - return player; - } public final static LobbyPlayer getGuiPlayer() { - return GuiBase.getInterface().getGuiPlayer(); + return GamePlayerUtil.getGuiPlayer(); } public static FImage getPlayerAvatar(final PlayerView p) { diff --git a/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java b/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java index b0dc5c6bf10..6df096659a7 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java @@ -1,6 +1,5 @@ package forge.screens.match.views; -import forge.GuiBase; import forge.LobbyPlayer; import forge.assets.FSkinImage; import forge.deck.Deck; @@ -10,6 +9,7 @@ import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.menu.FDropDownMenu; import forge.menu.FMenuItem; +import forge.player.GamePlayerUtil; import forge.screens.match.FControl; import forge.screens.settings.SettingsScreen; import forge.toolbox.FEvent; @@ -48,7 +48,7 @@ public class VGameMenu extends FDropDownMenu { addItem(new FMenuItem("Deck List", FSkinImage.DECKLIST, new FEventHandler() { @Override public void handleEvent(FEvent e) { - final LobbyPlayer guiPlayer = GuiBase.getInterface().getGuiPlayer(); + final LobbyPlayer guiPlayer = GamePlayerUtil.getGuiPlayer(); final Deck deck = FControl.getGameView().getDeck(guiPlayer); if (deck != null) { FDeckViewer.show(deck); diff --git a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java index 45b93bc9c05..c40575a6655 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VManaPool.java @@ -6,12 +6,12 @@ import java.util.List; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.Graphics; -import forge.GuiBase; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.assets.FSkinColor.Colors; import forge.card.MagicColor; +import forge.player.GamePlayerUtil; import forge.screens.match.FControl; import forge.toolbox.FDisplayObject; import forge.view.PlayerView; @@ -81,7 +81,7 @@ public class VManaPool extends VDisplayArea { @Override public boolean tap(float x, float y, int count) { - if (player.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer()) { + if (player.getLobbyPlayer() == GamePlayerUtil.getGuiPlayer()) { FControl.getGameView().useMana(colorCode); } return true; diff --git a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java index 504050f3539..8ba2b069ed0 100644 --- a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java +++ b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java @@ -53,6 +53,7 @@ import forge.interfaces.IGuiBase; import forge.match.input.ButtonUtil; import forge.match.input.InputBase; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences.FPref; import forge.util.Lang; import forge.util.gui.SGuiChoose; @@ -309,7 +310,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { @Override public Void visit(GameEventAttackersDeclared event) { // Skip redraw for GUI player? - if (event.player.getLobbyPlayer() == gui.getGuiPlayer()) { + if (event.player.getLobbyPlayer() == GamePlayerUtil.getGuiPlayer()) { return null; } diff --git a/forge-gui/src/main/java/forge/gauntlet/GauntletWinLoseController.java b/forge-gui/src/main/java/forge/gauntlet/GauntletWinLoseController.java index 3d8405b8237..dce2e5f6615 100644 --- a/forge-gui/src/main/java/forge/gauntlet/GauntletWinLoseController.java +++ b/forge-gui/src/main/java/forge/gauntlet/GauntletWinLoseController.java @@ -13,6 +13,7 @@ import forge.interfaces.IButton; import forge.interfaces.IGuiBase; import forge.interfaces.IWinLoseView; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.view.IGameView; public abstract class GauntletWinLoseController { @@ -48,7 +49,7 @@ public abstract class GauntletWinLoseController { // the player can restart Forge to replay a match. // Pretty sure this can't be fixed until in-game states can be // saved. Doublestrike 07-10-12 - LobbyPlayer questPlayer = gui.getQuestPlayer(); + LobbyPlayer questPlayer = GamePlayerUtil.getGuiPlayer(); // In all cases, update stats. lstEventRecords.set(gd.getCompleted(), lastGame.getGamesWonBy(questPlayer) + " - " @@ -115,8 +116,8 @@ public abstract class GauntletWinLoseController { GauntletData gd = FModel.getGauntletData(); Deck aiDeck = gd.getDecks().get(gd.getCompleted()); List players = Lists.newArrayList(); - players.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(gui.getGuiPlayer())); - players.add(new RegisteredPlayer(aiDeck).setPlayer(gui.createAiPlayer())); + players.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); + players.add(new RegisteredPlayer(aiDeck).setPlayer(GamePlayerUtil.createAiPlayer())); view.hide(); saveOptions(); diff --git a/forge-gui/src/main/java/forge/interfaces/IGuiBase.java b/forge-gui/src/main/java/forge/interfaces/IGuiBase.java index ee88ea8551f..4b394371542 100644 --- a/forge-gui/src/main/java/forge/interfaces/IGuiBase.java +++ b/forge-gui/src/main/java/forge/interfaces/IGuiBase.java @@ -90,11 +90,6 @@ public interface IGuiBase { int getAvatarCount(); void copyToClipboard(String text); void browseToUrl(String url) throws Exception; - LobbyPlayer getGuiPlayer(); - LobbyPlayer getAiPlayer(String name); - LobbyPlayer createAiPlayer(); - LobbyPlayer createAiPlayer(String name, int avatarIndex); - LobbyPlayer getQuestPlayer(); IAudioClip createAudioClip(String filename); IAudioMusic createAudioMusic(String filename); void startAltSoundSystem(String filename, boolean isSynchronized); diff --git a/forge-gui/src/main/java/forge/limited/GauntletMini.java b/forge-gui/src/main/java/forge/limited/GauntletMini.java index a52ecc7e7ca..a631718afe7 100644 --- a/forge-gui/src/main/java/forge/limited/GauntletMini.java +++ b/forge-gui/src/main/java/forge/limited/GauntletMini.java @@ -25,6 +25,7 @@ import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.interfaces.IGuiBase; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.util.Aggregates; /** @@ -139,8 +140,8 @@ public class GauntletMini { */ private void startRound() { List starter = new ArrayList(); - starter.add(new RegisteredPlayer(humanDeck).setPlayer(gui.getGuiPlayer())); - starter.add(aiOpponents.get(currentRound - 1).setPlayer(gui.createAiPlayer())); + starter.add(new RegisteredPlayer(humanDeck).setPlayer(GamePlayerUtil.getGuiPlayer())); + starter.add(aiOpponents.get(currentRound - 1).setPlayer(GamePlayerUtil.createAiPlayer())); gui.startMatch(gauntletType, starter); } diff --git a/forge-gui/src/main/java/forge/limited/LimitedWinLoseController.java b/forge-gui/src/main/java/forge/limited/LimitedWinLoseController.java index 4d5aa18b142..981a7b909c7 100644 --- a/forge-gui/src/main/java/forge/limited/LimitedWinLoseController.java +++ b/forge-gui/src/main/java/forge/limited/LimitedWinLoseController.java @@ -4,6 +4,7 @@ import forge.interfaces.IButton; import forge.interfaces.IGuiBase; import forge.interfaces.IWinLoseView; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.view.IGameView; public abstract class LimitedWinLoseController { @@ -19,7 +20,7 @@ public abstract class LimitedWinLoseController { lastGame = game0; this.gui = gui; gauntlet = FModel.getGauntletMini(gui); - wonMatch = lastGame.isMatchWonBy(gui.getGuiPlayer()); + wonMatch = lastGame.isMatchWonBy(GamePlayerUtil.getGuiPlayer()); } public void showOutcome() { @@ -31,7 +32,7 @@ public abstract class LimitedWinLoseController { resetView(); nextRound = false; - if (lastGame.isWinner(gui.getGuiPlayer())) { + if (lastGame.isWinner(GamePlayerUtil.getGuiPlayer())) { gauntlet.addWin(); } else { gauntlet.addLoss(); diff --git a/forge-gui/src/main/java/forge/match/input/InputPassPriority.java b/forge-gui/src/main/java/forge/match/input/InputPassPriority.java index 354888457bd..55db16bafee 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPassPriority.java +++ b/forge-gui/src/main/java/forge/match/input/InputPassPriority.java @@ -24,6 +24,7 @@ import forge.game.card.Card; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.player.PlayerControllerHuman; import forge.properties.ForgePreferences.FPref; import forge.util.ITriggerEvent; @@ -100,7 +101,7 @@ public class InputPassPriority extends InputSyncronizedBase { final Game game = player.getGame(); if (game.getStack().isEmpty()) { //phase can't end right now if stack isn't empty Player player = game.getPhaseHandler().getPriorityPlayer(); - if (player != null && player.getManaPool().willManaBeLostAtEndOfPhase() && player.getLobbyPlayer() == getGui().getGuiPlayer()) { + if (player != null && player.getManaPool().willManaBeLostAtEndOfPhase() && player.getLobbyPlayer() == GamePlayerUtil.getGuiPlayer()) { ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread so dialog can be shown on mobile game @Override public void run() { diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index 91b7f90947c..76a68646a2a 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -38,6 +38,7 @@ import forge.interfaces.IGuiBase; import forge.interfaces.IProgressBar; import forge.itemmanager.ItemManagerConfig; import forge.limited.GauntletMini; +import forge.player.GamePlayerUtil; import forge.properties.ForgeConstants; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; @@ -91,6 +92,7 @@ public class FModel { //Preferences are initialized first so that the splash screen can be translated. try { preferences = new ForgePreferences(); + GamePlayerUtil.getGuiPlayer().setName(preferences.getPref(FPref.PLAYER_NAME)); } catch (final Exception exn) { throw new RuntimeException(exn); diff --git a/forge-gui/src/main/java/forge/player/GamePlayerUtil.java b/forge-gui/src/main/java/forge/player/GamePlayerUtil.java index af5fad20a50..6991169ec1e 100644 --- a/forge-gui/src/main/java/forge/player/GamePlayerUtil.java +++ b/forge-gui/src/main/java/forge/player/GamePlayerUtil.java @@ -1,9 +1,14 @@ package forge.player; +import forge.GuiBase; +import forge.LobbyPlayer; +import forge.ai.AiProfileUtil; +import forge.ai.LobbyPlayerAi; import forge.interfaces.IGuiBase; import forge.model.FModel; -import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; +import forge.util.GuiDisplayUtil; +import forge.util.MyRandom; import forge.util.gui.SOptionPane; import org.apache.commons.lang3.StringUtils; @@ -11,10 +16,51 @@ import org.apache.commons.lang3.StringUtils; public final class GamePlayerUtil { private GamePlayerUtil() { }; - private final static ForgePreferences prefs = FModel.getPreferences(); + private static final LobbyPlayer guiPlayer = new LobbyPlayerHuman("Human", GuiBase.getInterface()); + public static final LobbyPlayer getGuiPlayer() { + return guiPlayer; + } + public static final LobbyPlayer getGuiPlayer(String name, int index) { + if (index == 0) { + if (!name.equals(guiPlayer.getName())) { + guiPlayer.setName(name); + FModel.getPreferences().setPref(FPref.PLAYER_NAME, name); + FModel.getPreferences().save(); + } + return guiPlayer; + } + //use separate LobbyPlayerHuman instance for human players beyond first + return new LobbyPlayerHuman(name, GuiBase.getInterface()); + } + + public static final LobbyPlayer getQuestPlayer() { + return guiPlayer; //TODO: Make this a separate player + } + + public final static LobbyPlayer createAiPlayer() { + return createAiPlayer(GuiDisplayUtil.getRandomAiName()); + } + public final static LobbyPlayer createAiPlayer(String name) { + int avatarCount = GuiBase.getInterface().getAvatarCount(); + return createAiPlayer(name, avatarCount == 0 ? 0 : MyRandom.getRandom().nextInt(avatarCount)); + } + public final static LobbyPlayer createAiPlayer(String name, int avatarIndex) { + LobbyPlayerAi player = new LobbyPlayerAi(name); + + // TODO: implement specific AI profiles for quest mode. + String lastProfileChosen = FModel.getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE); + player.setRotateProfileEachGame(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_DUEL)); + if (lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_MATCH)) { + lastProfileChosen = AiProfileUtil.getRandomProfile(); + System.out.println(String.format("AI profile %s was chosen for the lobby player %s.", lastProfileChosen, player.getName())); + } + player.setAiProfile(lastProfileChosen); + player.setAvatarIndex(avatarIndex); + return player; + } public static void setPlayerName(final IGuiBase gui) { - String oldPlayerName = prefs.getPref(FPref.PLAYER_NAME); + String oldPlayerName = FModel.getPreferences().getPref(FPref.PLAYER_NAME); String newPlayerName = null; if (StringUtils.isBlank(oldPlayerName)) { @@ -23,13 +69,12 @@ public final class GamePlayerUtil { newPlayerName = getVerifiedPlayerName(getPlayerNameUsingStandardPrompt(gui, oldPlayerName), oldPlayerName); } - prefs.setPref(FPref.PLAYER_NAME, newPlayerName); - prefs.save(); + FModel.getPreferences().setPref(FPref.PLAYER_NAME, newPlayerName); + FModel.getPreferences().save(); if (StringUtils.isBlank(oldPlayerName) && newPlayerName != "Human") { showThankYouPrompt(gui, newPlayerName); } - } private static void showThankYouPrompt(final IGuiBase gui, final String playerName) { diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 78edae9634f..2a0096b2a47 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1299,7 +1299,7 @@ public class PlayerControllerHuman extends PlayerController { } public boolean isGuiPlayer() { - return lobbyPlayer == getGui().getGuiPlayer(); + return lobbyPlayer == GamePlayerUtil.getGuiPlayer(); } /* diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index 5d0f60318f8..ed6aa60b906 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -38,6 +38,7 @@ import forge.interfaces.IGuiBase; import forge.item.PaperCard; import forge.item.PreconDeck; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgeConstants; import forge.quest.bazaar.QuestBazaarManager; import forge.quest.bazaar.QuestItemType; @@ -481,7 +482,7 @@ public class QuestController { if (ev instanceof GameEventMulligan) { GameEventMulligan mev = (GameEventMulligan) ev; // First mulligan is free - if (mev.player.getLobbyPlayer() == gui.getGuiPlayer() + if (mev.player.getLobbyPlayer() == GamePlayerUtil.getGuiPlayer() && getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() < 7) { mev.player.drawCard(); } diff --git a/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java b/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java index c62fca7fd32..a7a5257c447 100644 --- a/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java +++ b/forge-gui/src/main/java/forge/quest/QuestDraftUtils.java @@ -14,6 +14,7 @@ import forge.game.Match; import forge.game.player.RegisteredPlayer; import forge.interfaces.IGuiBase; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences.FPref; import forge.util.storage.IStorage; @@ -145,12 +146,12 @@ public class QuestDraftUtils { if (humanIndex > -1) { matchup.hasHumanPlayer = true; - matchup.matchStarter.add(new RegisteredPlayer(decks.getHumanDeck()).setPlayer(gui.getGuiPlayer())); + matchup.matchStarter.add(new RegisteredPlayer(decks.getHumanDeck()).setPlayer(GamePlayerUtil.getGuiPlayer())); int aiName = Integer.parseInt(draft.getStandings()[aiIndex]) - 1; int aiDeckIndex = Integer.parseInt(draft.getStandings()[aiIndex]) - 1; - matchup.matchStarter.add(new RegisteredPlayer(decks.getAiDecks().get(aiDeckIndex)).setPlayer(gui.createAiPlayer(draft.getAINames()[aiName], draft.getAIIcons()[aiName]))); + matchup.matchStarter.add(new RegisteredPlayer(decks.getAiDecks().get(aiDeckIndex)).setPlayer(GamePlayerUtil.createAiPlayer(draft.getAINames()[aiName], draft.getAIIcons()[aiName]))); } else { @@ -158,10 +159,10 @@ public class QuestDraftUtils { int aiName2 = Integer.parseInt(draft.getStandings()[player2]) - 1; int aiDeckIndex = Integer.parseInt(draft.getStandings()[player1]) - 1; - matchup.matchStarter.add(new RegisteredPlayer(decks.getAiDecks().get(aiDeckIndex)).setPlayer(gui.createAiPlayer(draft.getAINames()[aiName1], draft.getAIIcons()[aiName1]))); + matchup.matchStarter.add(new RegisteredPlayer(decks.getAiDecks().get(aiDeckIndex)).setPlayer(GamePlayerUtil.createAiPlayer(draft.getAINames()[aiName1], draft.getAIIcons()[aiName1]))); aiDeckIndex = Integer.parseInt(draft.getStandings()[player2]) - 1; - matchup.matchStarter.add(new RegisteredPlayer(decks.getAiDecks().get(aiDeckIndex)).setPlayer(gui.createAiPlayer(draft.getAINames()[aiName2], draft.getAIIcons()[aiName2]))); + matchup.matchStarter.add(new RegisteredPlayer(decks.getAiDecks().get(aiDeckIndex)).setPlayer(GamePlayerUtil.createAiPlayer(draft.getAINames()[aiName2], draft.getAIIcons()[aiName2]))); } diff --git a/forge-gui/src/main/java/forge/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/quest/QuestEventDraft.java index 98dba7b11de..88030a59add 100644 --- a/forge-gui/src/main/java/forge/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/quest/QuestEventDraft.java @@ -40,6 +40,7 @@ import forge.limited.BoosterDraft; import forge.limited.LimitedPoolType; import forge.model.CardBlock; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.quest.data.QuestPreferences.QPref; import forge.quest.io.ReadPriceList; import forge.util.NameGenerator; @@ -801,7 +802,7 @@ public class QuestEventDraft { } List usedNames = new ArrayList<>(); - usedNames.add(quest.getGui().getGuiPlayer().getName()); + usedNames.add(GamePlayerUtil.getGuiPlayer().getName()); for (int i = 0; i < 7; i++) { event.aiNames[i] = NameGenerator.getRandomName("Any", "Any", usedNames); diff --git a/forge-gui/src/main/java/forge/quest/QuestUtil.java b/forge-gui/src/main/java/forge/quest/QuestUtil.java index f0e3d0105e0..b554b31935c 100644 --- a/forge-gui/src/main/java/forge/quest/QuestUtil.java +++ b/forge-gui/src/main/java/forge/quest/QuestUtil.java @@ -39,6 +39,7 @@ import forge.interfaces.IGuiBase; import forge.item.IPaperCard; import forge.item.PaperToken; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences.FPref; import forge.quest.bazaar.IQuestBazaarItem; import forge.quest.bazaar.QuestItemType; @@ -564,9 +565,9 @@ public class QuestUtil { } List starter = new ArrayList(); - starter.add(humanStart.setPlayer(gui.getQuestPlayer())); + starter.add(humanStart.setPlayer(GamePlayerUtil.getQuestPlayer())); - LobbyPlayer aiPlayer = gui.getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent()); + LobbyPlayer aiPlayer = GamePlayerUtil.createAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent()); gui.setPlayerAvatar(aiPlayer, event); starter.add(aiStart.setPlayer(aiPlayer)); diff --git a/forge-gui/src/main/java/forge/quest/QuestWinLoseController.java b/forge-gui/src/main/java/forge/quest/QuestWinLoseController.java index dc4716576f1..73bc8555617 100644 --- a/forge-gui/src/main/java/forge/quest/QuestWinLoseController.java +++ b/forge-gui/src/main/java/forge/quest/QuestWinLoseController.java @@ -16,6 +16,7 @@ import forge.interfaces.IGuiBase; import forge.interfaces.IWinLoseView; import forge.item.*; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgePreferences.FPref; import forge.quest.bazaar.QuestItemType; import forge.quest.data.QuestPreferences; @@ -47,7 +48,7 @@ public abstract class QuestWinLoseController { this.gui = gui; qData = FModel.getQuest(); qEvent = qData.getCurrentEvent(); - wonMatch = lastGame.isMatchWonBy(gui.getQuestPlayer()); + wonMatch = lastGame.isMatchWonBy(GamePlayerUtil.getQuestPlayer()); isAnte = FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE); } @@ -61,7 +62,7 @@ public abstract class QuestWinLoseController { qc.getCards().getShopList(); } - final LobbyPlayer questLobbyPlayer = gui.getQuestPlayer(); + final LobbyPlayer questLobbyPlayer = GamePlayerUtil.getQuestPlayer(); PlayerView player = null; for (final PlayerView p : lastGame.getPlayers()) { if (p.getLobbyPlayer().equals(questLobbyPlayer)) { @@ -236,7 +237,7 @@ public abstract class QuestWinLoseController { boolean hasNeverLost = true; int lifeDifferenceCredits = 0; - final LobbyPlayer localHuman = gui.getQuestPlayer(); + final LobbyPlayer localHuman = GamePlayerUtil.getQuestPlayer(); for (final GameOutcome game : lastGame.getOutcomesOfMatch()) { if (!game.isWinner(localHuman)) { hasNeverLost = false; diff --git a/forge-gui/src/main/java/forge/sound/SoundSystem.java b/forge-gui/src/main/java/forge/sound/SoundSystem.java index faf8ce04219..d70082a759b 100644 --- a/forge-gui/src/main/java/forge/sound/SoundSystem.java +++ b/forge-gui/src/main/java/forge/sound/SoundSystem.java @@ -10,6 +10,7 @@ import forge.events.UiEvent; import forge.game.event.GameEvent; import forge.interfaces.IGuiBase; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.ForgeConstants; import forge.properties.ForgePreferences.FPref; @@ -29,7 +30,7 @@ public class SoundSystem { public SoundSystem(final IGuiBase gui) { this.gui = gui; - this.visualizer = new EventVisualizer(gui.getGuiPlayer()); + this.visualizer = new EventVisualizer(GamePlayerUtil.getGuiPlayer()); } private boolean isUsingAltSystem() { return FModel.getPreferences().getPrefBoolean(FPref.UI_ALT_SOUND_SYSTEM); diff --git a/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java b/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java index 35d73f4b2bf..b75f087fc15 100644 --- a/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java +++ b/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java @@ -33,5 +33,9 @@ public final class GuiDisplayUtil { final String playerName = FModel.getPreferences().getPref(FPref.PLAYER_NAME); return text.replaceAll("(?i)human", playerName); } + + public static String getRandomAiName() { + return NameGenerator.getRandomName("Any", "Generic", getPlayerName()); + } } // end class GuiDisplayUtil