Updates for Android

This commit is contained in:
friarsol
2020-02-10 21:30:19 -05:00
parent ef0a1a843d
commit ddc531c5f2
2 changed files with 33 additions and 21 deletions

View File

@@ -5,7 +5,6 @@ import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import forge.FThreads; import forge.FThreads;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
@@ -44,6 +43,7 @@ import forge.match.AbstractGuiGame;
import forge.match.HostedMatch; import forge.match.HostedMatch;
import forge.model.FModel; import forge.model.FModel;
import forge.player.PlayerZoneUpdate; import forge.player.PlayerZoneUpdate;
import forge.player.PlayerZoneUpdates;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.match.views.VAssignDamage; import forge.screens.match.views.VAssignDamage;
@@ -307,40 +307,47 @@ public class MatchController extends AbstractGuiGame {
} }
@Override @Override
public boolean openZones(final Collection<ZoneType> zones, final Map<PlayerView, Object> players) { public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables) {
PlayerZoneUpdates updates = new PlayerZoneUpdates();
if (zones.size() == 1) { if (zones.size() == 1) {
final ZoneType zoneType = zones.iterator().next(); final ZoneType zoneType = zones.iterator().next();
switch (zoneType) { switch (zoneType) {
case Battlefield: case Battlefield:
case Command: case Command:
players.clear(); //clear since no zones need to be restored playersWithTargetables.clear(); //clear since no zones need to be restored
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 (final PlayerView player : players.keySet()) { for (final PlayerView player : playersWithTargetables.keySet()) {
final VPlayerPanel playerPanel = view.getPlayerPanel(player); final VPlayerPanel playerPanel = view.getPlayerPanel(player);
players.put(player, playerPanel.getSelectedTab()); //backup selected tab before changing it playersWithTargetables.put(player, playerPanel.getSelectedTab()); //backup selected tab before changing it
final InfoTab zoneTab = playerPanel.getZoneTab(zoneType); final InfoTab zoneTab = playerPanel.getZoneTab(zoneType);
if (zoneTab == null) { if (zoneTab != null) {
result = false; updates.add(new PlayerZoneUpdate(player, zoneType));
} else {
playerPanel.setSelectedTab(zoneTab); playerPanel.setSelectedTab(zoneTab);
} }
} }
return result;
} }
} }
return false; return updates;
} }
@Override @Override
public void restoreOldZones(final Map<PlayerView, Object> playersToRestoreZonesFor) { public void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates) {
for (final Entry<PlayerView, Object> player : playersToRestoreZonesFor.entrySet()) { for(PlayerZoneUpdate update : playerZoneUpdates) {
final VPlayerPanel playerPanel = view.getPlayerPanel(player.getKey()); PlayerView player = update.getPlayer();
if (player.getValue() == null || player.getValue() instanceof InfoTab) {
playerPanel.setSelectedTab((InfoTab) player.getValue()); ZoneType zone = null;
for(ZoneType type : update.getZones()) {
zone = type;
break;
} }
if (zone == null) { return; }
final VPlayerPanel playerPanel = view.getPlayerPanel(player);
final InfoTab zoneTab = playerPanel.getZoneTab(zone);
playerPanel.setSelectedTab(zoneTab);
} }
} }

View File

@@ -31,6 +31,7 @@ import forge.menu.FDropDown;
import forge.menu.FMenuItem; import forge.menu.FMenuItem;
import forge.menu.FMenuTab; import forge.menu.FMenuTab;
import forge.menu.FPopupMenu; import forge.menu.FPopupMenu;
import forge.player.PlayerZoneUpdates;
import forge.screens.match.MatchController; import forge.screens.match.MatchController;
import forge.screens.match.TargetingOverlay; import forge.screens.match.TargetingOverlay;
import forge.toolbox.FCardPanel; import forge.toolbox.FCardPanel;
@@ -55,6 +56,7 @@ public class VStack extends FDropDown {
private StackInstanceDisplay activeItem; private StackInstanceDisplay activeItem;
private StackItemView activeStackInstance; private StackItemView activeStackInstance;
private Map<PlayerView, Object> playersWithValidTargets; private Map<PlayerView, Object> playersWithValidTargets;
private PlayerZoneUpdates restorablePlayerZones = null;
private int stackSize; private int stackSize;
@@ -70,6 +72,8 @@ public class VStack extends FDropDown {
private void revealTargetZones() { private void revealTargetZones() {
if (activeStackInstance == null) { return; } if (activeStackInstance == null) { return; }
PlayerView player = MatchController.instance.getCurrentPlayer();
final Set<ZoneType> zones = new HashSet<>(); final Set<ZoneType> zones = new HashSet<>();
playersWithValidTargets = new HashMap<>(); playersWithValidTargets = new HashMap<>();
for (final CardView c : activeStackInstance.getTargetCards()) { for (final CardView c : activeStackInstance.getTargetCards()) {
@@ -79,14 +83,15 @@ public class VStack extends FDropDown {
} }
} }
if (zones.isEmpty() || playersWithValidTargets.isEmpty()) { return; } if (zones.isEmpty() || playersWithValidTargets.isEmpty()) { return; }
MatchController.instance.openZones(zones, playersWithValidTargets); restorablePlayerZones = MatchController.instance.openZones(player, zones, playersWithValidTargets);
} }
//restore old zones when active stack instance changes //restore old zones when active stack instance changes
private void restoreOldZones() { private void restoreOldZones() {
if (playersWithValidTargets == null) { return; } if (restorablePlayerZones == null) { return; }
MatchController.instance.restoreOldZones(playersWithValidTargets); PlayerView player = MatchController.instance.getCurrentPlayer();
playersWithValidTargets = null; MatchController.instance.restoreOldZones(player, restorablePlayerZones);
restorablePlayerZones = null;
} }
@Override @Override