Adjustments to the healing revamp. Made the PlayerResolver more flexible

This commit is contained in:
Christian 'ketura' McCarty
2022-07-13 03:40:29 -05:00
parent 7ed84340f3
commit 014acd0975
5 changed files with 24 additions and 22 deletions

View File

@@ -18,7 +18,7 @@
"trigger": {
"type": "heals",
"filter": "companion",
"side": "free people"
"player": "free peoples"
},
"effect": {
"type": "addburdens",

View File

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

View File

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

View File

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

View File

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