diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_116.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_116.java index b4811d546..b03a1fa6c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_116.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_116.java @@ -1,7 +1,6 @@ package com.gempukku.lotro.cards.set10.shire; import com.gempukku.lotro.common.*; -import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; @@ -10,7 +9,7 @@ import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.SelfDiscardEffect; import com.gempukku.lotro.logic.modifiers.CantBeOverwhelmedModifier; -import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.modifiers.condition.CardPlayedInCurrentPhaseCondition; import com.gempukku.lotro.logic.timing.PlayConditions; import java.util.Collections; @@ -42,12 +41,7 @@ public class Card10_116 extends AbstractPermanent { action.insertEffect( new AddUntilEndOfPhaseModifierEffect( new CantBeOverwhelmedModifier(self, card, - new Condition() { - @Override - public boolean isFullfilled(LotroGame game) { - return Filters.filter(game.getActionsEnvironment().getPlayedCardsInCurrentPhase(), game, Side.SHADOW, CardType.EVENT).size() == 0; - } - }))); + new CardPlayedInCurrentPhaseCondition(Side.SHADOW, CardType.EVENT)))); } }); action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java index 5207c5fa0..5e37e1abc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/dwarven/Card12_003.java @@ -1,14 +1,18 @@ package com.gempukku.lotro.cards.set12.dwarven; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.common.*; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Race; +import com.gempukku.lotro.common.Side; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; +import com.gempukku.lotro.logic.cardtype.AbstractPermanent; import com.gempukku.lotro.logic.effects.DrawCardsEffect; +import com.gempukku.lotro.logic.modifiers.condition.CardPlayedInCurrentPhaseCondition; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.TriggerConditions; import java.util.Collections; import java.util.List; @@ -29,7 +33,7 @@ public class Card12_003 extends AbstractPermanent { @Override public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { if (TriggerConditions.winsSkirmish(game, effectResult, Race.DWARF) - && Filters.filter(game.getActionsEnvironment().getPlayedCardsInCurrentPhase(), game, Filters.owner(playerId), Culture.DWARVEN, CardType.EVENT).size() > 0) { + && new CardPlayedInCurrentPhaseCondition(Filters.owner(playerId), Culture.DWARVEN, CardType.EVENT).isFullfilled(game)) { OptionalTriggerAction action = new OptionalTriggerAction(self); action.appendEffect( new DrawCardsEffect(action, playerId, 1)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/shire/Card20_394.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/shire/Card20_394.java index 10b3a0ce5..02511c31e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/shire/Card20_394.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/shire/Card20_394.java @@ -7,8 +7,8 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.cardtype.AbstractAttachable; import com.gempukku.lotro.logic.modifiers.AbstractExtraPlayCostModifier; import com.gempukku.lotro.logic.modifiers.CantAddBurdensModifier; -import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.condition.CardPlayedInCurrentTurnCondition; import com.gempukku.lotro.logic.modifiers.cost.ExertExtraPlayCostModifier; import com.gempukku.lotro.logic.timing.PlayConditions; @@ -50,11 +50,6 @@ public class Card20_394 extends AbstractAttachable { @Override public List getInPlayModifiers(LotroGame game, final PhysicalCard self) { return Collections.singletonList(new CantAddBurdensModifier(self, - new Condition() { - @Override - public boolean isFullfilled(LotroGame game) { - return game.getActionsEnvironment().getPlayedCardsInCurrentTurn().contains(self); - } - }, Side.SHADOW)); + new CardPlayedInCurrentTurnCondition(self), Side.SHADOW)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java index 512184997..4572127fe 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/gondor/Card3_040.java @@ -1,7 +1,5 @@ package com.gempukku.lotro.cards.set3.gondor; -import com.gempukku.lotro.logic.cardtype.AbstractPermanent; -import com.gempukku.lotro.logic.timing.TriggerConditions; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Side; @@ -9,8 +7,11 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; +import com.gempukku.lotro.logic.cardtype.AbstractPermanent; import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect; +import com.gempukku.lotro.logic.modifiers.condition.LostSkirmishThisTurnCondition; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.TriggerConditions; import java.util.Collections; import java.util.List; @@ -32,7 +33,7 @@ public class Card3_040 extends AbstractPermanent { @Override public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { if (TriggerConditions.endOfTurn(game, effectResult) - && !game.getActionsEnvironment().hasLostSkirmishThisTurn(game, Filters.or(CardType.COMPANION, CardType.ALLY))) { + && !(new LostSkirmishThisTurnCondition(Filters.or(CardType.COMPANION, CardType.ALLY)).isFullfilled(game))) { OptionalTriggerAction action = new OptionalTriggerAction(self); action.appendEffect( new ChooseAndHealCharactersEffect(action, playerId, Culture.GONDOR, CardType.COMPANION)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set30/shire/Card30_047.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set30/shire/Card30_047.java index d48b07b68..7bd756644 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set30/shire/Card30_047.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set30/shire/Card30_047.java @@ -1,15 +1,18 @@ package com.gempukku.lotro.cards.set30.shire; -import com.gempukku.lotro.logic.cardtype.AbstractAttachableFPPossession; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; -import com.gempukku.lotro.common.*; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.PossessionClass; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; +import com.gempukku.lotro.logic.cardtype.AbstractAttachableFPPossession; +import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect; +import com.gempukku.lotro.logic.modifiers.condition.CardPlayedInCurrentPhaseCondition; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.TriggerConditions; import java.util.Collections; import java.util.List; @@ -38,7 +41,7 @@ public class Card30_047 extends AbstractAttachableFPPossession { @Override public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { if (TriggerConditions.winsSkirmish(game, effectResult, self.getAttachedTo()) - && Filters.filter(game.getActionsEnvironment().getPlayedCardsInCurrentPhase(), game, Filters.owner(playerId), Culture.DWARVEN, CardType.EVENT).size() > 0) { + && new CardPlayedInCurrentPhaseCondition(Filters.owner(playerId), Culture.DWARVEN, CardType.EVENT).isFullfilled(game)) { OptionalTriggerAction action = new OptionalTriggerAction(self); action.setText("Choose a condition"); action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/DidWinSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/DidWinSkirmish.java index fd86c4eb0..f585c004e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/DidWinSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/DidWinSkirmish.java @@ -6,6 +6,10 @@ import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; import com.gempukku.lotro.cards.build.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.CharacterWonSkirmishResult; import org.json.simple.JSONObject; public class DidWinSkirmish implements RequirementProducer { @@ -19,7 +23,18 @@ public class DidWinSkirmish implements RequirementProducer { return actionContext -> { final Filterable filterable = filterableSource.getFilterable(actionContext); - return actionContext.getGame().getActionsEnvironment().hasWonSkirmishThisTurn(actionContext.getGame(), filterable); + + final Filter aFilter = Filters.and(filterable); + + for (EffectResult effectResult : actionContext.getGame().getActionsEnvironment().getTurnEffectResults()) { + if (effectResult.getType() == EffectResult.Type.CHARACTER_WON_SKIRMISH) { + CharacterWonSkirmishResult winResult = (CharacterWonSkirmishResult) effectResult; + if (aFilter.accepts(actionContext.getGame(), winResult.getWinner())) + return true; + } + } + + return false; }; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/WasAssignedToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/WasAssignedToSkirmish.java index 425ae00bf..75c9cb459 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/WasAssignedToSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/requirement/WasAssignedToSkirmish.java @@ -1,8 +1,15 @@ package com.gempukku.lotro.cards.build.field.effect.requirement; -import com.gempukku.lotro.cards.build.*; +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.Requirement; import com.gempukku.lotro.cards.build.field.FieldUtils; import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.AssignedToSkirmishResult; import org.json.simple.JSONObject; public class WasAssignedToSkirmish implements RequirementProducer { @@ -16,7 +23,18 @@ public class WasAssignedToSkirmish implements RequirementProducer { return actionContext -> { final Filterable filterable = filterableSource.getFilterable(actionContext); - return actionContext.getGame().getActionsEnvironment().wasAssignedThisTurn(actionContext.getGame(), filterable); + + final Filter aFilter = Filters.and(filterable); + + for (EffectResult effectResult : actionContext.getGame().getActionsEnvironment().getTurnEffectResults()) { + if (effectResult.getType() == EffectResult.Type.ASSIGNED_TO_SKIRMISH) { + AssignedToSkirmishResult assignResult = (AssignedToSkirmishResult) effectResult; + if (aFilter.accepts(actionContext.getGame(), assignResult.getAssignedCard())) + return true; + } + } + + return false; }; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java index f92f323d1..1f8050742 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java @@ -1,51 +1,43 @@ -package com.gempukku.lotro.game; - -import com.gempukku.lotro.common.Filterable; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.OptionalTriggerAction; -import com.gempukku.lotro.logic.timing.Action; -import com.gempukku.lotro.logic.timing.Effect; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -public interface ActionsEnvironment { - public List getRequiredBeforeTriggers(Effect effect); - - public List getOptionalBeforeTriggers(String playerId, Effect effect); - - public List getOptionalBeforeActions(String playerId, Effect effect); - - public List getRequiredAfterTriggers(Collection effectResults); - - public Map getOptionalAfterTriggers(String playerId, Collection effectResults); - - public List getOptionalAfterActions(String playerId, Collection effectResults); - - public List getPhaseActions(String playerId); - - public void addUntilStartOfPhaseActionProxy(ActionProxy actionProxy, Phase phase); - - public void addUntilEndOfPhaseActionProxy(ActionProxy actionProxy, Phase phase); - - public void addUntilEndOfTurnActionProxy(ActionProxy actionProxy); - - public void addActionToStack(Action action); - - public void emitEffectResult(EffectResult effectResult); - - public T findTopmostActionOfType(Class clazz); - - public List getPlayedCardsInCurrentPhase(); - - public List getPlayedCardsInCurrentTurn(); - - public boolean hasWonSkirmishThisTurn(LotroGame game, Filterable... filters); - - public boolean hasLostSkirmishThisTurn(LotroGame game, Filterable... filters); - - public boolean wasAssignedThisTurn(LotroGame game, Filterable... filters); -} +package com.gempukku.lotro.game; + +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.logic.actions.OptionalTriggerAction; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public interface ActionsEnvironment { + public List getRequiredBeforeTriggers(Effect effect); + + public List getOptionalBeforeTriggers(String playerId, Effect effect); + + public List getOptionalBeforeActions(String playerId, Effect effect); + + public List getRequiredAfterTriggers(Collection effectResults); + + public Map getOptionalAfterTriggers(String playerId, Collection effectResults); + + public List getOptionalAfterActions(String playerId, Collection effectResults); + + public List getPhaseActions(String playerId); + + public void addUntilStartOfPhaseActionProxy(ActionProxy actionProxy, Phase phase); + + public void addUntilEndOfPhaseActionProxy(ActionProxy actionProxy, Phase phase); + + public void addUntilEndOfTurnActionProxy(ActionProxy actionProxy); + + public void addActionToStack(Action action); + + public void emitEffectResult(EffectResult effectResult); + + public T findTopmostActionOfType(Class clazz); + + public List getTurnEffectResults(); + + public List getPhaseEffectResults(); +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java index 642642327..677ceb1e1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java @@ -1,11 +1,13 @@ package com.gempukku.lotro.game.state.actions; -import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Side; import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.*; +import com.gempukku.lotro.game.ActionProxy; +import com.gempukku.lotro.game.ActionsEnvironment; +import com.gempukku.lotro.game.CompletePhysicalCardVisitor; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.GameUtils; import com.gempukku.lotro.logic.PlayUtils; @@ -16,10 +18,6 @@ import com.gempukku.lotro.logic.timing.ActionStack; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.processes.GatherPlayableActionsFromDiscardVisitor; -import com.gempukku.lotro.logic.timing.results.AssignedToSkirmishResult; -import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult; -import com.gempukku.lotro.logic.timing.results.CharacterWonSkirmishResult; -import com.gempukku.lotro.logic.timing.results.PlayCardResult; import org.apache.log4j.Logger; import java.util.*; @@ -33,65 +31,14 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { private Map> _untilEndOfPhaseActionProxies = new HashMap>(); private List _untilEndOfTurnActionProxies = new LinkedList(); - private List _playedCardsInPhase = new LinkedList(); - private List _playedCardsInTurn = new LinkedList(); - private Set _effectResults = new HashSet(); - private Set _wonSkirmishesInTurn = new HashSet(); - private Set _lostSkirmishesInTurn = new HashSet(); - private Set _assignedInTurn = new HashSet(); + private List turnEffectResults = new LinkedList<>(); + private List phaseEffectResults = new LinkedList<>(); public DefaultActionsEnvironment(LotroGame lotroGame, ActionStack actionStack) { _lotroGame = lotroGame; _actionStack = actionStack; - - addAlwaysOnActionProxy( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResults) { - if (effectResults.getType() == EffectResult.Type.PLAY) { - PlayCardResult playResult = (PlayCardResult) effectResults; - _playedCardsInPhase.add(playResult.getPlayedCard()); - _playedCardsInTurn.add(playResult.getPlayedCard()); - } - return null; - } - }); - addAlwaysOnActionProxy( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.CHARACTER_WON_SKIRMISH) { - final CharacterWonSkirmishResult winResult = (CharacterWonSkirmishResult) effectResult; - _wonSkirmishesInTurn.add(winResult.getWinner()); - } - return null; - } - }); - addAlwaysOnActionProxy( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.CHARACTER_LOST_SKIRMISH) { - final CharacterLostSkirmishResult winResult = (CharacterLostSkirmishResult) effectResult; - _lostSkirmishesInTurn.add(winResult.getLoser()); - } - return null; - } - }); - addAlwaysOnActionProxy( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.ASSIGNED_TO_SKIRMISH) { - AssignedToSkirmishResult assignResult = (AssignedToSkirmishResult) effectResult; - _assignedInTurn.add(assignResult.getAssignedCard()); - } - return null; - } - } - ); } public List getUntilStartOfPhaseActionProxies(Phase phase) { @@ -101,6 +48,8 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { @Override public void emitEffectResult(EffectResult effectResult) { _effectResults.add(effectResult); + turnEffectResults.add(effectResult); + phaseEffectResults.add(effectResult); } public Set consumeEffectResults() { @@ -127,16 +76,23 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { _actionProxies.removeAll(list); list.clear(); } - _playedCardsInPhase.clear(); + phaseEffectResults.clear(); } public void removeEndOfTurnActionProxies() { _actionProxies.removeAll(_untilEndOfTurnActionProxies); _untilEndOfTurnActionProxies.clear(); - _wonSkirmishesInTurn.clear(); - _lostSkirmishesInTurn.clear(); - _assignedInTurn.clear(); - _playedCardsInTurn.clear(); + turnEffectResults.clear(); + } + + @Override + public List getTurnEffectResults() { + return Collections.unmodifiableList(turnEffectResults); + } + + @Override + public List getPhaseEffectResults() { + return Collections.unmodifiableList(phaseEffectResults); } @Override @@ -353,31 +309,6 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { return _actionStack.findTopmostActionOfType(clazz); } - @Override - public List getPlayedCardsInCurrentPhase() { - return Collections.unmodifiableList(_playedCardsInPhase); - } - - @Override - public List getPlayedCardsInCurrentTurn() { - return Collections.unmodifiableList(_playedCardsInTurn); - } - - @Override - public boolean hasWonSkirmishThisTurn(LotroGame game, Filterable... filters) { - return Filters.filter(_wonSkirmishesInTurn, game, filters).size() > 0; - } - - @Override - public boolean hasLostSkirmishThisTurn(LotroGame game, Filterable... filters) { - return Filters.filter(_lostSkirmishesInTurn, game, filters).size() > 0; - } - - @Override - public boolean wasAssignedThisTurn(LotroGame game, Filterable... filters) { - return Filters.filter(_assignedInTurn, game, filters).size() > 0; - } - private class GatherRequiredAfterTriggers extends CompletePhysicalCardVisitor { private Collection _effectResults; private List _actions = new LinkedList(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardPlayedInCurrentPhaseCondition.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardPlayedInCurrentPhaseCondition.java new file mode 100644 index 000000000..fc0bf996a --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardPlayedInCurrentPhaseCondition.java @@ -0,0 +1,29 @@ +package com.gempukku.lotro.logic.modifiers.condition; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.PlayCardResult; + +public class CardPlayedInCurrentPhaseCondition implements Condition { + private final Filter filter; + + public CardPlayedInCurrentPhaseCondition(Filterable... filters) { + filter = Filters.and(filters); + } + + @Override + public boolean isFullfilled(LotroGame game) { + for (EffectResult effectResult : game.getActionsEnvironment().getPhaseEffectResults()) { + PlayCardResult playResult = (PlayCardResult) effectResult; + if (filter.accepts(game, playResult.getPlayedCard())) + return true; + } + + return false; + + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardPlayedInCurrentTurnCondition.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardPlayedInCurrentTurnCondition.java new file mode 100644 index 000000000..0b166cf6c --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/CardPlayedInCurrentTurnCondition.java @@ -0,0 +1,29 @@ +package com.gempukku.lotro.logic.modifiers.condition; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.PlayCardResult; + +public class CardPlayedInCurrentTurnCondition implements Condition { + private final Filter filter; + + public CardPlayedInCurrentTurnCondition(Filterable... filters) { + filter = Filters.and(filters); + } + + @Override + public boolean isFullfilled(LotroGame game) { + for (EffectResult effectResult : game.getActionsEnvironment().getTurnEffectResults()) { + PlayCardResult playResult = (PlayCardResult) effectResult; + if (filter.accepts(game, playResult.getPlayedCard())) + return true; + } + + return false; + + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/LostSkirmishThisTurnCondition.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/LostSkirmishThisTurnCondition.java new file mode 100644 index 000000000..b87dedf0a --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/condition/LostSkirmishThisTurnCondition.java @@ -0,0 +1,29 @@ +package com.gempukku.lotro.logic.modifiers.condition; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult; + +public class LostSkirmishThisTurnCondition implements Condition { + private final Filter filter; + + public LostSkirmishThisTurnCondition(Filterable... filters) { + filter = Filters.and(filters); + } + + @Override + public boolean isFullfilled(LotroGame game) { + for (EffectResult effectResult : game.getActionsEnvironment().getTurnEffectResults()) { + if (effectResult.getType() == EffectResult.Type.CHARACTER_LOST_SKIRMISH) { + CharacterLostSkirmishResult lostResult = (CharacterLostSkirmishResult) effectResult; + if (filter.accepts(game, lostResult.getLoser())) + return true; + } + } + return false; + } +}