diff --git a/forge-gui/src/main/java/forge/game/GameAction.java b/forge-gui/src/main/java/forge/game/GameAction.java
index ce6e1c16660..8cdcc72c958 100644
--- a/forge-gui/src/main/java/forge/game/GameAction.java
+++ b/forge-gui/src/main/java/forge/game/GameAction.java
@@ -52,7 +52,6 @@ import forge.game.event.GameEventCardDestroyed;
import forge.game.event.GameEventCardRegenerated;
import forge.game.event.GameEventCardSacrificed;
import forge.game.event.GameEventCardStatsChanged;
-import forge.game.event.GameEventGameFinished;
import forge.game.event.GameEventFlipCoin;
import forge.game.event.GameEventGameStarted;
import forge.game.player.GameLossReason;
@@ -1502,9 +1501,6 @@ public class GameAction {
first = game.getPhaseHandler().getPlayerTurn(); // needed only for restart
} while (game.getAge() == GameStage.RestartedByKarn);
-
- // will pull UI dialog, when the UI is listening
- game.fireEvent(new GameEventGameFinished());
}
private Player determineFirstTurnPlayer(final GameOutcome lastGameOutcome) {
diff --git a/forge-gui/src/main/java/forge/game/GameOutcome.java b/forge-gui/src/main/java/forge/game/GameOutcome.java
index 382900b8902..b6e78906d16 100644
--- a/forge-gui/src/main/java/forge/game/GameOutcome.java
+++ b/forge-gui/src/main/java/forge/game/GameOutcome.java
@@ -20,7 +20,9 @@ package forge.game;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
+import java.util.TreeMap;
import org.apache.commons.lang3.tuple.Pair;
@@ -28,6 +30,7 @@ import forge.game.player.LobbyPlayer;
import forge.game.player.Player;
import forge.game.player.PlayerOutcome;
import forge.game.player.PlayerStatistics;
+import forge.item.PaperCard;
/**
*
@@ -43,18 +46,23 @@ import forge.game.player.PlayerStatistics;
// GameObserver class - who should be notified of any considerable ingame event
public final class GameOutcome implements Iterable> {
+ public static class AnteResult {
+ public final List cards;
+ public final boolean hasWon;
+
+ private AnteResult(List cards, boolean won) {
+ this.cards = cards;
+ hasWon = won;
+ }
+
+ public static AnteResult won(List cards) { return new AnteResult(cards, true); }
+ public static AnteResult lost(List cards) { return new AnteResult(cards, true); }
+ }
- /** The player got first turn. */
- // private String playerGotFirstTurn = "Nobody";
-
- /** The last turn number. */
private int lastTurnNumber = 0;
-
- /** The player rating. */
private final List> playerRating = new ArrayList>(2);
-
private final Iterable players;
-
+ public final Map anteResult = new TreeMap<>();
private GameEndReason winCondition;
public GameOutcome(GameEndReason reason, final Iterable list) {
@@ -64,6 +72,8 @@ public final class GameOutcome implements Iterable pv : playerRating) {
diff --git a/forge-gui/src/main/java/forge/game/Match.java b/forge-gui/src/main/java/forge/game/Match.java
index 1107c082fc1..d5946eefd55 100644
--- a/forge-gui/src/main/java/forge/game/Match.java
+++ b/forge-gui/src/main/java/forge/game/Match.java
@@ -22,6 +22,7 @@ import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.game.card.Card;
import forge.game.event.GameEventAnteCardsSelected;
+import forge.game.event.GameEventGameFinished;
import forge.game.player.LobbyPlayer;
import forge.game.player.Player;
import forge.game.player.RegisteredPlayer;
@@ -32,13 +33,7 @@ import forge.item.PaperCard;
import forge.properties.ForgePreferences.FPref;
import forge.util.MyRandom;
-/**
- * TODO: Write javadoc for this type.
- *
- */
-
public class Match {
-
private final List players;
private final GameType gameType;
@@ -50,31 +45,19 @@ public class Match {
private final List gamesPlayed = new ArrayList();
private final List gamesPlayedRo;
- /**
- * This should become constructor once.
- */
- public Match(GameType type, List players0, int games) {
- gamesPlayedRo = Collections.unmodifiableList(gamesPlayed);
- players = Collections.unmodifiableList(Lists.newArrayList(players0));
- gameType = type;
-
- gamesPerMatch = games;
- gamesToWinMatch = (int)Math.ceil((gamesPerMatch+1)/2);
- }
-
public Match(GameType type, List players0) {
- this(type,players0,3);
- }
-
- public Match(GameType type, List players0, Boolean overrideAnte) {
- this(type, players0);
- if( overrideAnte != null )
- this.useAnte = overrideAnte.booleanValue();
+ this(type, players0, null, 3);
}
public Match(GameType type, List players0, Boolean overrideAnte, int games) {
- this(type, players0, games);
- if( overrideAnte != null )
+ gameType = type;
+ gamesPlayedRo = Collections.unmodifiableList(gamesPlayed);
+ players = Collections.unmodifiableList(Lists.newArrayList(players0));
+
+ gamesPerMatch = games;
+ gamesToWinMatch = (int)Math.ceil((gamesPerMatch+1)/2);
+
+ if( overrideAnte != null )
this.useAnte = overrideAnte.booleanValue();
}
@@ -124,14 +107,14 @@ public class Match {
game.getAction().invoke(new Runnable() {
@Override
public void run() {
- newGame(game, canRandomFoil);
+ prepareAllZones(game, canRandomFoil);
if (useAnte) { // Deciding which cards go to ante
Multimap list = game.chooseCardsForAnte();
for(Entry kv : list.entries()) {
Player p = kv.getKey();
- p.getGame().getAction().moveTo(ZoneType.Ante, kv.getValue());
- p.getGame().getGameLog().add(GameLogEntryType.ANTE, p + " anted " + kv.getValue());
+ game.getAction().moveTo(ZoneType.Ante, kv.getValue());
+ game.getGameLog().add(GameLogEntryType.ANTE, p + " anted " + kv.getValue());
}
game.fireEvent(new GameEventAnteCardsSelected(list));
}
@@ -139,6 +122,14 @@ public class Match {
GameOutcome lastOutcome = gamesPlayed.isEmpty() ? null : gamesPlayed.get(gamesPlayed.size() - 1);
game.getAction().startGame(lastOutcome);
+ if (useAnte) {
+ executeAnte(game);
+ }
+
+ // will pull UI dialog, when the UI is listening
+ game.fireEvent(new GameEventGameFinished());
+
+
if( null != latch )
latch.countDown();
}
@@ -261,15 +252,7 @@ public class Match {
library.setCards(newLibrary);
}
- /**
- * Constructor for new game allowing card lists to be put into play
- * immediately, and life totals to be adjusted, for computer and human.
- *
- * TODO: Accept something like match state as parameter. Match should be aware of players,
- * their decks and other special starting conditions.
- * @param forceAnte Forces ante on or off no matter what your preferences
- */
- private void newGame(final Game game, final boolean canRandomFoil) {
+ private void prepareAllZones(final Game game, final boolean canRandomFoil) {
// need this code here, otherwise observables fail
Trigger.resetIDs();
game.getTriggerHandler().clearDelayedTrigger();
@@ -290,13 +273,24 @@ public class Match {
player.initVariantsZones(psc);
if (canSideBoard) {
- Deck sideboarded = player.getController().sideboard(psc.getCurrentDeck(), gameType);
- psc.setCurrentDeck(sideboarded);
- } else {
- psc.restoreOriginalDeck();
+ Deck toChange = psc.getDeck();
+ List newMain = player.getController().sideboard(toChange, gameType);
+ if( null != newMain ) {
+ CardPool allCards = new CardPool();
+ allCards.addAll(toChange.get(DeckSection.Main));
+ allCards.addAll(toChange.get(DeckSection.Sideboard));
+ for(PaperCard c : newMain)
+ allCards.remove(c);
+
+ toChange.getMain().clear();
+ toChange.getMain().add(newMain);
+ toChange.get(DeckSection.Sideboard).clear();
+ toChange.get(DeckSection.Sideboard).addAll(allCards);
+ }
}
- Deck myDeck = psc.getCurrentDeck();
- boolean hasSideboard = myDeck.has(DeckSection.Sideboard);
+
+ Deck myDeck = psc.getDeck();
+
Set myRemovedAnteCards = null;
if( useAnte ) {
@@ -312,7 +306,7 @@ public class Match {
Random generator = MyRandom.getRandom();
preparePlayerLibrary(player, ZoneType.Library, myDeck.getMain(), canRandomFoil, generator);
- if(hasSideboard)
+ if(myDeck.has(DeckSection.Sideboard))
preparePlayerLibrary(player, ZoneType.Sideboard, myDeck.get(DeckSection.Sideboard), canRandomFoil, generator);
player.shuffle(null);
@@ -336,4 +330,51 @@ public class Match {
game.getAction().revealAnte("These ante cards were removed:", removedAnteCards);
}
}
+
+
+ private void executeAnte(Game lastGame) {
+
+ GameOutcome outcome = lastGame.getOutcome();
+ if (outcome.isDraw())
+ return;
+
+
+ // remove all the lost cards from owners' decks
+ List losses = new ArrayList();
+ int cntPlayers = players.size();
+ int iWinner = -1;
+ for (int i = 0; i < cntPlayers; i++ ) {
+ Player fromGame = lastGame.getRegisteredPlayers().get(i);
+ if( !fromGame.hasLost()) {
+ iWinner = i;
+ continue; // not a loser
+ }
+
+ Deck losersDeck = players.get(i).getDeck();
+ List peronalLosses = new ArrayList<>();
+ for (Card c : fromGame.getCardsIn(ZoneType.Ante)) {
+ PaperCard toRemove = (PaperCard) c.getPaperCard();
+ // this could miss the cards by returning instances that are not equal to cards found in deck
+ // (but only if the card has multiple prints in a set)
+ losersDeck.getMain().remove(toRemove);
+ peronalLosses.add(toRemove);
+ losses.add(toRemove);
+ }
+ outcome.anteResult.put(fromGame, GameOutcome.AnteResult.lost(peronalLosses));
+ }
+
+ if (iWinner >= 0 ) {
+ Player fromGame = lastGame.getRegisteredPlayers().get(iWinner);
+ outcome.anteResult.put(fromGame, GameOutcome.AnteResult.won(losses));
+ List chosen = fromGame.getController().chooseCardsYouWonToAddToDeck(losses); // "Select cards to add to your deck",
+ if (null != chosen) {
+ Deck deck = players.get(iWinner).getDeck();
+ for (PaperCard c : chosen) {
+ deck.getMain().add(c);
+ }
+ }
+ }
+
+ }
+
}
diff --git a/forge-gui/src/main/java/forge/game/player/PlayerController.java b/forge-gui/src/main/java/forge/game/player/PlayerController.java
index 369e69b81fb..1edaecdcd4b 100644
--- a/forge-gui/src/main/java/forge/game/player/PlayerController.java
+++ b/forge-gui/src/main/java/forge/game/player/PlayerController.java
@@ -115,7 +115,8 @@ public abstract class PlayerController {
public abstract void playSpellAbilityForFree(SpellAbility copySA, boolean mayChoseNewTargets);
public abstract void playSpellAbilityNoStack(SpellAbility effectSA, boolean mayChoseNewTargets);
- public abstract Deck sideboard(final Deck deck, GameType gameType);
+ public abstract List sideboard(final Deck deck, GameType gameType);
+ public abstract List chooseCardsYouWonToAddToDeck(List losses);
public abstract Map assignCombatDamage(Card attacker, List blockers, int damageDealt, GameEntity defender, boolean overrideOrder);
@@ -214,4 +215,6 @@ public abstract class PlayerController {
public Collection extends PaperCard> complainCardsCantPlayWell(Deck myDeck) { return null; }
+
+
}
diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java
index d361fbadca9..443353f5948 100644
--- a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java
+++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java
@@ -103,9 +103,9 @@ public class PlayerControllerAi extends PlayerController {
}
@Override
- public Deck sideboard(Deck deck, GameType gameType) {
+ public List sideboard(Deck deck, GameType gameType) {
// AI does not know how to sideboard
- return deck;
+ return null;
}
@Override
@@ -694,4 +694,10 @@ public class PlayerControllerAi extends PlayerController {
return Iterables.getFirst(c.getShield(), null);
}
+ @Override
+ public List chooseCardsYouWonToAddToDeck(List losses) {
+ // TODO AI takes all by default
+ return losses;
+ }
+
}
diff --git a/forge-gui/src/main/java/forge/game/player/RegisteredPlayer.java b/forge-gui/src/main/java/forge/game/player/RegisteredPlayer.java
index d18c9ef2179..c342b575fd3 100644
--- a/forge-gui/src/main/java/forge/game/player/RegisteredPlayer.java
+++ b/forge-gui/src/main/java/forge/game/player/RegisteredPlayer.java
@@ -12,7 +12,6 @@ import forge.item.IPaperCard;
public class RegisteredPlayer {
private final Deck originalDeck;
- private Deck currentDeck;
private static final Iterable EmptyList = Collections.unmodifiableList(new ArrayList());
@@ -27,23 +26,14 @@ public class RegisteredPlayer {
private PaperCard commander = null;
private int teamNumber = -1; // members of teams with negative id will play FFA.
- public RegisteredPlayer(Deck deck0) {
+ private RegisteredPlayer(Deck deck0) {
originalDeck = deck0;
- currentDeck = originalDeck;
}
- public final Deck getOriginalDeck() {
+ public final Deck getDeck() {
return originalDeck;
}
- public final Deck getCurrentDeck() {
- return currentDeck;
- }
-
- public void setCurrentDeck(Deck currentDeck0) {
- this.currentDeck = currentDeck0;
- }
-
public final int getStartingLife() {
return startingLife;
}
@@ -99,13 +89,6 @@ public class RegisteredPlayer {
return schemes == null ? EmptyList : schemes;
}
- /**
- * TODO: Write javadoc for this method.
- */
- public void restoreOriginalDeck() {
- currentDeck = originalDeck;
- }
-
/**
* @return the planes
*/
@@ -121,11 +104,17 @@ public class RegisteredPlayer {
this.teamNumber = teamNumber0;
}
-
+
+ // Copies the deck so that antes cannot change the original 'constructed' (or event) deck
public static RegisteredPlayer fromDeck(final Deck deck) {
- return new RegisteredPlayer(deck);
+ return new RegisteredPlayer((Deck)deck.copyTo(deck.getName()));
}
+ // Should be used for quests when deck changes are to persist after match is over
+ public static RegisteredPlayer fromDeckMutable(final Deck deck) {
+ return new RegisteredPlayer(deck);
+ }
+
public static RegisteredPlayer forVanguard(final Deck deck, final PaperCard avatar) {
RegisteredPlayer start = fromDeck(deck);
start.setStartingLife(start.getStartingLife() + avatar.getRules().getLife());
diff --git a/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java b/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java
index b69fdb0ad0a..396b78ce3f2 100644
--- a/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java
+++ b/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java
@@ -240,7 +240,12 @@ public final class GuiDisplayUtil {
* @since 1.0.15
*/
public static void devModeTutor() {
- final List lib = getGame().getPhaseHandler().getPriorityPlayer().getCardsIn(ZoneType.Library);
+ Player pPriority = getGame().getPhaseHandler().getPriorityPlayer();
+ if(pPriority == null) {
+ GuiDialog.message("No player has priority now, can't tutor from their deck at the moment");
+ return;
+ }
+ final List lib = pPriority.getCardsIn(ZoneType.Library);
final Card c = GuiChoose.oneOrNone("Choose a card", lib);
if (null == c)
return;
diff --git a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java
index e40d3132a29..f2c7f7d5fc3 100644
--- a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java
+++ b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java
@@ -257,7 +257,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
// Special branch for quest events
if (getLstDecks().getName().equals(DeckgenUtil.DeckTypes.QUESTEVENTS.toString())) {
QuestEvent event = DeckgenUtil.getQuestEvent(getLstDecks().getSelectedValuesList().get(0));
- RegisteredPlayer result = new RegisteredPlayer(event.getEventDeck());
+ RegisteredPlayer result = RegisteredPlayer.fromDeck(event.getEventDeck());
if( event instanceof QuestEventChallenge ) {
result.setStartingLife(((QuestEventChallenge) event).getAiLife());
}
diff --git a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java
index f7d5beb1935..cc0ebd91729 100644
--- a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java
+++ b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java
@@ -115,7 +115,7 @@ public enum CSubmenuGauntletBuild implements ICDoc {
private void addDeck() {
- final Deck deckToAdd = view.getLstLeft().getPlayer().getOriginalDeck();
+ final Deck deckToAdd = view.getLstLeft().getPlayer().getDeck();
if ( null == deckToAdd ) return;
workingDecks.add(deckToAdd);
view.getLblSave().setVisible(false);
diff --git a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java
index 1c036e58268..13f22208cbf 100644
--- a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java
+++ b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java
@@ -102,7 +102,7 @@ public enum CSubmenuGauntletContests implements ICDoc {
userDeck = gd.getUserDeck();
}
else {
- userDeck = view.getLstDecks().getPlayer().getOriginalDeck();
+ userDeck = view.getLstDecks().getPlayer().getDeck();
gd.setUserDeck(userDeck);
}
diff --git a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java
index b0857953b5f..0092fe57fcd 100644
--- a/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java
+++ b/forge-gui/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java
@@ -97,7 +97,7 @@ public enum CSubmenuGauntletQuick implements ICDoc {
Singletons.getModel().getGauntletData().setName(GauntletIO.PREFIX_QUICK + num);
// Pull user deck
- final Deck userDeck = view.getLstDecks().getPlayer().getOriginalDeck();
+ final Deck userDeck = view.getLstDecks().getPlayer().getDeck();
// Generate gauntlet decks
final int numOpponents = view.getSliOpponents().getValue();
diff --git a/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java
index dbde8949173..d7f60ed64f1 100644
--- a/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java
+++ b/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java
@@ -433,8 +433,8 @@ public class SSubmenuQuestUtil {
forceAnte = qc.isForceAnte();
}
- RegisteredPlayer humanStart = new RegisteredPlayer(deck);
- RegisteredPlayer aiStart = new RegisteredPlayer(event.getEventDeck());
+ RegisteredPlayer humanStart = RegisteredPlayer.fromDeckMutable(deck);
+ RegisteredPlayer aiStart = RegisteredPlayer.fromDeck(event.getEventDeck());
if (lifeHuman != null) {
humanStart.setStartingLife(lifeHuman);
diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java
index 8317692dc27..529505873e6 100644
--- a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java
+++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java
@@ -108,7 +108,7 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
for(int i=0;i schemes = null;
diff --git a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java
index 3df4e649703..338f5488570 100644
--- a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java
+++ b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java
@@ -167,7 +167,7 @@ public enum CSubmenuPlanechase implements ICDoc {
GuiDialog.message("No deck selected for player " + (i + 1));
return;
}
- playerDecks.add(d.getOriginalDeck());
+ playerDecks.add(d.getDeck());
List planes = null;
diff --git a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java
index 73ef51af2dc..b146424bef6 100644
--- a/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java
+++ b/forge-gui/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java
@@ -129,7 +129,7 @@ public enum CSubmenuVanguard implements ICDoc {
GuiDialog.message("No deck selected for player " + (i + 1));
return;
}
- playerDecks.add(d.getOriginalDeck());
+ playerDecks.add(d.getDeck());
}
List playerAvatars = new ArrayList();
diff --git a/forge-gui/src/main/java/forge/gui/match/ControlWinLose.java b/forge-gui/src/main/java/forge/gui/match/ControlWinLose.java
index 8298f289386..c425c919467 100644
--- a/forge-gui/src/main/java/forge/gui/match/ControlWinLose.java
+++ b/forge-gui/src/main/java/forge/gui/match/ControlWinLose.java
@@ -2,27 +2,13 @@ package forge.gui.match;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.util.ArrayList;
-import java.util.List;
-
import javax.swing.JButton;
import forge.Singletons;
-import forge.deck.Deck;
import forge.game.Game;
-import forge.game.GameOutcome;
-import forge.game.GameType;
import forge.game.Match;
-import forge.game.card.Card;
-import forge.game.player.Player;
-import forge.game.player.RegisteredPlayer;
-import forge.game.zone.ZoneType;
-import forge.gui.GuiChoose;
import forge.gui.SOverlayUtils;
import forge.gui.framework.FScreen;
-import forge.item.PaperCard;
-import forge.net.FServer;
-import forge.properties.ForgePreferences.FPref;
/**
* Default controller for a ViewWinLose object. This class can
@@ -72,12 +58,6 @@ public class ControlWinLose {
SOverlayUtils.hideOverlay();
saveOptions();
- boolean isAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE);
-
- //This is called from QuestWinLose also. If we're in a quest, this is already handled elsewhere
- if (isAnte && lastGame.getType() != GameType.Quest) {
- executeAnte();
- }
Singletons.getControl().endCurrentGame();
Singletons.getControl().startGameWithUi(lastGame.getMatch());
}
@@ -110,62 +90,6 @@ public class ControlWinLose {
Singletons.getModel().getPreferences().save();
}
- /**
- * TODO: Write javadoc for this method.
- * @param hDeck
- * @param cDeck
- */
- private void executeAnte() {
- final Match match = lastGame.getMatch();
- List games = match.getPlayedGames();
-
- if (games.isEmpty()) {
- return;
- }
-
- // remove all the lost cards from owners' decks
- List losses = new ArrayList();
- int cntPlayers = match.getPlayers().size();
- for (int i = 0; i < cntPlayers; i++ ) {
- Player fromGame = lastGame.getRegisteredPlayers().get(i);
- if( !fromGame.hasLost()) continue; // not a loser
-
-
- List compAntes = new ArrayList(fromGame.getCardsIn(ZoneType.Ante));
- RegisteredPlayer psc = match.getPlayers().get(i);
- Deck cDeck = psc.getCurrentDeck();
- Deck oDeck = psc.getOriginalDeck();
-
- for (Card c : compAntes) {
- PaperCard toRemove = (PaperCard) c.getPaperCard();
- cDeck.getMain().remove(toRemove);
- if ( cDeck != oDeck )
- oDeck.getMain().remove(toRemove);
- losses.add(toRemove);
- }
- }
-
- for (int i = 0; i < cntPlayers; i++ ) {
- Player fromGame = lastGame.getRegisteredPlayers().get(i);
- if( !fromGame.hasWon()) continue;
-
- // offer to winner, if he is local human
- if (fromGame.getController().getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer()) {
- List chosen = GuiChoose.noneOrMany("Select cards to add to your deck", losses);
- if (null != chosen) {
- RegisteredPlayer psc = match.getPlayers().get(i);
- Deck cDeck = psc.getCurrentDeck();
- //Deck oDeck = psc.getOriginalDeck();
- for (PaperCard c : chosen) {
- cDeck.getMain().add(c);
- //oDeck.getMain().add(c);
- }
- }
- }
- }
-
- }
-
/**
*
* populateCustomPanel.
diff --git a/forge-gui/src/main/java/forge/gui/match/controllers/CDock.java b/forge-gui/src/main/java/forge/gui/match/controllers/CDock.java
index 6bfbfe98c9b..41b681ee9eb 100644
--- a/forge-gui/src/main/java/forge/gui/match/controllers/CDock.java
+++ b/forge-gui/src/main/java/forge/gui/match/controllers/CDock.java
@@ -139,7 +139,7 @@ public enum CDock implements ICDoc {
*/
public void viewDeckList() {
- showDeck(game.getMatch().getPlayers().get(0).getCurrentDeck());
+ showDeck(game.getMatch().getPlayers().get(0).getDeck());
}
/**
diff --git a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java
index 293e5a50866..2cb2c1e2bdd 100644
--- a/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java
+++ b/forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java
@@ -182,7 +182,7 @@ public class PlayerControllerHuman extends PlayerController {
* @see forge.game.player.PlayerController#sideboard(forge.deck.Deck)
*/
@Override
- public Deck sideboard(Deck deck, GameType gameType) {
+ public List sideboard(Deck deck, GameType gameType) {
CardPool sideboard = deck.get(DeckSection.Sideboard);
if (sideboard == null) {
// Use an empty cardpool instead of null for 75/0 sideboarding scenario.
@@ -191,7 +191,7 @@ public class PlayerControllerHuman extends PlayerController {
CardPool main = deck.get(DeckSection.Main);
- boolean conform = Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY);
+
int mainSize = main.countAll();
int sbSize = sideboard.countAll();
int combinedDeckSize = mainSize + sbSize;
@@ -201,14 +201,15 @@ public class PlayerControllerHuman extends PlayerController {
// Limited doesn't have a sideboard max, so let the Main min take care of things.
int sbMax = sbRange == null ? combinedDeckSize : sbRange.getMaximum();
- CardPool newSb = new CardPool();
List newMain = null;
if (sbSize == 0 && mainSize == deckMinSize) {
// Skip sideboard loop if there are no sideboarding opportunities
- newMain = main.toFlatList();
+ return null;
}
else {
+ // conformance should not be checked here
+ boolean conform = Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY);
do {
if (newMain != null) {
if (newMain.size() < deckMinSize) {
@@ -225,20 +226,7 @@ public class PlayerControllerHuman extends PlayerController {
newMain = GuiChoose.sideboard(sideboard.toFlatList(), main.toFlatList());
} while (conform && (newMain.size() < deckMinSize || combinedDeckSize - newMain.size() > sbMax));
}
- newSb.clear();
- newSb.addAll(main);
- newSb.addAll(sideboard);
- for (PaperCard c : newMain) {
- newSb.remove(c);
- }
-
- Deck res = (Deck)deck.copyTo(deck.getName());
- res.getMain().clear();
- res.getMain().add(newMain);
- CardPool resSb = res.getOrCreate(DeckSection.Sideboard);
- resSb.clear();
- resSb.addAll(newSb);
- return res;
+ return newMain;
}
/* (non-Javadoc)
@@ -1076,4 +1064,9 @@ public class PlayerControllerHuman extends PlayerController {
}
return GuiChoose.one("Choose a regeneration shield:", c.getShield());
}
+
+ @Override
+ public List chooseCardsYouWonToAddToDeck(List losses) {
+ return GuiChoose.many("Select cards to add to your deck", "Add these to my deck", 0, losses.size(), losses, null);
+ }
}
diff --git a/forge-gui/src/main/java/forge/limited/GauntletMini.java b/forge-gui/src/main/java/forge/limited/GauntletMini.java
index 593df2f9eb0..375752a7617 100644
--- a/forge-gui/src/main/java/forge/limited/GauntletMini.java
+++ b/forge-gui/src/main/java/forge/limited/GauntletMini.java
@@ -144,7 +144,7 @@ public class GauntletMini {
aiOpponents.clear();
for (int i = 0; i < Math.min(gameRounds, aiDecks.size()); i++) {
- aiOpponents.add(new RegisteredPlayer(aiDecks.get(i)));
+ aiOpponents.add(RegisteredPlayer.fromDeck(aiDecks.get(i)));
}
resetCurrentRound();
diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java
index 11b4b481613..2f7738f7bfa 100644
--- a/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java
+++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java
@@ -61,7 +61,7 @@ public class GameWrapper {
public void runGame() {
List registeredPlayers = new ArrayList();
for( PlayerSpecification player : players ) {
- RegisteredPlayer registeredPlayer = new RegisteredPlayer( new Deck( player.getName() ) );
+ RegisteredPlayer registeredPlayer = RegisteredPlayer.fromDeck(new Deck(player.getName()));
LobbyPlayerForTests lobbyPlayer = new LobbyPlayerForTests( player.getName(), playerActions );
registeredPlayer.setPlayer( lobbyPlayer );
registeredPlayers.add( registeredPlayer );
diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java
index e793b550cfc..450fca739e0 100644
--- a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java
+++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java
@@ -116,8 +116,8 @@ public class PlayerControllerForTests extends PlayerController {
}
@Override
- public Deck sideboard(Deck deck, GameType gameType) {
- return deck;
+ public List sideboard(Deck deck, GameType gameType) {
+ return null; // refused to side
}
@Override
@@ -550,4 +550,10 @@ public class PlayerControllerForTests extends PlayerController {
public CardShields chooseRegenerationShield(Card c) {
return Iterables.getFirst(c.getShield(), null);
}
+
+ @Override
+ public List chooseCardsYouWonToAddToDeck(List losses) {
+ // TODO Auto-generated method stub
+ return losses;
+ }
}