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) {
if (related instanceof Player && message.indexOf("{player") >= 0) {
if (related instanceof PlayerView && message.indexOf("{player") >= 0) {
String noun = mayBeYou(player, related);
message = message.replace("{player}", noun).replace("{player's}", Lang.getPossesive(noun));
}

View File

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

View File

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

View File

@@ -23,7 +23,7 @@ public final class GamePlayerUtil {
public static final LobbyPlayer getGuiPlayer() {
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 (!name.equals(guiPlayer.getName())) {
guiPlayer.setName(name);
@@ -33,7 +33,7 @@ public final class GamePlayerUtil {
return guiPlayer;
}
//use separate LobbyPlayerHuman instance for human players beyond first
return new LobbyPlayerHuman(name);
return new LobbyPlayerHuman(name, avatarIndex);
}
public static final LobbyPlayer getQuestPlayer() {

View File

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

View File

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