Fix so zones restored after selecting targets

This commit is contained in:
drdev
2014-07-21 03:06:49 +00:00
parent c42f6fea9d
commit a471d88ade
4 changed files with 55 additions and 36 deletions

View File

@@ -395,8 +395,9 @@ public class GuiDesktop implements IGuiBase {
} }
@Override @Override
public boolean openZone(ZoneType zoneType, Set<Player> players) { public boolean openZones(List<ZoneType> zones, Map<Player, Object> players) {
switch (zoneType) { if (zones.size() == 1) {
switch (zones.get(0)) {
case Battlefield: case Battlefield:
case Hand: case Hand:
return true; //don't actually need to open anything, but indicate that zone can be opened return true; //don't actually need to open anything, but indicate that zone can be opened
@@ -404,6 +405,12 @@ public class GuiDesktop implements IGuiBase {
return false; return false;
} }
} }
return false;
}
@Override
public void restoreOldZones(Map<Player, Object> playersToRestoreZonesFor) {
}
@Override @Override
public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) { public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) {

View File

@@ -4,6 +4,7 @@ import java.io.File;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -327,15 +328,18 @@ public class GuiMobile implements IGuiBase {
} }
@Override @Override
public boolean openZone(ZoneType zoneType, Set<Player> players) { public boolean openZones(List<ZoneType> zones, Map<Player, Object> players) {
if (zones.size() == 1) {
ZoneType zoneType = zones.get(0);
switch (zoneType) { switch (zoneType) {
case Battlefield: case Battlefield:
return true; //Battlefield is always open return true; //Battlefield is always open
default: default:
//open zone tab for given zone if needed //open zone tab for given zone if needed
boolean result = true; boolean result = true;
for (Player player : players) { for (Player player : players.keySet()) {
VPlayerPanel playerPanel = FControl.getPlayerPanel(player); VPlayerPanel playerPanel = FControl.getPlayerPanel(player);
players.put(player, playerPanel.getSelectedTab()); //backup selected tab before changing it
InfoTab zoneTab = playerPanel.getZoneTab(zoneType); InfoTab zoneTab = playerPanel.getZoneTab(zoneType);
if (zoneTab == null) { if (zoneTab == null) {
result = false; result = false;
@@ -347,6 +351,16 @@ public class GuiMobile implements IGuiBase {
return result; return result;
} }
} }
return false;
}
@Override
public void restoreOldZones(Map<Player, Object> playersToRestoreZonesFor) {
for (Entry<Player, Object> player : playersToRestoreZonesFor.entrySet()) {
VPlayerPanel playerPanel = FControl.getPlayerPanel(player.getKey());
playerPanel.setSelectedTab((InfoTab)player.getValue());
}
}
@Override @Override
public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) { public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) {

View File

@@ -73,7 +73,8 @@ public interface IGuiBase {
void enableOverlay(); void enableOverlay();
void disableOverlay(); void disableOverlay();
void finishGame(); void finishGame();
boolean openZone(ZoneType zoneType, Set<Player> players); boolean openZones(List<ZoneType> zones, Map<Player, Object> players);
void restoreOldZones(Map<Player, Object> playersToRestoreZonesFor);
void updateStack(); void updateStack();
void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate); void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate);
void updateCards(Set<Card> cardsToUpdate); void updateCards(Set<Card> cardsToUpdate);

View File

@@ -36,9 +36,9 @@ import forge.util.Aggregates;
import forge.util.gui.SGuiChoose; import forge.util.gui.SGuiChoose;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Map;
/** /**
* <p> * <p>
@@ -113,12 +113,17 @@ public class TargetSelection {
return this.chooseCardFromStack(mandatory); return this.chooseCardFromStack(mandatory);
} }
else { else {
List<Card> validTargets = this.getValidCardsToTarget(); final List<Card> validTargets = this.getValidCardsToTarget();
if (zone.size() == 1 && GuiBase.getInterface().openZone(zone.get(0), getPlayersWithValidTargets(validTargets))) { final Map<Player, Object> playersWithValidTargets = new HashMap<Player, Object>();
for (Card card : validTargets) {
playersWithValidTargets.put(card.getController(), null);
}
if (GuiBase.getInterface().openZones(zone, playersWithValidTargets)) {
InputSelectTargets inp = new InputSelectTargets(validTargets, ability, mandatory); InputSelectTargets inp = new InputSelectTargets(validTargets, ability, mandatory);
inp.showAndWait(); inp.showAndWait();
choiceResult = !inp.hasCancelled(); choiceResult = !inp.hasCancelled();
bTargetingDone = inp.hasPressedOk(); bTargetingDone = inp.hasPressedOk();
GuiBase.getInterface().restoreOldZones(playersWithValidTargets);
} }
else { else {
// for every other case an all-purpose GuiChoose // for every other case an all-purpose GuiChoose
@@ -129,14 +134,6 @@ public class TargetSelection {
return choiceResult && chooseTargets(numTargets); return choiceResult && chooseTargets(numTargets);
} }
private Set<Player> getPlayersWithValidTargets(List<Card> validTargets) {
Set<Player> players = new HashSet<Player>();
for (Card card : validTargets) {
players.add(card.getController());
}
return players;
}
// these have been copied over from CardFactoryUtil as they need two extra // these have been copied over from CardFactoryUtil as they need two extra
// parameters for target selection. // parameters for target selection.
// however, due to the changes necessary for SA_Requirements this is much // however, due to the changes necessary for SA_Requirements this is much