Prevent concurrent modification exception when building targeting overlays

This commit is contained in:
drdev
2014-10-22 23:41:03 +00:00
parent f5aaf233d5
commit 3f81f64f02
3 changed files with 5 additions and 5 deletions

View File

@@ -53,7 +53,7 @@ public class CombatView extends TrackableObject {
} }
public Iterable<CardView> getAttackers() { public Iterable<CardView> getAttackers() {
return getAttackersWithDefenders().keySet(); return new HashSet<CardView>(getAttackersWithDefenders().keySet());
} }
public Iterable<GameEntityView> getDefenders() { public Iterable<GameEntityView> getDefenders() {

View File

@@ -5,6 +5,7 @@ import forge.game.player.PlayerView;
import forge.trackable.TrackableCollection; import forge.trackable.TrackableCollection;
import forge.trackable.TrackableObject; import forge.trackable.TrackableObject;
import forge.trackable.TrackableProperty; import forge.trackable.TrackableProperty;
import forge.util.FCollectionView;
public class StackItemView extends TrackableObject { public class StackItemView extends TrackableObject {
@@ -72,14 +73,14 @@ public class StackItemView extends TrackableObject {
set(TrackableProperty.ActivatingPlayer, PlayerView.get(si.getActivatingPlayer())); set(TrackableProperty.ActivatingPlayer, PlayerView.get(si.getActivatingPlayer()));
} }
public Iterable<CardView> getTargetCards() { public FCollectionView<CardView> getTargetCards() {
return get(TrackableProperty.TargetCards); return get(TrackableProperty.TargetCards);
} }
void updateTargetCards(SpellAbilityStackInstance si) { void updateTargetCards(SpellAbilityStackInstance si) {
set(TrackableProperty.TargetCards, CardView.getCollection(si.getTargetChoices().getTargetCards())); set(TrackableProperty.TargetCards, CardView.getCollection(si.getTargetChoices().getTargetCards()));
} }
public Iterable<PlayerView> getTargetPlayers() { public FCollectionView<PlayerView> getTargetPlayers() {
return get(TrackableProperty.TargetPlayers); return get(TrackableProperty.TargetPlayers);
} }
void updateTargetPlayers(SpellAbilityStackInstance si) { void updateTargetPlayers(SpellAbilityStackInstance si) {

View File

@@ -265,8 +265,7 @@ public enum TargetingOverlay {
addArc(endpoints.get(defender.getId()), endpoints.get(c.getId()), true); addArc(endpoints.get(defender.getId()), endpoints.get(c.getId()), true);
} }
// if c is a planeswalker that's being attacked // if c is a planeswalker that's being attacked
final Iterable<CardView> attackers = combat.getAttackersOf(c); for (final CardView pwAttacker : combat.getAttackersOf(c)) {
for (final CardView pwAttacker : attackers) {
addArc(endpoints.get(c.getId()), endpoints.get(pwAttacker.getId()), true); addArc(endpoints.get(c.getId()), endpoints.get(pwAttacker.getId()), true);
} }
for (final CardView attackingCard : combat.getAttackers()) { for (final CardView attackingCard : combat.getAttackers()) {