From 28a0de5ae695c17fe7add7309bae75a6bab86b43 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 8 Sep 2011 17:09:04 +0000 Subject: [PATCH] Changing the assignment validation to add additional level of validation, on the whole FP player assignments set. --- .../cards/modifiers/ProxyingModifier.java | 9 +++++++ .../logic/modifiers/AbstractModifier.java | 6 +++++ .../logic/modifiers/CompositeModifier.java | 13 ++++++---- .../lotro/logic/modifiers/Modifier.java | 3 +++ .../lotro/logic/modifiers/ModifiersLogic.java | 24 +++++++++++++------ .../logic/modifiers/ModifiersQuerying.java | 3 ++- ...PeoplePlayerAssignsMinionsGameProcess.java | 5 ++-- 7 files changed, 48 insertions(+), 15 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java index 425d1cdde..df4eb5f47 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/ProxyingModifier.java @@ -13,6 +13,7 @@ import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import java.util.List; +import java.util.Map; public class ProxyingModifier implements Modifier { private PhysicalCard _card; @@ -183,6 +184,14 @@ public class ProxyingModifier implements Modifier { return result; } + @Override + public boolean isValidFreePlayerAssignments(GameState gameState, ModifiersQuerying modifiersQuerying, Map> assignments, boolean result) { + Modifier modifier = getProxiedModifier(gameState, modifiersQuerying); + if (modifier != null) + return modifier.isValidFreePlayerAssignments(gameState, modifiersQuerying, assignments, result); + return result; + } + @Override public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result) { Modifier modifier = getProxiedModifier(gameState, modifiersQuerying); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index a1c1b4f0d..75d29f05c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -9,6 +9,7 @@ import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.timing.Action; import java.util.List; +import java.util.Map; public abstract class AbstractModifier implements Modifier { private PhysicalCard _physicalCard; @@ -123,6 +124,11 @@ public abstract class AbstractModifier implements Modifier { return result; } + @Override + public boolean isValidFreePlayerAssignments(GameState gameState, ModifiersQuerying modifiersQuerying, Map> assignments, boolean result) { + return result; + } + @Override public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result) { return result; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java index 8e8f30142..ac305fc62 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CompositeModifier.java @@ -8,10 +8,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.timing.Action; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; public class CompositeModifier implements Modifier { private PhysicalCard _source; @@ -191,6 +188,14 @@ public class CompositeModifier implements Modifier { return result; } + @Override + public boolean isValidFreePlayerAssignments(GameState gameState, ModifiersQuerying modifiersQuerying, Map> assignments, boolean result) { + for (Modifier modifier : _modifiers) + result = modifier.isValidFreePlayerAssignments(gameState, modifiersQuerying, assignments, result); + + return result; + } + @Override public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result) { for (Modifier modifier : _modifiers) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index de1c46431..db4bb169d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -8,6 +8,7 @@ import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.timing.Action; import java.util.List; +import java.util.Map; public interface Modifier { public PhysicalCard getSource(); @@ -50,5 +51,7 @@ public interface Modifier { public boolean isValidFreePlayerAssignments(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard companion, List minions, boolean result); + public boolean isValidFreePlayerAssignments(GameState gameState, ModifiersQuerying modifiersQuerying, Map> assignments, boolean result); + public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index e7cee1143..7d117d563 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -349,14 +349,24 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } @Override - public boolean isValidFreePlayerAssignments(GameState gameState, PhysicalCard companion, List minions) { + public boolean isValidFreePlayerAssignments(GameState gameState, Map> assignments) { boolean result = true; - for (Modifier modifier : getModifiers(ModifierEffect.ASSIGNMENT_MODIFIER)) - if (affectsCardWithSkipSet(gameState, companion, modifier)) - result = modifier.isValidFreePlayerAssignments(gameState, this, companion, minions, result); - for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) - if (affectsCardWithSkipSet(gameState, companion, modifier)) - result = modifier.isValidFreePlayerAssignments(gameState, this, companion, minions, result); + + + for (Modifier modifier : getModifiers(ModifierEffect.ASSIGNMENT_MODIFIER)) { + result = modifier.isValidFreePlayerAssignments(gameState, this, assignments, result); + for (Map.Entry> assignment : assignments.entrySet()) { + if (affectsCardWithSkipSet(gameState, assignment.getKey(), modifier)) + result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result); + } + } + for (Modifier modifier : getModifiers(ModifierEffect.ALL_MODIFIER)) { + result = modifier.isValidFreePlayerAssignments(gameState, this, assignments, result); + for (Map.Entry> assignment : assignments.entrySet()) { + if (affectsCardWithSkipSet(gameState, assignment.getKey(), modifier)) + result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result); + } + } return result; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index bd517dd7f..5d2ead269 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -9,6 +9,7 @@ import com.gempukku.lotro.logic.timing.Action; import java.util.Collection; import java.util.List; +import java.util.Map; public interface ModifiersQuerying { public Collection getModifiersAffecting(GameState gameState, PhysicalCard card); @@ -41,7 +42,7 @@ public interface ModifiersQuerying { public boolean shouldSkipPhase(GameState gameState, Phase phase); - public boolean isValidFreePlayerAssignments(GameState gameState, PhysicalCard companion, List minions); + public boolean isValidFreePlayerAssignments(GameState gameState, Map> assignments); public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source); } 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 881cff077..e119f2cba 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 @@ -62,9 +62,8 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { unassignedMinions.removeAll(minionsAssigned); } - for (Map.Entry> assignment : assignments.entrySet()) - if (!_game.getModifiersQuerying().isValidFreePlayerAssignments(_game.getGameState(), assignment.getKey(), assignment.getValue())) - throw new DecisionResultInvalidException(assignment.getKey().getBlueprint().getName() + " can't be assigned to these minions"); + if (!_game.getModifiersQuerying().isValidFreePlayerAssignments(_game.getGameState(), assignments)) + throw new DecisionResultInvalidException("Assignments are not valid for the effects affecting the cards"); for (Map.Entry> physicalCardListEntry : assignments.entrySet()) { PhysicalCard fp = physicalCardListEntry.getKey();