mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Refactor creation of Gui and AI lobby players into GamePlayerUtil
Fix so gui player name updated Fix so multiple human players receive separate LobbyPlayerHuman instances
This commit is contained in:
@@ -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<Void> {
|
||||
@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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<RegisteredPlayer> 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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1299,7 +1299,7 @@ public class PlayerControllerHuman extends PlayerController {
|
||||
}
|
||||
|
||||
public boolean isGuiPlayer() {
|
||||
return lobbyPlayer == getGui().getGuiPlayer();
|
||||
return lobbyPlayer == GamePlayerUtil.getGuiPlayer();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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])));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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<String> 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);
|
||||
|
||||
@@ -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<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||
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));
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user