diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java index d8408da7fdd..9e1cb9b019e 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java @@ -19,6 +19,7 @@ package forge.screens.match.controllers; import forge.UiCommand; import forge.Singletons; +import forge.card.CardDetailUtil; import forge.game.card.Card; import forge.gui.framework.ICDoc; import forge.item.IPaperCard; @@ -45,7 +46,7 @@ public enum CDetail implements ICDoc { * @param c   Card object */ public void showCard(final Card c) { - view.getLblFlipcard().setVisible(c != null && (c.isDoubleFaced() || c.isFlipCard() || c.isFaceDown() && Singletons.getControl().mayShowCard(c))); + view.getLblFlipcard().setVisible(c != null && CardDetailUtil.isCardFlippable(c) && Singletons.getControl().mayShowCard(c)); view.getPnlDetail().setCard(c); if (view.getParentCell() != null) { view.getParentCell().repaintSelf(); @@ -55,11 +56,13 @@ public enum CDetail implements ICDoc { public void showCard(InventoryItem item) { if (item instanceof IPaperCard) { showCard(Card.getCardForUi((IPaperCard)item)); - } else if (item instanceof InventoryItemFromSet) { + } + else if (item instanceof InventoryItemFromSet) { view.getLblFlipcard().setVisible(false); view.getPnlDetail().setItem((InventoryItemFromSet)item); view.getParentCell().repaintSelf(); - } else { + } + else { showCard((Card)null); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java index 8826ddce1d1..228507ffcd7 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java @@ -20,6 +20,7 @@ package forge.screens.match.controllers; import forge.UiCommand; import forge.Singletons; import forge.card.CardCharacteristicName; +import forge.card.CardDetailUtil; import forge.game.card.Card; import forge.gui.CardPicturePanel; import forge.gui.framework.ICDoc; @@ -177,7 +178,7 @@ public enum CPicture implements ICDoc { public void flipCard() { if (isCurrentCardFlippable()) { - displayedState = getAlternateState(currentCard, displayedState); + displayedState = CardDetailUtil.getAlternateState(currentCard, displayedState); picturePanel.setCardImage(displayedState); setCardDetailPanel(); } @@ -206,51 +207,6 @@ public enum CPicture implements ICDoc { private boolean isCurrentCardFlippable() { if (!mayShowCurrentCard()) { return false; } - return currentCard.isDoubleFaced() || currentCard.isFlipCard() || currentCard.isFaceDown(); - } - - /** - * Card characteristic state machine. - *

- * Given a card and a state in terms of {@code CardCharacteristicName} this - * will determine whether there is a valid alternate {@code CardCharacteristicName} - * state for that card. - * - * @param card the {@code Card} - * @param currentState not necessarily {@code card.getCurState()} - * @return the alternate {@code CardCharacteristicName} state or default if not applicable - */ - public static CardCharacteristicName getAlternateState(final Card card, CardCharacteristicName currentState) { - // Default. Most cards will only ever have an "Original" state represented by a single image. - CardCharacteristicName alternateState = CardCharacteristicName.Original; - - if (card.isDoubleFaced()) { - if (currentState == CardCharacteristicName.Original) { - alternateState = CardCharacteristicName.Transformed; - } - - } else if (card.isFlipCard()) { - if (currentState == CardCharacteristicName.Original) { - alternateState = CardCharacteristicName.Flipped; - } - - } else if (card.isFaceDown()) { - if (currentState == CardCharacteristicName.Original) { - alternateState = CardCharacteristicName.FaceDown; - } else if (isAuthorizedToViewFaceDownCard(card)) { - alternateState = CardCharacteristicName.Original; - } else { - alternateState = currentState; - } - } - - return alternateState; - } - - /** - * Prevents player from identifying opponent's face-down card. - */ - public static boolean isAuthorizedToViewFaceDownCard(Card card) { - return Singletons.getControl().mayShowCard(card); + return CardDetailUtil.isCardFlippable(currentCard); } } diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java b/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java index 5c5748d5773..1965a636ac7 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java @@ -18,11 +18,12 @@ package forge.toolbox.special; +import forge.Singletons; import forge.assets.FSkinProp; import forge.card.CardCharacteristicName; +import forge.card.CardDetailUtil; import forge.game.card.Card; import forge.gui.SOverlayUtils; -import forge.screens.match.controllers.CPicture; import forge.toolbox.FOverlay; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinnedLabel; @@ -217,7 +218,7 @@ public enum CardZoomer { * Displays a graphical indicator that shows whether the current card can be flipped or transformed. */ private void setFlipIndicator() { - boolean isFaceDownFlippable = (isFaceDownCard && CPicture.isAuthorizedToViewFaceDownCard(thisCard)); + boolean isFaceDownFlippable = (isFaceDownCard && Singletons.getControl().mayShowCard(thisCard)); if (thisCard.isFlipCard() || thisCard.isDoubleFaced() || isFaceDownFlippable ) { imagePanel.setLayout(new MigLayout("insets 0, w 100%!, h 100%!")); imagePanel.add(lblFlipcard, "pos (100% - 100px) 0"); @@ -320,7 +321,7 @@ public enum CardZoomer { * Uses constraint that prevents a player from identifying opponent's face-down cards. */ private void toggleFaceDownCard() { - cardState = CPicture.getAlternateState(thisCard, cardState); + cardState = CardDetailUtil.getAlternateState(thisCard, cardState); setImage(); } @@ -328,8 +329,7 @@ public enum CardZoomer { * Toggles between the front and back image of a double-sided card. */ private void toggleDoubleFacedCard() { - cardState = CPicture.getAlternateState(thisCard, cardState); + cardState = CardDetailUtil.getAlternateState(thisCard, cardState); setImage(); } - } diff --git a/forge-gui/src/main/java/forge/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/card/CardDetailUtil.java index 1bf1367f439..a0018377a15 100644 --- a/forge-gui/src/main/java/forge/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/card/CardDetailUtil.java @@ -499,4 +499,48 @@ public class CardDetailUtil { } return area.toString(); } + + public static boolean isCardFlippable(Card card) { + return card.isDoubleFaced() || card.isFlipCard() || card.isFaceDown(); + } + + /** + * Card characteristic state machine. + *

+ * Given a card and a state in terms of {@code CardCharacteristicName} this + * will determine whether there is a valid alternate {@code CardCharacteristicName} + * state for that card. + * + * @param card the {@code Card} + * @param currentState not necessarily {@code card.getCurState()} + * @return the alternate {@code CardCharacteristicName} state or default if not applicable + */ + public static CardCharacteristicName getAlternateState(final Card card, CardCharacteristicName currentState) { + // Default. Most cards will only ever have an "Original" state represented by a single image. + CardCharacteristicName alternateState = CardCharacteristicName.Original; + + if (card.isDoubleFaced()) { + if (currentState == CardCharacteristicName.Original) { + alternateState = CardCharacteristicName.Transformed; + } + } + else if (card.isFlipCard()) { + if (currentState == CardCharacteristicName.Original) { + alternateState = CardCharacteristicName.Flipped; + } + } + else if (card.isFaceDown()) { + if (currentState == CardCharacteristicName.Original) { + alternateState = CardCharacteristicName.FaceDown; + } + else if (GuiBase.getInterface().mayShowCard(card)) { + alternateState = CardCharacteristicName.Original; + } + else { + alternateState = currentState; + } + } + + return alternateState; + } }