Merge branch 'grand-card-rework' into v2-cards
This commit is contained in:
@@ -73,8 +73,14 @@ public class CardResolver {
|
|||||||
public static EffectAppender resolveStackedCards(String type, FilterableSource choiceFilter, FilterableSource playabilityFilter, ValueSource countSource, FilterableSource stackedOn,
|
public static EffectAppender resolveStackedCards(String type, FilterableSource choiceFilter, FilterableSource playabilityFilter, ValueSource countSource, FilterableSource stackedOn,
|
||||||
String memory, String choicePlayer, String choiceText, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
String memory, String choicePlayer, String choiceText, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||||
Function<ActionContext, Iterable<? extends PhysicalCard>> cardSource = actionContext -> {
|
Function<ActionContext, Iterable<? extends PhysicalCard>> cardSource = actionContext -> {
|
||||||
final Filterable stackedOnFilter = stackedOn.getFilterable(actionContext);
|
if(stackedOn != null) {
|
||||||
return Filters.filter(actionContext.getGame(), actionContext.getGame().getGameState().getAllCards(), Filters.stackedOn(stackedOnFilter));
|
final Filterable stackedOnFilter = stackedOn.getFilterable(actionContext);
|
||||||
|
return Filters.filter(actionContext.getGame(), actionContext.getGame().getGameState().getAllCards(), Filters.stackedOn(stackedOnFilter));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return Filters.filter(actionContext.getGame(), actionContext.getGame().getGameState().getAllCards(), Filters.stackedOn(Filters.any));
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (type.startsWith("memory(") && type.endsWith(")")) {
|
if (type.startsWith("memory(") && type.endsWith(")")) {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ public class Card_04_199_Tests
|
|||||||
return new GenericCardTestHelper(
|
return new GenericCardTestHelper(
|
||||||
new HashMap<>()
|
new HashMap<>()
|
||||||
{{
|
{{
|
||||||
put("card", "4_199");
|
put("trooper", "4_199");
|
||||||
// put other cards in here as needed for the test case
|
put("child", "4_148"); // source of easy site control
|
||||||
}},
|
}},
|
||||||
GenericCardTestHelper.FellowshipSites,
|
GenericCardTestHelper.FellowshipSites,
|
||||||
GenericCardTestHelper.FOTRFrodo,
|
GenericCardTestHelper.FOTRFrodo,
|
||||||
@@ -41,12 +41,13 @@ public class Card_04_199_Tests
|
|||||||
* Strength: 9
|
* Strength: 9
|
||||||
* Vitality: 2
|
* Vitality: 2
|
||||||
* Site Number: 5
|
* Site Number: 5
|
||||||
* Game Text: <b>Damage +1</b>.<br><b>Regroup:</b> Stack this minion on a site you control.<br><b>Shadow:</b> If stacked on a site you control, play this minion. Its twilight cost is -1.
|
* Game Text: <b>Damage +1</b>.<br><b>Regroup:</b> Stack this minion on a site you control.
|
||||||
|
* <b>Shadow:</b> If stacked on a site you control, play this minion. Its twilight cost is -1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var scn = GetScenario();
|
var scn = GetScenario();
|
||||||
|
|
||||||
var card = scn.GetFreepsCard("card");
|
var card = scn.GetFreepsCard("trooper");
|
||||||
|
|
||||||
assertEquals("Uruk Trooper", card.getBlueprint().getTitle());
|
assertEquals("Uruk Trooper", card.getBlueprint().getTitle());
|
||||||
assertNull(card.getBlueprint().getSubtitle());
|
assertNull(card.getBlueprint().getSubtitle());
|
||||||
@@ -63,18 +64,70 @@ public class Card_04_199_Tests
|
|||||||
assertEquals(5, card.getBlueprint().getSiteNumber());
|
assertEquals(5, card.getBlueprint().getSiteNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uncomment any @Test markers below once this is ready to be used
|
@Test
|
||||||
//@Test
|
public void UrukTrooperRegroupActionStacksSelfOnControlledSite() throws DecisionResultInvalidException, CardNotFoundException {
|
||||||
public void UrukTrooperTest1() throws DecisionResultInvalidException, CardNotFoundException {
|
|
||||||
//Pre-game setup
|
//Pre-game setup
|
||||||
var scn = GetScenario();
|
var scn = GetScenario();
|
||||||
|
|
||||||
var card = scn.GetFreepsCard("card");
|
var trooper = scn.GetShadowCard("trooper");
|
||||||
scn.FreepsMoveCardToHand(card);
|
var child = scn.GetShadowCard("child");
|
||||||
|
scn.ShadowMoveCardToHand(child, trooper);
|
||||||
|
|
||||||
scn.StartGame();
|
scn.StartGame();
|
||||||
scn.FreepsPlayCard(card);
|
|
||||||
|
|
||||||
assertEquals(4, scn.GetTwilight());
|
scn.SkipToSite(2);
|
||||||
|
|
||||||
|
scn.ShadowMoveCardToSupportArea(child);
|
||||||
|
scn.AddTokensToCard(child, 2);
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
scn.ShadowUseCardAction(child); //should take control of site
|
||||||
|
|
||||||
|
scn.ShadowMoveCharToTable(trooper);
|
||||||
|
scn.SkipToPhase(Phase.REGROUP);
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
|
||||||
|
var controlledSite = scn.GetFreepsSite(1);
|
||||||
|
assertTrue(scn.IsSiteControlled(controlledSite));
|
||||||
|
assertTrue(scn.ShadowActionAvailable(trooper));
|
||||||
|
|
||||||
|
scn.ShadowUseCardAction(trooper);
|
||||||
|
assertEquals(controlledSite, trooper.getStackedOn());
|
||||||
|
assertEquals(Zone.STACKED, trooper.getZone());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void UrukTrooperShadowActionPlaysSelfFromControlledSite() throws DecisionResultInvalidException, CardNotFoundException {
|
||||||
|
//Pre-game setup
|
||||||
|
var scn = GetScenario();
|
||||||
|
|
||||||
|
var trooper = scn.GetShadowCard("trooper");
|
||||||
|
var child = scn.GetShadowCard("child");
|
||||||
|
scn.ShadowMoveCardToHand(child, trooper);
|
||||||
|
|
||||||
|
scn.StartGame();
|
||||||
|
|
||||||
|
scn.SkipToSite(2);
|
||||||
|
|
||||||
|
scn.ShadowMoveCardToSupportArea(child);
|
||||||
|
scn.AddTokensToCard(child, 2);
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
scn.ShadowUseCardAction(child); //should take control of site
|
||||||
|
|
||||||
|
scn.SkipToSite(4);
|
||||||
|
var controlledSite = scn.GetFreepsSite(1);
|
||||||
|
assertTrue(scn.IsSiteControlled(controlledSite));
|
||||||
|
scn.StackCardsOn(controlledSite, trooper);
|
||||||
|
scn.SetTwilight(48);
|
||||||
|
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
assertEquals(controlledSite, trooper.getStackedOn());
|
||||||
|
assertEquals(Zone.STACKED, trooper.getZone());
|
||||||
|
|
||||||
|
assertTrue(scn.ShadowActionAvailable(trooper));
|
||||||
|
assertEquals(50, scn.GetTwilight());
|
||||||
|
scn.ShadowUseCardAction(trooper);
|
||||||
|
assertEquals(Zone.SHADOW_CHARACTERS, trooper.getZone());
|
||||||
|
// Trooper cost 4, but should have a -1 discount, so costs 3 + 2 for roaming
|
||||||
|
assertEquals(45, scn.GetTwilight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ public class Card_04_201_Tests
|
|||||||
return new GenericCardTestHelper(
|
return new GenericCardTestHelper(
|
||||||
new HashMap<>()
|
new HashMap<>()
|
||||||
{{
|
{{
|
||||||
put("card", "4_201");
|
put("veteran", "4_201");
|
||||||
// put other cards in here as needed for the test case
|
put("child", "4_148"); // source of easy site control
|
||||||
}},
|
}},
|
||||||
GenericCardTestHelper.FellowshipSites,
|
GenericCardTestHelper.FellowshipSites,
|
||||||
GenericCardTestHelper.FOTRFrodo,
|
GenericCardTestHelper.FOTRFrodo,
|
||||||
@@ -46,7 +46,7 @@ public class Card_04_201_Tests
|
|||||||
|
|
||||||
var scn = GetScenario();
|
var scn = GetScenario();
|
||||||
|
|
||||||
var card = scn.GetFreepsCard("card");
|
var card = scn.GetFreepsCard("veteran");
|
||||||
|
|
||||||
assertEquals("Uruk Veteran", card.getBlueprint().getTitle());
|
assertEquals("Uruk Veteran", card.getBlueprint().getTitle());
|
||||||
assertNull(card.getBlueprint().getSubtitle());
|
assertNull(card.getBlueprint().getSubtitle());
|
||||||
@@ -63,18 +63,70 @@ public class Card_04_201_Tests
|
|||||||
assertEquals(5, card.getBlueprint().getSiteNumber());
|
assertEquals(5, card.getBlueprint().getSiteNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Uncomment any @Test markers below once this is ready to be used
|
@Test
|
||||||
//@Test
|
public void UrukVeteranRegroupActionStacksSelfOnControlledSite() throws DecisionResultInvalidException, CardNotFoundException {
|
||||||
public void UrukVeteranTest1() throws DecisionResultInvalidException, CardNotFoundException {
|
|
||||||
//Pre-game setup
|
//Pre-game setup
|
||||||
var scn = GetScenario();
|
var scn = GetScenario();
|
||||||
|
|
||||||
var card = scn.GetFreepsCard("card");
|
var veteran = scn.GetShadowCard("veteran");
|
||||||
scn.FreepsMoveCardToHand(card);
|
var child = scn.GetShadowCard("child");
|
||||||
|
scn.ShadowMoveCardToHand(child, veteran);
|
||||||
|
|
||||||
scn.StartGame();
|
scn.StartGame();
|
||||||
scn.FreepsPlayCard(card);
|
|
||||||
|
|
||||||
assertEquals(3, scn.GetTwilight());
|
scn.SkipToSite(2);
|
||||||
|
|
||||||
|
scn.ShadowMoveCardToSupportArea(child);
|
||||||
|
scn.AddTokensToCard(child, 2);
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
scn.ShadowUseCardAction(child); //should take control of site
|
||||||
|
|
||||||
|
scn.ShadowMoveCharToTable(veteran);
|
||||||
|
scn.SkipToPhase(Phase.REGROUP);
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
|
||||||
|
var controlledSite = scn.GetFreepsSite(1);
|
||||||
|
assertTrue(scn.IsSiteControlled(controlledSite));
|
||||||
|
assertTrue(scn.ShadowActionAvailable(veteran));
|
||||||
|
|
||||||
|
scn.ShadowUseCardAction(veteran);
|
||||||
|
assertEquals(controlledSite, veteran.getStackedOn());
|
||||||
|
assertEquals(Zone.STACKED, veteran.getZone());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void UrukVeteranShadowActionPlaysSelfFromControlledSite() throws DecisionResultInvalidException, CardNotFoundException {
|
||||||
|
//Pre-game setup
|
||||||
|
var scn = GetScenario();
|
||||||
|
|
||||||
|
var veteran = scn.GetShadowCard("veteran");
|
||||||
|
var child = scn.GetShadowCard("child");
|
||||||
|
scn.ShadowMoveCardToHand(child, veteran);
|
||||||
|
|
||||||
|
scn.StartGame();
|
||||||
|
|
||||||
|
scn.SkipToSite(2);
|
||||||
|
|
||||||
|
scn.ShadowMoveCardToSupportArea(child);
|
||||||
|
scn.AddTokensToCard(child, 2);
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
scn.ShadowUseCardAction(child); //should take control of site
|
||||||
|
|
||||||
|
scn.SkipToSite(4);
|
||||||
|
var controlledSite = scn.GetFreepsSite(1);
|
||||||
|
assertTrue(scn.IsSiteControlled(controlledSite));
|
||||||
|
scn.StackCardsOn(controlledSite, veteran);
|
||||||
|
scn.SetTwilight(48);
|
||||||
|
|
||||||
|
scn.FreepsPassCurrentPhaseAction();
|
||||||
|
assertEquals(controlledSite, veteran.getStackedOn());
|
||||||
|
assertEquals(Zone.STACKED, veteran.getZone());
|
||||||
|
|
||||||
|
assertTrue(scn.ShadowActionAvailable(veteran));
|
||||||
|
assertEquals(50, scn.GetTwilight());
|
||||||
|
scn.ShadowUseCardAction(veteran);
|
||||||
|
assertEquals(Zone.SHADOW_CHARACTERS, veteran.getZone());
|
||||||
|
// Trooper cost 3, but should have a -1 discount, so costs 2 + 2 for roaming
|
||||||
|
assertEquals(46, scn.GetTwilight());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user