Splitting skirmishes from assignments.
This commit is contained in:
@@ -9,7 +9,6 @@ import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
@@ -39,7 +38,7 @@ public class Card1_302 extends AbstractCompanion {
|
||||
protected List<? extends Action> getExtraInPlayPhaseActions(String playerId, final LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self)
|
||||
&& PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), 2, Filters.sameCard(self))
|
||||
&& !isAssigned(game, self)) {
|
||||
&& Filters.notAssignedToSkirmish.accepts(game.getGameState(), game.getModifiersQuerying(), self)) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new ExertCharactersEffect(self, self));
|
||||
@@ -60,14 +59,4 @@ public class Card1_302 extends AbstractCompanion {
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isAssigned(LotroGame game, PhysicalCard self) {
|
||||
for (Skirmish skirmish : game.getGameState().getAssignments()) {
|
||||
if (skirmish.getFellowshipCharacter() == self)
|
||||
return true;
|
||||
}
|
||||
if (game.getGameState().getSkirmish().getFellowshipCharacter() == self)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ import com.gempukku.lotro.cards.modifiers.SpecialFlagModifier;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.Assignment;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.effects.AssignmentEffect;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierFlag;
|
||||
@@ -45,8 +45,8 @@ public class Card1_224 extends AbstractResponseOldEvent {
|
||||
new UnrespondableEffect() {
|
||||
@Override
|
||||
public void doPlayEffect(final LotroGame game) {
|
||||
List<Skirmish> assignments = new LinkedList<Skirmish>(game.getGameState().getAssignments());
|
||||
for (Skirmish assignment : assignments)
|
||||
List<Assignment> assignments = new LinkedList<Assignment>(game.getGameState().getAssignments());
|
||||
for (Assignment assignment : assignments)
|
||||
game.getGameState().removeAssignment(assignment);
|
||||
|
||||
if (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER), Filters.canBeAssignedToSkirmishByEffect(Side.SHADOW)) > 0) {
|
||||
|
||||
@@ -5,9 +5,9 @@ import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.Assignment;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
|
||||
@@ -41,17 +41,17 @@ public class Card3_115 extends AbstractSite {
|
||||
for (Map.Entry<PhysicalCard, List<PhysicalCard>> minionsAssignedToCharacter : assignments.entrySet()) {
|
||||
PhysicalCard fp = minionsAssignedToCharacter.getKey();
|
||||
List<PhysicalCard> minions = minionsAssignedToCharacter.getValue();
|
||||
List<Skirmish> skirmishes = gameState.getAssignments();
|
||||
if (countMinionsCurrentlyAssignedToFPChar(skirmishes, fp) + minions.size() > 1)
|
||||
List<Assignment> alreadyAssigned = gameState.getAssignments();
|
||||
if (countMinionsCurrentlyAssignedToFPChar(alreadyAssigned, fp) + minions.size() > 1)
|
||||
return false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private int countMinionsCurrentlyAssignedToFPChar(List<Skirmish> skirmishes, PhysicalCard fp) {
|
||||
for (Skirmish skirmish : skirmishes) {
|
||||
if (skirmish.getFellowshipCharacter() == fp)
|
||||
return skirmish.getShadowCharacters().size();
|
||||
private int countMinionsCurrentlyAssignedToFPChar(List<Assignment> assignments, PhysicalCard fp) {
|
||||
for (Assignment assignment : assignments) {
|
||||
if (assignment.getFellowshipCharacter() == fp)
|
||||
return assignment.getShadowCharacters().size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.gempukku.lotro.game.CompletePhysicalCardVisitor;
|
||||
import com.gempukku.lotro.game.LotroCardBlueprint;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.PhysicalCardVisitor;
|
||||
import com.gempukku.lotro.game.state.Assignment;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
@@ -95,7 +96,7 @@ public class Filters {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
if (physicalCard.getBlueprint().getSide() == Side.SHADOW) {
|
||||
for (Skirmish assignment : gameState.getAssignments()) {
|
||||
for (Assignment assignment : gameState.getAssignments()) {
|
||||
if (assignment.getFellowshipCharacter() == physicalCard
|
||||
|| assignment.getShadowCharacters().contains(physicalCard))
|
||||
return false;
|
||||
@@ -170,7 +171,7 @@ public class Filters {
|
||||
public static final Filter notAssignedToSkirmish = new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
for (Skirmish assignment : gameState.getAssignments()) {
|
||||
for (Assignment assignment : gameState.getAssignments()) {
|
||||
if (assignment.getFellowshipCharacter() == physicalCard
|
||||
|| assignment.getShadowCharacters().contains(physicalCard))
|
||||
return false;
|
||||
@@ -189,11 +190,11 @@ public class Filters {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
for (Skirmish skirmish : gameState.getAssignments()) {
|
||||
if (skirmish.getFellowshipCharacter() == physicalCard)
|
||||
return Filters.filter(skirmish.getShadowCharacters(), gameState, modifiersQuerying, againstFilters).size() > 0;
|
||||
else if (skirmish.getShadowCharacters().contains(physicalCard) && skirmish.getFellowshipCharacter() != null)
|
||||
return Filters.and(againstFilters).accepts(gameState, modifiersQuerying, skirmish.getFellowshipCharacter());
|
||||
for (Assignment assignment : gameState.getAssignments()) {
|
||||
if (assignment.getFellowshipCharacter() == physicalCard)
|
||||
return Filters.filter(assignment.getShadowCharacters(), gameState, modifiersQuerying, againstFilters).size() > 0;
|
||||
else if (assignment.getShadowCharacters().contains(physicalCard) && assignment.getFellowshipCharacter() != null)
|
||||
return Filters.and(againstFilters).accepts(gameState, modifiersQuerying, assignment.getFellowshipCharacter());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.gempukku.lotro.game.state;
|
||||
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Assignment {
|
||||
private PhysicalCard _fellowshipCharacter;
|
||||
private List<PhysicalCard> _shadowCharacters;
|
||||
|
||||
public Assignment(PhysicalCard fellowshipCharacter, List<PhysicalCard> shadowCharacters) {
|
||||
_fellowshipCharacter = fellowshipCharacter;
|
||||
_shadowCharacters = shadowCharacters;
|
||||
}
|
||||
|
||||
public PhysicalCard getFellowshipCharacter() {
|
||||
return _fellowshipCharacter;
|
||||
}
|
||||
|
||||
public List<PhysicalCard> getShadowCharacters() {
|
||||
return _shadowCharacters;
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class GameState {
|
||||
|
||||
private Map<String, PhysicalCard> _ringBearers = new HashMap<String, PhysicalCard>();
|
||||
|
||||
private List<Skirmish> _assignments = new LinkedList<Skirmish>();
|
||||
private List<Assignment> _assignments = new LinkedList<Assignment>();
|
||||
private Skirmish _skirmish = null;
|
||||
|
||||
private Map<String, GameStateListener> _gameStateListeners = new HashMap<String, GameStateListener>();
|
||||
@@ -170,7 +170,7 @@ public class GameState {
|
||||
listener.cardCreated(physicalCard);
|
||||
}
|
||||
|
||||
for (Skirmish assignment : _assignments)
|
||||
for (Assignment assignment : _assignments)
|
||||
listener.addAssignment(assignment.getFellowshipCharacter(), assignment.getShadowCharacters());
|
||||
|
||||
if (_skirmish != null)
|
||||
@@ -299,7 +299,7 @@ public class GameState {
|
||||
if (zone == Zone.STACKED)
|
||||
((PhysicalCardImpl) card).stackOn(null);
|
||||
|
||||
for (Skirmish assignment : new LinkedList<Skirmish>(_assignments)) {
|
||||
for (Assignment assignment : new LinkedList<Assignment>(_assignments)) {
|
||||
if (assignment.getFellowshipCharacter() == card)
|
||||
removeAssignment(assignment);
|
||||
if (assignment.getShadowCharacters().remove(card))
|
||||
@@ -688,37 +688,37 @@ public class GameState {
|
||||
}
|
||||
|
||||
public void assignToSkirmishes(PhysicalCard fp, List<PhysicalCard> minions) {
|
||||
Skirmish assignment = findAssignment(fp);
|
||||
Assignment assignment = findAssignment(fp);
|
||||
if (assignment != null)
|
||||
assignment.getShadowCharacters().addAll(minions);
|
||||
else
|
||||
_assignments.add(new Skirmish(fp, new LinkedList<PhysicalCard>(minions)));
|
||||
_assignments.add(new Assignment(fp, new LinkedList<PhysicalCard>(minions)));
|
||||
|
||||
for (GameStateListener listener : getAllGameStateListeners())
|
||||
listener.addAssignment(fp, minions);
|
||||
}
|
||||
|
||||
public void removeAssignment(Skirmish skirmish) {
|
||||
_assignments.remove(skirmish);
|
||||
public void removeAssignment(Assignment assignment) {
|
||||
_assignments.remove(assignment);
|
||||
for (GameStateListener listener : getAllGameStateListeners())
|
||||
listener.removeAssignment(skirmish.getFellowshipCharacter());
|
||||
listener.removeAssignment(assignment.getFellowshipCharacter());
|
||||
}
|
||||
|
||||
public List<Skirmish> getAssignments() {
|
||||
public List<Assignment> getAssignments() {
|
||||
return _assignments;
|
||||
}
|
||||
|
||||
private Skirmish findAssignment(PhysicalCard fp) {
|
||||
for (Skirmish assignment : _assignments)
|
||||
private Assignment findAssignment(PhysicalCard fp) {
|
||||
for (Assignment assignment : _assignments)
|
||||
if (assignment.getFellowshipCharacter() == fp)
|
||||
return assignment;
|
||||
return null;
|
||||
}
|
||||
|
||||
public void startSkirmish(PhysicalCard fp) {
|
||||
Skirmish skirmish = findAssignment(fp);
|
||||
removeAssignment(skirmish);
|
||||
_skirmish = skirmish;
|
||||
Assignment assignment = findAssignment(fp);
|
||||
removeAssignment(assignment);
|
||||
_skirmish = new Skirmish(assignment.getFellowshipCharacter(), assignment.getShadowCharacters());
|
||||
for (GameStateListener listener : getAllGameStateListeners())
|
||||
listener.startSkirmish(_skirmish.getFellowshipCharacter(), _skirmish.getShadowCharacters());
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ package com.gempukku.lotro.logic.timing.processes.turn.skirmish;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.Assignment;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.timing.processes.GameProcess;
|
||||
@@ -32,11 +32,11 @@ public class PlayoutSkirmishesGameProcess implements GameProcess {
|
||||
_nextProcess = _followingGameProcess;
|
||||
} else {
|
||||
final GameState gameState = _game.getGameState();
|
||||
List<Skirmish> assignments = gameState.getAssignments();
|
||||
List<Assignment> assignments = gameState.getAssignments();
|
||||
|
||||
if (assignments.size() > 0) {
|
||||
Set<PhysicalCard> fps = new HashSet<PhysicalCard>();
|
||||
for (Skirmish assignment : assignments)
|
||||
for (Assignment assignment : assignments)
|
||||
fps.add(assignment.getFellowshipCharacter());
|
||||
|
||||
RequiredTriggerAction chooseNextSkirmishAction = new RequiredTriggerAction(null) {
|
||||
|
||||
Reference in New Issue
Block a user