From 7ee3fe1438bfde72417980995b5d1710e452bddb Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 14 Mar 2012 19:37:29 +0000 Subject: [PATCH] - If a minion assigned by normal FP assignments becomes unassigned before Shadow player(s) assigns minions, that minion no longer can be assigned by the Shadow player, as it's not a "leftover unassigned minion". --- .../processes/turn/AssignmentGameProcess.java | 8 +++----- ...ePeoplePlayerAssignsMinionsGameProcess.java | 18 ++++++++++++------ ...adowPlayerAssignsHisMinionsGameProcess.java | 8 +++++--- ...owPlayersAssignTheirMinionsGameProcess.java | 9 +++++++-- .../src/main/webapp/includes/changeLog.html | 2 ++ 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/AssignmentGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/AssignmentGameProcess.java index 4871a75d6..d65a983a6 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/AssignmentGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/AssignmentGameProcess.java @@ -6,7 +6,6 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.processes.GameProcess; import com.gempukku.lotro.logic.timing.processes.turn.assign.FreePeoplePlayerAssignsMinionsGameProcess; -import com.gempukku.lotro.logic.timing.processes.turn.assign.ShadowPlayersAssignTheirMinionsGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.general.EndOfPhaseGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.general.PlayersPlayPhaseActionsInOrderGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.general.StartOfPhaseGameProcess; @@ -23,10 +22,9 @@ public class AssignmentGameProcess implements GameProcess { else _followingGameProcess = new StartOfPhaseGameProcess(Phase.ASSIGNMENT, new PlayersPlayPhaseActionsInOrderGameProcess(game.getGameState().getPlayerOrder().getCounterClockwisePlayOrder(game.getGameState().getCurrentPlayerId(), true), 0, - new FreePeoplePlayerAssignsMinionsGameProcess(game, - new ShadowPlayersAssignTheirMinionsGameProcess( - new EndOfPhaseGameProcess(Phase.ASSIGNMENT, - new PlayoutSkirmishesGameProcess()))))); + new FreePeoplePlayerAssignsMinionsGameProcess( + new EndOfPhaseGameProcess(Phase.ASSIGNMENT, + new PlayoutSkirmishesGameProcess())))); } @Override 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 381e63263..cdf0c4260 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 @@ -17,13 +17,17 @@ 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.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { - private GameProcess _followingGameProcess; + private Set _leftoverMinions; + private GameProcess _followingAssignments; - public FreePeoplePlayerAssignsMinionsGameProcess(LotroGame game, GameProcess followingGameProcess) { - _followingGameProcess = followingGameProcess; + public FreePeoplePlayerAssignsMinionsGameProcess(GameProcess followingAssignments) { + _followingAssignments = followingAssignments; } @Override @@ -53,7 +57,7 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { public void decisionMade(String result) throws DecisionResultInvalidException { Map> assignments = getAssignmentsBasedOnResponse(result); - List unassignedMinions = new LinkedList(minions); + Set unassignedMinions = new HashSet(minions); // Validate minion count (Defender) for (PhysicalCard freeCard : assignments.keySet()) { Set minionsAssigned = assignments.get(freeCard); @@ -65,6 +69,8 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { if (!game.getModifiersQuerying().isValidAssignments(game.getGameState(), Side.FREE_PEOPLE, assignments)) throw new DecisionResultInvalidException("Assignments are not valid for the effects affecting the cards"); + _leftoverMinions = unassignedMinions; + action.appendEffect( new AssignmentPhaseEffect(gameState.getCurrentPlayerId(), assignments, "Free People player assignments")); } @@ -86,6 +92,6 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { @Override public GameProcess getNextProcess() { - return _followingGameProcess; + return new ShadowPlayersAssignTheirMinionsGameProcess(_followingAssignments, _leftoverMinions); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java index 5b9a6580c..77bd833b7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java @@ -21,18 +21,20 @@ import java.util.Set; public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess { private PlayOrder _shadowOrder; private String _playerId; + private Set _leftoverMinions; private GameProcess _followingGameProcess; - public ShadowPlayerAssignsHisMinionsGameProcess(PlayOrder shadowOrder, String playerId, GameProcess followingGameProcess) { + public ShadowPlayerAssignsHisMinionsGameProcess(PlayOrder shadowOrder, String playerId, Set leftoverMinions, GameProcess followingGameProcess) { _shadowOrder = shadowOrder; _playerId = playerId; + _leftoverMinions = leftoverMinions; _followingGameProcess = followingGameProcess; } @Override public void process(final LotroGame game) { GameState gameState = game.getGameState(); - Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId)); + Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId), Filters.in(_leftoverMinions)); final Collection minions = Filters.filterActive(gameState, game.getModifiersQuerying(), minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false)); if (minions.size() > 0) { @@ -66,7 +68,7 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess { public GameProcess getNextProcess() { String nextPlayerId = _shadowOrder.getNextPlayer(); if (nextPlayerId != null) - return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, nextPlayerId, _followingGameProcess); + return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, nextPlayerId, _leftoverMinions, _followingGameProcess); else return _followingGameProcess; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayersAssignTheirMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayersAssignTheirMinionsGameProcess.java index b42141030..2daed3d93 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayersAssignTheirMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayersAssignTheirMinionsGameProcess.java @@ -1,17 +1,22 @@ package com.gempukku.lotro.logic.timing.processes.turn.assign; +import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.PlayOrder; import com.gempukku.lotro.logic.timing.processes.GameProcess; +import java.util.Set; + public class ShadowPlayersAssignTheirMinionsGameProcess implements GameProcess { private GameProcess _followingProcess; + private Set _leftoverMinions; private PlayOrder _shadowOrder; private String _firstShadowPlayer; - public ShadowPlayersAssignTheirMinionsGameProcess(GameProcess followingProcess) { + public ShadowPlayersAssignTheirMinionsGameProcess(GameProcess followingProcess, Set leftoverMinions) { _followingProcess = followingProcess; + _leftoverMinions = leftoverMinions; } @Override @@ -25,6 +30,6 @@ public class ShadowPlayersAssignTheirMinionsGameProcess implements GameProcess { @Override public GameProcess getNextProcess() { - return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, _firstShadowPlayer, _followingProcess); + return new ShadowPlayerAssignsHisMinionsGameProcess(_shadowOrder, _firstShadowPlayer, _leftoverMinions, _followingProcess); } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 4a948b584..7e206730e 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -2,6 +2,8 @@ 14 Mar. 2012 - "White Hand Destroyer" no longer has "Hunter 0" when you control no sites. - "Into the Caves" now can be used only when card is in play. +- If a minion assigned by normal FP assignments becomes unassigned before Shadow player(s) assigns minions, that minion +no longer can be assigned by the Shadow player, as it's not a "leftover unassigned minion". 12 Mar. 2012 - "Dark Fell About Him" now correctly exerts your Nazgul twice.