diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentPhaseEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentPhaseEffect.java index c288179af..2a0951354 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentPhaseEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentPhaseEffect.java @@ -29,10 +29,6 @@ public class AssignmentPhaseEffect extends AbstractEffect { _text = text; } - public AssignmentPhaseEffect(String playerId, PhysicalCard fpChar, List minions, String text) { - this(playerId, Collections.singletonMap(fpChar, minions), text); - } - @Override public Effect.Type getType() { return null; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java index b07662068..57d4c18b2 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java @@ -4,6 +4,8 @@ public abstract class EffectResult { public enum Type { WOUND, KILL, HEAL, EXERT, DISCARD_FROM_PLAY, DISCARD_FROM_HAND, + FREE_PEOPLE_PLAYER_STARTS_ASSIGNING, + ASSIGNMENT, OVERWHELM_IN_SKIRMISH, RESOLVE_SKIRMISH, ADD_TWILIGHT, diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java index f997b732c..365872bac 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java @@ -12,8 +12,11 @@ import com.gempukku.lotro.logic.actions.SystemQueueAction; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.decisions.PlayerAssignMinionsDecision; import com.gempukku.lotro.logic.effects.AssignmentPhaseEffect; +import com.gempukku.lotro.logic.effects.TriggeringResultEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; import com.gempukku.lotro.logic.timing.processes.GameProcess; +import com.gempukku.lotro.logic.timing.results.FreePlayerStartsAssigningResult; import java.util.Collection; import java.util.LinkedList; @@ -21,87 +24,94 @@ import java.util.List; import java.util.Map; public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { - private LotroGame _game; private GameProcess _followingGameProcess; public FreePeoplePlayerAssignsMinionsGameProcess(LotroGame game, GameProcess followingGameProcess) { - _game = game; _followingGameProcess = followingGameProcess; } @Override public void process(LotroGame game) { - final GameState gameState = _game.getGameState(); + final SystemQueueAction action = new SystemQueueAction(); + action.appendEffect( + new TriggeringResultEffect(new FreePlayerStartsAssigningResult(), "Free people player starts assigning")); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(final LotroGame game) { + final GameState gameState = game.getGameState(); - Filter minionFilter = Filters.type(CardType.MINION); - if (gameState.isFierceSkirmishes()) - minionFilter = Filters.and( - Filters.keyword(Keyword.FIERCE), - minionFilter); + Filter minionFilter = Filters.type(CardType.MINION); + if (gameState.isFierceSkirmishes()) + minionFilter = Filters.and( + Filters.keyword(Keyword.FIERCE), + minionFilter); - final Collection minions = Filters.filterActive(gameState, _game.getModifiersQuerying(), minionFilter, Filters.canBeAssignedToSkirmish(Side.FREE_PEOPLE)); - if (minions.size() > 0) { - final Collection freePeopleTargets = Filters.filterActive(gameState, _game.getModifiersQuerying(), - Filters.or( - Filters.and( - Filters.type(CardType.COMPANION), - Filters.or( - Filters.not(Keyword.UNHASTY), - new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return modifiersQuerying.isAllowedToParticipateInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard); - } - } - ) - ), - Filters.and( - Filters.type(CardType.ALLY), + final Collection minions = Filters.filterActive(gameState, game.getModifiersQuerying(), minionFilter, Filters.canBeAssignedToSkirmish(Side.FREE_PEOPLE)); + if (minions.size() > 0) { + final Collection freePeopleTargets = Filters.filterActive(gameState, game.getModifiersQuerying(), Filters.or( Filters.and( - Filters.allyAtHome, - new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return !modifiersQuerying.isAllyPreventedFromParticipatingInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard); - } - }), - new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return modifiersQuerying.isAllowedToParticipateInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard); - } + Filters.type(CardType.COMPANION), + Filters.or( + Filters.not(Keyword.UNHASTY), + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return modifiersQuerying.isAllowedToParticipateInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard); + } + } + ) + ), + Filters.and( + Filters.type(CardType.ALLY), + Filters.or( + Filters.and( + Filters.allyAtHome, + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return !modifiersQuerying.isAllyPreventedFromParticipatingInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard); + } + }), + new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return modifiersQuerying.isAllowedToParticipateInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard); + } + } + ) + ) + ), + Filters.canBeAssignedToSkirmish(Side.FREE_PEOPLE)); + + game.getUserFeedback().sendAwaitingDecision(gameState.getCurrentPlayerId(), + new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) { + @Override + public void decisionMade(String result) throws DecisionResultInvalidException { + Map> assignments = getAssignmentsBasedOnResponse(result); + + List unassignedMinions = new LinkedList(minions); + // Validate minion count (Defender) + for (PhysicalCard freeCard : assignments.keySet()) { + List minionsAssigned = assignments.get(freeCard); + if (minionsAssigned.size() > 1 + game.getModifiersQuerying().getKeywordCount(game.getGameState(), freeCard, Keyword.DEFENDER)) + throw new DecisionResultInvalidException(freeCard.getBlueprint().getName() + " can't have so many minions assigned"); + unassignedMinions.removeAll(minionsAssigned); } - ) - ) - ), - Filters.canBeAssignedToSkirmish(Side.FREE_PEOPLE)); - _game.getUserFeedback().sendAwaitingDecision(gameState.getCurrentPlayerId(), - new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) { - @Override - public void decisionMade(String result) throws DecisionResultInvalidException { - Map> assignments = getAssignmentsBasedOnResponse(result); + if (!game.getModifiersQuerying().isValidAssignments(game.getGameState(), Side.FREE_PEOPLE, assignments)) + throw new DecisionResultInvalidException("Assignments are not valid for the effects affecting the cards"); - List unassignedMinions = new LinkedList(minions); - // Validate minion count (Defender) - for (PhysicalCard freeCard : assignments.keySet()) { - List minionsAssigned = assignments.get(freeCard); - if (minionsAssigned.size() > 1 + _game.getModifiersQuerying().getKeywordCount(_game.getGameState(), freeCard, Keyword.DEFENDER)) - throw new DecisionResultInvalidException(freeCard.getBlueprint().getName() + " can't have so many minions assigned"); - unassignedMinions.removeAll(minionsAssigned); - } - - if (!_game.getModifiersQuerying().isValidAssignments(_game.getGameState(), Side.FREE_PEOPLE, assignments)) - throw new DecisionResultInvalidException("Assignments are not valid for the effects affecting the cards"); - - SystemQueueAction action = new SystemQueueAction(); - action.appendEffect( - new AssignmentPhaseEffect(gameState.getCurrentPlayerId(), assignments, "Free People player assignments")); - _game.getActionsEnvironment().addActionToStack(action); + action.appendEffect( + new AssignmentPhaseEffect(gameState.getCurrentPlayerId(), assignments, "Free People player assignments")); + } + }); } - }); - } + + } + }); + game.getActionsEnvironment().addActionToStack(action); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/FreePlayerStartsAssigningResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/FreePlayerStartsAssigningResult.java new file mode 100644 index 000000000..2eb63387f --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/FreePlayerStartsAssigningResult.java @@ -0,0 +1,9 @@ +package com.gempukku.lotro.logic.timing.results; + +import com.gempukku.lotro.logic.timing.EffectResult; + +public class FreePlayerStartsAssigningResult extends EffectResult { + public FreePlayerStartsAssigningResult() { + super(Type.FREE_PEOPLE_PLAYER_STARTS_ASSIGNING); + } +}