mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
@@ -1166,7 +1166,7 @@ public final class CMatchUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables) {
|
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables, boolean backupLastZones) {
|
||||||
final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates();
|
final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates();
|
||||||
for (final PlayerView view : playersWithTargetables.keySet()) {
|
for (final PlayerView view : playersWithTargetables.keySet()) {
|
||||||
for(final ZoneType zone : zones) {
|
for(final ZoneType zone : zones) {
|
||||||
|
|||||||
@@ -56,12 +56,7 @@ public class AchievementsScreen extends FScreen {
|
|||||||
|
|
||||||
cbCollections.setSelectedIndex(0);
|
cbCollections.setSelectedIndex(0);
|
||||||
cbCollections.setAlignment(Align.center);
|
cbCollections.setAlignment(Align.center);
|
||||||
cbCollections.setChangedHandler(new FEventHandler() {
|
cbCollections.setChangedHandler(e -> setAchievements(cbCollections.getSelectedItem()));
|
||||||
@Override
|
|
||||||
public void handleEvent(FEvent e) {
|
|
||||||
setAchievements(cbCollections.getSelectedItem());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
setAchievements(cbCollections.getSelectedItem());
|
setAchievements(cbCollections.getSelectedItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final Map<PlayerView, InfoTab> zonesToRestore = Maps.newHashMap();
|
private final Map<PlayerView, InfoTab> zonesToRestore = Maps.newHashMap();
|
||||||
|
private final Map<PlayerView, InfoTab> lastZonesToRestore = Maps.newHashMap();
|
||||||
|
|
||||||
public static MatchScreen getView() {
|
public static MatchScreen getView() {
|
||||||
return view;
|
return view;
|
||||||
@@ -376,7 +377,7 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables) {
|
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables, boolean backupLastZones) {
|
||||||
PlayerZoneUpdates updates = new PlayerZoneUpdates();
|
PlayerZoneUpdates updates = new PlayerZoneUpdates();
|
||||||
if (zones.size() == 1) {
|
if (zones.size() == 1) {
|
||||||
final ZoneType zoneType = zones.iterator().next();
|
final ZoneType zoneType = zones.iterator().next();
|
||||||
@@ -385,10 +386,13 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
case Command:
|
case Command:
|
||||||
playersWithTargetables.clear(); //clear since no zones need to be restored
|
playersWithTargetables.clear(); //clear since no zones need to be restored
|
||||||
default:
|
default:
|
||||||
|
lastZonesToRestore.clear();
|
||||||
//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 : playersWithTargetables.keySet()) {
|
for (final PlayerView player : playersWithTargetables.keySet()) {
|
||||||
final VPlayerPanel playerPanel = view.getPlayerPanel(player);
|
final VPlayerPanel playerPanel = view.getPlayerPanel(player);
|
||||||
|
if (backupLastZones)
|
||||||
|
lastZonesToRestore.put(player, playerPanel.getSelectedTab());
|
||||||
playersWithTargetables.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);
|
||||||
updates.add(new PlayerZoneUpdate(player, zoneType));
|
updates.add(new PlayerZoneUpdate(player, zoneType));
|
||||||
@@ -418,8 +422,14 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final InfoTab zoneTab = playerPanel.getZoneTab(zone);
|
//final InfoTab zoneTab = playerPanel.getZoneTab(zone);
|
||||||
playerPanel.setSelectedTab(zoneTab);
|
//playerPanel.setSelectedTab(zoneTab);
|
||||||
|
}
|
||||||
|
for (Map.Entry<PlayerView, InfoTab> e : lastZonesToRestore.entrySet()) {
|
||||||
|
if (e.getKey() != null && !e.getKey().getHasLost()) {
|
||||||
|
final VPlayerPanel p = view.getPlayerPanel(e.getKey());
|
||||||
|
p.setSelectedTab(e.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class VStack extends FDropDown {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (zones.isEmpty() || playersWithValidTargets.isEmpty()) { return; }
|
if (zones.isEmpty() || playersWithValidTargets.isEmpty()) { return; }
|
||||||
restorablePlayerZones = MatchController.instance.openZones(player, zones, playersWithValidTargets);
|
restorablePlayerZones = MatchController.instance.openZones(player, zones, playersWithValidTargets, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//restore old zones when active stack instance changes
|
//restore old zones when active stack instance changes
|
||||||
@@ -288,59 +288,45 @@ public class VStack extends FDropDown {
|
|||||||
final String key = stackInstance.getKey();
|
final String key = stackInstance.getKey();
|
||||||
final boolean autoYield = gui.shouldAutoYield(key);
|
final boolean autoYield = gui.shouldAutoYield(key);
|
||||||
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("cbpAutoYieldMode"), autoYield,
|
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("cbpAutoYieldMode"), autoYield,
|
||||||
new FEventHandler() {
|
e -> {
|
||||||
@Override
|
gui.setShouldAutoYield(key, !autoYield);
|
||||||
public void handleEvent(FEvent e) {
|
if (!autoYield && stackInstance.equals(gameView.peekStack())) {
|
||||||
gui.setShouldAutoYield(key, !autoYield);
|
//auto-pass priority if ability is on top of stack
|
||||||
if (!autoYield && stackInstance.equals(gameView.peekStack())) {
|
controller.passPriority();
|
||||||
//auto-pass priority if ability is on top of stack
|
}
|
||||||
controller.passPriority();
|
}));
|
||||||
}
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
if (stackInstance.isOptionalTrigger() && stackInstance.getActivatingPlayer().equals(player)) {
|
if (stackInstance.isOptionalTrigger() && stackInstance.getActivatingPlayer().equals(player)) {
|
||||||
final int triggerID = stackInstance.getSourceTrigger();
|
final int triggerID = stackInstance.getSourceTrigger();
|
||||||
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysYes"),
|
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysYes"),
|
||||||
gui.shouldAlwaysAcceptTrigger(triggerID),
|
gui.shouldAlwaysAcceptTrigger(triggerID),
|
||||||
new FEventHandler() {
|
e -> {
|
||||||
@Override
|
if (gui.shouldAlwaysAcceptTrigger(triggerID)) {
|
||||||
public void handleEvent(FEvent e) {
|
gui.setShouldAlwaysAskTrigger(triggerID);
|
||||||
if (gui.shouldAlwaysAcceptTrigger(triggerID)) {
|
|
||||||
gui.setShouldAlwaysAskTrigger(triggerID);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gui.setShouldAlwaysAcceptTrigger(triggerID);
|
|
||||||
if (stackInstance.equals(gameView.peekStack())) {
|
|
||||||
//auto-yes if ability is on top of stack
|
|
||||||
controller.selectButtonOk();
|
|
||||||
}
|
}
|
||||||
}
|
else {
|
||||||
}
|
gui.setShouldAlwaysAcceptTrigger(triggerID);
|
||||||
}));
|
if (stackInstance.equals(gameView.peekStack())) {
|
||||||
|
//auto-yes if ability is on top of stack
|
||||||
|
controller.selectButtonOk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysNo"),
|
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysNo"),
|
||||||
gui.shouldAlwaysDeclineTrigger(triggerID),
|
gui.shouldAlwaysDeclineTrigger(triggerID),
|
||||||
new FEventHandler() {
|
e -> {
|
||||||
@Override
|
if (gui.shouldAlwaysDeclineTrigger(triggerID)) {
|
||||||
public void handleEvent(FEvent e) {
|
gui.setShouldAlwaysAskTrigger(triggerID);
|
||||||
if (gui.shouldAlwaysDeclineTrigger(triggerID)) {
|
|
||||||
gui.setShouldAlwaysAskTrigger(triggerID);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gui.setShouldAlwaysDeclineTrigger(triggerID);
|
|
||||||
if (stackInstance.equals(gameView.peekStack())) {
|
|
||||||
//auto-no if ability is on top of stack
|
|
||||||
controller.selectButtonCancel();
|
|
||||||
}
|
}
|
||||||
}
|
else {
|
||||||
}
|
gui.setShouldAlwaysDeclineTrigger(triggerID);
|
||||||
}));
|
if (stackInstance.equals(gameView.peekStack())) {
|
||||||
|
//auto-no if ability is on top of stack
|
||||||
|
controller.selectButtonCancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblZoomOrDetails"), new FEventHandler() {
|
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblZoomOrDetails"), e -> CardZoom.show(stackInstance.getSourceCard())));
|
||||||
@Override
|
|
||||||
public void handleEvent(FEvent e) {
|
|
||||||
CardZoom.show(stackInstance.getSourceCard());
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ public class NetGuiGame extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> players) {
|
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> players, boolean backupLastZones) {
|
||||||
updateGameView();
|
updateGameView();
|
||||||
return sendAndWait(ProtocolMethod.openZones, controller, zones, players);
|
return sendAndWait(ProtocolMethod.openZones, controller, zones, players);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
}
|
}
|
||||||
if (showExileUpdate) {
|
if (showExileUpdate) {
|
||||||
showExileUpdate = false;
|
showExileUpdate = false;
|
||||||
matchController.openZones(activatingPlayer, Collections.singleton(ZoneType.Exile), playersWithValidTargets);
|
matchController.openZones(activatingPlayer, Collections.singleton(ZoneType.Exile), playersWithValidTargets, false);
|
||||||
activatingPlayer = null;
|
activatingPlayer = null;
|
||||||
playersWithValidTargets.clear();
|
playersWithValidTargets.clear();
|
||||||
}
|
}
|
||||||
@@ -259,12 +259,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
} else {
|
} else {
|
||||||
processEvent();
|
processEvent();
|
||||||
|
|
||||||
final Runnable notifyStackAddition = new Runnable() {
|
final Runnable notifyStackAddition = () -> matchController.notifyStackAddition(event);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
matchController.notifyStackAddition(event);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
GuiBase.getInterface().invokeInEdtLater(notifyStackAddition);
|
GuiBase.getInterface().invokeInEdtLater(notifyStackAddition);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -284,12 +279,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
} else {
|
} else {
|
||||||
processEvent();
|
processEvent();
|
||||||
|
|
||||||
final Runnable notifyStackAddition = new Runnable() {
|
final Runnable notifyStackAddition = () -> matchController.notifyStackRemoval(event);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
matchController.notifyStackRemoval(event);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
GuiBase.getInterface().invokeInEdtLater(notifyStackAddition);
|
GuiBase.getInterface().invokeInEdtLater(notifyStackAddition);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ public interface IGuiGame {
|
|||||||
|
|
||||||
void setCard(CardView card);
|
void setCard(CardView card);
|
||||||
void setPlayerAvatar(LobbyPlayer player, IHasIcon ihi);
|
void setPlayerAvatar(LobbyPlayer player, IHasIcon ihi);
|
||||||
PlayerZoneUpdates openZones(PlayerView controller, Collection<ZoneType> zones, Map<PlayerView, Object> players);
|
PlayerZoneUpdates openZones(PlayerView controller, Collection<ZoneType> zones, Map<PlayerView, Object> players, boolean backupLastZones);
|
||||||
void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates);
|
void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates);
|
||||||
void setHighlighted(PlayerView pv, boolean b);
|
void setHighlighted(PlayerView pv, boolean b);
|
||||||
void setUsedToPay(CardView card, boolean value);
|
void setUsedToPay(CardView card, boolean value);
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ public class TargetSelection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PlayerView playerView = controller.getLocalPlayerView();
|
PlayerView playerView = controller.getLocalPlayerView();
|
||||||
PlayerZoneUpdates playerZoneUpdates = controller.getGui().openZones(playerView, zones, playersWithValidTargets);
|
PlayerZoneUpdates playerZoneUpdates = controller.getGui().openZones(playerView, zones, playersWithValidTargets, true);
|
||||||
if (!zones.contains(ZoneType.Stack)) {
|
if (!zones.contains(ZoneType.Stack)) {
|
||||||
InputSelectTargets inp = new InputSelectTargets(controller, validTargets, ability, mandatory, divisionValues, filter, mustTargetFiltered);
|
InputSelectTargets inp = new InputSelectTargets(controller, validTargets, ability, mandatory, divisionValues, filter, mustTargetFiltered);
|
||||||
inp.showAndWait();
|
inp.showAndWait();
|
||||||
|
|||||||
Reference in New Issue
Block a user