mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Detach network code from game and gui.
This commit is contained in:
35
.gitattributes
vendored
35
.gitattributes
vendored
@@ -147,6 +147,7 @@ forge-core/.settings/org.eclipse.jdt.core.prefs -text
|
|||||||
forge-core/.settings/org.eclipse.m2e.core.prefs -text
|
forge-core/.settings/org.eclipse.m2e.core.prefs -text
|
||||||
forge-core/pom.xml -text
|
forge-core/pom.xml -text
|
||||||
forge-core/src/main/java/forge/CardStorageReader.java -text
|
forge-core/src/main/java/forge/CardStorageReader.java -text
|
||||||
|
forge-core/src/main/java/forge/LobbyPlayer.java -text
|
||||||
forge-core/src/main/java/forge/StaticData.java -text
|
forge-core/src/main/java/forge/StaticData.java -text
|
||||||
forge-core/src/main/java/forge/card/BoosterGenerator.java svneol=native#text/plain
|
forge-core/src/main/java/forge/card/BoosterGenerator.java svneol=native#text/plain
|
||||||
forge-core/src/main/java/forge/card/BoosterSlots.java -text
|
forge-core/src/main/java/forge/card/BoosterSlots.java -text
|
||||||
@@ -515,6 +516,7 @@ forge-game/src/main/java/forge/game/phase/Untap.java -text
|
|||||||
forge-game/src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/game/player/GameLossReason.java -text
|
forge-game/src/main/java/forge/game/player/GameLossReason.java -text
|
||||||
|
forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java -text
|
||||||
forge-game/src/main/java/forge/game/player/LobbyPlayer.java -text
|
forge-game/src/main/java/forge/game/player/LobbyPlayer.java -text
|
||||||
forge-game/src/main/java/forge/game/player/Player.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/player/Player.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/game/player/PlayerActionConfirmMode.java -text
|
forge-game/src/main/java/forge/game/player/PlayerActionConfirmMode.java -text
|
||||||
@@ -996,6 +998,7 @@ forge-gui-desktop/src/main/java/forge/view/FTitleBarBase.java -text
|
|||||||
forge-gui-desktop/src/main/java/forge/view/FView.java -text
|
forge-gui-desktop/src/main/java/forge/view/FView.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/view/ITitleBarOwner.java -text
|
forge-gui-desktop/src/main/java/forge/view/ITitleBarOwner.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/view/Main.java -text
|
forge-gui-desktop/src/main/java/forge/view/Main.java -text
|
||||||
|
forge-gui-desktop/src/main/java/forge/view/SimulateMatch.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/view/SplashFrame.java -text
|
forge-gui-desktop/src/main/java/forge/view/SplashFrame.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/view/arcane/CardArea.java -text
|
forge-gui-desktop/src/main/java/forge/view/arcane/CardArea.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java -text
|
forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java -text
|
||||||
@@ -16380,22 +16383,6 @@ forge-gui/src/main/java/forge/model/MetaSet.java -text
|
|||||||
forge-gui/src/main/java/forge/model/MultipleForgeJarsFoundError.java -text
|
forge-gui/src/main/java/forge/model/MultipleForgeJarsFoundError.java -text
|
||||||
forge-gui/src/main/java/forge/model/UnOpenedMeta.java -text
|
forge-gui/src/main/java/forge/model/UnOpenedMeta.java -text
|
||||||
forge-gui/src/main/java/forge/model/package-info.java svneol=native#text/plain
|
forge-gui/src/main/java/forge/model/package-info.java svneol=native#text/plain
|
||||||
forge-gui/src/main/java/forge/net/FServer.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/IClientSocket.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/IConnectionObserver.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/Lobby.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/LobbyPlayerRemote.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/NetServer.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/INetClient.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/InvalidFieldInPacketException.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/NetClient.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/package-info.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/state/ConnectedClientState.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/state/IClientState.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/state/InLobbyClientState.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/state/UnauthorizedClientState.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/client/state/package-info.java -text
|
|
||||||
forge-gui/src/main/java/forge/net/package-info.java -text
|
|
||||||
forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text
|
forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text
|
||||||
forge-gui/src/main/java/forge/player/HumanCostDecision.java -text
|
forge-gui/src/main/java/forge/player/HumanCostDecision.java -text
|
||||||
forge-gui/src/main/java/forge/player/HumanPlay.java -text
|
forge-gui/src/main/java/forge/player/HumanPlay.java -text
|
||||||
@@ -16497,6 +16484,22 @@ forge-net/.settings/org.eclipse.core.resources.prefs -text
|
|||||||
forge-net/.settings/org.eclipse.jdt.core.prefs -text
|
forge-net/.settings/org.eclipse.jdt.core.prefs -text
|
||||||
forge-net/.settings/org.eclipse.m2e.core.prefs -text
|
forge-net/.settings/org.eclipse.m2e.core.prefs -text
|
||||||
forge-net/pom.xml -text
|
forge-net/pom.xml -text
|
||||||
|
forge-net/src/main/java/forge/net/FServer.java -text
|
||||||
|
forge-net/src/main/java/forge/net/IClientSocket.java -text
|
||||||
|
forge-net/src/main/java/forge/net/IConnectionObserver.java -text
|
||||||
|
forge-net/src/main/java/forge/net/Lobby.java -text
|
||||||
|
forge-net/src/main/java/forge/net/LobbyPlayerRemote.java -text
|
||||||
|
forge-net/src/main/java/forge/net/NetServer.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/INetClient.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/InvalidFieldInPacketException.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/NetClient.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/package-info.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/state/ConnectedClientState.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/state/IClientState.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/state/InLobbyClientState.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/state/UnauthorizedClientState.java -text
|
||||||
|
forge-net/src/main/java/forge/net/client/state/package-info.java -text
|
||||||
|
forge-net/src/main/java/forge/net/package-info.java -text
|
||||||
forge-net/src/main/java/forge/net/protocol/ClientProtocol.java -text
|
forge-net/src/main/java/forge/net/protocol/ClientProtocol.java -text
|
||||||
forge-net/src/main/java/forge/net/protocol/ClientProtocolJson.java -text
|
forge-net/src/main/java/forge/net/protocol/ClientProtocolJson.java -text
|
||||||
forge-net/src/main/java/forge/net/protocol/package-info.java -text
|
forge-net/src/main/java/forge/net/protocol/package-info.java -text
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
package forge.ai;
|
package forge.ai;
|
||||||
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.util.Aggregates;
|
import forge.util.Aggregates;
|
||||||
import forge.util.FileUtil;
|
import forge.util.FileUtil;
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package forge.ai;
|
package forge.ai;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.IGameEntitiesFactory;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
public class LobbyPlayerAi extends LobbyPlayer {
|
public class LobbyPlayerAi extends LobbyPlayer implements IGameEntitiesFactory {
|
||||||
public LobbyPlayerAi(String name) {
|
public LobbyPlayerAi(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
@@ -34,11 +35,6 @@ public class LobbyPlayerAi extends LobbyPlayer {
|
|||||||
this.rotateProfileEachGame = rotateProfileEachGame;
|
this.rotateProfileEachGame = rotateProfileEachGame;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected PlayerType getType() {
|
|
||||||
return PlayerType.COMPUTER;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerControllerAi createControllerFor(Player ai) {
|
public PlayerControllerAi createControllerFor(Player ai) {
|
||||||
PlayerControllerAi result = new PlayerControllerAi(ai.getGame(), ai, this);
|
PlayerControllerAi result = new PlayerControllerAi(ai.getGame(), ai, this);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.google.common.collect.Iterables;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.ai.ability.ChangeZoneAi;
|
import forge.ai.ability.ChangeZoneAi;
|
||||||
import forge.ai.ability.CharmAi;
|
import forge.ai.ability.CharmAi;
|
||||||
import forge.ai.ability.ProtectAi;
|
import forge.ai.ability.ProtectAi;
|
||||||
@@ -31,7 +32,6 @@ import forge.game.mana.Mana;
|
|||||||
import forge.game.mana.ManaCostBeingPaid;
|
import forge.game.mana.ManaCostBeingPaid;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerActionConfirmMode;
|
import forge.game.player.PlayerActionConfirmMode;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
|
|||||||
63
forge-core/src/main/java/forge/LobbyPlayer.java
Normal file
63
forge-core/src/main/java/forge/LobbyPlayer.java
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
package forge;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This means a player's part unchanged for all games.
|
||||||
|
*
|
||||||
|
* May store player's assets here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class LobbyPlayer {
|
||||||
|
|
||||||
|
protected final String name;
|
||||||
|
private int avatarIndex = -1;
|
||||||
|
|
||||||
|
|
||||||
|
public LobbyPlayer(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + name.hashCode();
|
||||||
|
result = prime * result + getClass().hashCode();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (obj == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getClass() != obj.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
LobbyPlayer other = (LobbyPlayer) obj;
|
||||||
|
if (name == null) {
|
||||||
|
if (other.name != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (!name.equals(other.name)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAvatarIndex() {
|
||||||
|
return avatarIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvatarIndex(int avatarIndex) {
|
||||||
|
this.avatarIndex = avatarIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void hear(LobbyPlayer player, String message);
|
||||||
|
}
|
||||||
@@ -47,6 +47,7 @@ import forge.game.phase.PhaseHandler;
|
|||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.phase.Untap;
|
import forge.game.phase.Untap;
|
||||||
import forge.game.phase.Upkeep;
|
import forge.game.phase.Upkeep;
|
||||||
|
import forge.game.player.IGameEntitiesFactory;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.game.replacement.ReplacementHandler;
|
import forge.game.replacement.ReplacementHandler;
|
||||||
@@ -110,7 +111,8 @@ public class Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (RegisteredPlayer psc : players0) {
|
for (RegisteredPlayer psc : players0) {
|
||||||
Player pl = psc.getPlayer().createIngamePlayer(this);
|
IGameEntitiesFactory factory = (IGameEntitiesFactory)psc.getPlayer();
|
||||||
|
Player pl = factory.createIngamePlayer(this);
|
||||||
players.add(pl);
|
players.add(pl);
|
||||||
ingamePlayers.add(pl);
|
ingamePlayers.add(pl);
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package forge.game;
|
package forge.game;
|
||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.event.*;
|
import forge.game.event.*;
|
||||||
import forge.game.event.GameEventCardDamaged.DamageType;
|
import forge.game.event.GameEventCardDamaged.DamageType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.TargetChoices;
|
import forge.game.spellability.TargetChoices;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|||||||
@@ -17,11 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
package forge.game;
|
package forge.game;
|
||||||
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerOutcome;
|
import forge.game.player.PlayerOutcome;
|
||||||
import forge.game.player.PlayerStatistics;
|
import forge.game.player.PlayerStatistics;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
package forge.game;
|
package forge.game;
|
||||||
|
|
||||||
import com.google.common.collect.*;
|
import com.google.common.collect.*;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckSection;
|
import forge.deck.DeckSection;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.event.GameEventAnteCardsSelected;
|
import forge.game.event.GameEventAnteCardsSelected;
|
||||||
import forge.game.event.GameEventGameFinished;
|
import forge.game.event.GameEventGameFinished;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.game.trigger.Trigger;
|
import forge.game.trigger.Trigger;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package forge.game.event;
|
package forge.game.event;
|
||||||
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
|
||||||
public class GameEventPlayerControl extends GameEvent {
|
public class GameEventPlayerControl extends GameEvent {
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package forge.game.player;
|
||||||
|
|
||||||
|
import forge.game.Game;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public interface IGameEntitiesFactory
|
||||||
|
{
|
||||||
|
PlayerController createControllerFor(Player p);
|
||||||
|
Player createIngamePlayer(Game game);
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ import com.google.common.base.Predicate;
|
|||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.card.MagicColor;
|
import forge.card.MagicColor;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.game.*;
|
import forge.game.*;
|
||||||
@@ -2724,7 +2725,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
|
|
||||||
if (mindSlaveMaster != null) {
|
if (mindSlaveMaster != null) {
|
||||||
LobbyPlayer oldLobbyPlayer = getLobbyPlayer();
|
LobbyPlayer oldLobbyPlayer = getLobbyPlayer();
|
||||||
controller = mindSlaveMaster.getLobbyPlayer().createControllerFor(this);
|
IGameEntitiesFactory master = (IGameEntitiesFactory)mindSlaveMaster.getLobbyPlayer();
|
||||||
|
controller = master.createControllerFor(this);
|
||||||
game.fireEvent(new GameEventPlayerControl(this, oldLobbyPlayer, getLobbyPlayer()));
|
game.fireEvent(new GameEventPlayerControl(this, oldLobbyPlayer, getLobbyPlayer()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package forge.game.player;
|
|||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.card.ColorSet;
|
import forge.card.ColorSet;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.card.mana.ManaCostShard;
|
import forge.card.mana.ManaCostShard;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package forge.game.player;
|
package forge.game.player;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckSection;
|
import forge.deck.DeckSection;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ import forge.game.combat.Combat;
|
|||||||
import forge.game.event.GameEventTurnBegan;
|
import forge.game.event.GameEventTurnBegan;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
@@ -54,7 +53,6 @@ import forge.interfaces.IButton;
|
|||||||
import forge.interfaces.IGuiBase;
|
import forge.interfaces.IGuiBase;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.match.input.InputQueue;
|
import forge.match.input.InputQueue;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.screens.match.CMatchUI;
|
import forge.screens.match.CMatchUI;
|
||||||
import forge.screens.match.VMatchUI;
|
import forge.screens.match.VMatchUI;
|
||||||
import forge.screens.match.ViewWinLose;
|
import forge.screens.match.ViewWinLose;
|
||||||
@@ -202,7 +200,7 @@ public class GuiDesktop implements IGuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePlayerControl() {
|
public void updatePlayerControl() {
|
||||||
CMatchUI.SINGLETON_INSTANCE.initHandViews(FServer.getLobby().getGuiPlayer());
|
CMatchUI.SINGLETON_INSTANCE.initHandViews(getGuiPlayer());
|
||||||
SLayoutIO.loadLayout(null);
|
SLayoutIO.loadLayout(null);
|
||||||
VMatchUI.SINGLETON_INSTANCE.populate();
|
VMatchUI.SINGLETON_INSTANCE.populate();
|
||||||
for (VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) {
|
for (VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) {
|
||||||
@@ -415,4 +413,28 @@ public class GuiDesktop implements IGuiBase {
|
|||||||
public void browseToUrl(String url) throws Exception {
|
public void browseToUrl(String url) throws Exception {
|
||||||
Desktop.getDesktop().browse(new URI(url));
|
Desktop.getDesktop().browse(new URI(url));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer getGuiPlayer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return FControl.instance.getGuiPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer createAiPlayer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return FControl.instance.getAiPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer createAiPlayer(String name, int avatarIndex) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return FControl.instance.getAiPlayer(name, avatarIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer getQuestPlayer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return getGuiPlayer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.mortennobel.imagescaling.ResampleOp;
|
|||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
import forge.assets.ImageUtil;
|
import forge.assets.ImageUtil;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.IHasIcon;
|
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
import forge.toolbox.FSkin;
|
import forge.toolbox.FSkin;
|
||||||
@@ -103,11 +102,10 @@ public class ImageCache {
|
|||||||
* retrieve an icon from the cache. returns the current skin's ICO_UNKNOWN if the icon image is not found
|
* retrieve an icon from the cache. returns the current skin's ICO_UNKNOWN if the icon image is not found
|
||||||
* in the cache and cannot be loaded from disk.
|
* in the cache and cannot be loaded from disk.
|
||||||
*/
|
*/
|
||||||
public static SkinIcon getIcon(IHasIcon ihi) {
|
public static SkinIcon getIcon(String imageKey) {
|
||||||
String imageKey = ihi.getIconImageKey();
|
|
||||||
final BufferedImage i;
|
final BufferedImage i;
|
||||||
if (_missingIconKeys.contains(imageKey) ||
|
if (_missingIconKeys.contains(imageKey) ||
|
||||||
null == (i = scaleImage(ihi.getIconImageKey(), -1, -1, false))) {
|
null == (i = scaleImage(imageKey, -1, -1, false))) {
|
||||||
_missingIconKeys.add(imageKey);
|
_missingIconKeys.add(imageKey);
|
||||||
return FSkin.getIcon(FSkinProp.ICO_UNKNOWN);
|
return FSkin.getIcon(FSkinProp.ICO_UNKNOWN);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,11 @@
|
|||||||
package forge.control;
|
package forge.control;
|
||||||
|
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.ImageCache;
|
import forge.ImageCache;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
|
import forge.ai.AiProfileUtil;
|
||||||
import forge.ai.LobbyPlayerAi;
|
import forge.ai.LobbyPlayerAi;
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
import forge.control.KeyboardShortcuts.Shortcut;
|
import forge.control.KeyboardShortcuts.Shortcut;
|
||||||
@@ -28,7 +31,6 @@ import forge.game.GameRules;
|
|||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.Match;
|
import forge.game.Match;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.gui.GuiDialog;
|
import forge.gui.GuiDialog;
|
||||||
@@ -39,7 +41,6 @@ import forge.player.LobbyPlayerHuman;
|
|||||||
import forge.match.input.InputQueue;
|
import forge.match.input.InputQueue;
|
||||||
import forge.menus.ForgeMenu;
|
import forge.menus.ForgeMenu;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
@@ -60,6 +61,9 @@ import forge.sound.SoundSystem;
|
|||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.FSkin;
|
import forge.toolbox.FSkin;
|
||||||
import forge.toolbox.special.PhaseIndicator;
|
import forge.toolbox.special.PhaseIndicator;
|
||||||
|
import forge.util.GuiDisplayUtil;
|
||||||
|
import forge.util.MyRandom;
|
||||||
|
import forge.util.NameGenerator;
|
||||||
import forge.view.FFrame;
|
import forge.view.FFrame;
|
||||||
import forge.view.FView;
|
import forge.view.FView;
|
||||||
|
|
||||||
@@ -348,13 +352,13 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
public Player getCurrentPlayer() {
|
public Player getCurrentPlayer() {
|
||||||
// try current priority
|
// try current priority
|
||||||
Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
|
Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
|
||||||
if (null != currentPriority && currentPriority.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (null != currentPriority && currentPriority.getLobbyPlayer() == getGuiPlayer()) {
|
||||||
return currentPriority;
|
return currentPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise find just any player, belonging to this lobbyplayer
|
// otherwise find just any player, belonging to this lobbyplayer
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (p.getLobbyPlayer() == getGuiPlayer()) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -384,7 +388,7 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
public final void stopGame() {
|
public final void stopGame() {
|
||||||
List<Player> pp = new ArrayList<Player>();
|
List<Player> pp = new ArrayList<Player>();
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getOriginalLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (p.getOriginalLobbyPlayer() == getGuiPlayer()) {
|
||||||
pp.add(p);
|
pp.add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -399,7 +403,7 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer();
|
Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer();
|
||||||
boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == FServer.getLobby().getGuiPlayer();
|
boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == getGuiPlayer();
|
||||||
|
|
||||||
if (hasHuman && humanHasPriority) {
|
if (hasHuman && humanHasPriority) {
|
||||||
game.getAction().checkGameOverCondition();
|
game.getAction().checkGameOverCondition();
|
||||||
@@ -462,7 +466,7 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
this.game = game0;
|
this.game = game0;
|
||||||
game.subscribeToEvents(Singletons.getControl().getSoundSystem());
|
game.subscribeToEvents(Singletons.getControl().getSoundSystem());
|
||||||
|
|
||||||
LobbyPlayer humanLobbyPlayer = FServer.getLobby().getGuiPlayer();
|
LobbyPlayer humanLobbyPlayer = getGuiPlayer();
|
||||||
// The UI controls should use these game data as models
|
// The UI controls should use these game data as models
|
||||||
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
|
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
|
||||||
CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer);
|
CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer);
|
||||||
@@ -483,7 +487,7 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
// Add playback controls to match if needed
|
// Add playback controls to match if needed
|
||||||
gameHasHumanPlayer = false;
|
gameHasHumanPlayer = false;
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getController().getLobbyPlayer() == FServer.getLobby().getGuiPlayer())
|
if (p.getController().getLobbyPlayer() == getGuiPlayer())
|
||||||
gameHasHumanPlayer = true;
|
gameHasHumanPlayer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -671,5 +675,39 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
|
|
||||||
//Singletons.getView().getViewMatch().setLayoutParams(prefs.getPref(FPref.UI_LAYOUT_PARAMS));
|
//Singletons.getView().getViewMatch().setLayoutParams(prefs.getPref(FPref.UI_LAYOUT_PARAMS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ai player creation, will stay here for a while
|
||||||
|
|
||||||
|
/** Returns a random name from the supplied list. */
|
||||||
|
public String getRandomName() {
|
||||||
|
String playerName = GuiDisplayUtil.getPlayerName();
|
||||||
|
String aiName = NameGenerator.getRandomName("Any", "Generic", playerName);
|
||||||
|
return aiName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final LobbyPlayer getAiPlayer() { return getAiPlayer(getRandomName()); }
|
||||||
|
public final LobbyPlayer getAiPlayer(String name) {
|
||||||
|
int avatarCount = GuiBase.getInterface().getAvatarCount();
|
||||||
|
return getAiPlayer(name, avatarCount == 0 ? 0 : MyRandom.getRandom().nextInt(avatarCount));
|
||||||
|
}
|
||||||
|
public final LobbyPlayer getAiPlayer(String name, int avatarIndex) {
|
||||||
|
LobbyPlayerAi player = new LobbyPlayerAi(name);
|
||||||
|
|
||||||
|
// TODO: implement specific AI profiles for quest mode.
|
||||||
|
String lastProfileChosen = FModel.getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE);
|
||||||
|
player.setRotateProfileEachGame(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_DUEL));
|
||||||
|
if(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_MATCH)) {
|
||||||
|
lastProfileChosen = AiProfileUtil.getRandomProfile();
|
||||||
|
System.out.println(String.format("AI profile %s was chosen for the lobby player %s.", lastProfileChosen, player.getName()));
|
||||||
|
}
|
||||||
|
player.setAiProfile(lastProfileChosen);
|
||||||
|
player.setAvatarIndex(avatarIndex);
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final LobbyPlayer guiPlayer = new LobbyPlayerHuman("Human");
|
||||||
|
public final LobbyPlayer getGuiPlayer() {
|
||||||
|
return guiPlayer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
package forge.gui;
|
package forge.gui;
|
||||||
|
|
||||||
import forge.control.ChatArea;
|
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.toolbox.*;
|
import forge.toolbox.*;
|
||||||
import forge.toolbox.FSkin.SkinnedPanel;
|
import forge.toolbox.FSkin.SkinnedPanel;
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
@@ -48,8 +45,7 @@ public enum FNetOverlay {
|
|||||||
if ( StringUtils.isBlank(message) )
|
if ( StringUtils.isBlank(message) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Lobby lobby = FServer.getLobby();
|
// lobby.speak(ChatArea.Room, lobby.getGuiPlayer(), message);
|
||||||
lobby.speak(ChatArea.Room, lobby.getGuiPlayer(), message);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package forge.screens.home.gauntlet;
|
package forge.screens.home.gauntlet;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
@@ -9,10 +9,8 @@ import forge.gauntlet.GauntletData;
|
|||||||
import forge.gauntlet.GauntletIO;
|
import forge.gauntlet.GauntletIO;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.interfaces.IGuiBase;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@@ -104,12 +102,12 @@ public enum CSubmenuGauntletContests implements ICDoc {
|
|||||||
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||||
|
|
||||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||||
Lobby lobby = FServer.getLobby();
|
|
||||||
|
|
||||||
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
|
IGuiBase fc = GuiBase.getInterface();
|
||||||
starter.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer()));
|
||||||
|
starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer()));
|
||||||
|
|
||||||
Singletons.getControl().startMatch(GameType.Gauntlet, starter);
|
fc.startMatch(GameType.Gauntlet, starter);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package forge.screens.home.gauntlet;
|
package forge.screens.home.gauntlet;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
@@ -9,10 +9,8 @@ import forge.gauntlet.GauntletData;
|
|||||||
import forge.gauntlet.GauntletIO;
|
import forge.gauntlet.GauntletIO;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.interfaces.IGuiBase;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@@ -106,11 +104,11 @@ public enum CSubmenuGauntletLoad implements ICDoc {
|
|||||||
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||||
|
|
||||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||||
Lobby lobby = FServer.getLobby();
|
IGuiBase fc = GuiBase.getInterface();
|
||||||
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
|
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer()));
|
||||||
starter.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer()));
|
||||||
|
|
||||||
Singletons.getControl().startMatch(GameType.Gauntlet, starter);
|
fc.startMatch(GameType.Gauntlet, starter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package forge.screens.home.gauntlet;
|
|||||||
|
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
|
import forge.control.FControl;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckgenUtil;
|
import forge.deck.DeckgenUtil;
|
||||||
import forge.deck.DeckgenUtil.DeckTypes;
|
import forge.deck.DeckgenUtil.DeckTypes;
|
||||||
@@ -12,9 +13,6 @@ import forge.gauntlet.GauntletIO;
|
|||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
@@ -140,11 +138,11 @@ public enum CSubmenuGauntletQuick implements ICDoc {
|
|||||||
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
final Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||||
|
|
||||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||||
Lobby lobby = FServer.getLobby();
|
FControl fc = Singletons.getControl();
|
||||||
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
|
starter.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer()));
|
||||||
starter.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
starter.add(new RegisteredPlayer(aiDeck).setPlayer(fc.getAiPlayer()));
|
||||||
|
|
||||||
Singletons.getControl().startMatch(GameType.Gauntlet, starter);
|
fc.startMatch(GameType.Gauntlet, starter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class PnlEvent extends JPanel {
|
|||||||
public PnlEvent(final QuestEvent e0) {
|
public PnlEvent(final QuestEvent e0) {
|
||||||
super();
|
super();
|
||||||
this.event = e0;
|
this.event = e0;
|
||||||
img = ImageCache.getIcon(e0);
|
img = ImageCache.getIcon(e0.getIconImageKey());
|
||||||
|
|
||||||
// Title and description
|
// Title and description
|
||||||
this.rad = new FRadioButton(event.getTitle() + " (" + event.getDifficulty().getTitle() + ")");
|
this.rad = new FRadioButton(event.getTitle() + " (" + event.getDifficulty().getTitle() + ")");
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
package forge.screens.home.quest;
|
package forge.screens.home.quest;
|
||||||
|
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.CardEdition;
|
import forge.card.CardEdition;
|
||||||
|
import forge.control.FControl;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameRules;
|
import forge.game.GameRules;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.Match;
|
import forge.game.Match;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.framework.FScreen;
|
import forge.gui.framework.FScreen;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.quest.*;
|
import forge.quest.*;
|
||||||
import forge.quest.bazaar.QuestItemType;
|
import forge.quest.bazaar.QuestItemType;
|
||||||
@@ -24,6 +24,7 @@ import forge.quest.data.QuestAssets;
|
|||||||
import forge.quest.data.QuestPreferences.QPref;
|
import forge.quest.data.QuestPreferences.QPref;
|
||||||
import forge.screens.deckeditor.CDeckEditorUI;
|
import forge.screens.deckeditor.CDeckEditorUI;
|
||||||
import forge.screens.deckeditor.controllers.CEditorQuestCardShop;
|
import forge.screens.deckeditor.controllers.CEditorQuestCardShop;
|
||||||
|
import forge.screens.match.CMatchUI;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.FSkin;
|
import forge.toolbox.FSkin;
|
||||||
import forge.toolbox.FSkin.SkinnedLabel;
|
import forge.toolbox.FSkin.SkinnedLabel;
|
||||||
@@ -441,11 +442,10 @@ public class SSubmenuQuestUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||||
Lobby lobby = FServer.getLobby();
|
starter.add(humanStart.setPlayer(GuiBase.getInterface().getQuestPlayer()));
|
||||||
starter.add(humanStart.setPlayer(lobby.getQuestPlayer()));
|
|
||||||
|
|
||||||
LobbyPlayer aiPlayer = FServer.getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent());
|
LobbyPlayer aiPlayer = FControl.instance.getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent());
|
||||||
aiPlayer.setIconImageKey(event.getIconImageKey());
|
CMatchUI.SINGLETON_INSTANCE.avatarImages.put(aiPlayer, event.getIconImageKey());
|
||||||
starter.add(aiStart.setPlayer(aiPlayer));
|
starter.add(aiStart.setPlayer(aiPlayer));
|
||||||
|
|
||||||
boolean useRandomFoil = FModel.getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL);
|
boolean useRandomFoil = FModel.getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package forge.screens.home.sanctioned;
|
package forge.screens.home.sanctioned;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
@@ -8,17 +10,15 @@ import forge.deck.DeckSection;
|
|||||||
import forge.deck.DeckType;
|
import forge.deck.DeckType;
|
||||||
import forge.deck.DeckgenUtil;
|
import forge.deck.DeckgenUtil;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.gui.GuiDialog;
|
import forge.gui.GuiDialog;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.interfaces.IGuiBase;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.menus.IMenuProvider;
|
import forge.menus.IMenuProvider;
|
||||||
import forge.menus.MenuUtil;
|
import forge.menus.MenuUtil;
|
||||||
import forge.model.CardCollections;
|
import forge.model.CardCollections;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
@@ -208,12 +208,13 @@ public enum CSubmenuConstructed implements ICDoc, IMenuProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Lobby lobby = FServer.getLobby();
|
IGuiBase fc = GuiBase.getInterface();
|
||||||
List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> players = new ArrayList<RegisteredPlayer>();
|
||||||
for (final int i : view.getParticipants()) {
|
for (final int i : view.getParticipants()) {
|
||||||
String name = view.getPlayerName(i);
|
String name = view.getPlayerName(i);
|
||||||
LobbyPlayer lobbyPlayer = view.isPlayerAI(i) ? lobby.getAiPlayer(name,
|
LobbyPlayer lobbyPlayer = view.isPlayerAI(i)
|
||||||
view.getPlayerAvatar(i)) : lobby.getGuiPlayer();
|
? fc.createAiPlayer(name, view.getPlayerAvatar(i))
|
||||||
|
: fc.getGuiPlayer();
|
||||||
RegisteredPlayer rp = view.getDeckChooser(i).getPlayer();
|
RegisteredPlayer rp = view.getDeckChooser(i).getPlayer();
|
||||||
|
|
||||||
if (variantTypes.isEmpty()) {
|
if (variantTypes.isEmpty()) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package forge.screens.home.sanctioned;
|
package forge.screens.home.sanctioned;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
@@ -15,8 +16,6 @@ import forge.itemmanager.ItemManagerConfig;
|
|||||||
import forge.limited.BoosterDraft;
|
import forge.limited.BoosterDraft;
|
||||||
import forge.limited.LimitedPoolType;
|
import forge.limited.LimitedPoolType;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.deckeditor.CDeckEditorUI;
|
import forge.screens.deckeditor.CDeckEditorUI;
|
||||||
import forge.screens.deckeditor.controllers.CEditorDraftingProcess;
|
import forge.screens.deckeditor.controllers.CEditorDraftingProcess;
|
||||||
@@ -138,11 +137,10 @@ public enum CSubmenuDraft implements ICDoc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||||
Lobby lobby = FServer.getLobby();
|
starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(GuiBase.getInterface().getGuiPlayer()));
|
||||||
starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(lobby.getGuiPlayer()));
|
starter.add(new RegisteredPlayer(aiDeck).setPlayer(GuiBase.getInterface().createAiPlayer()));
|
||||||
starter.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
|
||||||
|
|
||||||
Singletons.getControl().startMatch(GameType.Draft, starter);
|
GuiBase.getInterface().startMatch(GameType.Draft, starter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import forge.deck.DeckSection;
|
|||||||
import forge.deck.DeckType;
|
import forge.deck.DeckType;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.LobbyPlayer.PlayerType;
|
|
||||||
import forge.gui.CardDetailPanel;
|
import forge.gui.CardDetailPanel;
|
||||||
import forge.deck.DeckProxy;
|
import forge.deck.DeckProxy;
|
||||||
import forge.deckchooser.DecksComboBoxEvent;
|
import forge.deckchooser.DecksComboBoxEvent;
|
||||||
@@ -442,7 +441,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
public FCheckBox getCbArtifacts() { return cbArtifacts; }
|
public FCheckBox getCbArtifacts() { return cbArtifacts; }
|
||||||
|
|
||||||
public boolean isPlayerAI(int playernum) {
|
public boolean isPlayerAI(int playernum) {
|
||||||
return playerPanels.get(playernum).getPlayerType() == PlayerType.COMPUTER;
|
return playerPanels.get(playernum).isAi();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumPlayers() {
|
public int getNumPlayers() {
|
||||||
@@ -685,8 +684,8 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerType getPlayerType() {
|
public Boolean isAi() {
|
||||||
return radioAi.isSelected() ? PlayerType.COMPUTER : PlayerType.HUMAN;
|
return radioAi.isSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVanguardButtonText(String text) {
|
public void setVanguardButtonText(String text) {
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import com.google.common.collect.Lists;
|
|||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
import forge.ImageCache;
|
import forge.ImageCache;
|
||||||
@@ -34,7 +36,6 @@ import forge.game.GameEntity;
|
|||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.combat.Combat;
|
import forge.game.combat.Combat;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
@@ -42,7 +43,6 @@ import forge.gui.framework.*;
|
|||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
import forge.menus.IMenuProvider;
|
import forge.menus.IMenuProvider;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.match.controllers.*;
|
import forge.screens.match.controllers.*;
|
||||||
import forge.screens.match.menus.CMatchUIMenus;
|
import forge.screens.match.menus.CMatchUIMenus;
|
||||||
@@ -78,6 +78,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider {
|
|||||||
private EventBus uiEvents;
|
private EventBus uiEvents;
|
||||||
private IVDoc<? extends ICDoc> selectedDocBeforeCombat;
|
private IVDoc<? extends ICDoc> selectedDocBeforeCombat;
|
||||||
private MatchUiEventVisitor visitor = new MatchUiEventVisitor();
|
private MatchUiEventVisitor visitor = new MatchUiEventVisitor();
|
||||||
|
public final Map<LobbyPlayer, String> avatarImages = new HashMap<LobbyPlayer, String>();
|
||||||
|
|
||||||
private CMatchUI() {
|
private CMatchUI() {
|
||||||
uiEvents = new EventBus("ui events");
|
uiEvents = new EventBus("ui events");
|
||||||
@@ -87,8 +88,9 @@ public enum CMatchUI implements ICDoc, IMenuProvider {
|
|||||||
|
|
||||||
private SkinImage getPlayerAvatar(final Player p, final int defaultIndex) {
|
private SkinImage getPlayerAvatar(final Player p, final int defaultIndex) {
|
||||||
LobbyPlayer lp = p.getLobbyPlayer();
|
LobbyPlayer lp = p.getLobbyPlayer();
|
||||||
if (lp.getIconImageKey() != null) {
|
|
||||||
return ImageCache.getIcon(lp);
|
if (avatarImages.containsKey(lp)) {
|
||||||
|
return ImageCache.getIcon(avatarImages.get(lp));
|
||||||
}
|
}
|
||||||
|
|
||||||
int avatarIdx = lp.getAvatarIndex();
|
int avatarIdx = lp.getAvatarIndex();
|
||||||
@@ -467,7 +469,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider {
|
|||||||
public void undo() {
|
public void undo() {
|
||||||
Game game = Singletons.getControl().getObservedGame();
|
Game game = Singletons.getControl().getObservedGame();
|
||||||
Player player = game.getPhaseHandler().getPriorityPlayer();
|
Player player = game.getPhaseHandler().getPriorityPlayer();
|
||||||
if (player != null && player.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (player != null && player.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer()) {
|
||||||
game.stack.undo();
|
game.stack.undo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,19 +19,19 @@ package forge.screens.match;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
|
import forge.control.FControl;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.Match;
|
import forge.game.Match;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.gauntlet.GauntletData;
|
import forge.gauntlet.GauntletData;
|
||||||
import forge.gauntlet.GauntletIO;
|
import forge.gauntlet.GauntletIO;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FSkin;
|
import forge.toolbox.FSkin;
|
||||||
import forge.toolbox.FSkin.SkinnedPanel;
|
import forge.toolbox.FSkin.SkinnedPanel;
|
||||||
@@ -88,7 +88,7 @@ public class GauntletWinLose extends ControlWinLose {
|
|||||||
// the player can restart Forge to replay a match.
|
// the player can restart Forge to replay a match.
|
||||||
// Pretty sure this can't be fixed until in-game states can be
|
// Pretty sure this can't be fixed until in-game states can be
|
||||||
// saved. Doublestrike 07-10-12
|
// saved. Doublestrike 07-10-12
|
||||||
LobbyPlayer questPlayer = FServer.getLobby().getQuestPlayer();
|
LobbyPlayer questPlayer = GuiBase.getInterface().getQuestPlayer();
|
||||||
|
|
||||||
// In all cases, update stats.
|
// In all cases, update stats.
|
||||||
lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - "
|
lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - "
|
||||||
@@ -202,14 +202,14 @@ public class GauntletWinLose extends ControlWinLose {
|
|||||||
GauntletData gd = FModel.getGauntletData();
|
GauntletData gd = FModel.getGauntletData();
|
||||||
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||||
List<RegisteredPlayer> players = Lists.newArrayList();
|
List<RegisteredPlayer> players = Lists.newArrayList();
|
||||||
Lobby lobby = FServer.getLobby();
|
FControl fc = Singletons.getControl();
|
||||||
players.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
|
players.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer()));
|
||||||
players.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
players.add(new RegisteredPlayer(aiDeck).setPlayer(fc.getAiPlayer()));
|
||||||
|
|
||||||
saveOptions();
|
saveOptions();
|
||||||
Singletons.getControl().endCurrentGame();
|
fc.endCurrentGame();
|
||||||
|
|
||||||
Singletons.getControl().startMatch(GameType.Gauntlet, players);
|
fc.startMatch(GameType.Gauntlet, players);
|
||||||
} else {
|
} else {
|
||||||
super.actionOnContinue();
|
super.actionOnContinue();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ package forge.screens.match;
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.limited.GauntletMini;
|
import forge.limited.GauntletMini;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.toolbox.FSkin;
|
import forge.toolbox.FSkin;
|
||||||
import forge.toolbox.FSkin.SkinnedLabel;
|
import forge.toolbox.FSkin.SkinnedLabel;
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ public class LimitedWinLose extends ControlWinLose {
|
|||||||
|
|
||||||
private SkinnedLabel lblTemp1;
|
private SkinnedLabel lblTemp1;
|
||||||
private SkinnedLabel lblTemp2;
|
private SkinnedLabel lblTemp2;
|
||||||
|
private LobbyPlayer guiPlayer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new limited mode win/lose handler.
|
* Instantiates a new limited mode win/lose handler.
|
||||||
@@ -57,7 +59,8 @@ public class LimitedWinLose extends ControlWinLose {
|
|||||||
super(view0, lastGame);
|
super(view0, lastGame);
|
||||||
this.view = view0;
|
this.view = view0;
|
||||||
gauntlet = FModel.getGauntletMini();
|
gauntlet = FModel.getGauntletMini();
|
||||||
this.wonMatch = lastGame.getMatch().isWonBy(FServer.getLobby().getGuiPlayer());
|
guiPlayer = GuiBase.getInterface().getGuiPlayer();
|
||||||
|
this.wonMatch = lastGame.getMatch().isWonBy(guiPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -78,7 +81,7 @@ public class LimitedWinLose extends ControlWinLose {
|
|||||||
resetView();
|
resetView();
|
||||||
nextRound = false;
|
nextRound = false;
|
||||||
|
|
||||||
if (lastGame.getOutcome().isWinner(FServer.getLobby().getGuiPlayer())) {
|
if (lastGame.getOutcome().isWinner(guiPlayer)) {
|
||||||
gauntlet.addWin();
|
gauntlet.addWin();
|
||||||
} else {
|
} else {
|
||||||
gauntlet.addLoss();
|
gauntlet.addLoss();
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
package forge.screens.match;
|
package forge.screens.match;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
import forge.card.CardEdition;
|
import forge.card.CardEdition;
|
||||||
@@ -31,7 +33,6 @@ import forge.gui.SOverlayUtils;
|
|||||||
import forge.gui.framework.FScreen;
|
import forge.gui.framework.FScreen;
|
||||||
import forge.item.*;
|
import forge.item.*;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.quest.*;
|
import forge.quest.*;
|
||||||
import forge.quest.bazaar.QuestItemType;
|
import forge.quest.bazaar.QuestItemType;
|
||||||
@@ -92,7 +93,7 @@ public class QuestWinLose extends ControlWinLose {
|
|||||||
this.view = view0;
|
this.view = view0;
|
||||||
qData = FModel.getQuest();
|
qData = FModel.getQuest();
|
||||||
qEvent = qData.getCurrentEvent();
|
qEvent = qData.getCurrentEvent();
|
||||||
this.wonMatch = lastGame.getMatch().isWonBy(FServer.getLobby().getQuestPlayer());
|
this.wonMatch = lastGame.getMatch().isWonBy(GuiBase.getInterface().getQuestPlayer());
|
||||||
this.isAnte = FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE);
|
this.isAnte = FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ public class QuestWinLose extends ControlWinLose {
|
|||||||
qc.getCards().getShopList();
|
qc.getCards().getShopList();
|
||||||
}
|
}
|
||||||
|
|
||||||
final LobbyPlayer questLobbyPlayer = FServer.getLobby().getQuestPlayer();
|
final LobbyPlayer questLobbyPlayer = GuiBase.getInterface().getQuestPlayer();
|
||||||
Player questPlayer = null;
|
Player questPlayer = null;
|
||||||
for (Player p : lastGame.getRegisteredPlayers()) {
|
for (Player p : lastGame.getRegisteredPlayers()) {
|
||||||
if (p.getLobbyPlayer().equals(questLobbyPlayer)) {
|
if (p.getLobbyPlayer().equals(questLobbyPlayer)) {
|
||||||
@@ -321,7 +322,7 @@ public class QuestWinLose extends ControlWinLose {
|
|||||||
boolean hasNeverLost = true;
|
boolean hasNeverLost = true;
|
||||||
int lifeDifferenceCredits = 0;
|
int lifeDifferenceCredits = 0;
|
||||||
|
|
||||||
LobbyPlayer localHuman = FServer.getLobby().getQuestPlayer();
|
LobbyPlayer localHuman = GuiBase.getInterface().getQuestPlayer();
|
||||||
for (final GameOutcome game : lastGame.getMatch().getPlayedGames()) {
|
for (final GameOutcome game : lastGame.getMatch().getPlayedGames()) {
|
||||||
if (!game.isWinner(localHuman)) {
|
if (!game.isWinner(localHuman)) {
|
||||||
hasNeverLost = false;
|
hasNeverLost = false;
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ public class VAssignDamage {
|
|||||||
fakeCard.setName(this.defender.getName());
|
fakeCard.setName(this.defender.getName());
|
||||||
fakeCard.setOwner((Player)defender);
|
fakeCard.setOwner((Player)defender);
|
||||||
Player p = (Player)defender;
|
Player p = (Player)defender;
|
||||||
fakeCard.setImageKey(p.getLobbyPlayer().getIconImageKey());
|
fakeCard.setImageKey(CMatchUI.SINGLETON_INSTANCE.avatarImages.get(p.getOriginalLobbyPlayer()));
|
||||||
} else {
|
} else {
|
||||||
fakeCard = new Card(-2);
|
fakeCard = new Card(-2);
|
||||||
fakeCard.setName(this.defender.getName());
|
fakeCard.setName(this.defender.getName());
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package forge.screens.match.controllers;
|
package forge.screens.match.controllers;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.match.views.VDev;
|
import forge.screens.match.views.VDev;
|
||||||
@@ -46,7 +46,7 @@ public enum CDev implements ICDoc {
|
|||||||
FModel.getPreferences().setPref(FPref.DEV_UNLIMITED_LAND, String.valueOf(newValue));
|
FModel.getPreferences().setPref(FPref.DEV_UNLIMITED_LAND, String.valueOf(newValue));
|
||||||
|
|
||||||
for(Player p : Singletons.getControl().getObservedGame().getPlayers()) {
|
for(Player p : Singletons.getControl().getObservedGame().getPlayers()) {
|
||||||
if( p.getLobbyPlayer() == FServer.getLobby().getGuiPlayer() )
|
if( p.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer() )
|
||||||
p.canCheatPlayUnlimitedLands = newValue;
|
p.canCheatPlayUnlimitedLands = newValue;
|
||||||
}
|
}
|
||||||
// probably will need to call a synchronized method to have the game thread see changed value of the variable
|
// probably will need to call a synchronized method to have the game thread see changed value of the variable
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
package forge.screens.match.controllers;
|
package forge.screens.match.controllers;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
@@ -30,7 +31,6 @@ import forge.game.combat.Combat;
|
|||||||
import forge.game.combat.CombatUtil;
|
import forge.game.combat.CombatUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ package forge.screens.match.controllers;
|
|||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package forge.screens.match.controllers;
|
package forge.screens.match.controllers;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.UiCommand;
|
import forge.UiCommand;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
package forge.screens.match.views;
|
package forge.screens.match.views;
|
||||||
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ package forge.screens.match.views;
|
|||||||
import forge.ImageCache;
|
import forge.ImageCache;
|
||||||
import forge.card.CardDetailUtil;
|
import forge.card.CardDetailUtil;
|
||||||
import forge.card.CardDetailUtil.DetailColors;
|
import forge.card.CardDetailUtil.DetailColors;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
import forge.game.spellability.SpellAbilityStackInstance;
|
import forge.game.spellability.SpellAbilityStackInstance;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import forge.GuiDesktop;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.CardReaderExperiments;
|
import forge.card.CardReaderExperiments;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main class for Forge's swing application view.
|
* Main class for Forge's swing application view.
|
||||||
@@ -55,7 +54,7 @@ public final class Main {
|
|||||||
|
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
case "sim":
|
case "sim":
|
||||||
FServer.simulateMatches(args);
|
SimulateMatch.simulate(args);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "parse":
|
case "parse":
|
||||||
|
|||||||
@@ -1,124 +1,86 @@
|
|||||||
package forge.net;
|
package forge.view;
|
||||||
|
|
||||||
import com.google.common.base.Supplier;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
import forge.deck.Deck;
|
import java.util.Collections;
|
||||||
import forge.deck.io.DeckSerializer;
|
import java.util.List;
|
||||||
import forge.game.*;
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import org.apache.commons.lang3.time.StopWatch;
|
||||||
import forge.game.player.RegisteredPlayer;
|
|
||||||
import forge.model.FModel;
|
import forge.GuiBase;
|
||||||
import forge.player.LobbyPlayerHuman;
|
import forge.deck.Deck;
|
||||||
import forge.util.Lang;
|
import forge.deck.io.DeckSerializer;
|
||||||
|
import forge.game.Game;
|
||||||
import org.apache.commons.lang3.time.StopWatch;
|
import forge.game.GameLogEntry;
|
||||||
|
import forge.game.GameRules;
|
||||||
import java.io.File;
|
import forge.game.GameType;
|
||||||
import java.util.ArrayList;
|
import forge.game.Match;
|
||||||
import java.util.Collections;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import java.util.List;
|
import forge.model.FModel;
|
||||||
|
import forge.util.Lang;
|
||||||
|
|
||||||
public class FServer {
|
public class SimulateMatch {
|
||||||
private FServer() {
|
public static void simulate(String[] args) {
|
||||||
|
FModel.initialize(null);
|
||||||
}
|
|
||||||
|
System.out.println("Simulation mode");
|
||||||
private static boolean interactiveMode = true;
|
if(args.length < 3 ) {
|
||||||
private static Lobby lobby = null;
|
System.out.println("Syntax: forge.exe sim <deck1[.dck]> <deck2[.dck]> [N]");
|
||||||
|
System.out.println("\tsim - stands for simulation mode");
|
||||||
public static Lobby getLobby() {
|
System.out.println("\tdeck1 (or deck2) - constructed deck name or filename (has to be quoted when contains multiple words)");
|
||||||
if (lobby == null) {
|
System.out.println("\tdeck is treated as file if it ends with a dot followed by three numbers or letters");
|
||||||
//not a very good solution still
|
System.out.println("\tN - number of games, defaults to 1");
|
||||||
lobby = new Lobby(new Supplier<LobbyPlayer>() {
|
return;
|
||||||
@Override
|
}
|
||||||
public LobbyPlayer get() {
|
Deck d1 = deckFromCommandLineParameter(args[1]);
|
||||||
// TODO Auto-generated method stub
|
Deck d2 = deckFromCommandLineParameter(args[2]);
|
||||||
return new LobbyPlayerHuman("Human");
|
if(d1 == null || d2 == null) {
|
||||||
}
|
System.out.println("One of decks could not be loaded, match cannot start");
|
||||||
});
|
return;
|
||||||
}
|
}
|
||||||
return lobby;
|
|
||||||
}
|
int nGames = args.length >= 4 ? Integer.parseInt(args[3]) : 1;
|
||||||
|
|
||||||
/**
|
System.out.println(String.format("Ai-%s vs Ai_%s - %s", d1.getName(), d2.getName(), Lang.nounWithNumeral(nGames, "game")));
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @return
|
List<RegisteredPlayer> pp = new ArrayList<RegisteredPlayer>();
|
||||||
*/
|
pp.add(new RegisteredPlayer(d1).setPlayer(GuiBase.getInterface().createAiPlayer("Ai-" + d1.getName(), 0)));
|
||||||
private static final NetServer server = new NetServer();
|
pp.add(new RegisteredPlayer(d2).setPlayer(GuiBase.getInterface().createAiPlayer("Ai_" + d2.getName(), 1)));
|
||||||
public static NetServer getServer() {
|
GameRules rules = new GameRules(GameType.Constructed);
|
||||||
// TODO Auto-generated method stub
|
Match mc = new Match(rules, pp);
|
||||||
return server;
|
for(int iGame = 0; iGame < nGames; iGame++)
|
||||||
}
|
simulateSingleMatch(mc, iGame);
|
||||||
|
System.out.flush();
|
||||||
public static void simulateMatches(String[] args) {
|
}
|
||||||
FModel.initialize(null);
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
interactiveMode = false;
|
* @param sw
|
||||||
System.out.println("Simulation mode");
|
* @param pp
|
||||||
if(args.length < 3 ) {
|
*/
|
||||||
System.out.println("Syntax: forge.exe sim <deck1[.dck]> <deck2[.dck]> [N]");
|
private static void simulateSingleMatch(Match mc, int iGame) {
|
||||||
System.out.println("\tsim - stands for simulation mode");
|
StopWatch sw = new StopWatch();
|
||||||
System.out.println("\tdeck1 (or deck2) - constructed deck name or filename (has to be quoted when contains multiple words)");
|
sw.start();
|
||||||
System.out.println("\tdeck is treated as file if it ends with a dot followed by three numbers or letters");
|
|
||||||
System.out.println("\tN - number of games, defaults to 1");
|
Game g1 = mc.createGame();
|
||||||
return;
|
// will run match in the same thread
|
||||||
}
|
mc.startGame(g1);
|
||||||
Deck d1 = deckFromCommandLineParameter(args[1]);
|
sw.stop();
|
||||||
Deck d2 = deckFromCommandLineParameter(args[2]);
|
|
||||||
if(d1 == null || d2 == null) {
|
List<GameLogEntry> log = g1.getGameLog().getLogEntries(null);
|
||||||
System.out.println("One of decks could not be loaded, match cannot start");
|
Collections.reverse(log);
|
||||||
return;
|
|
||||||
}
|
for(GameLogEntry l : log)
|
||||||
|
System.out.println(l);
|
||||||
int nGames = args.length >= 4 ? Integer.parseInt(args[3]) : 1;
|
|
||||||
|
System.out.println(String.format("\nGame %d ended in %d ms. %s has won!\n", 1+iGame, sw.getTime(), g1.getOutcome().getWinningLobbyPlayer().getName()));
|
||||||
System.out.println(String.format("Ai-%s vs Ai_%s - %s", d1.getName(), d2.getName(), Lang.nounWithNumeral(nGames, "game")));
|
}
|
||||||
|
|
||||||
List<RegisteredPlayer> pp = new ArrayList<RegisteredPlayer>();
|
|
||||||
pp.add(new RegisteredPlayer(d1).setPlayer(getLobby().getAiPlayer("Ai-" + d1.getName())));
|
private static Deck deckFromCommandLineParameter(String deckname) {
|
||||||
pp.add(new RegisteredPlayer(d2).setPlayer(getLobby().getAiPlayer("Ai_" + d2.getName())));
|
int dotpos = deckname.lastIndexOf('.');
|
||||||
GameRules rules = new GameRules(GameType.Constructed);
|
if(dotpos > 0 && dotpos == deckname.length()-4)
|
||||||
Match mc = new Match(rules, pp);
|
return DeckSerializer.fromFile(new File(deckname));
|
||||||
for(int iGame = 0; iGame < nGames; iGame++)
|
return FModel.getDecks().getConstructed().get(deckname);
|
||||||
simulateSingleMatch(mc, iGame);
|
}
|
||||||
System.out.flush();
|
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @param sw
|
|
||||||
* @param pp
|
|
||||||
*/
|
|
||||||
private static void simulateSingleMatch(Match mc, int iGame) {
|
|
||||||
StopWatch sw = new StopWatch();
|
|
||||||
sw.start();
|
|
||||||
|
|
||||||
Game g1 = mc.createGame();
|
|
||||||
// will run match in the same thread
|
|
||||||
mc.startGame(g1);
|
|
||||||
sw.stop();
|
|
||||||
|
|
||||||
List<GameLogEntry> log = g1.getGameLog().getLogEntries(null);
|
|
||||||
Collections.reverse(log);
|
|
||||||
|
|
||||||
for(GameLogEntry l : log)
|
|
||||||
System.out.println(l);
|
|
||||||
|
|
||||||
System.out.println(String.format("\nGame %d ended in %d ms. %s has won!\n", 1+iGame, sw.getTime(), g1.getOutcome().getWinningLobbyPlayer().getName()));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static Deck deckFromCommandLineParameter(String deckname) {
|
|
||||||
int dotpos = deckname.lastIndexOf('.');
|
|
||||||
if(dotpos > 0 && dotpos == deckname.length()-4)
|
|
||||||
return DeckSerializer.fromFile(new File(deckname));
|
|
||||||
return FModel.getDecks().getConstructed().get(deckname);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static boolean isInteractiveMode() {
|
|
||||||
return interactiveMode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
package forge.gamesimulationtests.util;
|
package forge.gamesimulationtests.util;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.IGameEntitiesFactory;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
import forge.gamesimulationtests.util.playeractions.PlayerActions;
|
import forge.gamesimulationtests.util.playeractions.PlayerActions;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -14,7 +16,7 @@ import java.util.Map;
|
|||||||
* Default harmless implementation for tests.
|
* Default harmless implementation for tests.
|
||||||
* Test-specific behaviour can easily be added by mocking (parts of) this class.
|
* Test-specific behaviour can easily be added by mocking (parts of) this class.
|
||||||
*/
|
*/
|
||||||
public class LobbyPlayerForTests extends LobbyPlayer {
|
public class LobbyPlayerForTests extends LobbyPlayer implements IGameEntitiesFactory {
|
||||||
private final Map<Player, PlayerControllerForTests> playerControllers;
|
private final Map<Player, PlayerControllerForTests> playerControllers;
|
||||||
private final PlayerActions playerActions;
|
private final PlayerActions playerActions;
|
||||||
|
|
||||||
@@ -24,12 +26,6 @@ public class LobbyPlayerForTests extends LobbyPlayer {
|
|||||||
this.playerActions = playerActions;
|
this.playerActions = playerActions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected PlayerType getType() {
|
|
||||||
//Don't really want to use COMPUTER here, as that might cause to much automatic behaviour by AI code embedded in the current rules code
|
|
||||||
//Trying HUMAN for now, which might cause issues if it triggers GUI from the rules code. If that happens, we'll need to refactor or use something else
|
|
||||||
return PlayerType.HUMAN;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Player createIngamePlayer( Game gameState ) {
|
public Player createIngamePlayer( Game gameState ) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.google.common.base.Predicate;
|
|||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.ai.ComputerUtil;
|
import forge.ai.ComputerUtil;
|
||||||
import forge.ai.ComputerUtilMana;
|
import forge.ai.ComputerUtilMana;
|
||||||
import forge.ai.SpellAbilityAi;
|
import forge.ai.SpellAbilityAi;
|
||||||
@@ -31,7 +32,6 @@ import forge.game.cost.CostPart;
|
|||||||
import forge.game.cost.CostPartMana;
|
import forge.game.cost.CostPartMana;
|
||||||
import forge.game.mana.Mana;
|
import forge.game.mana.Mana;
|
||||||
import forge.game.mana.ManaCostBeingPaid;
|
import forge.game.mana.ManaCostBeingPaid;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerActionConfirmMode;
|
import forge.game.player.PlayerActionConfirmMode;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import forge.game.combat.Combat;
|
|||||||
import forge.game.event.GameEventTurnBegan;
|
import forge.game.event.GameEventTurnBegan;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
@@ -215,6 +214,8 @@ public class GuiMobile implements IGuiBase {
|
|||||||
public void startMatch(GameType gameType, List<RegisteredPlayer> players) {
|
public void startMatch(GameType gameType, List<RegisteredPlayer> players) {
|
||||||
FControl.startMatch(gameType, players);
|
FControl.startMatch(gameType, players);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setPanelSelection(Card c) {
|
public void setPanelSelection(Card c) {
|
||||||
@@ -341,4 +342,27 @@ public class GuiMobile implements IGuiBase {
|
|||||||
public void browseToUrl(String url) throws Exception {
|
public void browseToUrl(String url) throws Exception {
|
||||||
Gdx.net.openURI(url);
|
Gdx.net.openURI(url);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer getGuiPlayer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return FControl.getGuiPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer createAiPlayer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return FControl.getAiPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer createAiPlayer(String name, int avatarIndex) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return FControl.getAiPlayer(name, avatarIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LobbyPlayer getQuestPlayer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return getGuiPlayer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.Forge.Graphics;
|
import forge.Forge.Graphics;
|
||||||
import forge.assets.FSkin;
|
import forge.assets.FSkin;
|
||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
@@ -22,13 +24,10 @@ import forge.deck.DeckType;
|
|||||||
import forge.deck.DeckgenUtil;
|
import forge.deck.DeckgenUtil;
|
||||||
import forge.deck.FDeckChooser;
|
import forge.deck.FDeckChooser;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.model.CardCollections;
|
import forge.model.CardCollections;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
@@ -261,12 +260,11 @@ public class ConstructedScreen extends LaunchScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Lobby lobby = FServer.getLobby();
|
|
||||||
for (int i = 0; i < getNumPlayers(); i++) {
|
for (int i = 0; i < getNumPlayers(); i++) {
|
||||||
PlayerPanel playerPanel = playerPanels.get(i);
|
PlayerPanel playerPanel = playerPanels.get(i);
|
||||||
String name = getPlayerName(i);
|
String name = getPlayerName(i);
|
||||||
LobbyPlayer lobbyPlayer = playerPanel.isPlayerAI() ? lobby.getAiPlayer(name,
|
LobbyPlayer lobbyPlayer = playerPanel.isPlayerAI() ? GuiBase.getInterface().createAiPlayer(name,
|
||||||
getPlayerAvatar(i)) : lobby.getGuiPlayer();
|
getPlayerAvatar(i)) : GuiBase.getInterface().getGuiPlayer();
|
||||||
RegisteredPlayer rp = playerPanel.deckChooser.getPlayer();
|
RegisteredPlayer rp = playerPanel.deckChooser.getPlayer();
|
||||||
|
|
||||||
if (appliedVariants.isEmpty()) {
|
if (appliedVariants.isEmpty()) {
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ import com.google.common.eventbus.Subscribe;
|
|||||||
|
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
|
import forge.ai.AiProfileUtil;
|
||||||
|
import forge.ai.LobbyPlayerAi;
|
||||||
import forge.card.CardCharacteristicName;
|
import forge.card.CardCharacteristicName;
|
||||||
import forge.control.FControlGameEventHandler;
|
import forge.control.FControlGameEventHandler;
|
||||||
import forge.control.FControlGamePlayback;
|
import forge.control.FControlGamePlayback;
|
||||||
@@ -41,7 +45,6 @@ import forge.game.combat.Combat;
|
|||||||
import forge.game.combat.CombatUtil;
|
import forge.game.combat.CombatUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
@@ -50,7 +53,7 @@ import forge.game.zone.ZoneType;
|
|||||||
import forge.match.input.InputProxy;
|
import forge.match.input.InputProxy;
|
||||||
import forge.match.input.InputQueue;
|
import forge.match.input.InputQueue;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
import forge.player.LobbyPlayerHuman;
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.match.views.VAssignDamage;
|
import forge.screens.match.views.VAssignDamage;
|
||||||
@@ -61,6 +64,9 @@ import forge.screens.match.views.VPlayerPanel;
|
|||||||
import forge.toolbox.FCardPanel;
|
import forge.toolbox.FCardPanel;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
|
import forge.util.GuiDisplayUtil;
|
||||||
|
import forge.util.MyRandom;
|
||||||
|
import forge.util.NameGenerator;
|
||||||
|
|
||||||
public class FControl {
|
public class FControl {
|
||||||
private FControl() { } //don't allow creating instance
|
private FControl() { } //don't allow creating instance
|
||||||
@@ -136,7 +142,7 @@ public class FControl {
|
|||||||
// Add playback controls to match if needed
|
// Add playback controls to match if needed
|
||||||
gameHasHumanPlayer = false;
|
gameHasHumanPlayer = false;
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getController().getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (p.getController().getLobbyPlayer() == getGuiPlayer()) {
|
||||||
gameHasHumanPlayer = true;
|
gameHasHumanPlayer = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -281,13 +287,13 @@ public class FControl {
|
|||||||
public static Player getCurrentPlayer() {
|
public static Player getCurrentPlayer() {
|
||||||
// try current priority
|
// try current priority
|
||||||
Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
|
Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
|
||||||
if (null != currentPriority && currentPriority.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (null != currentPriority && currentPriority.getLobbyPlayer() == getGuiPlayer()) {
|
||||||
return currentPriority;
|
return currentPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise find just any player, belonging to this lobbyplayer
|
// otherwise find just any player, belonging to this lobbyplayer
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (p.getLobbyPlayer() == getGuiPlayer()) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,7 +440,7 @@ public class FControl {
|
|||||||
public static void undoLastAction() {
|
public static void undoLastAction() {
|
||||||
Game game = getGame();
|
Game game = getGame();
|
||||||
Player player = game.getPhaseHandler().getPriorityPlayer();
|
Player player = game.getPhaseHandler().getPriorityPlayer();
|
||||||
if (player != null && player.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (player != null && player.getLobbyPlayer() == getGuiPlayer()) {
|
||||||
game.stack.undo();
|
game.stack.undo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -457,7 +463,7 @@ public class FControl {
|
|||||||
public static void stopGame() {
|
public static void stopGame() {
|
||||||
List<Player> pp = new ArrayList<Player>();
|
List<Player> pp = new ArrayList<Player>();
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getOriginalLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (p.getOriginalLobbyPlayer() == getGuiPlayer()) {
|
||||||
pp.add(p);
|
pp.add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -472,7 +478,7 @@ public class FControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer();
|
Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer();
|
||||||
boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == FServer.getLobby().getGuiPlayer();
|
boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == getGuiPlayer();
|
||||||
|
|
||||||
if (hasHuman && humanHasPriority) {
|
if (hasHuman && humanHasPriority) {
|
||||||
game.getAction().checkGameOverCondition();
|
game.getAction().checkGameOverCondition();
|
||||||
@@ -760,4 +766,37 @@ public class FControl {
|
|||||||
fvHuman.getLabel(PhaseType.END_OF_TURN).setStopAtPhase(prefs.getPrefBoolean(FPref.PHASE_HUMAN_EOT));
|
fvHuman.getLabel(PhaseType.END_OF_TURN).setStopAtPhase(prefs.getPrefBoolean(FPref.PHASE_HUMAN_EOT));
|
||||||
fvHuman.getLabel(PhaseType.CLEANUP).setStopAtPhase(prefs.getPrefBoolean(FPref.PHASE_HUMAN_CLEANUP));
|
fvHuman.getLabel(PhaseType.CLEANUP).setStopAtPhase(prefs.getPrefBoolean(FPref.PHASE_HUMAN_CLEANUP));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns a random name from the supplied list. */
|
||||||
|
public static String getRandomName() {
|
||||||
|
String playerName = GuiDisplayUtil.getPlayerName();
|
||||||
|
String aiName = NameGenerator.getRandomName("Any", "Generic", playerName);
|
||||||
|
return aiName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final static LobbyPlayer getAiPlayer() { return getAiPlayer(getRandomName()); }
|
||||||
|
public final static LobbyPlayer getAiPlayer(String name) {
|
||||||
|
int avatarCount = GuiBase.getInterface().getAvatarCount();
|
||||||
|
return getAiPlayer(name, avatarCount == 0 ? 0 : MyRandom.getRandom().nextInt(avatarCount));
|
||||||
|
}
|
||||||
|
public final static LobbyPlayer getAiPlayer(String name, int avatarIndex) {
|
||||||
|
LobbyPlayerAi player = new LobbyPlayerAi(name);
|
||||||
|
|
||||||
|
// TODO: implement specific AI profiles for quest mode.
|
||||||
|
String lastProfileChosen = FModel.getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE);
|
||||||
|
player.setRotateProfileEachGame(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_DUEL));
|
||||||
|
if(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_MATCH)) {
|
||||||
|
lastProfileChosen = AiProfileUtil.getRandomProfile();
|
||||||
|
System.out.println(String.format("AI profile %s was chosen for the lobby player %s.", lastProfileChosen, player.getName()));
|
||||||
|
}
|
||||||
|
player.setAiProfile(lastProfileChosen);
|
||||||
|
player.setAvatarIndex(avatarIndex);
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final static LobbyPlayer guiPlayer = new LobbyPlayerHuman("Human");
|
||||||
|
public final static LobbyPlayer getGuiPlayer() {
|
||||||
|
return guiPlayer;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.menu.FMenuBar;
|
import forge.menu.FMenuBar;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.screens.match.views.VAvatar;
|
import forge.screens.match.views.VAvatar;
|
||||||
@@ -20,7 +21,6 @@ import forge.assets.FSkinColor;
|
|||||||
import forge.assets.FSkinTexture;
|
import forge.assets.FSkinTexture;
|
||||||
import forge.assets.FSkinColor.Colors;
|
import forge.assets.FSkinColor.Colors;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.toolbox.FEvent;
|
import forge.toolbox.FEvent;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package forge.screens.match.views;
|
package forge.screens.match.views;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.menu.FDropDownMenu;
|
import forge.menu.FDropDownMenu;
|
||||||
import forge.menu.FMenuItem;
|
import forge.menu.FMenuItem;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
@@ -90,7 +90,7 @@ public class VDevMenu extends FDropDownMenu {
|
|||||||
boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND);
|
boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND);
|
||||||
|
|
||||||
for (Player p : FControl.getGame().getPlayers()) {
|
for (Player p : FControl.getGame().getPlayers()) {
|
||||||
if (p.getLobbyPlayer() == FServer.getLobby().getGuiPlayer() ) {
|
if (p.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer() ) {
|
||||||
p.canCheatPlayUnlimitedLands = unlimitedLands;
|
p.canCheatPlayUnlimitedLands = unlimitedLands;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.Forge.Graphics;
|
import forge.Forge.Graphics;
|
||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
@@ -15,7 +16,6 @@ import forge.game.mana.ManaPool;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.match.input.Input;
|
import forge.match.input.Input;
|
||||||
import forge.match.input.InputPayMana;
|
import forge.match.input.InputPayMana;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
import forge.toolbox.FDisplayObject;
|
import forge.toolbox.FDisplayObject;
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ public class VManaPool extends VDisplayArea {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean tap(float x, float y, int count) {
|
public boolean tap(float x, float y, int count) {
|
||||||
if (player.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (player.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer()) {
|
||||||
final Input input = FControl.getInputQueue().getInput();
|
final Input input = FControl.getInputQueue().getInput();
|
||||||
if (input instanceof InputPayMana) {
|
if (input instanceof InputPayMana) {
|
||||||
// Do something
|
// Do something
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package forge.screens.match.views;
|
|||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.Forge.Graphics;
|
import forge.Forge.Graphics;
|
||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
@@ -10,7 +11,6 @@ import forge.assets.ImageCache;
|
|||||||
import forge.card.CardDetailUtil;
|
import forge.card.CardDetailUtil;
|
||||||
import forge.card.CardDetailUtil.DetailColors;
|
import forge.card.CardDetailUtil.DetailColors;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.spellability.SpellAbilityStackInstance;
|
import forge.game.spellability.SpellAbilityStackInstance;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
import forge.menu.FDropDown;
|
import forge.menu.FDropDown;
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import com.badlogic.gdx.graphics.Color;
|
|||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
import forge.assets.FSkinColor.Colors;
|
import forge.assets.FSkinColor.Colors;
|
||||||
import forge.assets.FSkinImage;
|
import forge.assets.FSkinImage;
|
||||||
@@ -28,13 +30,11 @@ import forge.deck.Deck;
|
|||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.Match;
|
import forge.game.Match;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.gauntlet.GauntletData;
|
import forge.gauntlet.GauntletData;
|
||||||
import forge.gauntlet.GauntletIO;
|
import forge.gauntlet.GauntletIO;
|
||||||
|
import forge.interfaces.IGuiBase;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FPanel;
|
import forge.toolbox.FPanel;
|
||||||
@@ -87,7 +87,7 @@ public class GauntletWinLose extends ControlWinLose {
|
|||||||
// the player can restart Forge to replay a match.
|
// the player can restart Forge to replay a match.
|
||||||
// Pretty sure this can't be fixed until in-game states can be
|
// Pretty sure this can't be fixed until in-game states can be
|
||||||
// saved. Doublestrike 07-10-12
|
// saved. Doublestrike 07-10-12
|
||||||
LobbyPlayer questPlayer = FServer.getLobby().getQuestPlayer();
|
LobbyPlayer questPlayer = GuiBase.getInterface().getQuestPlayer();
|
||||||
|
|
||||||
// In all cases, update stats.
|
// In all cases, update stats.
|
||||||
lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - "
|
lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - "
|
||||||
@@ -192,9 +192,9 @@ public class GauntletWinLose extends ControlWinLose {
|
|||||||
GauntletData gd = FModel.getGauntletData();
|
GauntletData gd = FModel.getGauntletData();
|
||||||
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
Deck aiDeck = gd.getDecks().get(gd.getCompleted());
|
||||||
List<RegisteredPlayer> players = Lists.newArrayList();
|
List<RegisteredPlayer> players = Lists.newArrayList();
|
||||||
Lobby lobby = FServer.getLobby();
|
IGuiBase fc = GuiBase.getInterface();
|
||||||
players.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer()));
|
players.add(new RegisteredPlayer(gd.getUserDeck()).setPlayer(fc.getGuiPlayer()));
|
||||||
players.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer()));
|
players.add(new RegisteredPlayer(aiDeck).setPlayer(fc.createAiPlayer()));
|
||||||
|
|
||||||
saveOptions();
|
saveOptions();
|
||||||
FControl.endCurrentGame();
|
FControl.endCurrentGame();
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ package forge.screens.match.winlose;
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.limited.GauntletMini;
|
import forge.limited.GauntletMini;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,7 +46,7 @@ public class LimitedWinLose extends ControlWinLose {
|
|||||||
super(view0, lastGame);
|
super(view0, lastGame);
|
||||||
this.view = view0;
|
this.view = view0;
|
||||||
gauntlet = FModel.getGauntletMini();
|
gauntlet = FModel.getGauntletMini();
|
||||||
this.wonMatch = lastGame.getMatch().isWonBy(FServer.getLobby().getGuiPlayer());
|
this.wonMatch = lastGame.getMatch().isWonBy(GuiBase.getInterface().getGuiPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,7 +65,7 @@ public class LimitedWinLose extends ControlWinLose {
|
|||||||
resetView();
|
resetView();
|
||||||
nextRound = false;
|
nextRound = false;
|
||||||
|
|
||||||
if (lastGame.getOutcome().isWinner(FServer.getLobby().getGuiPlayer())) {
|
if (lastGame.getOutcome().isWinner(GuiBase.getInterface().getGuiPlayer())) {
|
||||||
gauntlet.addWin();
|
gauntlet.addWin();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -51,20 +51,5 @@
|
|||||||
<artifactId>freemarker</artifactId>
|
<artifactId>freemarker</artifactId>
|
||||||
<version>2.3.20</version>
|
<version>2.3.20</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
|
||||||
<artifactId>jetty-websocket</artifactId>
|
|
||||||
<version>${jettyVersion}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
|
||||||
<artifactId>jetty-server</artifactId>
|
|
||||||
<version>${jettyVersion}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.jetty</groupId>
|
|
||||||
<artifactId>jetty-servlet</artifactId>
|
|
||||||
<version>${jettyVersion}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.Zone;
|
import forge.game.zone.Zone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.util.Lang;
|
import forge.util.Lang;
|
||||||
import forge.util.maps.MapOfLists;
|
import forge.util.maps.MapOfLists;
|
||||||
|
|
||||||
@@ -254,7 +253,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
@Override
|
@Override
|
||||||
public Void visit(GameEventAttackersDeclared event) {
|
public Void visit(GameEventAttackersDeclared event) {
|
||||||
// Skip redraw for GUI player?
|
// Skip redraw for GUI player?
|
||||||
if (event.player.getLobbyPlayer() == FServer.getLobby().getGuiPlayer()) {
|
if (event.player.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
import forge.assets.ISkinImage;
|
import forge.assets.ISkinImage;
|
||||||
import forge.events.UiEvent;
|
import forge.events.UiEvent;
|
||||||
@@ -20,7 +21,6 @@ import forge.game.card.Card;
|
|||||||
import forge.game.combat.Combat;
|
import forge.game.combat.Combat;
|
||||||
import forge.game.event.GameEventTurnBegan;
|
import forge.game.event.GameEventTurnBegan;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
@@ -79,4 +79,8 @@ public interface IGuiBase {
|
|||||||
int getAvatarCount();
|
int getAvatarCount();
|
||||||
void copyToClipboard(String text);
|
void copyToClipboard(String text);
|
||||||
void browseToUrl(String url) throws Exception;
|
void browseToUrl(String url) throws Exception;
|
||||||
|
LobbyPlayer getGuiPlayer();
|
||||||
|
LobbyPlayer createAiPlayer();
|
||||||
|
LobbyPlayer createAiPlayer(String name, int avatarIndex);
|
||||||
|
LobbyPlayer getQuestPlayer();
|
||||||
}
|
}
|
||||||
@@ -21,9 +21,8 @@ import forge.GuiBase;
|
|||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
|
import forge.interfaces.IGuiBase;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.Lobby;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -152,11 +151,11 @@ public class GauntletMini {
|
|||||||
*/
|
*/
|
||||||
private void startRound() {
|
private void startRound() {
|
||||||
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
List<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
|
||||||
Lobby lobby = FServer.getLobby();
|
IGuiBase fc = GuiBase.getInterface();
|
||||||
starter.add(new RegisteredPlayer(humanDeck).setPlayer(lobby.getGuiPlayer()));
|
starter.add(new RegisteredPlayer(humanDeck).setPlayer(fc.getGuiPlayer()));
|
||||||
starter.add(aiOpponents.get(currentRound - 1).setPlayer(lobby.getAiPlayer()));
|
starter.add(aiOpponents.get(currentRound - 1).setPlayer(fc.createAiPlayer()));
|
||||||
|
|
||||||
GuiBase.getInterface().startMatch(gauntletType, starter);
|
fc.startMatch(gauntletType, starter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
package forge.net;
|
|
||||||
|
|
||||||
import com.google.common.base.Supplier;
|
|
||||||
|
|
||||||
import forge.GuiBase;
|
|
||||||
import forge.ai.AiProfileUtil;
|
|
||||||
import forge.ai.LobbyPlayerAi;
|
|
||||||
import forge.control.ChatArea;
|
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.model.FModel;
|
|
||||||
import forge.net.client.INetClient;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
|
||||||
import forge.util.GuiDisplayUtil;
|
|
||||||
import forge.util.MyRandom;
|
|
||||||
import forge.util.NameGenerator;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this type.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class Lobby {
|
|
||||||
|
|
||||||
private final LobbyPlayer guiPlayer;
|
|
||||||
public Lobby(Supplier<LobbyPlayer> humanFactory){
|
|
||||||
guiPlayer = humanFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private Map<String, LobbyPlayerRemote> remotePlayers = new ConcurrentHashMap<String, LobbyPlayerRemote>();
|
|
||||||
|
|
||||||
private final LobbyPlayerAi system = new LobbyPlayerAi("System");
|
|
||||||
|
|
||||||
public final LobbyPlayer getGuiPlayer() {
|
|
||||||
return guiPlayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final LobbyPlayer getAiPlayer() { return getAiPlayer(getRandomName()); }
|
|
||||||
public final LobbyPlayer getAiPlayer(String name) {
|
|
||||||
int avatarCount = GuiBase.getInterface().getAvatarCount();
|
|
||||||
return getAiPlayer(name, avatarCount == 0 ? 0 : MyRandom.getRandom().nextInt(avatarCount));
|
|
||||||
}
|
|
||||||
public final LobbyPlayer getAiPlayer(String name, int avatarIndex) {
|
|
||||||
LobbyPlayerAi player = new LobbyPlayerAi(name);
|
|
||||||
|
|
||||||
// TODO: implement specific AI profiles for quest mode.
|
|
||||||
String lastProfileChosen = FModel.getPreferences().getPref(FPref.UI_CURRENT_AI_PROFILE);
|
|
||||||
player.setRotateProfileEachGame(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_DUEL));
|
|
||||||
if(lastProfileChosen.equals(AiProfileUtil.AI_PROFILE_RANDOM_MATCH)) {
|
|
||||||
lastProfileChosen = AiProfileUtil.getRandomProfile();
|
|
||||||
System.out.println(String.format("AI profile %s was chosen for the lobby player %s.", lastProfileChosen, player.getName()));
|
|
||||||
}
|
|
||||||
player.setAiProfile(lastProfileChosen);
|
|
||||||
player.setAvatarIndex(avatarIndex);
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a random name from the supplied list. */
|
|
||||||
private String getRandomName() {
|
|
||||||
String playerName = GuiDisplayUtil.getPlayerName();
|
|
||||||
String aiName = NameGenerator.getRandomName("Any", "Generic", playerName);
|
|
||||||
return aiName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public LobbyPlayer getQuestPlayer() {
|
|
||||||
return guiPlayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Write javadoc for this method.
|
|
||||||
* @param name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public synchronized LobbyPlayer findOrCreateRemotePlayer(String name, INetClient client) {
|
|
||||||
if (remotePlayers.containsKey(name))
|
|
||||||
return remotePlayers.get(name);
|
|
||||||
|
|
||||||
LobbyPlayerRemote res = new LobbyPlayerRemote(name, client);
|
|
||||||
speak(ChatArea.Room, system, res.getName() + " has joined the server.");
|
|
||||||
// have to load avatar from remote user's preferences here
|
|
||||||
remotePlayers.put(name, res);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnectPlayer(LobbyPlayer player) {
|
|
||||||
// Should set up a timer here to discard player and all of his games after 20 minutes of being offline
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void speak(ChatArea room, LobbyPlayer player, String message) {
|
|
||||||
getGuiPlayer().hear(player, message);
|
|
||||||
for(LobbyPlayer remote : remotePlayers.values()) {
|
|
||||||
remote.hear(player, message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
package forge.player;
|
package forge.player;
|
||||||
|
|
||||||
import forge.GuiBase;
|
import forge.GuiBase;
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.IGameEntitiesFactory;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
@@ -10,15 +11,11 @@ import forge.properties.ForgePreferences;
|
|||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.util.GuiDisplayUtil;
|
import forge.util.GuiDisplayUtil;
|
||||||
|
|
||||||
public class LobbyPlayerHuman extends LobbyPlayer {
|
public class LobbyPlayerHuman extends LobbyPlayer implements IGameEntitiesFactory {
|
||||||
public LobbyPlayerHuman(String name) {
|
public LobbyPlayerHuman(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected PlayerType getType() {
|
|
||||||
return PlayerType.HUMAN;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerController createControllerFor(Player human) {
|
public PlayerController createControllerFor(Player human) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.google.common.collect.Iterables;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.SOptionPane;
|
import forge.SOptionPane;
|
||||||
import forge.GuiBase;
|
import forge.GuiBase;
|
||||||
import forge.SGuiChoose;
|
import forge.SGuiChoose;
|
||||||
@@ -32,7 +33,6 @@ import forge.game.cost.CostPart;
|
|||||||
import forge.game.cost.CostPartMana;
|
import forge.game.cost.CostPartMana;
|
||||||
import forge.game.mana.Mana;
|
import forge.game.mana.Mana;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.LobbyPlayer;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerActionConfirmMode;
|
import forge.game.player.PlayerActionConfirmMode;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.common.base.Predicate;
|
|||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
import forge.game.event.GameEvent;
|
import forge.game.event.GameEvent;
|
||||||
@@ -28,7 +29,6 @@ import forge.game.event.GameEventMulligan;
|
|||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.item.PreconDeck;
|
import forge.item.PreconDeck;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
import forge.quest.bazaar.QuestBazaarManager;
|
import forge.quest.bazaar.QuestBazaarManager;
|
||||||
import forge.quest.bazaar.QuestItemType;
|
import forge.quest.bazaar.QuestItemType;
|
||||||
@@ -448,7 +448,7 @@ public class QuestController {
|
|||||||
if (ev instanceof GameEventMulligan) {
|
if (ev instanceof GameEventMulligan) {
|
||||||
GameEventMulligan mev = (GameEventMulligan) ev;
|
GameEventMulligan mev = (GameEventMulligan) ev;
|
||||||
// First mulligan is free
|
// First mulligan is free
|
||||||
if (mev.player.getLobbyPlayer() == FServer.getLobby().getQuestPlayer()
|
if (mev.player.getLobbyPlayer() == GuiBase.getInterface().getQuestPlayer()
|
||||||
&& getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() == 0) {
|
&& getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() == 0) {
|
||||||
mev.player.drawCard();
|
mev.player.drawCard();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package forge.sound;
|
package forge.sound;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.events.IUiEventVisitor;
|
import forge.events.IUiEventVisitor;
|
||||||
import forge.events.UiEventAttackerDeclared;
|
import forge.events.UiEventAttackerDeclared;
|
||||||
import forge.events.UiEventBlockerAssigned;
|
import forge.events.UiEventBlockerAssigned;
|
||||||
@@ -7,7 +8,6 @@ import forge.game.card.Card;
|
|||||||
import forge.game.event.*;
|
import forge.game.event.*;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.util.maps.MapOfLists;
|
import forge.util.maps.MapOfLists;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -41,7 +41,7 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
|
|||||||
public SoundEffectType visit(GameEventShuffle event) { return SoundEffectType.Shuffle; }
|
public SoundEffectType visit(GameEventShuffle event) { return SoundEffectType.Shuffle; }
|
||||||
public SoundEffectType visit(GameEventTokenCreated event) { return SoundEffectType.Token; }
|
public SoundEffectType visit(GameEventTokenCreated event) { return SoundEffectType.Token; }
|
||||||
public SoundEffectType visit(GameEventBlockersDeclared event) {
|
public SoundEffectType visit(GameEventBlockersDeclared event) {
|
||||||
boolean isLocalHuman = event.defendingPlayer.getLobbyPlayer() == FServer.getLobby().getGuiPlayer();
|
boolean isLocalHuman = event.defendingPlayer.getLobbyPlayer() == GuiBase.getInterface().getGuiPlayer();
|
||||||
if (isLocalHuman)
|
if (isLocalHuman)
|
||||||
return null; // already played sounds in interactive mode
|
return null; // already played sounds in interactive mode
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
|
|||||||
* Plays the sound corresponding to the outcome of the duel.
|
* Plays the sound corresponding to the outcome of the duel.
|
||||||
*/
|
*/
|
||||||
public SoundEffectType visit(GameEventGameOutcome event) {
|
public SoundEffectType visit(GameEventGameOutcome event) {
|
||||||
boolean humanWonTheDuel = event.result.getWinningLobbyPlayer() == FServer.getLobby().getGuiPlayer();
|
boolean humanWonTheDuel = event.result.getWinningLobbyPlayer() == GuiBase.getInterface().getGuiPlayer();
|
||||||
return humanWonTheDuel ? SoundEffectType.WinDuel : SoundEffectType.LoseDuel;
|
return humanWonTheDuel ? SoundEffectType.WinDuel : SoundEffectType.LoseDuel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,21 @@
|
|||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
<version>2.2.4</version>
|
<version>2.2.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
|
<artifactId>jetty-websocket</artifactId>
|
||||||
|
<version>${jettyVersion}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
|
<artifactId>jetty-server</artifactId>
|
||||||
|
<version>${jettyVersion}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.jetty</groupId>
|
||||||
|
<artifactId>jetty-servlet</artifactId>
|
||||||
|
<version>${jettyVersion}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
25
forge-net/src/main/java/forge/net/FServer.java
Normal file
25
forge-net/src/main/java/forge/net/FServer.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package forge.net;
|
||||||
|
|
||||||
|
|
||||||
|
public class FServer {
|
||||||
|
private FServer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Lobby lobby = new Lobby();
|
||||||
|
|
||||||
|
public static Lobby getLobby() {
|
||||||
|
return lobby;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static final NetServer server = new NetServer();
|
||||||
|
public static NetServer getServer() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
38
forge-net/src/main/java/forge/net/Lobby.java
Normal file
38
forge-net/src/main/java/forge/net/Lobby.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package forge.net;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
|
import forge.net.client.INetClient;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Lobby {
|
||||||
|
|
||||||
|
|
||||||
|
private Map<String, LobbyPlayerRemote> remotePlayers = new ConcurrentHashMap<String, LobbyPlayerRemote>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
* @param name
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public synchronized LobbyPlayer findOrCreateRemotePlayer(String name, INetClient client) {
|
||||||
|
if (remotePlayers.containsKey(name))
|
||||||
|
return remotePlayers.get(name);
|
||||||
|
|
||||||
|
LobbyPlayerRemote res = new LobbyPlayerRemote(name, client);
|
||||||
|
// speak(ChatArea.Room, system, res.getName() + " has joined the server.");
|
||||||
|
// have to load avatar from remote user's preferences here
|
||||||
|
remotePlayers.put(name, res);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disconnectPlayer(LobbyPlayer player) {
|
||||||
|
// Should set up a timer here to discard player and all of his games after 20 minutes of being offline
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
package forge.net;
|
package forge.net;
|
||||||
|
|
||||||
|
import forge.LobbyPlayer;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.IGameEntitiesFactory;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
import forge.net.client.INetClient;
|
import forge.net.client.INetClient;
|
||||||
import forge.net.protocol.toclient.ChatPacketClt;
|
import forge.net.protocol.toclient.ChatPacketClt;
|
||||||
|
|
||||||
public class LobbyPlayerRemote extends LobbyPlayer {
|
public class LobbyPlayerRemote extends LobbyPlayer implements IGameEntitiesFactory {
|
||||||
|
|
||||||
private final INetClient connection;
|
private final INetClient connection;
|
||||||
|
|
||||||
@@ -16,11 +17,6 @@ public class LobbyPlayerRemote extends LobbyPlayer {
|
|||||||
connection = netClient;
|
connection = netClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected PlayerType getType() {
|
|
||||||
return PlayerType.REMOTE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.game.player.LobbyPlayer#getPlayer(forge.game.GameState)
|
* @see forge.game.player.LobbyPlayer#getPlayer(forge.game.GameState)
|
||||||
*/
|
*/
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package forge.net;
|
package forge.net;
|
||||||
|
|
||||||
import forge.error.BugReporter;
|
|
||||||
import forge.net.client.NetClient;
|
import forge.net.client.NetClient;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.Connector;
|
import org.eclipse.jetty.server.Connector;
|
||||||
@@ -71,7 +70,7 @@ public class NetServer {
|
|||||||
_connection.sendMessage(data);
|
_connection.sendMessage(data);
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
BugReporter.reportException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +109,7 @@ public class NetServer {
|
|||||||
String host = connector.getHost();
|
String host = connector.getHost();
|
||||||
serverUri = new URI(String.format("ws://%s:%d/", host == null ? "localhost" : host ,port));
|
serverUri = new URI(String.format("ws://%s:%d/", host == null ? "localhost" : host ,port));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
BugReporter.reportException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Server started @ " + serverUri);
|
System.out.println("Server started @ " + serverUri);
|
||||||
@@ -125,7 +124,7 @@ public class NetServer {
|
|||||||
srv.stop();
|
srv.stop();
|
||||||
portNumber = -1;
|
portNumber = -1;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
BugReporter.reportException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package forge.net.client;
|
package forge.net.client;
|
||||||
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.net.client.state.IClientState;
|
import forge.net.client.state.IClientState;
|
||||||
import forge.net.protocol.toclient.IPacketClt;
|
import forge.net.protocol.toclient.IPacketClt;
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package forge.net.client;
|
package forge.net.client;
|
||||||
|
|
||||||
import forge.game.player.LobbyPlayer;
|
import forge.LobbyPlayer;
|
||||||
import forge.net.FServer;
|
import forge.net.FServer;
|
||||||
import forge.net.IClientSocket;
|
import forge.net.IClientSocket;
|
||||||
import forge.net.IConnectionObserver;
|
import forge.net.IConnectionObserver;
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package forge.net.client.state;
|
package forge.net.client.state;
|
||||||
|
|
||||||
import forge.control.ChatArea;
|
|
||||||
import forge.net.FServer;
|
|
||||||
import forge.net.client.INetClient;
|
import forge.net.client.INetClient;
|
||||||
import forge.net.protocol.toserver.ChatPacketSrv;
|
import forge.net.protocol.toserver.ChatPacketSrv;
|
||||||
import forge.net.protocol.toserver.IPacketSrv;
|
import forge.net.protocol.toserver.IPacketSrv;
|
||||||
@@ -22,7 +20,7 @@ public class InLobbyClientState implements IClientState {
|
|||||||
if( data instanceof ChatPacketSrv) {
|
if( data instanceof ChatPacketSrv) {
|
||||||
ChatPacketSrv cp = (ChatPacketSrv) data;
|
ChatPacketSrv cp = (ChatPacketSrv) data;
|
||||||
// if ( not muted )
|
// if ( not muted )
|
||||||
FServer.getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage());
|
// FServer.getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage());
|
||||||
// else
|
// else
|
||||||
// client.send("You are banned and cannot speak");
|
// client.send("You are banned and cannot speak");
|
||||||
return true;
|
return true;
|
||||||
Reference in New Issue
Block a user