diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index 52702a1be..bf550be85 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -557,15 +557,20 @@ public class GameState { } } - public void replaceInSkirmishMinion(PhysicalCard card, PhysicalCard removeMinion) { - removeFromSkirmish(removeMinion); + public void replaceInSkirmishMinion(PhysicalCard card, PhysicalCard removedMinion) { + //The removed minion is pulled out of the current skirmish + removeFromSkirmish(removedMinion); + //If the replacing minion is in a pending assignment, then we remove them from it + removeFromAssignment(card); if(_skirmish.getShadowCharacters().contains(card)) { removeFromSkirmish(card); } _skirmish.getShadowCharacters().add(card); - for (GameStateListener listener : getAllGameStateListeners()) - listener.addToSkirmish(card); + for (GameStateListener listener : getAllGameStateListeners()) { + listener.finishSkirmish(); + listener.startSkirmish(_skirmish.getFellowshipCharacter(), _skirmish.getShadowCharacters()); + } } public void removeFromSkirmish(PhysicalCard card) { diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_065_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_065_Tests.java index 45d229382..a35f5191f 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_065_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v01/Card_V1_065_Tests.java @@ -122,18 +122,27 @@ public class Card_V1_065_Tests scn.SkipToAssignments(); scn.FreepsAssignToMinions(aragorn, foul); - scn.ShadowDeclineAssignments(); + scn.ShadowAssignToMinions(frodo, watcher); scn.FreepsResolveSkirmish(aragorn); scn.FreepsPassCurrentPhaseAction(); assertEquals(3, scn.GetBurdens()); assertTrue(scn.IsCharSkirmishing(foul)); + assertFalse(scn.IsCharSkirmishing(watcher)); + assertTrue(scn.IsCharAssignedAgainst(watcher, frodo)); + //Because Aragorn is the active skirmish, there is no pending assignment for him + assertTrue(scn.IsCharSkirmishingAgainst(aragorn, foul)); + assertFalse(scn.IsCharAssignedAgainst(aragorn, foul)); assertTrue(scn.ShadowActionAvailable(dam)); scn.ShadowUseCardAction(dam); assertEquals(1, scn.GetBurdens()); - assertTrue(scn.IsCharSkirmishing(watcher)); + assertFalse(scn.IsCharSkirmishing(foul)); + assertTrue(scn.IsCharSkirmishing(watcher)); + assertFalse(scn.IsCharAssignedAgainst(watcher, frodo)); + assertFalse(scn.IsCharSkirmishingAgainst(aragorn, foul)); + assertTrue(scn.IsCharSkirmishingAgainst(aragorn, watcher)); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/framework/Skirmishes.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/framework/Skirmishes.java index b1c4ccf66..59e2b7c0b 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/framework/Skirmishes.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/framework/Skirmishes.java @@ -36,6 +36,22 @@ public interface Skirmishes extends TestBase, Decisions, GameProcedures { return assigns.stream().anyMatch(x -> x.getFellowshipCharacter() == card || x.getShadowCharacters().contains(card)); } + default boolean IsCharAssignedAgainst(PhysicalCardImpl skirmisher, PhysicalCardImpl opponent) { + List assigns = gameState().getAssignments(); + return assigns.stream().anyMatch(x -> { + if(x.getFellowshipCharacter() == skirmisher) { + return x.getShadowCharacters().contains(opponent); + } + + if(x.getShadowCharacters().contains(skirmisher)) { + return x.getFellowshipCharacter() == opponent; + } + + return false; + }); + + } + default boolean IsCharSkirmishing(PhysicalCardImpl card) { var skirmish = gameState().getSkirmish(); if(skirmish == null) @@ -45,6 +61,22 @@ public interface Skirmishes extends TestBase, Decisions, GameProcedures { skirmish.getShadowCharacters().stream().anyMatch(x -> x == card); } + default boolean IsCharSkirmishingAgainst(PhysicalCardImpl skirmisher, PhysicalCardImpl opponent) { + var skirmish = gameState().getSkirmish(); + if(skirmish == null) + return false; + + if(skirmish.getFellowshipCharacter() == skirmisher) { + return skirmish.getShadowCharacters().contains(opponent); + } + + if(skirmish.getShadowCharacters().contains(skirmisher)) { + return skirmish.getFellowshipCharacter() == opponent; + } + + return false; + } + default Boolean CanBeAssignedViaAction(PhysicalCardImpl card) { return CanBeAssignedViaAction(card, Side.SHADOW) || CanBeAssignedViaAction(card, Side.FREE_PEOPLE);