Fix some more issues.

- Fix issue where avatars would get mixed up or assigned randomly
- Fix issue where "{player's}" would display rather than name when revealing cards in hand
This commit is contained in:
elcnesh
2015-03-18 17:54:42 +00:00
parent eeb67ab6e4
commit bad910014c
6 changed files with 28 additions and 24 deletions

View File

@@ -19,7 +19,7 @@ public class MessageUtil {
} }
public static String formatMessage(String message, PlayerView player, Object related) { public static String formatMessage(String message, PlayerView player, Object related) {
if (related instanceof Player && message.indexOf("{player") >= 0) { if (related instanceof PlayerView && message.indexOf("{player") >= 0) {
String noun = mayBeYou(player, related); String noun = mayBeYou(player, related);
message = message.replace("{player}", noun).replace("{player's}", Lang.getPossesive(noun)); message = message.replace("{player}", noun).replace("{player's}", Lang.getPossesive(noun));
} }

View File

@@ -347,7 +347,7 @@ public abstract class GameLobby {
setNameNow = true; setNameNow = true;
hasNameBeenSet = true; hasNameBeenSet = true;
} }
lobbyPlayer = GamePlayerUtil.getGuiPlayer(name, setNameNow); lobbyPlayer = GamePlayerUtil.getGuiPlayer(name, avatar, setNameNow);
} }
Deck deck = slot.getDeck(); Deck deck = slot.getDeck();

View File

@@ -46,6 +46,7 @@ import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem; import forge.sound.SoundSystem;
import forge.trackable.TrackableCollection; import forge.trackable.TrackableCollection;
import forge.util.CollectionSuppliers; import forge.util.CollectionSuppliers;
import forge.util.FCollectionView;
import forge.util.GuiDisplayUtil; import forge.util.GuiDisplayUtil;
import forge.util.NameGenerator; import forge.util.NameGenerator;
import forge.util.maps.HashMapOfLists; import forge.util.maps.HashMapOfLists;
@@ -99,12 +100,21 @@ public class HostedMatch {
gameRules.setAppliedVariants(appliedVariants); gameRules.setAppliedVariants(appliedVariants);
} }
if (players.size() == 2) { final List<RegisteredPlayer> sortedPlayers = Lists.newArrayList(players);
title = String.format("%s vs %s", players.get(0).getPlayer().getName(), players.get(1).getPlayer().getName()); Collections.sort(sortedPlayers, new Comparator<RegisteredPlayer>() {
} else { @Override public final int compare(final RegisteredPlayer p1, final RegisteredPlayer p2) {
title = String.format("Multiplayer Game (%d players)", players.size()); final int v1 = p1.getPlayer() instanceof LobbyPlayerHuman ? 0 : 1;
final int v2 = p2.getPlayer() instanceof LobbyPlayerHuman ? 0 : 1;
return Integer.compare(v1, v2);
} }
this.match = new Match(gameRules, players, title); });
if (sortedPlayers.size() == 2) {
title = String.format("%s vs %s", sortedPlayers.get(0).getPlayer().getName(), sortedPlayers.get(1).getPlayer().getName());
} else {
title = String.format("Multiplayer Game (%d players)", sortedPlayers.size());
}
this.match = new Match(gameRules, sortedPlayers, title);
startGame(); startGame();
} }
@@ -137,25 +147,15 @@ public class HostedMatch {
game.subscribeToEvents(SoundSystem.instance); game.subscribeToEvents(SoundSystem.instance);
game.subscribeToEvents(visitor); game.subscribeToEvents(visitor);
// Instantiate all required field slots (user at 0) final FCollectionView<Player> players = game.getPlayers();
final List<Player> sortedPlayers = Lists.newArrayList(game.getRegisteredPlayers());
Collections.sort(sortedPlayers, new Comparator<Player>() {
@Override
public int compare(final Player p1, final Player p2) {
final int v1 = p1.getController() instanceof PlayerControllerHuman ? 0 : 1;
final int v2 = p2.getController() instanceof PlayerControllerHuman ? 0 : 1;
return Integer.compare(v1, v2);
}
});
final String[] avatarIndices = FModel.getPreferences().getPref(FPref.UI_AVATARS).split(","); final String[] avatarIndices = FModel.getPreferences().getPref(FPref.UI_AVATARS).split(",");
final GameView gameView = getGameView(); final GameView gameView = getGameView();
humanCount = 0; humanCount = 0;
final MapOfLists<IGuiGame, PlayerView> playersPerGui = new HashMapOfLists<IGuiGame, PlayerView>(CollectionSuppliers.<PlayerView>arrayLists()); final MapOfLists<IGuiGame, PlayerView> playersPerGui = new HashMapOfLists<IGuiGame, PlayerView>(CollectionSuppliers.<PlayerView>arrayLists());
for (int iPlayer = 0; iPlayer < sortedPlayers.size(); iPlayer++) { for (int iPlayer = 0; iPlayer < players.size(); iPlayer++) {
final RegisteredPlayer rp = match.getPlayers().get(iPlayer); final RegisteredPlayer rp = match.getPlayers().get(iPlayer);
final Player p = sortedPlayers.get(iPlayer); final Player p = players.get(iPlayer);
p.getLobbyPlayer().setAvatarIndex(rp.getPlayer().getAvatarIndex()); p.getLobbyPlayer().setAvatarIndex(rp.getPlayer().getAvatarIndex());
if (p.getLobbyPlayer().getAvatarIndex() == -1) { if (p.getLobbyPlayer().getAvatarIndex() == -1) {
@@ -195,7 +195,7 @@ public class HostedMatch {
gui.setGameController(null, humanController); gui.setGameController(null, humanController);
gui.openView(null); gui.openView(null);
} else if (humanCount == sortedPlayers.size()) { } else if (humanCount == players.size()) {
//if there are no AI's, allow all players to see all cards (hotseat mode). //if there are no AI's, allow all players to see all cards (hotseat mode).
for (final PlayerControllerHuman humanController : humanControllers) { for (final PlayerControllerHuman humanController : humanControllers) {
humanController.setMayLookAtAllCards(true); humanController.setMayLookAtAllCards(true);
@@ -208,7 +208,7 @@ public class HostedMatch {
} }
//ensure opponents set properly //ensure opponents set properly
for (final Player p : sortedPlayers) { for (final Player p : players) {
p.updateOpponentsForView(); p.updateOpponentsForView();
} }

View File

@@ -23,7 +23,7 @@ public final class GamePlayerUtil {
public static final LobbyPlayer getGuiPlayer() { public static final LobbyPlayer getGuiPlayer() {
return guiPlayer; return guiPlayer;
} }
public static final LobbyPlayer getGuiPlayer(final String name, final boolean writePref) { public static final LobbyPlayer getGuiPlayer(final String name, final int avatarIndex, final boolean writePref) {
if (writePref) { if (writePref) {
if (!name.equals(guiPlayer.getName())) { if (!name.equals(guiPlayer.getName())) {
guiPlayer.setName(name); guiPlayer.setName(name);
@@ -33,7 +33,7 @@ public final class GamePlayerUtil {
return guiPlayer; return guiPlayer;
} }
//use separate LobbyPlayerHuman instance for human players beyond first //use separate LobbyPlayerHuman instance for human players beyond first
return new LobbyPlayerHuman(name); return new LobbyPlayerHuman(name, avatarIndex);
} }
public static final LobbyPlayer getQuestPlayer() { public static final LobbyPlayer getQuestPlayer() {

View File

@@ -9,7 +9,11 @@ import forge.util.GuiDisplayUtil;
public class LobbyPlayerHuman extends LobbyPlayer implements IGameEntitiesFactory { public class LobbyPlayerHuman extends LobbyPlayer implements IGameEntitiesFactory {
public LobbyPlayerHuman(final String name) { public LobbyPlayerHuman(final String name) {
this(name, -1);
}
public LobbyPlayerHuman(final String name, final int avatarIndex) {
super(name); super(name);
setAvatarIndex(avatarIndex);
} }
@Override @Override

View File

@@ -577,7 +577,7 @@ public class PlayerControllerHuman
} else { } else {
message += "{player's} " + zone.name().toLowerCase(); message += "{player's} " + zone.name().toLowerCase();
} }
String fm = MessageUtil.formatMessage(message, player, owner); String fm = MessageUtil.formatMessage(message, getLocalPlayerView(), owner);
if (!cards.isEmpty()) { if (!cards.isEmpty()) {
tempShowCards(game.getCardList(cards)); tempShowCards(game.getCardList(cards));
getGui().reveal(fm, cards); getGui().reveal(fm, cards);