diff --git a/forge-core/src/main/java/forge/LobbyPlayer.java b/forge-core/src/main/java/forge/LobbyPlayer.java index 19acd971e4c..93aed6d83c5 100644 --- a/forge-core/src/main/java/forge/LobbyPlayer.java +++ b/forge-core/src/main/java/forge/LobbyPlayer.java @@ -11,6 +11,7 @@ import org.apache.commons.lang3.StringUtils; public abstract class LobbyPlayer { protected String name; private int avatarIndex = -1; + private String avatarCardImageKey; public LobbyPlayer(String name) { this.name = name; @@ -58,10 +59,16 @@ public abstract class LobbyPlayer { public int getAvatarIndex() { return avatarIndex; } - public void setAvatarIndex(int avatarIndex) { this.avatarIndex = avatarIndex; } + public String getAvatarCardImageKey() { + return avatarCardImageKey; + } + public void setAvatarCardImageKey(String avatarImageKey0) { + this.avatarCardImageKey = avatarImageKey0; + } + public abstract void hear(LobbyPlayer player, String message); } diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 92ab6de6467..35ea781b104 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -13,8 +13,10 @@ import forge.Forge; import forge.Graphics; import forge.LobbyPlayer; import forge.assets.FImage; +import forge.assets.FImageComplex; import forge.assets.FSkin; import forge.assets.FTextureRegionImage; +import forge.card.CardRenderer; import forge.game.GameEntityView; import forge.game.GameView; import forge.game.Match; @@ -60,7 +62,12 @@ public class MatchController implements IMatchController { LobbyPlayer lp = p.getLobbyPlayer(); FImage avatar = avatarImages.get(lp); if (avatar == null) { - avatar = new FTextureRegionImage(FSkin.getAvatars().get(lp.getAvatarIndex())); + if (lp.getAvatarCardImageKey() == null) { + avatar = new FTextureRegionImage(FSkin.getAvatars().get(lp.getAvatarIndex())); + } + else { //handle lobby players with art from cards + avatar = CardRenderer.getCardArt(lp.getAvatarCardImageKey(), false); + } } return avatar; } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestController.java b/forge-gui/src/main/java/forge/planarconquest/ConquestController.java index 55d9693e8c2..f3f82b659a4 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestController.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestController.java @@ -25,6 +25,7 @@ import java.util.Map.Entry; import com.google.common.base.Predicate; import forge.FThreads; +import forge.ImageKeys; import forge.LobbyPlayer; import forge.card.CardRarity; import forge.card.CardRules; @@ -43,6 +44,7 @@ import forge.model.FModel; import forge.planarconquest.ConquestPlaneData.RegionData; import forge.planarconquest.ConquestPreferences.CQPref; import forge.player.GamePlayerUtil; +import forge.player.LobbyPlayerHuman; import forge.properties.ForgePreferences.FPref; import forge.quest.BoosterUtils; import forge.util.Aggregates; @@ -57,6 +59,7 @@ public class ConquestController { private ConquestData model; private transient IStorage decks; private transient GameRunner gameRunner; + private LobbyPlayerHuman humanPlayer; public ConquestController() { } @@ -233,10 +236,19 @@ public class ConquestController { humanStart.setStartingLife(STARTING_LIFE + (isHumanDefending ? FModel.getConquestPreferences().getPrefInt(CQPref.DEFEND_BONUS_LIFE) : 0)); aiStart.setStartingLife(STARTING_LIFE); - List starter = new ArrayList(); - starter.add(humanStart.setPlayer(getConquestPlayer())); + String humanPlayerName = commander.getPlayerName(); + String aiPlayerName = opponent.getPlayerName(); + if (humanPlayerName.equals(aiPlayerName)) { + aiPlayerName += " (AI)"; //ensure player names are distinct + } - LobbyPlayer aiPlayer = GamePlayerUtil.createAiPlayer(); + List starter = new ArrayList(); + humanPlayer = new LobbyPlayerHuman(humanPlayerName); + humanPlayer.setAvatarCardImageKey(ImageKeys.getImageKey(commander.getCard(), false)); + starter.add(humanStart.setPlayer(humanPlayer)); + + LobbyPlayer aiPlayer = GamePlayerUtil.createAiPlayer(aiPlayerName, -1); + aiPlayer.setAvatarCardImageKey(ImageKeys.getImageKey(opponent.getCard(), false)); starter.add(aiStart.setPlayer(aiPlayer)); boolean useRandomFoil = FModel.getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL); @@ -277,12 +289,8 @@ public class ConquestController { CardRulesPredicates.Presets.IS_NON_CREATURE_SPELL, bonusCard ? 2 : 1); } - private LobbyPlayer getConquestPlayer() { - return GamePlayerUtil.getGuiPlayer(); //TODO: Should this be a separate player? - } - public void showGameRewards(final GameView game, final IWinLoseView view) { - if (game.isMatchWonBy(getConquestPlayer())) { + if (game.isMatchWonBy(humanPlayer)) { view.getBtnQuit().setText("Great!"); //give controller a chance to run remaining logic on a separate thread @@ -313,7 +321,7 @@ public class ConquestController { } public void onGameFinished(final GameView game) { - if (game.isMatchWonBy(getConquestPlayer())) { + if (game.isMatchWonBy(humanPlayer)) { model.addWin(gameRunner.opponent); gameRunner.wonGame = true; }