From 20ef2a9d27ae9aa4d9e34a492df66a93e8b6ce8c Mon Sep 17 00:00:00 2001 From: Krazy Date: Sat, 13 Sep 2014 22:56:30 +0000 Subject: [PATCH] Added support for Lens of Clarity. --- forge-game/src/main/java/forge/game/card/Card.java | 7 ++++++- .../src/main/java/forge/control/FControl.java | 7 +++++-- .../src/main/java/forge/gui/CardDetailPanel.java | 6 +++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 88398b9f8d7..6b9fc8d1ca2 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -8918,7 +8918,8 @@ public class Card extends GameEntity implements Comparable { case Graveyard: case Stack: //cards in these zones are visible to all - if (isFaceDown() && getController().isOpponentOf(viewer) && !hasKeyword("Your opponent may look at this card.")) { + if (isFaceDown() && getController().isOpponentOf(viewer) && !hasKeyword("Your opponent may look at this card.") + && !isVisibleToWhileFaceDown(viewer)) { //Support Lens of Clarity break; //exception is face down cards controlled by opponents } return true; @@ -8964,6 +8965,10 @@ public class Card extends GameEntity implements Comparable { return false; } + + public boolean isVisibleToWhileFaceDown(final Player viewer) { + return viewer != null && viewer.getAmountOfKeyword("CanSeeOpponentsFaceDownCards") > 0; + } /** *

diff --git a/forge-gui-desktop/src/main/java/forge/control/FControl.java b/forge-gui-desktop/src/main/java/forge/control/FControl.java index 0ba9aac896f..ad808364545 100644 --- a/forge-gui-desktop/src/main/java/forge/control/FControl.java +++ b/forge-gui-desktop/src/main/java/forge/control/FControl.java @@ -194,8 +194,7 @@ public enum FControl implements KeyEventDispatcher { return true; } - /** After view and model have been initialized, control can start. - * @param isHeadlessMode */ + /** After view and model have been initialized, control can start.*/ public void initialize() { // Preloads skin components (using progress bar). FSkin.loadFull(true); @@ -372,6 +371,10 @@ public enum FControl implements KeyEventDispatcher { public boolean mayShowCard(Card c) { return game == null || !gameHasHumanPlayer || ForgePreferences.DEV_MODE || c.canBeShownTo(getCurrentPlayer()); } + + public boolean maySeeFaceDownCard(Card c) { + return game == null || !gameHasHumanPlayer || ForgePreferences.DEV_MODE || c.isVisibleToWhileFaceDown(getCurrentPlayer()); + } /** * TODO: Write javadoc for this method. diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java index 8f673783cbd..ade7ed65b88 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java @@ -177,10 +177,10 @@ public class CardDetailPanel extends SkinnedPanel { boolean canShowThis = false; - if (card.isFaceDown()) { + if (card.isFaceDown() && !Singletons.getControl().maySeeFaceDownCard(card)) { if (card.isInZone(ZoneType.Battlefield)) { - this.nameCostLabel.setText("???"); - this.typeLabel.setText("Creature"); + this.nameCostLabel.setText("???"); + this.typeLabel.setText("Creature"); } } else if (Singletons.getControl().mayShowCard(card) || FDialog.isModalOpen()) { //allow showing cards while modal open to account for revealing, picking, and ordering cards