Fiddling with the code around changes done to allow alternative ring-bearers.
This commit is contained in:
@@ -40,6 +40,7 @@ public class GameState {
|
||||
private Map<PhysicalCard, Map<Token, Integer>> _cardTokens = new HashMap<PhysicalCard, Map<Token, Integer>>();
|
||||
|
||||
private Map<String, PhysicalCard> _ringBearers = new HashMap<String, PhysicalCard>();
|
||||
private Map<String, PhysicalCard> _rings = new HashMap<String, PhysicalCard>();
|
||||
|
||||
private Map<String, AwaitingDecision> _playerDecisions = new HashMap<String, AwaitingDecision>();
|
||||
|
||||
@@ -54,20 +55,25 @@ public class GameState {
|
||||
return _nextCardId++;
|
||||
}
|
||||
|
||||
public void init(PlayerOrder playerOrder, String firstPlayer, Map<String, List<String>> cards, LotroCardBlueprintLibrary library, GameStats gameStats) {
|
||||
public void init(PlayerOrder playerOrder, String firstPlayer, Map<String, List<String>> cards, Map<String, String> ringBearers, Map<String, String> rings, LotroCardBlueprintLibrary library, GameStats gameStats) {
|
||||
_playerOrder = playerOrder;
|
||||
_currentPlayerId = firstPlayer;
|
||||
|
||||
for (Map.Entry<String, List<String>> stringListEntry : cards.entrySet()) {
|
||||
_adventureDecks.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
_decks.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
_hands.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
_voids.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
_discards.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
_deadPiles.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
_stacked.put(stringListEntry.getKey(), new LinkedList<PhysicalCardImpl>());
|
||||
String playerId = stringListEntry.getKey();
|
||||
List<String> decks = stringListEntry.getValue();
|
||||
|
||||
addPlayerCards(stringListEntry.getKey(), stringListEntry.getValue(), library);
|
||||
_adventureDecks.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
_decks.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
_hands.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
_voids.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
_discards.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
_deadPiles.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
_stacked.put(playerId, new LinkedList<PhysicalCardImpl>());
|
||||
|
||||
addPlayerCards(playerId, decks, library);
|
||||
_ringBearers.put(playerId, createPhysicalCard(playerId, library, ringBearers.get(playerId)));
|
||||
_rings.put(playerId, createPhysicalCard(playerId, library, rings.get(playerId)));
|
||||
}
|
||||
|
||||
for (String playerId : playerOrder.getAllPlayers())
|
||||
@@ -79,20 +85,27 @@ public class GameState {
|
||||
|
||||
private void addPlayerCards(String playerId, List<String> cards, LotroCardBlueprintLibrary library) {
|
||||
for (String blueprintId : cards) {
|
||||
LotroCardBlueprint card = library.getLotroCardBlueprint(blueprintId);
|
||||
PhysicalCardImpl physicalCard = createPhysicalCard(playerId, library, blueprintId);
|
||||
physicalCard.setZone(Zone.DECK);
|
||||
|
||||
int cardId = nextCardId();
|
||||
PhysicalCardImpl physicalCard = new PhysicalCardImpl(cardId, blueprintId, playerId, Zone.DECK, card);
|
||||
|
||||
if (card.getCardType() == CardType.SITE)
|
||||
if (physicalCard.getBlueprint().getCardType() == CardType.SITE)
|
||||
_adventureDecks.get(playerId).add(physicalCard);
|
||||
else
|
||||
_decks.get(playerId).add(physicalCard);
|
||||
|
||||
_allCards.put(physicalCard.getCardId(), physicalCard);
|
||||
}
|
||||
}
|
||||
|
||||
private PhysicalCardImpl createPhysicalCard(String playerId, LotroCardBlueprintLibrary library, String blueprintId) {
|
||||
LotroCardBlueprint card = library.getLotroCardBlueprint(blueprintId);
|
||||
|
||||
int cardId = nextCardId();
|
||||
PhysicalCardImpl result = new PhysicalCardImpl(cardId, blueprintId, playerId, null, card);
|
||||
|
||||
_allCards.put(cardId, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean isConsecutiveAction() {
|
||||
return _consecutiveAction;
|
||||
}
|
||||
@@ -264,6 +277,10 @@ public class GameState {
|
||||
return _ringBearers.get(playerId);
|
||||
}
|
||||
|
||||
public PhysicalCard getRing(String playerId) {
|
||||
return _rings.get(playerId);
|
||||
}
|
||||
|
||||
private List<PhysicalCardImpl> getZoneCards(String playerId, CardType type, Zone zone) {
|
||||
if (zone == Zone.DECK && type != CardType.SITE)
|
||||
return _decks.get(playerId);
|
||||
|
||||
@@ -49,16 +49,18 @@ public class DefaultLotroGame implements LotroGame {
|
||||
_actionsEnvironment = new DefaultActionsEnvironment(this, _actionStack);
|
||||
|
||||
final Map<String, List<String>> cards = new HashMap<String, List<String>>();
|
||||
final Map<String, String> ringBearers = new HashMap<String, String>();
|
||||
final Map<String, String> rings = new HashMap<String, String>();
|
||||
for (String playerId : decks.keySet()) {
|
||||
List<String> deck = new LinkedList<String>();
|
||||
|
||||
LotroDeck lotroDeck = decks.get(playerId);
|
||||
deck.add(lotroDeck.getRingBearer());
|
||||
deck.add(lotroDeck.getRing());
|
||||
deck.addAll(lotroDeck.getSites());
|
||||
deck.addAll(lotroDeck.getAdventureCards());
|
||||
|
||||
cards.put(playerId, deck);
|
||||
ringBearers.put(playerId, lotroDeck.getRingBearer());
|
||||
rings.put(playerId, lotroDeck.getRing());
|
||||
}
|
||||
|
||||
_gameState = new GameState();
|
||||
@@ -68,7 +70,7 @@ public class DefaultLotroGame implements LotroGame {
|
||||
@Override
|
||||
public void setPlayerOrder(PlayerOrder playerOrder, String firstPlayer) {
|
||||
final GameStats gameStats = _turnProcedure.getGameStats();
|
||||
_gameState.init(playerOrder, firstPlayer, cards, library, gameStats);
|
||||
_gameState.init(playerOrder, firstPlayer, cards, ringBearers, rings, library, gameStats);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
package com.gempukku.lotro.logic.timing.processes.pregame;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Zone;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.timing.processes.GameProcess;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public class PlayRingBearerRingAndAddBurdersGameProcess implements GameProcess {
|
||||
@@ -27,13 +23,10 @@ public class PlayRingBearerRingAndAddBurdersGameProcess implements GameProcess {
|
||||
public void process(LotroGame game) {
|
||||
GameState gameState = game.getGameState();
|
||||
for (String playerId : gameState.getPlayerOrder().getAllPlayers()) {
|
||||
PhysicalCard ringBearer = Filters.filter(gameState.getDeck(playerId), gameState, game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER)).iterator().next();
|
||||
gameState.removeCardsFromZone(null, Collections.singleton(ringBearer));
|
||||
PhysicalCard ringBearer = game.getGameState().getRingBearer(playerId);
|
||||
gameState.addCardToZone(game, ringBearer, Zone.FREE_CHARACTERS);
|
||||
gameState.setRingBearer(ringBearer);
|
||||
|
||||
PhysicalCard ring = Filters.filter(gameState.getDeck(playerId), gameState, game.getModifiersQuerying(), Filters.type(CardType.THE_ONE_RING)).iterator().next();
|
||||
gameState.removeCardsFromZone(null, Collections.singleton(ring));
|
||||
PhysicalCard ring = game.getGameState().getRing(playerId);
|
||||
gameState.attachCard(game, ring, ringBearer);
|
||||
|
||||
gameState.startPlayerTurn(playerId);
|
||||
|
||||
Reference in New Issue
Block a user