Fixed Sirannon Dam not properly removing Watcher from its previous assignment (and not properly communicating to the client that Watcher had moved)

This commit is contained in:
Christian 'ketura' McCarty
2025-06-15 19:13:34 -05:00
parent df6886b5be
commit bc1f602877
3 changed files with 52 additions and 6 deletions

View File

@@ -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) {

View File

@@ -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));
}
}

View File

@@ -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<Assignment> 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);