Splitting skirmishes from assignments.

This commit is contained in:
marcins78@gmail.com
2011-10-18 15:35:34 +00:00
parent 1e90831770
commit 29a668c862
7 changed files with 59 additions and 46 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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