mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Allies list added to player, all relations (like isOpponent) will be based on it
This commit is contained in:
@@ -22,6 +22,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
@@ -87,16 +88,16 @@ public class GameState {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
* @param players2
|
* @param players2.entrySet()
|
||||||
* @param match0
|
* @param match0
|
||||||
* @param input
|
* @param input
|
||||||
*/
|
*/
|
||||||
public GameState(Iterable<LobbyPlayer> players2, GameType t, MatchController match0) { /* no more zones to map here */
|
public GameState(Map<LobbyPlayer, PlayerStartConditions> players2, GameType t, MatchController match0) { /* no more zones to map here */
|
||||||
type = t;
|
type = t;
|
||||||
match = match0;
|
match = match0;
|
||||||
List<Player> players = new ArrayList<Player>();
|
List<Player> players = new ArrayList<Player>();
|
||||||
for (LobbyPlayer p : players2) {
|
for (Entry<LobbyPlayer, PlayerStartConditions> kv : players2.entrySet()) {
|
||||||
Player pl = p.getPlayer(this);
|
Player pl = kv.getKey().getPlayer(this);
|
||||||
players.add(pl);
|
players.add(pl);
|
||||||
ingamePlayers.add(pl);
|
ingamePlayers.add(pl);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public class MatchController {
|
|||||||
public void startRound() {
|
public void startRound() {
|
||||||
|
|
||||||
inputQueue = new InputQueue(this);
|
inputQueue = new InputQueue(this);
|
||||||
currentGame = new GameState(players.keySet(), gameType, this);
|
currentGame = new GameState(players, gameType, this);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
attachUiToMatch(this, FControl.SINGLETON_INSTANCE.getLobby().getGuiPlayer());
|
attachUiToMatch(this, FControl.SINGLETON_INSTANCE.getLobby().getGuiPlayer());
|
||||||
|
|||||||
@@ -61,4 +61,12 @@ public class MatchStartHelper {
|
|||||||
return players;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package forge.game;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
@@ -20,6 +22,7 @@ public class PlayerStartConditions {
|
|||||||
private Iterable<? extends IPaperCard> cardsInCommand = null;
|
private Iterable<? extends IPaperCard> cardsInCommand = null;
|
||||||
private Iterable<? extends IPaperCard> schemes = null;
|
private Iterable<? extends IPaperCard> schemes = null;
|
||||||
private Iterable<CardPrinted> planes = null;
|
private Iterable<CardPrinted> planes = null;
|
||||||
|
private List<LobbyPlayer> allies = new ArrayList<LobbyPlayer>();
|
||||||
|
|
||||||
public PlayerStartConditions(Deck deck0) {
|
public PlayerStartConditions(Deck deck0) {
|
||||||
originalDeck = deck0;
|
originalDeck = deck0;
|
||||||
@@ -82,6 +85,11 @@ public class PlayerStartConditions {
|
|||||||
this.cardsInCommand = function;
|
this.cardsInCommand = function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addAlly(LobbyPlayer ally) {
|
||||||
|
if(!allies.contains(ally))
|
||||||
|
allies.add(ally);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the schemes
|
* @return the schemes
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
@@ -54,6 +53,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.card.spellability.Target;
|
import forge.card.spellability.Target;
|
||||||
import forge.card.staticability.StaticAbility;
|
import forge.card.staticability.StaticAbility;
|
||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
|
import forge.control.FControl;
|
||||||
import forge.game.GameActionUtil;
|
import forge.game.GameActionUtil;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
@@ -163,6 +163,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
private PlayerStatistics stats = new PlayerStatistics();
|
private PlayerStatistics stats = new PlayerStatistics();
|
||||||
protected PlayerController controller;
|
protected PlayerController controller;
|
||||||
private final LobbyPlayer lobbyPlayer;
|
private final LobbyPlayer lobbyPlayer;
|
||||||
|
private final List<LobbyPlayer> allies = new ArrayList<LobbyPlayer>();
|
||||||
|
|
||||||
private Card activeScheme = null;
|
private Card activeScheme = null;
|
||||||
|
|
||||||
@@ -214,7 +215,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
public boolean isHuman() { return getType() == PlayerType.HUMAN; }
|
public boolean isHuman() { return getType() == PlayerType.HUMAN; }
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public boolean isComputer() { return getType() == PlayerType.COMPUTER; }
|
public boolean isComputer() { return getType() == PlayerType.COMPUTER; }
|
||||||
public PlayerType getType() {
|
private PlayerType getType() {
|
||||||
return getLobbyPlayer().getType();
|
return getLobbyPlayer().getType();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,18 +265,11 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* @return a {@link forge.game.player.Player} object.
|
* @return a {@link forge.game.player.Player} object.
|
||||||
*/
|
*/
|
||||||
public final Player getOpponent() {
|
public final Player getOpponent() {
|
||||||
Player otherType = null;
|
|
||||||
Player justAnyone = null;
|
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p == this) {
|
if (p == this || allies.contains(p.getLobbyPlayer())) { continue; }
|
||||||
continue;
|
return p;
|
||||||
}
|
}
|
||||||
justAnyone = p;
|
throw new IllegalStateException("No opponents left ingame for " + this);
|
||||||
if (otherType == null && p.getType() != this.getType()) {
|
|
||||||
otherType = p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return otherType != null ? otherType : justAnyone;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -287,9 +281,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
public final List<Player> getOpponents() {
|
public final List<Player> getOpponents() {
|
||||||
List<Player> result = new ArrayList<Player>();
|
List<Player> result = new ArrayList<Player>();
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p == this || p.getType() == this.getType()) {
|
if (p == this || allies.contains(p.getLobbyPlayer())) { continue; }
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result.add(p);
|
result.add(p);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -303,9 +295,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
public final List<Player> getAllies() {
|
public final List<Player> getAllies() {
|
||||||
List<Player> result = new ArrayList<Player>();
|
List<Player> result = new ArrayList<Player>();
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p == this || p.getType() != this.getType()) {
|
if( allies.contains(p.getLobbyPlayer()))
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result.add(p);
|
result.add(p);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -1814,7 +1804,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dev Mode
|
// 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2703,13 +2694,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static Function<Player, PlayerType> FN_GET_TYPE = new Function<Player, PlayerType>() {
|
|
||||||
@Override
|
|
||||||
public PlayerType apply(Player input) {
|
|
||||||
return input.getType();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public static Function<Player, String> FN_GET_NAME = new Function<Player, String>() {
|
public static Function<Player, String> FN_GET_NAME = new Function<Player, String>() {
|
||||||
@Override
|
@Override
|
||||||
public String apply(Player input) {
|
public String apply(Player input) {
|
||||||
@@ -2920,11 +2904,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean isOpponentOf(Player other) {
|
public boolean isOpponentOf(Player other) {
|
||||||
if (other.equals(getOpponent())) {
|
return other != this && !allies.contains(other.getLobbyPlayer());
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return other.getType() != this.getType();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -221,18 +221,21 @@ public enum CSubmenuArchenemy implements ICDoc {
|
|||||||
|
|
||||||
Lobby lobby = Singletons.getControl().getLobby();
|
Lobby lobby = Singletons.getControl().getLobby();
|
||||||
MatchStartHelper helper = new MatchStartHelper();
|
MatchStartHelper helper = new MatchStartHelper();
|
||||||
|
List<LobbyPlayer> allies = new ArrayList<LobbyPlayer>();
|
||||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
for (int i = 0; i < view.getNumPlayers(); i++) {
|
||||||
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();
|
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
|
LobbyPlayer player = lobby.getGuiPlayer();
|
||||||
helper.addArchenemy(player, playerDecks.get(i), schemes);
|
helper.addArchenemy(player, playerDecks.get(i), schemes);
|
||||||
helper.getPlayerMap().get(player).setStartingLife(10 + (10 * (view.getNumPlayers() - 1)));
|
helper.getPlayerMap().get(player).setStartingLife(10 + (10 * (view.getNumPlayers() - 1)));
|
||||||
} else {
|
} else {
|
||||||
|
LobbyPlayer player = lobby.getAiPlayer();
|
||||||
|
allies.add(player);
|
||||||
helper.addPlayer(player, playerDecks.get(i));
|
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());
|
final MatchController mc = new MatchController(GameType.Archenemy, helper.getPlayerMap());
|
||||||
FThreads.invokeInEdtLater(new Runnable(){
|
FThreads.invokeInEdtLater(new Runnable(){
|
||||||
|
|||||||
Reference in New Issue
Block a user