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:
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user