From 71a9f33d4c958e455daf7eba1fce40caeca54dd9 Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 13 Oct 2014 05:24:33 +0000 Subject: [PATCH] Fix so each players opponents are cached in view --- forge-game/src/main/java/forge/game/player/Player.java | 4 ++++ .../src/main/java/forge/game/player/PlayerView.java | 9 +++++---- forge-gui/src/main/java/forge/match/MatchUtil.java | 5 +++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 7847af13fc6..ab532efa123 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -274,6 +274,10 @@ public class Player extends GameEntity implements Comparable { return result; } + public void updateOpponentsForView() { + view.updateOpponents(this); + } + //get single opponent for player if only one, otherwise returns null //meant to be used after game ends for the sake of achievements public Player getSingleOpponent() { diff --git a/forge-game/src/main/java/forge/game/player/PlayerView.java b/forge-game/src/main/java/forge/game/player/PlayerView.java index 7b630cdf54f..a10a4ccc095 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -18,6 +18,7 @@ import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; import forge.trackable.TrackableCollection; import forge.trackable.TrackableProperty; +import forge.util.FCollectionView; public class PlayerView extends GameEntityView { @@ -49,15 +50,15 @@ public class PlayerView extends GameEntityView { set(TrackableProperty.AvatarIndex, p.getLobbyPlayer().getAvatarIndex()); } - public Iterable getOpponents() { + public FCollectionView getOpponents() { return get(TrackableProperty.Opponents); } - private TrackableCollection getOpponentCollection() { - return get(TrackableProperty.Opponents); + void updateOpponents(Player p) { + set(TrackableProperty.Opponents, PlayerView.getCollection(p.getOpponents())); } public boolean isOpponentOf(final PlayerView other) { - return getOpponentCollection().contains(other); + return getOpponents().contains(other); } @Override diff --git a/forge-gui/src/main/java/forge/match/MatchUtil.java b/forge-gui/src/main/java/forge/match/MatchUtil.java index 565b4bf818d..993d273bd26 100644 --- a/forge-gui/src/main/java/forge/match/MatchUtil.java +++ b/forge-gui/src/main/java/forge/match/MatchUtil.java @@ -190,6 +190,11 @@ public class MatchUtil { game.subscribeToEvents(playbackControl); } + //ensure opponents set properly + for (Player p : sortedPlayers) { + p.updateOpponentsForView(); + } + // It's important to run match in a different thread to allow GUI inputs to be invoked from inside game. // Game is set on pause while gui player takes decisions game.getAction().invoke(new Runnable() {