Fiddling with the code around changes done to allow alternative ring-bearers.

This commit is contained in:
marcins78@gmail.com
2011-11-15 18:42:28 +00:00
parent 027dd88a2f
commit fba78dfc92
3 changed files with 40 additions and 28 deletions

View File

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

View File

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

View File

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