mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Changed interfaces to acquire players for lobby - human uses a single LobbyPlayer for all games.
NetClient now adds its player to lobby
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package forge.control;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
@@ -55,31 +57,22 @@ public class Lobby {
|
||||
"Walter", "Wilfred", "William", "Winston"
|
||||
};
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param human
|
||||
* @return
|
||||
*/
|
||||
public LobbyPlayer findLocalPlayer(PlayerType type, String name) {
|
||||
private Map<String, LobbyPlayer> remotePlayers = new ConcurrentHashMap<String, LobbyPlayer>();
|
||||
private final LobbyPlayer guiPlayer = new LobbyPlayer(PlayerType.HUMAN, "Human");
|
||||
|
||||
return new LobbyPlayer(type, name);
|
||||
|
||||
public final LobbyPlayer getGuiPlayer() {
|
||||
return guiPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param human
|
||||
* @return
|
||||
*/
|
||||
public LobbyPlayer findLocalPlayer(PlayerType type) {
|
||||
if (type == PlayerType.HUMAN) {
|
||||
return new LobbyPlayer(type, "Human"); // need to get name!
|
||||
}
|
||||
|
||||
LobbyPlayer player = findLocalPlayer(type, getRandomName());
|
||||
public final LobbyPlayer getAiPlayer() { return getAiPlayer(getRandomName()); }
|
||||
public final LobbyPlayer getAiPlayer(String name) {
|
||||
LobbyPlayer player = new LobbyPlayer(PlayerType.COMPUTER, name);
|
||||
player.setAvatarIndex(MyRandom.getRandom().nextInt(FSkin.getAvatars().size()));
|
||||
return player;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param nextInt
|
||||
@@ -96,7 +89,26 @@ public class Lobby {
|
||||
* @return
|
||||
*/
|
||||
public LobbyPlayer getQuestPlayer() {
|
||||
return new LobbyPlayer(PlayerType.HUMAN, "Human"); // need to get name!
|
||||
return guiPlayer;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public synchronized LobbyPlayer findOrCreateRemotePlayer(String name) {
|
||||
if (remotePlayers.containsKey(name))
|
||||
return remotePlayers.get(name);
|
||||
|
||||
LobbyPlayer res = new LobbyPlayer(PlayerType.REMOTE, name);
|
||||
// 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
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.SOverlayUtils;
|
||||
|
||||
/**
|
||||
@@ -170,8 +169,8 @@ public class GauntletMini {
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.HUMAN), humanDeck);
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.COMPUTER), aiOpponents.get(currentRound - 1));
|
||||
starter.addPlayer(lobby.getGuiPlayer(), humanDeck);
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiOpponents.get(currentRound - 1));
|
||||
|
||||
MatchController mc = Singletons.getModel().getMatch();
|
||||
mc.initMatch(gauntletType, starter.getPlayerMap());
|
||||
|
||||
@@ -253,8 +253,9 @@ public enum CSubmenuGauntletContests implements ICDoc {
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.HUMAN), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.COMPUTER), aiDeck);
|
||||
|
||||
starter.addPlayer(lobby.getGuiPlayer(), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
|
||||
MatchController mc = Singletons.getModel().getMatch();
|
||||
mc.initMatch(GameType.Gauntlet, starter.getPlayerMap());
|
||||
|
||||
@@ -17,7 +17,6 @@ import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gauntlet.GauntletData;
|
||||
import forge.gauntlet.GauntletIO;
|
||||
import forge.gui.SOverlayUtils;
|
||||
@@ -116,8 +115,8 @@ public enum CSubmenuGauntletLoad implements ICDoc {
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.HUMAN), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.COMPUTER), aiDeck);
|
||||
starter.addPlayer(lobby.getGuiPlayer(), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
|
||||
MatchController mc = Singletons.getModel().getMatch();
|
||||
mc.initMatch(GameType.Gauntlet, starter.getPlayerMap());
|
||||
|
||||
@@ -299,8 +299,9 @@ public enum CSubmenuGauntletQuick implements ICDoc {
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.HUMAN), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.COMPUTER), aiDeck);
|
||||
|
||||
starter.addPlayer(lobby.getGuiPlayer(), gd.getUserDeck());
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
|
||||
MatchController mc = Singletons.getModel().getMatch();
|
||||
mc.initMatch(GameType.Gauntlet, starter.getPlayerMap());
|
||||
|
||||
@@ -19,7 +19,6 @@ import forge.game.GameType;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.PlayerStartConditions;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
@@ -418,7 +417,7 @@ public class SSubmenuQuestUtil {
|
||||
MatchStartHelper msh = new MatchStartHelper();
|
||||
msh.addPlayer(Singletons.getControl().getLobby().getQuestPlayer(), humanStart);
|
||||
|
||||
LobbyPlayer aiPlayer = Singletons.getControl().getLobby().findLocalPlayer(PlayerType.COMPUTER, event.getOpponent() == null ? event.getTitle() : event.getOpponent());
|
||||
LobbyPlayer aiPlayer = Singletons.getControl().getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent());
|
||||
aiPlayer.setIconImageKey(event.getIconImageKey());
|
||||
msh.addPlayer(aiPlayer, aiStart);
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.properties.ForgePreferences;
|
||||
@@ -120,8 +119,8 @@ public enum CSubmenuConstructed implements ICDoc {
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.HUMAN), humanDeck);
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.COMPUTER), aiDeck);
|
||||
starter.addPlayer(lobby.getGuiPlayer(), humanDeck);
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
|
||||
MatchController mc = Singletons.getModel().getMatch();
|
||||
mc.initMatch(gameType, starter.getPlayerMap());
|
||||
|
||||
@@ -21,7 +21,6 @@ import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.limited.BoosterDraft;
|
||||
import forge.game.limited.CardPoolLimitation;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
@@ -136,8 +135,8 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
|
||||
MatchStartHelper starter = new MatchStartHelper();
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.HUMAN), humanDeck);
|
||||
starter.addPlayer(lobby.findLocalPlayer(PlayerType.COMPUTER), aiDeck);
|
||||
starter.addPlayer(lobby.getGuiPlayer(), humanDeck);
|
||||
starter.addPlayer(lobby.getAiPlayer(), aiDeck);
|
||||
|
||||
MatchController mc = Singletons.getModel().getMatch();
|
||||
mc.initMatch(GameType.Draft, starter.getPlayerMap());
|
||||
|
||||
@@ -22,7 +22,6 @@ import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.GuiDialog;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
@@ -227,7 +226,7 @@ public enum CSubmenuArchenemy implements ICDoc {
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
MatchStartHelper helper = new MatchStartHelper();
|
||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
||||
LobbyPlayer player = lobby.findLocalPlayer(i == 0 ? PlayerType.HUMAN : PlayerType.COMPUTER);
|
||||
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();
|
||||
|
||||
if (i == 0) {
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.GuiDialog;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
@@ -221,9 +220,7 @@ public enum CSubmenuPlanechase implements ICDoc {
|
||||
|
||||
GuiDialog.message("Player " + (i+1) + " will use a default planar deck.");
|
||||
}
|
||||
|
||||
LobbyPlayer player = lobby.findLocalPlayer(i == 0 ? PlayerType.HUMAN : PlayerType.COMPUTER);
|
||||
|
||||
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();
|
||||
helper.addPlanechasePlayer(player, playerDecks.get(i), planes);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import forge.game.GameType;
|
||||
import forge.game.MatchController;
|
||||
import forge.game.MatchStartHelper;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.gui.GuiDialog;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.framework.ICDoc;
|
||||
@@ -178,7 +177,7 @@ public enum CSubmenuVanguard implements ICDoc {
|
||||
Lobby lobby = Singletons.getControl().getLobby();
|
||||
MatchStartHelper helper = new MatchStartHelper();
|
||||
for (int i = 0; i < view.getNumPlayers(); i++) {
|
||||
LobbyPlayer player = lobby.findLocalPlayer(i == 0 ? PlayerType.HUMAN : PlayerType.COMPUTER);
|
||||
LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer();
|
||||
|
||||
helper.addVanguardPlayer(player, playerDecks.get(i), playerAvatars.get(i));
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public interface INetClient {
|
||||
void send(IMessage message);
|
||||
|
||||
|
||||
void setPlayer(LobbyPlayer lobbyPlayer);
|
||||
void createPlayer(String playerName);
|
||||
LobbyPlayer getPlayer();
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package forge.net.client;
|
||||
import java.util.concurrent.BlockingDeque;
|
||||
import java.util.concurrent.LinkedBlockingDeque;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.net.IClientSocket;
|
||||
import forge.net.IConnectionObserver;
|
||||
@@ -35,6 +36,7 @@ public class NetClient implements IConnectionObserver, INetClient{
|
||||
@Override
|
||||
public void onConnectionClosed() {
|
||||
// Tell the game, the client is gone.
|
||||
if ( player != null ) Singletons.getControl().getLobby().disconnectPlayer(player);
|
||||
}
|
||||
|
||||
|
||||
@@ -63,8 +65,8 @@ public class NetClient implements IConnectionObserver, INetClient{
|
||||
* @see forge.net.client.INetClient#setPlayer(forge.game.player.LobbyPlayer)
|
||||
*/
|
||||
@Override
|
||||
public final void setPlayer(LobbyPlayer lobbyPlayer) {
|
||||
player = lobbyPlayer;
|
||||
public final void createPlayer(String name) {
|
||||
player = Singletons.getControl().getLobby().findOrCreateRemotePlayer(name);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package forge.net.client.state;
|
||||
|
||||
import forge.net.client.INetClient;
|
||||
import forge.net.protocol.incoming.ChatPacket;
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
import forge.net.protocol.incoming.PacketOpcode;
|
||||
import forge.net.protocol.outcoming.EchoMessage;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -16,6 +19,13 @@ public class InLobbyClientState implements IClientState {
|
||||
|
||||
@Override
|
||||
public boolean processPacket(IPacket data) {
|
||||
if( data.getOpCode() == PacketOpcode.Chat)
|
||||
{
|
||||
ChatPacket cp = (ChatPacket) data;
|
||||
// should actually find all players in a lobby and send it to them
|
||||
client.send(new EchoMessage("chat - " + cp.getMessage()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
package forge.net.client.state;
|
||||
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.game.player.PlayerType;
|
||||
import forge.net.client.INetClient;
|
||||
import forge.net.protocol.incoming.AuthorizePacket;
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
@@ -32,7 +30,7 @@ public class UnauthorizedClientState implements IClientState {
|
||||
client.send(new AuthorizationSuccessfulMessage(p.getUsername()));
|
||||
|
||||
|
||||
client.setPlayer(new LobbyPlayer(PlayerType.REMOTE, p.getUsername()));
|
||||
client.createPlayer(p.getUsername());
|
||||
client.replaceState(this, new InLobbyClientState(client));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ public class EchoMessage implements IMessage {
|
||||
|
||||
@Override
|
||||
public String toNetString() {
|
||||
return String.format("System: %s", message);
|
||||
return String.format("Echo: %s", message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user