Adjustments to the healing revamp. Made the PlayerResolver more flexible
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
"trigger": {
|
||||
"type": "heals",
|
||||
"filter": "companion",
|
||||
"side": "free people"
|
||||
"player": "free peoples"
|
||||
},
|
||||
"effect": {
|
||||
"type": "addburdens",
|
||||
|
||||
@@ -6,17 +6,21 @@ import com.gempukku.lotro.cards.build.PlayerSource;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.GameUtils;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class PlayerResolver {
|
||||
public static PlayerSource resolvePlayer(String type, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
if (type.equals("you"))
|
||||
|
||||
if (type.equalsIgnoreCase("you"))
|
||||
return (actionContext) -> actionContext.getPerformingPlayer();
|
||||
if (type.equals("owner"))
|
||||
if (type.equalsIgnoreCase("owner"))
|
||||
return (actionContext) -> actionContext.getSource().getOwner();
|
||||
else if (type.equals("shadowPlayer"))
|
||||
else if (type.equalsIgnoreCase("shadowPlayer") || type.equalsIgnoreCase("shadow"))
|
||||
return (actionContext) -> GameUtils.getFirstShadowPlayer(actionContext.getGame());
|
||||
else if (type.equals("fp"))
|
||||
else if (type.equalsIgnoreCase("fp") || type.equalsIgnoreCase("freeps")
|
||||
|| type.equalsIgnoreCase("free peoples") || type.equalsIgnoreCase("free people"))
|
||||
return ((actionContext) -> actionContext.getGame().getGameState().getCurrentPlayerId());
|
||||
else if (type.startsWith("ownerFromMemory(") && type.endsWith(")")) {
|
||||
else if (type.toLowerCase(Locale.ROOT).startsWith("ownerfrommemory(") && type.endsWith(")")) {
|
||||
String memory = type.substring(type.indexOf("(") + 1, type.lastIndexOf(")"));
|
||||
return (actionContext) -> {
|
||||
final PhysicalCard cardFromMemory = actionContext.getCardFromMemory(memory);
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.trigger;
|
||||
|
||||
import com.gempukku.lotro.cards.build.ActionContext;
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -15,11 +13,12 @@ import org.json.simple.JSONObject;
|
||||
public class Heals implements TriggerCheckerProducer {
|
||||
@Override
|
||||
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(value, "filter", "side", "memorize");
|
||||
FieldUtils.validateAllowedFields(value, "filter", "player", "memorize");
|
||||
|
||||
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
|
||||
final String memorize = FieldUtils.getString(value.get("memorize"), "memorize");
|
||||
final Side side = FieldUtils.getEnum(Side.class, value.get("side"), "side");
|
||||
final String player = FieldUtils.getString(value.get("player"), "player", "you");
|
||||
final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment);
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
|
||||
@@ -32,7 +31,7 @@ public class Heals implements TriggerCheckerProducer {
|
||||
@Override
|
||||
public boolean accepts(ActionContext actionContext) {
|
||||
final Filterable filterable = filterableSource.getFilterable(actionContext);
|
||||
final boolean result = TriggerConditions.forEachHealed(actionContext.getGame(), actionContext.getEffectResult(), side, filterable);
|
||||
final boolean result = TriggerConditions.forEachHealed(actionContext.getGame(), actionContext.getEffectResult(), playerSource.getPlayer(actionContext), filterable);
|
||||
if (result && memorize != null) {
|
||||
final PhysicalCard healedCard = ((HealResult) actionContext.getEffectResult()).getHealedCard();
|
||||
actionContext.setCardMemory(memorize, healedCard);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.gempukku.lotro.logic.timing;
|
||||
|
||||
import com.gempukku.lotro.cards.build.PlayerSource;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
@@ -219,14 +221,12 @@ public class TriggerConditions {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean forEachHealed(LotroGame game, EffectResult effectResult, Side side, Filterable... filters) {
|
||||
public static boolean forEachHealed(LotroGame game, EffectResult effectResult, String player, Filterable... filters) {
|
||||
if (effectResult.getType() != EffectResult.Type.FOR_EACH_HEALED)
|
||||
return false;
|
||||
|
||||
HealResult healResult = (HealResult)effectResult;
|
||||
String fpPlayer = game.getGameState().getCurrentPlayerId();
|
||||
if (side == null ||(side == Side.FREE_PEOPLE && fpPlayer.equals(healResult.getPerformingPlayer()))
|
||||
|| (side == Side.SHADOW && !fpPlayer.equals(healResult.getPerformingPlayer())))
|
||||
if (player.equals(healResult.getPerformingPlayer()))
|
||||
return Filters.and(filters).accepts(game, ((HealResult) effectResult).getHealedCard());
|
||||
else
|
||||
return false;
|
||||
|
||||
@@ -171,7 +171,7 @@ public class Card_17_140_Tests
|
||||
}
|
||||
|
||||
@Test
|
||||
public void EndOfTheGameDoesNotTriggerEnquea() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
public void EndOfTheGameTriggersEnquea() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
GenericCardTestHelper scn = GetScenario();
|
||||
|
||||
@@ -209,10 +209,9 @@ public class Card_17_140_Tests
|
||||
scn.FreepsChooseMultipleChoiceOption("Heal");
|
||||
assertEquals(2, scn.GetWoundsOn(aragorn));
|
||||
|
||||
//We should have no Enquea triggers
|
||||
assertFalse(scn.ShadowHasOptionalTriggerAvailable());
|
||||
//We should see no burdens added from Enquea as DT is a shadow card.
|
||||
assertEquals(0, scn.GetBurdens());
|
||||
//As a Freeps healing source, we should have the Enquea trigger
|
||||
assertTrue(scn.ShadowHasOptionalTriggerAvailable());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user