Changing the assignment validation to add additional level of validation, on the whole FP player assignments set.
This commit is contained in:
@@ -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<PhysicalCard, List<PhysicalCard>> 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);
|
||||
|
||||
@@ -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<PhysicalCard, List<PhysicalCard>> assignments, boolean result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result) {
|
||||
return result;
|
||||
|
||||
@@ -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<PhysicalCard, List<PhysicalCard>> 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)
|
||||
|
||||
@@ -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<PhysicalCard> minions, boolean result);
|
||||
|
||||
public boolean isValidFreePlayerAssignments(GameState gameState, ModifiersQuerying modifiersQuerying, Map<PhysicalCard, List<PhysicalCard>> assignments, boolean result);
|
||||
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result);
|
||||
}
|
||||
|
||||
@@ -349,14 +349,24 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidFreePlayerAssignments(GameState gameState, PhysicalCard companion, List<PhysicalCard> minions) {
|
||||
public boolean isValidFreePlayerAssignments(GameState gameState, Map<PhysicalCard, List<PhysicalCard>> 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<PhysicalCard, List<PhysicalCard>> 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<PhysicalCard, List<PhysicalCard>> assignment : assignments.entrySet()) {
|
||||
if (affectsCardWithSkipSet(gameState, assignment.getKey(), modifier))
|
||||
result = modifier.isValidFreePlayerAssignments(gameState, this, assignment.getKey(), assignment.getValue(), result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Modifier> 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<PhysicalCard> minions);
|
||||
public boolean isValidFreePlayerAssignments(GameState gameState, Map<PhysicalCard, List<PhysicalCard>> assignments);
|
||||
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source);
|
||||
}
|
||||
|
||||
@@ -62,9 +62,8 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
|
||||
unassignedMinions.removeAll(minionsAssigned);
|
||||
}
|
||||
|
||||
for (Map.Entry<PhysicalCard, List<PhysicalCard>> 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<PhysicalCard, List<PhysicalCard>> physicalCardListEntry : assignments.entrySet()) {
|
||||
PhysicalCard fp = physicalCardListEntry.getKey();
|
||||
|
||||
Reference in New Issue
Block a user