Changing the assignment validation to add additional level of validation, on the whole FP player assignments set.

This commit is contained in:
marcins78@gmail.com
2011-09-08 17:09:04 +00:00
parent 9f9321bd1f
commit 28a0de5ae6
7 changed files with 48 additions and 15 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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();