From b72f96572500dee8baccc4df9cd7fc1e36ccba26 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Tue, 12 Mar 2019 08:13:45 +0100 Subject: [PATCH] Make LKI have Original State even in Facedown --- .../src/main/java/forge/game/card/Card.java | 23 +++++++++++-------- .../main/java/forge/game/card/CardUtil.java | 5 +++- .../ai/simulation/GameSimulatorTest.java | 2 +- 3 files changed, 18 insertions(+), 12 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 963f52f2f8f..525a3c754dd 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3134,14 +3134,20 @@ public class Card extends GameEntity implements Comparable { private final void updateCloneState(final boolean updateView) { if (isFaceDown()) { setState(CardStateName.FaceDown, updateView, true); - } else if (isFlipped() && hasState(CardStateName.Flipped)) { - setState(CardStateName.Flipped, updateView, true); - } else if (backside && isDoubleFaced()) { - setState(CardStateName.Transformed, updateView, true); - } else if (backside && isMeldable()) { - setState(CardStateName.Meld, updateView, true); } else { - setState(CardStateName.Original, updateView, true); + setState(getFaceupCardStateName(), updateView, true); + } + } + + public final CardStateName getFaceupCardStateName() { + if (isFlipped() && hasState(CardStateName.Flipped)) { + return CardStateName.Flipped; + } else if (backside && isDoubleFaced()) { + return CardStateName.Transformed; + } else if (backside && isMeldable()) { + return CardStateName.Meld; + } else { + return CardStateName.Original; } } @@ -5776,10 +5782,7 @@ public class Card extends GameEntity implements Comparable { if (isFaceDown()) { lkicheck = true; source = CardUtil.getLKICopy(source); - - // TODO need to be changed with CloneRewrite and FaceDownState? source.turnFaceUp(false, false); - source.getCurrentState().copyFrom(getState(CardStateName.Original), true); } if (lkicheck) { diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 03f11ffaded..5c76488ec6c 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -227,7 +227,10 @@ public final class CardUtil { // used for the purpose of cards that care about the zone the card was known to be in last newCopy.setLastKnownZone(in.getLastKnownZone()); - newCopy.getCurrentState().copyFrom(in.getState(in.getCurrentStateName()), true); + newCopy.getCurrentState().copyFrom(in.getState(in.getFaceupCardStateName()), true); + if (in.isFaceDown()) { + newCopy.turnFaceDownNoUpdate(); + } /* if (in.isCloned()) { diff --git a/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java b/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java index 54bb9b0afa9..63f48d0e7f8 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java +++ b/forge-gui-desktop/src/test/java/forge/ai/simulation/GameSimulatorTest.java @@ -1771,7 +1771,7 @@ public class GameSimulatorTest extends SimulationTestCase { assertTrue(transformOutLaw.isCloned()); assertTrue(transformOutLaw.isDoubleFaced()); - assertFalse(transformOutLaw.hasState(CardStateName.Transformed)); + assertTrue(transformOutLaw.hasState(CardStateName.Transformed)); assertTrue(transformOutLaw.canTransform()); assertTrue(transformOutLaw.isBackSide());