From 9172c6ea35c4560f26482c0bbd6952c3958c2d9e Mon Sep 17 00:00:00 2001 From: Sol Date: Sat, 17 Nov 2012 03:20:38 +0000 Subject: [PATCH] - When a game is restarted, set lands played back to 0. --- src/main/java/forge/game/GameNew.java | 52 ++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index eb86144eb4c..11dc8800394 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -25,12 +25,15 @@ import forge.card.trigger.TriggerType; import forge.control.input.InputControl; import forge.control.input.InputMulligan; import forge.deck.Deck; +import forge.deck.DeckSection; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.LobbyPlayer; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; +import forge.gui.GuiChoose; +import forge.gui.GuiUtils; import forge.gui.match.views.VAntes; import forge.item.CardPrinted; import forge.properties.ForgePreferences.FPref; @@ -43,10 +46,7 @@ import forge.util.MyRandom; * All of these methods can and should be static. */ public class GameNew { - private static void prepareSingleLibrary(final Player player, final Deck deck, final Map> removedAnteCards, final List rAICards, boolean canRandomFoil) { - final Random generator = MyRandom.getRandom(); - boolean useAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); - + private static void prepareFirstGameLibrary(Player player, Deck deck, Map> removedAnteCards, List rAICards, boolean canRandomFoil, Random generator, boolean useAnte) { PlayerZone library = player.getZone(ZoneType.Library); for (final Entry stackOfCards : deck.getMain()) { final CardPrinted cardPrinted = stackOfCards.getKey(); @@ -84,8 +84,51 @@ public class GameNew { // ImageCache.getImage(card); } } + } + } + + private static boolean sideboardAndPrepareLibrary(final Player player, final Deck deck, boolean canRandomFoil, Random generator, boolean useAnte) { + final GameType gameType = Singletons.getModel().getMatch().getGameType(); + boolean hasSideboard = gameType.equals(GameType.Draft) || gameType.equals(GameType.Sealed); + + PlayerZone library = player.getZone(ZoneType.Library); + DeckSection sideboard = deck.getSideboard(); + int sideboardSize = sideboard.countAll(); + + if (hasSideboard || sideboardSize == 0) { + return false; } + if (player.isComputer()) { + // Here is where the AI could sideboard, but needs to gather hints during the first game about what to SB + return false; + } else { + // Human Sideboarding + List newDeck = GuiChoose.getOrderChoices("Sideboarding", "Deck to Play", sideboardSize, + sideboard.toForgeCardList(), deck.getMain().toForgeCardList(), null); + + for (Card c : newDeck) { + library.add(c); + } + + } + return true; + } + + private static void prepareSingleLibrary(final Player player, final Deck deck, final Map> removedAnteCards, final List rAICards, boolean canRandomFoil) { + final Random generator = MyRandom.getRandom(); + boolean useAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); + + if (Singletons.getModel().getMatch().getPlayedGames().size() == 0) { + prepareFirstGameLibrary(player, deck, removedAnteCards, rAICards, canRandomFoil, generator, useAnte); + } else { + if (!sideboardAndPrepareLibrary(player, deck, canRandomFoil, generator, useAnte)) { + prepareFirstGameLibrary(player, deck, removedAnteCards, rAICards, canRandomFoil, generator, useAnte); + } + // + } + + // Shuffling // Ai may cheat if ( player.isComputer() && Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_SMOOTH_LAND) ) { @@ -187,6 +230,7 @@ public class GameNew { for( Entry p : playersConditions.entrySet() ) { final Player player = p.getKey(); player.setStartingLife(p.getValue().getStartingLife()); + player.setNumLandsPlayed(0); // what if I call it for AI player? PlayerZone bf = player.getZone(ZoneType.Battlefield); Iterable onTable = p.getValue().getCardsOnTable();