diff --git a/.gitattributes b/.gitattributes index f10a501b148..6c3957f6da6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1253,7 +1253,6 @@ forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java -text forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java -text forge-gui-mobile/src/forge/screens/match/views/VDisplayArea.java -text forge-gui-mobile/src/forge/screens/match/views/VField.java -text -forge-gui-mobile/src/forge/screens/match/views/VFlashbackZone.java -text forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java -text forge-gui-mobile/src/forge/screens/match/views/VLog.java -text forge-gui-mobile/src/forge/screens/match/views/VManaPool.java -text diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 7f2e1354233..38c58ca4be5 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -335,6 +335,7 @@ public class CardView extends GameEntityView { case Exile: case Battlefield: case Graveyard: + case Flashback: case Stack: //cards in these zones are visible to all return true; 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 9bb60760722..519fb07491f 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1146,6 +1146,9 @@ public class Player extends GameEntity implements Comparable { } return cards; } + else if (zoneType == ZoneType.Flashback) { + return getCardsActivableInExternalZones(true); + } PlayerZone zone = getZone(zoneType); return zone == null ? CardCollection.EMPTY : zone.getCards(filterOutPhasedOut); 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 2044b2e13c0..a002ba47da5 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -223,6 +223,8 @@ public class PlayerView extends GameEntityView { return TrackableProperty.Hand; case Library: return TrackableProperty.Library; + case Flashback: + return TrackableProperty.Flashback; default: return null; //other zones not represented } @@ -231,6 +233,17 @@ public class PlayerView extends GameEntityView { TrackableProperty prop = getZoneProp(zone.getZoneType()); if (prop == null) { return; } set(prop, CardView.getCollection(zone.getCards())); + + //update flashback zone when graveyard, library, or exile zones updated + switch (zone.getZoneType()) { + case Graveyard: + case Library: + case Exile: + set(TrackableProperty.Flashback, CardView.getCollection(zone.getPlayer().getCardsIn(ZoneType.Flashback))); + break; + default: + break; + } } public int getMana(final byte color) { diff --git a/forge-game/src/main/java/forge/game/zone/ZoneType.java b/forge-game/src/main/java/forge/game/zone/ZoneType.java index e8923ebd025..1267418bf0a 100644 --- a/forge-game/src/main/java/forge/game/zone/ZoneType.java +++ b/forge-game/src/main/java/forge/game/zone/ZoneType.java @@ -13,6 +13,7 @@ public enum ZoneType { Graveyard(false), Battlefield(false), Exile(false), + Flashback(false), Command(false), Stack(false), Sideboard(true), diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java b/forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java index 4136937aac1..8ede399b362 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java @@ -1,7 +1,6 @@ package forge.screens.match; import java.awt.event.ActionEvent; -import forge.game.card.CardView; import forge.game.player.PlayerView; import forge.game.zone.ZoneType; import forge.gui.ForgeAction; @@ -32,27 +31,5 @@ public class ZoneAction extends ForgeAction { @Override public void actionPerformed(final ActionEvent e) { FloatingCardArea.show(player, zone); - /*final Iterable choices = getCardsAsIterable(); - if (choices == null || !choices.iterator().hasNext()) { - GuiChoose.reveal(title, "no cards"); - return; - } - - final List choices2 = Lists.newLinkedList(); - for (final CardView cv : choices) { - choices2.add(cv.getCurrentState()); - } - - final CardStateView choice = GuiChoose.oneOrNone(title, choices2); - if (choice != null) { - doAction(choice.getCard()); - }*/ - } - - protected Iterable getCardsAsIterable() { - return player.getCards(zone); - } - - protected void doAction(final CardView c) { } } \ No newline at end of file diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java index 1c0e0aa8ee1..f2e4bb6e7ba 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java @@ -25,7 +25,6 @@ import com.google.common.base.Function; import forge.Singletons; import forge.UiCommand; -import forge.game.card.CardView; import forge.game.player.PlayerView; import forge.game.zone.ZoneType; import forge.gui.framework.ICDoc; @@ -66,22 +65,7 @@ public class CField implements ICDoc { final ZoneAction libraryAction = new ZoneAction(player, ZoneType.Library, MatchConstants.HUMANLIBRARY); final ZoneAction exileAction = new ZoneAction(player, ZoneType.Exile, MatchConstants.HUMANEXILED); final ZoneAction graveAction = new ZoneAction(player, ZoneType.Graveyard, MatchConstants.HUMANGRAVEYARD); - @SuppressWarnings("serial") - final ZoneAction flashBackAction = new ZoneAction(player, null, MatchConstants.HUMANFLASHBACK) { - @Override - protected void doAction(final CardView c) { - // activate cards only via your own flashback button - if (player.getLobbyPlayer() != Singletons.getControl().getGuiPlayer()) { - return; - } - - CPrompt.SINGLETON_INSTANCE.selectCard(c, null); - } - @Override - protected Iterable getCardsAsIterable() { - return player.getFlashback(); - } - }; + final ZoneAction flashBackAction = new ZoneAction(player, ZoneType.Flashback, MatchConstants.HUMANFLASHBACK); Function manaAction = new Function() { public Void apply(Byte colorCode) { diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java b/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java index 2edec51aecb..fda1b88a810 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java @@ -62,6 +62,17 @@ public class FloatingCardArea extends CardArea { if (cardArea != null) { cardArea.refresh(); } + + //refresh flashback zone when graveyard, library, or exile zones updated + switch (zone) { + case Graveyard: + case Library: + case Exile: + refresh(player, ZoneType.Flashback); + break; + default: + break; + } } private final PlayerView player; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VFlashbackZone.java b/forge-gui-mobile/src/forge/screens/match/views/VFlashbackZone.java deleted file mode 100644 index 12df3ade862..00000000000 --- a/forge-gui-mobile/src/forge/screens/match/views/VFlashbackZone.java +++ /dev/null @@ -1,24 +0,0 @@ -package forge.screens.match.views; - -import forge.FThreads; -import forge.game.player.PlayerView; - -public class VFlashbackZone extends VCardDisplayArea { - private final PlayerView player; - - public VFlashbackZone(PlayerView player0) { - player = player0; - } - - @Override - public void update() { - FThreads.invokeInEdtNowOrLater(updateRoutine); - } - - private final Runnable updateRoutine = new Runnable() { - @Override - public void run() { - refreshCardPanels(player.getFlashback()); - } - }; -} diff --git a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java index 6e986f7d95b..f4460c00564 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VPlayerPanel.java @@ -40,7 +40,6 @@ public class VPlayerPanel extends FContainer { private final VZoneDisplay commandZone; private final LifeLabel lblLife; private final InfoTab tabManaPool; - private final InfoTab tabFlashbackZone; private final Map zoneTabs = new HashMap(); private final List tabs = new ArrayList(); private InfoTab selectedTab; @@ -55,10 +54,7 @@ public class VPlayerPanel extends FContainer { addZoneDisplay(ZoneType.Hand, FSkinImage.HAND); addZoneDisplay(ZoneType.Graveyard, FSkinImage.GRAVEYARD); addZoneDisplay(ZoneType.Library, FSkinImage.LIBRARY); - - VFlashbackZone flashbackZone = add(new VFlashbackZone(player0)); - tabFlashbackZone = add(new InfoTab(FSkinImage.FLASHBACK, flashbackZone)); - tabs.add(tabFlashbackZone); + addZoneDisplay(ZoneType.Flashback, FSkinImage.FLASHBACK); VManaPool manaPool = add(new VManaPool(player)); tabManaPool = add(new InfoTab(FSkinImage.MANA_X, manaPool)); @@ -186,7 +182,7 @@ public class VPlayerPanel extends FContainer { case Graveyard: case Library: case Exile: - tabFlashbackZone.update(); + zoneTabs.get(ZoneType.Flashback).update(); break; default: break;