From 13dc9fedd95ca18d29d97d3b1bdf8e62e922664e Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 20 May 2013 20:49:33 +0000 Subject: [PATCH] Allies list added to player, all relations (like isOpponent) will be based on it --- src/main/java/forge/game/GameState.java | 9 ++-- src/main/java/forge/game/MatchController.java | 2 +- .../java/forge/game/MatchStartHelper.java | 8 ++++ .../forge/game/PlayerStartConditions.java | 8 ++++ src/main/java/forge/game/player/Player.java | 44 +++++-------------- .../gui/home/variant/CSubmenuArchenemy.java | 11 +++-- 6 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java index 69076cd2fae..dc76650c27f 100644 --- a/src/main/java/forge/game/GameState.java +++ b/src/main/java/forge/game/GameState.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.TreeMap; import com.google.common.eventbus.EventBus; @@ -87,16 +88,16 @@ public class GameState { /** * Constructor. - * @param players2 + * @param players2.entrySet() * @param match0 * @param input */ - public GameState(Iterable players2, GameType t, MatchController match0) { /* no more zones to map here */ + public GameState(Map players2, GameType t, MatchController match0) { /* no more zones to map here */ type = t; match = match0; List players = new ArrayList(); - for (LobbyPlayer p : players2) { - Player pl = p.getPlayer(this); + for (Entry kv : players2.entrySet()) { + Player pl = kv.getKey().getPlayer(this); players.add(pl); ingamePlayers.add(pl); } diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java index d7e799b61aa..191f6237a6c 100644 --- a/src/main/java/forge/game/MatchController.java +++ b/src/main/java/forge/game/MatchController.java @@ -139,7 +139,7 @@ public class MatchController { public void startRound() { inputQueue = new InputQueue(this); - currentGame = new GameState(players.keySet(), gameType, this); + currentGame = new GameState(players, gameType, this); try { attachUiToMatch(this, FControl.SINGLETON_INSTANCE.getLobby().getGuiPlayer()); diff --git a/src/main/java/forge/game/MatchStartHelper.java b/src/main/java/forge/game/MatchStartHelper.java index e9b75c6d4ca..8aabe4c1a46 100644 --- a/src/main/java/forge/game/MatchStartHelper.java +++ b/src/main/java/forge/game/MatchStartHelper.java @@ -60,5 +60,13 @@ public class MatchStartHelper { 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); + } } diff --git a/src/main/java/forge/game/PlayerStartConditions.java b/src/main/java/forge/game/PlayerStartConditions.java index 5b8685b1cb5..caa330b761c 100644 --- a/src/main/java/forge/game/PlayerStartConditions.java +++ b/src/main/java/forge/game/PlayerStartConditions.java @@ -2,8 +2,10 @@ package forge.game; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import forge.deck.Deck; +import forge.game.player.LobbyPlayer; import forge.game.player.Player; import forge.item.CardPrinted; import forge.item.IPaperCard; @@ -20,6 +22,7 @@ public class PlayerStartConditions { private Iterable cardsInCommand = null; private Iterable schemes = null; private Iterable planes = null; + private List allies = new ArrayList(); public PlayerStartConditions(Deck deck0) { originalDeck = deck0; @@ -82,6 +85,11 @@ public class PlayerStartConditions { this.cardsInCommand = function; } + public void addAlly(LobbyPlayer ally) { + if(!allies.contains(ally)) + allies.add(ally); + } + /** * @return the schemes */ diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index ae625bc1998..ae0454c8002 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Random; - import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; @@ -54,6 +53,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.card.staticability.StaticAbility; import forge.card.trigger.TriggerType; +import forge.control.FControl; import forge.game.GameActionUtil; import forge.game.GameState; import forge.game.GlobalRuleChange; @@ -163,6 +163,7 @@ public class Player extends GameEntity implements Comparable { private PlayerStatistics stats = new PlayerStatistics(); protected PlayerController controller; private final LobbyPlayer lobbyPlayer; + private final List allies = new ArrayList(); private Card activeScheme = null; @@ -214,7 +215,7 @@ public class Player extends GameEntity implements Comparable { public boolean isHuman() { return getType() == PlayerType.HUMAN; } @Deprecated public boolean isComputer() { return getType() == PlayerType.COMPUTER; } - public PlayerType getType() { + private PlayerType getType() { return getLobbyPlayer().getType(); } @@ -264,18 +265,11 @@ public class Player extends GameEntity implements Comparable { * @return a {@link forge.game.player.Player} object. */ public final Player getOpponent() { - Player otherType = null; - Player justAnyone = null; for (Player p : game.getPlayers()) { - if (p == this) { - continue; - } - justAnyone = p; - if (otherType == null && p.getType() != this.getType()) { - otherType = p; - } + if (p == this || allies.contains(p.getLobbyPlayer())) { continue; } + return p; } - return otherType != null ? otherType : justAnyone; + throw new IllegalStateException("No opponents left ingame for " + this); } /** @@ -287,9 +281,7 @@ public class Player extends GameEntity implements Comparable { public final List getOpponents() { List result = new ArrayList(); for (Player p : game.getPlayers()) { - if (p == this || p.getType() == this.getType()) { - continue; - } + if (p == this || allies.contains(p.getLobbyPlayer())) { continue; } result.add(p); } return result; @@ -303,10 +295,8 @@ public class Player extends GameEntity implements Comparable { public final List getAllies() { List result = new ArrayList(); for (Player p : game.getPlayers()) { - if (p == this || p.getType() != this.getType()) { - continue; - } - result.add(p); + if( allies.contains(p.getLobbyPlayer())) + result.add(p); } return result; } @@ -1814,7 +1804,8 @@ public class Player extends GameEntity implements Comparable { } // Dev Mode - if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_UNLIMITED_LAND) && this.getType() == PlayerType.HUMAN && Preferences.DEV_MODE) { + if (this == FControl.SINGLETON_INSTANCE.getPlayer() && Preferences.DEV_MODE && + Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_UNLIMITED_LAND)) { return true; } @@ -2703,13 +2694,6 @@ public class Player extends GameEntity implements Comparable { } }; - public static Function FN_GET_TYPE = new Function() { - @Override - public PlayerType apply(Player input) { - return input.getType(); - } - }; - public static Function FN_GET_NAME = new Function() { @Override public String apply(Player input) { @@ -2920,11 +2904,7 @@ public class Player extends GameEntity implements Comparable { * @return */ public boolean isOpponentOf(Player other) { - if (other.equals(getOpponent())) { - return true; - } - - return other.getType() != this.getType(); + return other != this && !allies.contains(other.getLobbyPlayer()); } diff --git a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java index 2d50d772dc7..30c87ef817f 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java @@ -221,18 +221,21 @@ public enum CSubmenuArchenemy implements ICDoc { Lobby lobby = Singletons.getControl().getLobby(); MatchStartHelper helper = new MatchStartHelper(); + List allies = new ArrayList(); for (int i = 0; i < view.getNumPlayers(); i++) { - LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer(); - if (i == 0) { - + LobbyPlayer player = lobby.getGuiPlayer(); helper.addArchenemy(player, playerDecks.get(i), schemes); helper.getPlayerMap().get(player).setStartingLife(10 + (10 * (view.getNumPlayers() - 1))); } else { - + LobbyPlayer player = lobby.getAiPlayer(); + allies.add(player); helper.addPlayer(player, playerDecks.get(i)); } } + 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()); FThreads.invokeInEdtLater(new Runnable(){