mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
MatchController ctor: no longer accepts a map of players, since that required unique lobbyplayers for each game player.
Player's teams are defined by numbers, no more lists of LobbyPlayers
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -14200,7 +14200,6 @@ src/main/java/forge/game/GameState.java -text
|
||||
src/main/java/forge/game/GameType.java -text
|
||||
src/main/java/forge/game/GlobalRuleChange.java -text
|
||||
src/main/java/forge/game/MatchController.java -text
|
||||
src/main/java/forge/game/MatchStartHelper.java -text
|
||||
src/main/java/forge/game/PlanarDice.java -text
|
||||
src/main/java/forge/game/PlayerStartConditions.java -text
|
||||
src/main/java/forge/game/ai/AiAttackController.java svneol=native#text/plain
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package forge.card.ability.ai;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import forge.Card;
|
||||
import forge.CounterType;
|
||||
import forge.card.ability.SpellAbilityAi;
|
||||
@@ -12,7 +10,6 @@ import forge.game.ai.ComputerUtil;
|
||||
import forge.game.ai.ComputerUtilCost;
|
||||
import forge.game.phase.PhaseType;
|
||||
import forge.game.player.Player;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
public class CountersRemoveAi extends SpellAbilityAi {
|
||||
|
||||
@@ -21,7 +18,6 @@ public class CountersRemoveAi extends SpellAbilityAi {
|
||||
// AI needs to be expanded, since this function can be pretty complex
|
||||
// based on what
|
||||
// the expected targets could be
|
||||
final Random r = MyRandom.getRandom();
|
||||
final Cost abCost = sa.getPayCosts();
|
||||
Target abTgt = sa.getTarget();
|
||||
final Card source = sa.getSourceCard();
|
||||
|
||||
@@ -64,7 +64,7 @@ public class Lobby {
|
||||
private final LobbyPlayerHuman guiPlayer = new LobbyPlayerHuman("Human");
|
||||
private final LobbyPlayerAi system = new LobbyPlayerAi("System");
|
||||
|
||||
public final LobbyPlayerHuman getGuiPlayer() {
|
||||
public final LobbyPlayer getGuiPlayer() {
|
||||
return guiPlayer;
|
||||
}
|
||||
|
||||
|
||||
@@ -1417,7 +1417,7 @@ public class GameAction {
|
||||
}
|
||||
}
|
||||
|
||||
void handleLeylinesAndChancellors() {
|
||||
private void handleLeylinesAndChancellors() {
|
||||
for (Player p : game.getPlayers()) {
|
||||
final List<Card> openingHand = new ArrayList<Card>(p.getCardsIn(ZoneType.Hand));
|
||||
|
||||
@@ -1470,7 +1470,17 @@ public class GameAction {
|
||||
game.getAction().checkStateEffects();
|
||||
}
|
||||
|
||||
public void performMulligans(final Player firstPlayer, final boolean isCommander) {
|
||||
public void mulligan(final Player firstPlayer) {
|
||||
performMulligans(firstPlayer, game.getType() == GameType.Commander);
|
||||
handleLeylinesAndChancellors();
|
||||
// Run Trigger beginning of the game
|
||||
final HashMap<String, Object> runParams = new HashMap<String, Object>();
|
||||
game.getTriggerHandler().runTrigger(TriggerType.NewGame, runParams, false);
|
||||
game.setAge(GameAge.Play);
|
||||
game.getInputQueue().clearInput();
|
||||
}
|
||||
|
||||
private void performMulligans(final Player firstPlayer, final boolean isCommander) {
|
||||
List<Player> whoCanMulligan = Lists.newArrayList(game.getPlayers());
|
||||
int offset = whoCanMulligan.indexOf(firstPlayer);
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@ import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -234,9 +236,10 @@ public class GameNew {
|
||||
boolean isFirstGame = game.getMatch().getPlayedGames().isEmpty();
|
||||
boolean canSideBoard = !isFirstGame && gameType.isSideboardingAllowed();
|
||||
|
||||
final Map<LobbyPlayer, PlayerStartConditions> playersConditions = game.getMatch().getPlayers();
|
||||
for (Player player : game.getPlayers()) {
|
||||
final PlayerStartConditions psc = playersConditions.get(player.getLobbyPlayer());
|
||||
final List<Pair<LobbyPlayer, PlayerStartConditions>> playersConditions = game.getMatch().getPlayers();
|
||||
for (int i = 0; i < playersConditions.size(); i++) {
|
||||
Player player = game.getPlayers().get(i);
|
||||
final PlayerStartConditions psc = playersConditions.get(i).getRight();
|
||||
|
||||
putCardsOnBattlefield(player, psc.getCardsOnBattlefield(player));
|
||||
initVariantsZones(player, psc);
|
||||
@@ -329,18 +332,11 @@ public class GameNew {
|
||||
}
|
||||
|
||||
// ultimate of Karn the Liberated
|
||||
public static void restartGame( final GameState game, final Player startingTurn, Map<Player, List<Card>> playerLibraries) {
|
||||
final Map<LobbyPlayer, PlayerStartConditions> players = game.getMatch().getPlayers();
|
||||
Map<Player, PlayerStartConditions> playersConditions = new HashMap<Player, PlayerStartConditions>();
|
||||
|
||||
for (Player p : game.getPlayers()) {
|
||||
playersConditions.put(p, players.get(p.getLobbyPlayer()));
|
||||
}
|
||||
|
||||
public static void restartGame(final GameState game, final Player startingTurn, Map<Player, List<Card>> playerLibraries) {
|
||||
|
||||
game.setAge(GameAge.Mulligan);
|
||||
// TODO: Apply new mulligan code here
|
||||
game.getInputQueue().clearInput();
|
||||
|
||||
game.getAction().mulligan(startingTurn);
|
||||
|
||||
//Card.resetUniqueNumber();
|
||||
// need this code here, otherwise observables fail
|
||||
forge.card.trigger.Trigger.resetIDs();
|
||||
@@ -348,16 +344,21 @@ public class GameNew {
|
||||
trigHandler.clearDelayedTrigger();
|
||||
trigHandler.cleanUpTemporaryTriggers();
|
||||
trigHandler.suppressMode(TriggerType.ChangesZone);
|
||||
|
||||
|
||||
game.getStack().reset();
|
||||
GameAction action = game.getAction();
|
||||
|
||||
|
||||
for (Entry<Player, PlayerStartConditions> p : playersConditions.entrySet()) {
|
||||
final Player player = p.getKey();
|
||||
player.setStartingLife(p.getValue().getStartingLife());
|
||||
List<Player> gamePlayers = game.getRegisteredPlayers();
|
||||
for( int i = 0; i < gamePlayers.size(); i++ ) {
|
||||
|
||||
final Player player = gamePlayers.get(i);
|
||||
if( player.hasLost()) continue;
|
||||
|
||||
PlayerStartConditions psc = game.getMatch().getPlayers().get(i).getValue();
|
||||
|
||||
player.setStartingLife(psc.getStartingLife());
|
||||
player.setNumLandsPlayed(0);
|
||||
putCardsOnBattlefield(player, p.getValue().getCardsOnBattlefield(player));
|
||||
putCardsOnBattlefield(player, psc.getCardsOnBattlefield(player));
|
||||
|
||||
PlayerZone library = player.getZone(ZoneType.Library);
|
||||
List<Card> newLibrary = playerLibraries.get(player);
|
||||
|
||||
@@ -25,6 +25,8 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
|
||||
import forge.Card;
|
||||
@@ -95,11 +97,11 @@ public class GameState {
|
||||
* @param match0
|
||||
* @param input
|
||||
*/
|
||||
public GameState(Map<LobbyPlayer, PlayerStartConditions> players2, GameType t, MatchController match0) { /* no more zones to map here */
|
||||
public GameState(List<Pair<LobbyPlayer, PlayerStartConditions>> players0, GameType t, MatchController match0) { /* no more zones to map here */
|
||||
type = t;
|
||||
match = match0;
|
||||
List<Player> players = new ArrayList<Player>();
|
||||
for (Entry<LobbyPlayer, PlayerStartConditions> kv : players2.entrySet()) {
|
||||
for (Entry<LobbyPlayer, PlayerStartConditions> kv : players0) {
|
||||
Player pl = kv.getKey().getPlayer(this);
|
||||
players.add(pl);
|
||||
ingamePlayers.add(pl);
|
||||
@@ -108,7 +110,7 @@ public class GameState {
|
||||
pl.setStartingLife(psc.getStartingLife());
|
||||
pl.setMaxHandSize(psc.getStartingHand());
|
||||
pl.setStartingHandSize(psc.getStartingHand());
|
||||
pl.setAllies(psc.getAllies());
|
||||
pl.setTeam(psc.getTeamNumber());
|
||||
}
|
||||
|
||||
allPlayers = Collections.unmodifiableList(players);
|
||||
|
||||
@@ -2,22 +2,21 @@ package forge.game;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.Constant.Preferences;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.card.trigger.TriggerType;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.error.BugReporter;
|
||||
import forge.game.event.DuelOutcomeEvent;
|
||||
import forge.game.event.FlipCoinEvent;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.LobbyPlayerHuman;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerStatistics;
|
||||
import forge.gui.framework.EDocID;
|
||||
@@ -42,7 +41,7 @@ import forge.util.MyRandom;
|
||||
|
||||
public class MatchController {
|
||||
|
||||
private final Map<LobbyPlayer, PlayerStartConditions> players = new HashMap<LobbyPlayer, PlayerStartConditions>();
|
||||
private final List<Pair<LobbyPlayer, PlayerStartConditions>> players;
|
||||
private final GameType gameType;
|
||||
|
||||
private int gamesPerMatch = 3;
|
||||
@@ -58,14 +57,14 @@ public class MatchController {
|
||||
/**
|
||||
* This should become constructor once.
|
||||
*/
|
||||
public MatchController(GameType type, Map<LobbyPlayer, PlayerStartConditions> map) {
|
||||
public MatchController(GameType type, List<Pair<LobbyPlayer, PlayerStartConditions>> players0) {
|
||||
gamesPlayedRo = Collections.unmodifiableList(gamesPlayed);
|
||||
players.putAll(map);
|
||||
players = Collections.unmodifiableList(Lists.newArrayList(players0));
|
||||
gameType = type;
|
||||
}
|
||||
|
||||
public MatchController(GameType type, Map<LobbyPlayer, PlayerStartConditions> map, Boolean forceAnte) {
|
||||
this(type, map);
|
||||
public MatchController(GameType type, List<Pair<LobbyPlayer, PlayerStartConditions>> players0, Boolean forceAnte) {
|
||||
this(type, players0);
|
||||
if( forceAnte != null )
|
||||
this.useAnte = forceAnte.booleanValue();
|
||||
}
|
||||
@@ -109,7 +108,7 @@ public class MatchController {
|
||||
game.getGameLog().add("Final", result.getWinner() + " won", 0);
|
||||
|
||||
// add result entries to the game log
|
||||
final LobbyPlayerHuman human = Singletons.getControl().getLobby().getGuiPlayer();
|
||||
final LobbyPlayer human = Singletons.getControl().getLobby().getGuiPlayer();
|
||||
|
||||
|
||||
final List<String> outcomes = new ArrayList<String>();
|
||||
@@ -171,18 +170,12 @@ public class MatchController {
|
||||
FThreads.invokeInNewThread( new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
currentGame.getAction().performMulligans(firstPlayer, currentGame.getType() == GameType.Commander);
|
||||
currentGame.getAction().handleLeylinesAndChancellors();
|
||||
// Run Trigger beginning of the game
|
||||
final HashMap<String, Object> runParams = new HashMap<String, Object>();
|
||||
currentGame.getTriggerHandler().runTrigger(TriggerType.NewGame, runParams, false);
|
||||
currentGame.setAge(GameAge.Play);
|
||||
currentGame.getInputQueue().clearInput();
|
||||
currentGame.getAction().mulligan(firstPlayer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void attachUiToMatch(MatchController match, LobbyPlayerHuman humanLobbyPlayer) {
|
||||
public static void attachUiToMatch(MatchController match, LobbyPlayer humanLobbyPlayer) {
|
||||
FControl.SINGLETON_INSTANCE.setMatch(match);
|
||||
|
||||
GameState currentGame = match.getCurrentGame();
|
||||
@@ -272,8 +265,8 @@ public class MatchController {
|
||||
for (GameOutcome go : gamesPlayed) {
|
||||
LobbyPlayer winner = go.getWinner();
|
||||
int i = 0;
|
||||
for (LobbyPlayer p : players.keySet()) {
|
||||
if (p.equals(winner)) {
|
||||
for (Pair<LobbyPlayer, PlayerStartConditions> p : players) {
|
||||
if (p.getLeft().equals(winner)) {
|
||||
victories[i]++;
|
||||
break; // can't have 2 winners per game
|
||||
}
|
||||
@@ -315,24 +308,7 @@ public class MatchController {
|
||||
return getGamesWonBy(questPlayer) >= gamesToWinMatch;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
*
|
||||
* @param lobbyPlayer
|
||||
* @return
|
||||
*/
|
||||
public Deck getPlayersDeck(LobbyPlayer lobbyPlayer) {
|
||||
PlayerStartConditions cond = players.get(lobbyPlayer);
|
||||
return cond == null ? null : cond.getCurrentDeck();
|
||||
}
|
||||
|
||||
public Deck getPlayersOriginalDeck(LobbyPlayer lobbyPlayer) {
|
||||
PlayerStartConditions cond = players.get(lobbyPlayer);
|
||||
return cond == null ? null : cond.getOriginalDeck();
|
||||
}
|
||||
|
||||
|
||||
public Map<LobbyPlayer, PlayerStartConditions> getPlayers() {
|
||||
public List<Pair<LobbyPlayer, PlayerStartConditions>> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
package forge.game;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.item.CardPrinted;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class MatchStartHelper {
|
||||
private final Map<LobbyPlayer, PlayerStartConditions> players = new HashMap<LobbyPlayer, PlayerStartConditions>();
|
||||
|
||||
public void addPlayer(final LobbyPlayer player, final PlayerStartConditions c) {
|
||||
players.put(player, c);
|
||||
}
|
||||
|
||||
public void addPlayer(final LobbyPlayer player, final Deck deck) {
|
||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||
players.put(player, start);
|
||||
}
|
||||
|
||||
public void addVanguardPlayer(final LobbyPlayer player, final Deck deck, final CardPrinted avatar) {
|
||||
|
||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||
start.setStartingLife(start.getStartingLife() + avatar.getRules().getLife());
|
||||
start.setStartingHand(start.getStartingHand() + avatar.getRules().getHand());
|
||||
start.setCardsInCommand(Arrays.asList(avatar));
|
||||
|
||||
players.put(player, start);
|
||||
}
|
||||
|
||||
public void addCommanderPlayer(final LobbyPlayer player, final Deck deck)
|
||||
{
|
||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||
start.setStartingLife(40);
|
||||
start.setCardsInCommand(deck.get(DeckSection.Commander).toFlatList());
|
||||
|
||||
players.put(player, start);
|
||||
}
|
||||
|
||||
public void addArchenemy(final LobbyPlayer player, final Deck deck, final Iterable<CardPrinted> schemes) {
|
||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||
start.setSchemes(schemes);
|
||||
players.put(player, start);
|
||||
}
|
||||
|
||||
public void addPlanechasePlayer(final LobbyPlayer player, final Deck deck, final Iterable<CardPrinted> planes) {
|
||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||
start.setPlanes(planes);
|
||||
players.put(player, start);
|
||||
}
|
||||
|
||||
public Map<LobbyPlayer, PlayerStartConditions> getPlayerMap() {
|
||||
|
||||
return players;
|
||||
}
|
||||
|
||||
public void setAllies(final LobbyPlayer p1, final LobbyPlayer p2) {
|
||||
PlayerStartConditions psc1 = players.get(p1);
|
||||
PlayerStartConditions psc2 = players.get(p2);
|
||||
|
||||
psc1.addAlly(p2);
|
||||
psc2.addAlly(p1);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.player.Player;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.IPaperCard;
|
||||
@@ -19,10 +19,10 @@ public class PlayerStartConditions {
|
||||
private int startingLife = 20;
|
||||
private int startingHand = 7;
|
||||
private Iterable<IPaperCard> cardsOnBattlefield = null;
|
||||
private Iterable<? extends IPaperCard> cardsInCommand = null;
|
||||
private final List<IPaperCard> cardsInCommand = new ArrayList<IPaperCard>();
|
||||
private Iterable<? extends IPaperCard> schemes = null;
|
||||
private Iterable<CardPrinted> planes = null;
|
||||
private List<LobbyPlayer> allies = new ArrayList<LobbyPlayer>();
|
||||
private int teamNumber = -1; // members of teams with negative id will play FFA.
|
||||
|
||||
public PlayerStartConditions(Deck deck0) {
|
||||
originalDeck = deck0;
|
||||
@@ -41,10 +41,6 @@ public class PlayerStartConditions {
|
||||
this.currentDeck = currentDeck0;
|
||||
}
|
||||
|
||||
public Iterable<LobbyPlayer> getAllies() {
|
||||
return allies;
|
||||
}
|
||||
|
||||
public final int getStartingLife() {
|
||||
return startingLife;
|
||||
}
|
||||
@@ -84,13 +80,13 @@ public class PlayerStartConditions {
|
||||
/**
|
||||
* @param function the cardsInCommand to set
|
||||
*/
|
||||
public void setCardsInCommand(Iterable<? extends IPaperCard> function) {
|
||||
this.cardsInCommand = function;
|
||||
public void addCardsInCommand(Iterable<? extends IPaperCard> function) {
|
||||
for(IPaperCard pc : function)
|
||||
this.cardsInCommand.add(pc);
|
||||
}
|
||||
|
||||
public void addAlly(LobbyPlayer ally) {
|
||||
if(!allies.contains(ally))
|
||||
allies.add(ally);
|
||||
public void addCardsInCommand(IPaperCard pc) {
|
||||
this.cardsInCommand.add(pc);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,5 +124,44 @@ public class PlayerStartConditions {
|
||||
this.planes = planes0;
|
||||
}
|
||||
|
||||
public int getTeamNumber() {
|
||||
return teamNumber;
|
||||
}
|
||||
|
||||
public void setTeamNumber(int teamNumber0) {
|
||||
this.teamNumber = teamNumber0;
|
||||
}
|
||||
|
||||
|
||||
public static PlayerStartConditions fromDeck(final Deck deck) {
|
||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||
if( deck.has(DeckSection.Commander)) {
|
||||
start.setStartingLife(40);
|
||||
start.addCardsInCommand(deck.get(DeckSection.Commander).toFlatList());
|
||||
}
|
||||
return new PlayerStartConditions(deck);
|
||||
}
|
||||
|
||||
public static PlayerStartConditions forVanguard(final Deck deck, final CardPrinted avatar) {
|
||||
PlayerStartConditions start = fromDeck(deck);
|
||||
start.setStartingLife(start.getStartingLife() + avatar.getRules().getLife());
|
||||
start.setStartingHand(start.getStartingHand() + avatar.getRules().getHand());
|
||||
start.addCardsInCommand(avatar);
|
||||
return start;
|
||||
}
|
||||
|
||||
|
||||
public static PlayerStartConditions forArchenemy(final Deck deck, final Iterable<CardPrinted> schemes) {
|
||||
PlayerStartConditions start = fromDeck(deck);
|
||||
start.setSchemes(schemes);
|
||||
return start;
|
||||
}
|
||||
|
||||
public static PlayerStartConditions forPlanechase(final Deck deck, final Iterable<CardPrinted> planes) {
|
||||
PlayerStartConditions start = fromDeck(deck);
|
||||
start.setPlanes(planes);
|
||||
return start;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -22,14 +22,16 @@ import java.util.List;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.Lobby;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.SOverlayUtils;
|
||||
|
||||
/**
|
||||
@@ -162,12 +164,12 @@ public class GauntletMini {
|
||||
}
|
||||
});
|
||||
|
||||
final MatchStartHelper starter = new MatchStartHelper();
|
||||
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> starter = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.getGuiPlayer(), humanDeck);
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiOpponents.get(currentRound - 1));
|
||||
|
||||
final MatchController mc = new MatchController(gauntletType, starter.getPlayerMap());
|
||||
starter.add(Pair.of(lobby.getGuiPlayer(), PlayerStartConditions.fromDeck(humanDeck)));
|
||||
starter.add(Pair.of(lobby.getAiPlayer(), aiOpponents.get(currentRound - 1)));
|
||||
final MatchController mc = new MatchController(gauntletType, starter);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -602,7 +602,7 @@ public class Upkeep extends Phase {
|
||||
* <p>
|
||||
* upkeepSuspend.
|
||||
* </p>
|
||||
*/
|
||||
*/ /*
|
||||
private static void upkeepSuspend(final GameState game) {
|
||||
final Player player = game.getPhaseHandler().getPlayerTurn();
|
||||
|
||||
@@ -626,7 +626,7 @@ public class Upkeep extends Phase {
|
||||
}
|
||||
}
|
||||
} // suspend
|
||||
|
||||
*/
|
||||
/**
|
||||
* <p>
|
||||
* upkeepVanishing.
|
||||
|
||||
@@ -162,7 +162,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
private PlayerStatistics stats = new PlayerStatistics();
|
||||
protected PlayerController controller;
|
||||
private final LobbyPlayer lobbyPlayer;
|
||||
private final List<LobbyPlayer> allies = new ArrayList<LobbyPlayer>();
|
||||
private int teamNumber = -1;
|
||||
|
||||
private Card activeScheme = null;
|
||||
|
||||
@@ -210,11 +210,14 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
return stats;
|
||||
}
|
||||
|
||||
public final void setAllies(Iterable<LobbyPlayer> allys) {
|
||||
for(LobbyPlayer a : allys) {
|
||||
allies.add(a);
|
||||
}
|
||||
public final void setTeam(int iTeam) {
|
||||
teamNumber = iTeam;
|
||||
}
|
||||
public final int getTeam() {
|
||||
return teamNumber;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Deprecated
|
||||
public boolean isHuman() { return getType() == PlayerType.HUMAN; }
|
||||
@@ -268,8 +271,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
*/
|
||||
public final Player getOpponent() {
|
||||
for (Player p : game.getPlayers()) {
|
||||
if (p == this || allies.contains(p.getLobbyPlayer())) { continue; }
|
||||
return p;
|
||||
if (p.isOpponentOf(this))
|
||||
return p;
|
||||
}
|
||||
throw new IllegalStateException("No opponents left ingame for " + this);
|
||||
}
|
||||
@@ -283,8 +286,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
public final List<Player> getOpponents() {
|
||||
List<Player> result = new ArrayList<Player>();
|
||||
for (Player p : game.getPlayers()) {
|
||||
if (p == this || allies.contains(p.getLobbyPlayer())) { continue; }
|
||||
result.add(p);
|
||||
if (p.isOpponentOf(this))
|
||||
result.add(p);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -297,7 +300,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
public final List<Player> getAllies() {
|
||||
List<Player> result = new ArrayList<Player>();
|
||||
for (Player p : game.getPlayers()) {
|
||||
if( allies.contains(p.getLobbyPlayer()))
|
||||
if (!p.isOpponentOf(this))
|
||||
result.add(p);
|
||||
}
|
||||
return result;
|
||||
@@ -320,15 +323,21 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
* @return
|
||||
*/
|
||||
public final Player getWeakestOpponent() {
|
||||
Player weakest = this.getOpponents().get(0);
|
||||
for (int i = 1; i < this.getOpponents().size(); i++) {
|
||||
if (weakest.getLife() > this.getOpponents().get(i).getLife()) {
|
||||
weakest = this.getOpponents().get(i);
|
||||
List<Player> opponnets = this.getOpponents();
|
||||
Player weakest = opponnets.get(0);
|
||||
for (int i = 1; i < opponnets.size(); i++) {
|
||||
if (weakest.getLife() > opponnets.get(i).getLife()) {
|
||||
weakest = opponnets.get(i);
|
||||
}
|
||||
}
|
||||
return weakest;
|
||||
}
|
||||
|
||||
public boolean isOpponentOf(Player other) {
|
||||
return other != this && ( other.teamNumber < 0 || other.teamNumber != this.teamNumber );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ////////////////////////
|
||||
@@ -2167,13 +2176,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* hasWon.
|
||||
* </p>
|
||||
*
|
||||
* @return a boolean.
|
||||
*/
|
||||
public final boolean hasLost() {
|
||||
return this.getOutcome() != null && this.getOutcome().lossState != null;
|
||||
}
|
||||
|
||||
public final boolean hasWon() {
|
||||
if (this.cantWin()) {
|
||||
return false;
|
||||
@@ -2904,16 +2910,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param playerTurn
|
||||
* @return
|
||||
*/
|
||||
public boolean isOpponentOf(Player other) {
|
||||
return other != this && !allies.contains(other.getLobbyPlayer());
|
||||
}
|
||||
|
||||
|
||||
public int getStartingHandSize() {
|
||||
|
||||
return this.startingHandSize;
|
||||
|
||||
@@ -5,11 +5,8 @@ package forge.game.player;
|
||||
* TODO: Write javadoc for this type.
|
||||
*/
|
||||
public class PlayerOutcome {
|
||||
/** The alt win source name. */
|
||||
public final String altWinSourceName;
|
||||
/** The loss state. */
|
||||
public final GameLossReason lossState;
|
||||
/** The lose condition spell. */
|
||||
public final String loseConditionSpell;
|
||||
|
||||
private PlayerOutcome(String altWinSourceName, GameLossReason lossState, String loseConditionSpell) {
|
||||
|
||||
@@ -10,6 +10,10 @@ import java.util.List;
|
||||
|
||||
import javax.swing.JList;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
@@ -18,7 +22,8 @@ import forge.deck.Deck;
|
||||
import forge.deck.DeckgenUtil;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
import forge.gui.SOverlayUtils;
|
||||
@@ -116,13 +121,13 @@ public enum CSubmenuGauntletContests implements ICDoc {
|
||||
|
||||
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> starter = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
|
||||
starter.addPlayer(lobby.getGuiPlayer(), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
starter.add(ImmutablePair.of(lobby.getGuiPlayer(), PlayerStartConditions.fromDeck(gd.getUserDeck())));
|
||||
starter.add(ImmutablePair.of(lobby.getAiPlayer(), PlayerStartConditions.fromDeck(aiDeck)));
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Gauntlet, starter.getPlayerMap());
|
||||
final MatchController mc = new MatchController(GameType.Gauntlet, starter);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -8,6 +8,9 @@ import java.util.List;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
@@ -15,7 +18,8 @@ import forge.control.Lobby;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
import forge.gui.SOverlayUtils;
|
||||
@@ -109,12 +113,12 @@ public enum CSubmenuGauntletLoad implements ICDoc {
|
||||
final GauntletData gd = FModel.SINGLETON_INSTANCE.getGauntletData();
|
||||
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> starter = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.getGuiPlayer(), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
starter.add(Pair.of(lobby.getGuiPlayer(), PlayerStartConditions.fromDeck(gd.getUserDeck())));
|
||||
starter.add(Pair.of(lobby.getAiPlayer(), PlayerStartConditions.fromDeck(aiDeck)));
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Gauntlet, starter.getPlayerMap());
|
||||
final MatchController mc = new MatchController(GameType.Gauntlet, starter);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -9,6 +9,9 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
@@ -18,7 +21,8 @@ import forge.deck.DeckgenUtil;
|
||||
import forge.deck.DeckgenUtil.DeckTypes;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
@@ -144,13 +148,12 @@ public enum CSubmenuGauntletQuick implements ICDoc {
|
||||
|
||||
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> starter = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
|
||||
starter.addPlayer(lobby.getGuiPlayer(), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Gauntlet, starter.getPlayerMap());
|
||||
starter.add(Pair.of(lobby.getGuiPlayer(), PlayerStartConditions.fromDeck(gd.getUserDeck())));
|
||||
starter.add(Pair.of(lobby.getAiPlayer(), PlayerStartConditions.fromDeck(aiDeck)));
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Gauntlet, starter);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -10,15 +10,16 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.SwingWorker;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.card.CardEdition;
|
||||
import forge.control.FControl;
|
||||
import forge.control.Lobby;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.GuiChoose;
|
||||
@@ -433,14 +434,15 @@ public class SSubmenuQuestUtil {
|
||||
aiStart.setCardsOnBattlefield(QuestUtil.getComputerStartingCards(event));
|
||||
}
|
||||
|
||||
MatchStartHelper msh = new MatchStartHelper();
|
||||
msh.addPlayer(Singletons.getControl().getLobby().getQuestPlayer(), humanStart);
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> starter = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.add(Pair.of(lobby.getQuestPlayer(), humanStart));
|
||||
|
||||
LobbyPlayer aiPlayer = Singletons.getControl().getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent());
|
||||
aiPlayer.setIconImageKey(event.getIconImageKey());
|
||||
msh.addPlayer(aiPlayer, aiStart);
|
||||
starter.add(Pair.of(aiPlayer, aiStart));
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Quest, msh.getPlayerMap(), forceAnte);
|
||||
final MatchController mc = new MatchController(GameType.Quest, starter, forceAnte);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -2,16 +2,20 @@ package forge.gui.home.sanctioned;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.Lobby;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.SOverlayUtils;
|
||||
@@ -114,13 +118,16 @@ public enum CSubmenuConstructed implements ICDoc {
|
||||
SOverlayUtils.startGameOverlay();
|
||||
SOverlayUtils.showOverlay();
|
||||
|
||||
final MatchStartHelper starter = new MatchStartHelper();
|
||||
|
||||
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
LobbyPlayer firstPlayer = view.getCbSpectate().isSelected() ? lobby.getAiPlayer() : lobby.getGuiPlayer();
|
||||
starter.addPlayer(firstPlayer, humanPsc);
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
final MatchController mc = new MatchController(gameType, starter.getPlayerMap());
|
||||
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> players = new ArrayList<Pair<LobbyPlayer, PlayerStartConditions>>();
|
||||
players.add(ImmutablePair.of(firstPlayer, humanPsc));
|
||||
players.add(ImmutablePair.of(lobby.getAiPlayer(), aiDeck));
|
||||
|
||||
final MatchController mc = new MatchController(gameType, players);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -8,6 +8,9 @@ import java.util.List;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
@@ -17,9 +20,10 @@ import forge.deck.Deck;
|
||||
import forge.deck.DeckGroup;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.limited.BoosterDraft;
|
||||
import forge.game.limited.LimitedPoolType;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
@@ -130,12 +134,12 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
throw new IllegalStateException("Draft: Computer deck is null!");
|
||||
}
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> starter = new ArrayList<Pair<LobbyPlayer, PlayerStartConditions>>();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.getGuiPlayer(), humanDeck);
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
starter.add(Pair.of(lobby.getGuiPlayer(), PlayerStartConditions.fromDeck(humanDeck)));
|
||||
starter.add(Pair.of(lobby.getAiPlayer(), PlayerStartConditions.fromDeck(aiDeck)));
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Draft, starter.getPlayerMap());
|
||||
final MatchController mc = new MatchController(GameType.Draft, starter);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -7,6 +7,10 @@ import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.Command;
|
||||
@@ -19,7 +23,6 @@ import forge.deck.DeckSection;
|
||||
import forge.deck.DeckgenUtil;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.GuiDialog;
|
||||
@@ -220,24 +223,22 @@ public enum CSubmenuArchenemy implements ICDoc {
|
||||
SOverlayUtils.showOverlay();
|
||||
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
MatchStartHelper helper = new MatchStartHelper();
|
||||
List<LobbyPlayer> allies = new ArrayList<LobbyPlayer>();
|
||||
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> players = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
||||
if (i == 0) {
|
||||
LobbyPlayer player = lobby.getGuiPlayer();
|
||||
helper.addArchenemy(player, playerDecks.get(i), schemes);
|
||||
helper.getPlayerMap().get(player).setStartingLife(10 + (10 * (view.getNumPlayers() - 1)));
|
||||
|
||||
PlayerStartConditions psc = PlayerStartConditions.forArchenemy(playerDecks.get(i), schemes);
|
||||
psc.setStartingLife(10 + (10 * (view.getNumPlayers() - 1)));
|
||||
players.add(ImmutablePair.of(lobby.getGuiPlayer(), psc));
|
||||
} else {
|
||||
LobbyPlayer player = lobby.getAiPlayer();
|
||||
allies.add(player);
|
||||
helper.addPlayer(player, playerDecks.get(i));
|
||||
PlayerStartConditions psc = PlayerStartConditions.fromDeck(playerDecks.get(i));
|
||||
psc.setTeamNumber(0);
|
||||
players.add(ImmutablePair.of(lobby.getAiPlayer(), psc));
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < allies.size(); i++)
|
||||
for(int j = i+1; i < allies.size(); j++)
|
||||
helper.setAllies(allies.get(i), allies.get(j));
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Archenemy, helper.getPlayerMap());
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Archenemy, players);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -7,6 +7,9 @@ import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.Command;
|
||||
@@ -19,7 +22,6 @@ import forge.deck.DeckSection;
|
||||
import forge.deck.DeckgenUtil;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.GuiDialog;
|
||||
@@ -150,7 +152,7 @@ public enum CSubmenuPlanechase implements ICDoc {
|
||||
/** @param lists0   {@link java.util.List}<{@link javax.swing.JList}> */
|
||||
private void startGame() {
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
MatchStartHelper helper = new MatchStartHelper();
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> helper = new ArrayList<Pair<LobbyPlayer,PlayerStartConditions>>();
|
||||
List<Deck> playerDecks = new ArrayList<Deck>();
|
||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
||||
PlayerStartConditions d = view.getDeckChoosers().get(i).getDeck();
|
||||
@@ -209,13 +211,13 @@ public enum CSubmenuPlanechase implements ICDoc {
|
||||
GuiDialog.message("Player " + (i+1) + " will use a default planar deck.");
|
||||
}
|
||||
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();
|
||||
helper.addPlanechasePlayer(player, playerDecks.get(i), planes);
|
||||
helper.add(Pair.of(player, PlayerStartConditions.forPlanechase(playerDecks.get(i), planes)));
|
||||
}
|
||||
|
||||
SOverlayUtils.startGameOverlay();
|
||||
SOverlayUtils.showOverlay();
|
||||
|
||||
final MatchController mc = new MatchController(GameType.Planechase, helper.getPlayerMap());
|
||||
final MatchController mc = new MatchController(GameType.Planechase, helper);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -7,6 +7,9 @@ import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.Command;
|
||||
@@ -17,7 +20,6 @@ import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.gui.GuiDialog;
|
||||
@@ -172,13 +174,12 @@ public enum CSubmenuVanguard implements ICDoc {
|
||||
}
|
||||
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
MatchStartHelper helper = new MatchStartHelper();
|
||||
List<Pair<LobbyPlayer, PlayerStartConditions>> helper = new ArrayList<Pair<LobbyPlayer, PlayerStartConditions>>();
|
||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
||||
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();
|
||||
|
||||
helper.addVanguardPlayer(player, playerDecks.get(i), playerAvatars.get(i));
|
||||
helper.add(Pair.of(player, PlayerStartConditions.forVanguard(playerDecks.get(i), playerAvatars.get(i))));
|
||||
}
|
||||
final MatchController mc = new MatchController(GameType.Vanguard, helper.getPlayerMap());
|
||||
final MatchController mc = new MatchController(GameType.Vanguard, helper);
|
||||
FThreads.invokeInEdtLater(new Runnable(){
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -14,6 +14,7 @@ import forge.deck.Deck;
|
||||
import forge.game.GameOutcome;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
@@ -114,50 +115,49 @@ public class ControlWinLose {
|
||||
private void executeAnte() {
|
||||
List<GameOutcome> games = match.getPlayedGames();
|
||||
|
||||
|
||||
GameOutcome lastGame = match.getLastGameOutcome();
|
||||
if (games.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player p : match.getCurrentGame().getRegisteredPlayers()) {
|
||||
if (!p.getLobbyPlayer().equals(lastGame.getWinner())) {
|
||||
continue;
|
||||
}
|
||||
// p is winner by this point
|
||||
|
||||
// remove all the lost cards from owners' decks
|
||||
List<CardPrinted> losses = new ArrayList<CardPrinted>();
|
||||
for (Player loser : match.getCurrentGame().getRegisteredPlayers()) {
|
||||
if (loser.equals(p)) {
|
||||
continue; // not a loser
|
||||
}
|
||||
|
||||
List<Card> compAntes = new ArrayList<Card>(loser.getCardsIn(ZoneType.Ante));
|
||||
Deck cDeck = match.getPlayersDeck(loser.getLobbyPlayer());
|
||||
Deck oDeck = match.getPlayersOriginalDeck(loser.getLobbyPlayer());
|
||||
|
||||
for (Card c : compAntes) {
|
||||
CardPrinted toRemove = CardDb.getCard(c);
|
||||
cDeck.getMain().remove(toRemove);
|
||||
if ( cDeck != oDeck )
|
||||
oDeck.getMain().remove(toRemove);
|
||||
losses.add(toRemove);
|
||||
}
|
||||
// remove all the lost cards from owners' decks
|
||||
List<CardPrinted> losses = new ArrayList<CardPrinted>();
|
||||
int cntPlayers = match.getPlayers().size();
|
||||
for (int i = 0; i < cntPlayers; i++ ) {
|
||||
Player fromGame = match.getCurrentGame().getRegisteredPlayers().get(i);
|
||||
if( !fromGame.hasLost()) continue; // not a loser
|
||||
|
||||
|
||||
List<Card> compAntes = new ArrayList<Card>(fromGame.getCardsIn(ZoneType.Ante));
|
||||
PlayerStartConditions psc = match.getPlayers().get(i).getValue();
|
||||
Deck cDeck = psc.getCurrentDeck();
|
||||
Deck oDeck = psc.getOriginalDeck();
|
||||
|
||||
for (Card c : compAntes) {
|
||||
CardPrinted toRemove = CardDb.getCard(c);
|
||||
cDeck.getMain().remove(toRemove);
|
||||
if ( cDeck != oDeck )
|
||||
oDeck.getMain().remove(toRemove);
|
||||
losses.add(toRemove);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < cntPlayers; i++ ) {
|
||||
Player fromGame = match.getCurrentGame().getRegisteredPlayers().get(i);
|
||||
if( !fromGame.hasWon()) continue; // not a loser
|
||||
|
||||
// offer to winner, if he is local human
|
||||
if (p.getLobbyPlayer().getType() == PlayerType.HUMAN) {
|
||||
if (fromGame.getLobbyPlayer().getType() == PlayerType.HUMAN) {
|
||||
List<CardPrinted> chosen = GuiChoose.noneOrMany("Select cards to add to your deck", losses);
|
||||
if (null != chosen) {
|
||||
Deck d = match.getPlayersDeck(p.getLobbyPlayer());
|
||||
PlayerStartConditions psc = match.getPlayers().get(i).getValue();
|
||||
Deck cDeck = psc.getCurrentDeck();
|
||||
//Deck oDeck = psc.getOriginalDeck();
|
||||
for (CardPrinted c : chosen) {
|
||||
d.getMain().add(c);
|
||||
cDeck.getMain().add(c);
|
||||
//oDeck.getMain().add(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break; // expect no other winners
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ public enum CDock implements ICDoc {
|
||||
* View deck list.
|
||||
*/
|
||||
private void viewDeckList() {
|
||||
showDeck(player.getGame().getMatch().getPlayersDeck(player.getLobbyPlayer()));
|
||||
showDeck(player.getGame().getMatch().getPlayers().get(0).getValue().getCurrentDeck());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -227,7 +227,7 @@ public class FDeckChooser extends JPanel {
|
||||
deck = DeckgenUtil.getConstructedDeck(selection);
|
||||
}
|
||||
|
||||
return new PlayerStartConditions(deck);
|
||||
return PlayerStartConditions.fromDeck(deck);
|
||||
}
|
||||
|
||||
private PlayerType getPlayerType() {
|
||||
|
||||
Reference in New Issue
Block a user