Support using commander as game avatar

This commit is contained in:
drdev
2014-12-13 05:03:42 +00:00
parent 691fd67b9c
commit 7a20bd682e
3 changed files with 33 additions and 11 deletions

View File

@@ -11,6 +11,7 @@ import org.apache.commons.lang3.StringUtils;
public abstract class LobbyPlayer { public abstract class LobbyPlayer {
protected String name; protected String name;
private int avatarIndex = -1; private int avatarIndex = -1;
private String avatarCardImageKey;
public LobbyPlayer(String name) { public LobbyPlayer(String name) {
this.name = name; this.name = name;
@@ -58,10 +59,16 @@ public abstract class LobbyPlayer {
public int getAvatarIndex() { public int getAvatarIndex() {
return avatarIndex; return avatarIndex;
} }
public void setAvatarIndex(int avatarIndex) { public void setAvatarIndex(int avatarIndex) {
this.avatarIndex = 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); public abstract void hear(LobbyPlayer player, String message);
} }

View File

@@ -13,8 +13,10 @@ import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.assets.FImage; import forge.assets.FImage;
import forge.assets.FImageComplex;
import forge.assets.FSkin; import forge.assets.FSkin;
import forge.assets.FTextureRegionImage; import forge.assets.FTextureRegionImage;
import forge.card.CardRenderer;
import forge.game.GameEntityView; import forge.game.GameEntityView;
import forge.game.GameView; import forge.game.GameView;
import forge.game.Match; import forge.game.Match;
@@ -60,8 +62,13 @@ public class MatchController implements IMatchController {
LobbyPlayer lp = p.getLobbyPlayer(); LobbyPlayer lp = p.getLobbyPlayer();
FImage avatar = avatarImages.get(lp); FImage avatar = avatarImages.get(lp);
if (avatar == null) { if (avatar == null) {
if (lp.getAvatarCardImageKey() == null) {
avatar = new FTextureRegionImage(FSkin.getAvatars().get(lp.getAvatarIndex())); avatar = new FTextureRegionImage(FSkin.getAvatars().get(lp.getAvatarIndex()));
} }
else { //handle lobby players with art from cards
avatar = CardRenderer.getCardArt(lp.getAvatarCardImageKey(), false);
}
}
return avatar; return avatar;
} }

View File

@@ -25,6 +25,7 @@ import java.util.Map.Entry;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import forge.FThreads; import forge.FThreads;
import forge.ImageKeys;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.card.CardRarity; import forge.card.CardRarity;
import forge.card.CardRules; import forge.card.CardRules;
@@ -43,6 +44,7 @@ import forge.model.FModel;
import forge.planarconquest.ConquestPlaneData.RegionData; import forge.planarconquest.ConquestPlaneData.RegionData;
import forge.planarconquest.ConquestPreferences.CQPref; import forge.planarconquest.ConquestPreferences.CQPref;
import forge.player.GamePlayerUtil; import forge.player.GamePlayerUtil;
import forge.player.LobbyPlayerHuman;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.quest.BoosterUtils; import forge.quest.BoosterUtils;
import forge.util.Aggregates; import forge.util.Aggregates;
@@ -57,6 +59,7 @@ public class ConquestController {
private ConquestData model; private ConquestData model;
private transient IStorage<Deck> decks; private transient IStorage<Deck> decks;
private transient GameRunner gameRunner; private transient GameRunner gameRunner;
private LobbyPlayerHuman humanPlayer;
public ConquestController() { public ConquestController() {
} }
@@ -233,10 +236,19 @@ public class ConquestController {
humanStart.setStartingLife(STARTING_LIFE + (isHumanDefending ? FModel.getConquestPreferences().getPrefInt(CQPref.DEFEND_BONUS_LIFE) : 0)); humanStart.setStartingLife(STARTING_LIFE + (isHumanDefending ? FModel.getConquestPreferences().getPrefInt(CQPref.DEFEND_BONUS_LIFE) : 0));
aiStart.setStartingLife(STARTING_LIFE); aiStart.setStartingLife(STARTING_LIFE);
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>(); String humanPlayerName = commander.getPlayerName();
starter.add(humanStart.setPlayer(getConquestPlayer())); String aiPlayerName = opponent.getPlayerName();
if (humanPlayerName.equals(aiPlayerName)) {
aiPlayerName += " (AI)"; //ensure player names are distinct
}
LobbyPlayer aiPlayer = GamePlayerUtil.createAiPlayer(); List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
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)); starter.add(aiStart.setPlayer(aiPlayer));
boolean useRandomFoil = FModel.getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL); 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); 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<? extends IButton> view) { public void showGameRewards(final GameView game, final IWinLoseView<? extends IButton> view) {
if (game.isMatchWonBy(getConquestPlayer())) { if (game.isMatchWonBy(humanPlayer)) {
view.getBtnQuit().setText("Great!"); view.getBtnQuit().setText("Great!");
//give controller a chance to run remaining logic on a separate thread //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) { public void onGameFinished(final GameView game) {
if (game.isMatchWonBy(getConquestPlayer())) { if (game.isMatchWonBy(humanPlayer)) {
model.addWin(gameRunner.opponent); model.addWin(gameRunner.opponent);
gameRunner.wonGame = true; gameRunner.wonGame = true;
} }