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) {
|
public void replaceInSkirmishMinion(PhysicalCard card, PhysicalCard removedMinion) {
|
||||||
removeFromSkirmish(removeMinion);
|
//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)) {
|
if(_skirmish.getShadowCharacters().contains(card)) {
|
||||||
removeFromSkirmish(card);
|
removeFromSkirmish(card);
|
||||||
}
|
}
|
||||||
_skirmish.getShadowCharacters().add(card);
|
_skirmish.getShadowCharacters().add(card);
|
||||||
for (GameStateListener listener : getAllGameStateListeners())
|
for (GameStateListener listener : getAllGameStateListeners()) {
|
||||||
listener.addToSkirmish(card);
|
listener.finishSkirmish();
|
||||||
|
listener.startSkirmish(_skirmish.getFellowshipCharacter(), _skirmish.getShadowCharacters());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeFromSkirmish(PhysicalCard card) {
|
public void removeFromSkirmish(PhysicalCard card) {
|
||||||
|
|||||||
@@ -122,18 +122,27 @@ public class Card_V1_065_Tests
|
|||||||
|
|
||||||
scn.SkipToAssignments();
|
scn.SkipToAssignments();
|
||||||
scn.FreepsAssignToMinions(aragorn, foul);
|
scn.FreepsAssignToMinions(aragorn, foul);
|
||||||
scn.ShadowDeclineAssignments();
|
scn.ShadowAssignToMinions(frodo, watcher);
|
||||||
scn.FreepsResolveSkirmish(aragorn);
|
scn.FreepsResolveSkirmish(aragorn);
|
||||||
scn.FreepsPassCurrentPhaseAction();
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
|
||||||
assertEquals(3, scn.GetBurdens());
|
assertEquals(3, scn.GetBurdens());
|
||||||
assertTrue(scn.IsCharSkirmishing(foul));
|
assertTrue(scn.IsCharSkirmishing(foul));
|
||||||
|
|
||||||
assertFalse(scn.IsCharSkirmishing(watcher));
|
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));
|
assertTrue(scn.ShadowActionAvailable(dam));
|
||||||
|
|
||||||
scn.ShadowUseCardAction(dam);
|
scn.ShadowUseCardAction(dam);
|
||||||
assertEquals(1, scn.GetBurdens());
|
assertEquals(1, scn.GetBurdens());
|
||||||
assertTrue(scn.IsCharSkirmishing(watcher));
|
|
||||||
assertFalse(scn.IsCharSkirmishing(foul));
|
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));
|
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) {
|
default boolean IsCharSkirmishing(PhysicalCardImpl card) {
|
||||||
var skirmish = gameState().getSkirmish();
|
var skirmish = gameState().getSkirmish();
|
||||||
if(skirmish == null)
|
if(skirmish == null)
|
||||||
@@ -45,6 +61,22 @@ public interface Skirmishes extends TestBase, Decisions, GameProcedures {
|
|||||||
skirmish.getShadowCharacters().stream().anyMatch(x -> x == card);
|
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)
|
default Boolean CanBeAssignedViaAction(PhysicalCardImpl card)
|
||||||
{
|
{
|
||||||
return CanBeAssignedViaAction(card, Side.SHADOW) || CanBeAssignedViaAction(card, Side.FREE_PEOPLE);
|
return CanBeAssignedViaAction(card, Side.SHADOW) || CanBeAssignedViaAction(card, Side.FREE_PEOPLE);
|
||||||
|
|||||||
Reference in New Issue
Block a user