diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index 67180f16d..3c77fe1b1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -40,6 +40,7 @@ public class GameState { private Map> _cardTokens = new HashMap>(); private Map _ringBearers = new HashMap(); + private Map _rings = new HashMap(); private Map _playerDecisions = new HashMap(); @@ -54,20 +55,25 @@ public class GameState { return _nextCardId++; } - public void init(PlayerOrder playerOrder, String firstPlayer, Map> cards, LotroCardBlueprintLibrary library, GameStats gameStats) { + public void init(PlayerOrder playerOrder, String firstPlayer, Map> cards, Map ringBearers, Map rings, LotroCardBlueprintLibrary library, GameStats gameStats) { _playerOrder = playerOrder; _currentPlayerId = firstPlayer; for (Map.Entry> stringListEntry : cards.entrySet()) { - _adventureDecks.put(stringListEntry.getKey(), new LinkedList()); - _decks.put(stringListEntry.getKey(), new LinkedList()); - _hands.put(stringListEntry.getKey(), new LinkedList()); - _voids.put(stringListEntry.getKey(), new LinkedList()); - _discards.put(stringListEntry.getKey(), new LinkedList()); - _deadPiles.put(stringListEntry.getKey(), new LinkedList()); - _stacked.put(stringListEntry.getKey(), new LinkedList()); + String playerId = stringListEntry.getKey(); + List decks = stringListEntry.getValue(); - addPlayerCards(stringListEntry.getKey(), stringListEntry.getValue(), library); + _adventureDecks.put(playerId, new LinkedList()); + _decks.put(playerId, new LinkedList()); + _hands.put(playerId, new LinkedList()); + _voids.put(playerId, new LinkedList()); + _discards.put(playerId, new LinkedList()); + _deadPiles.put(playerId, new LinkedList()); + _stacked.put(playerId, new LinkedList()); + + 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 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 getZoneCards(String playerId, CardType type, Zone zone) { if (zone == Zone.DECK && type != CardType.SITE) return _decks.get(playerId); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java index c4aaa3b0a..e9a95ea5f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java @@ -49,16 +49,18 @@ public class DefaultLotroGame implements LotroGame { _actionsEnvironment = new DefaultActionsEnvironment(this, _actionStack); final Map> cards = new HashMap>(); + final Map ringBearers = new HashMap(); + final Map rings = new HashMap(); for (String playerId : decks.keySet()) { List deck = new LinkedList(); 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); } } ); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java index 88c4f22d5..3beff31d2 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java @@ -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);