diff --git a/MegaMek/src/megamek/client/Client.java b/MegaMek/src/megamek/client/Client.java index 2b93d1cd..21f701df 100644 --- a/MegaMek/src/megamek/client/Client.java +++ b/MegaMek/src/megamek/client/Client.java @@ -117,7 +117,8 @@ public class Client implements IClientCommandHandler { // we need these to communicate with the server private String name; - + private boolean conAsInvis; + private IConnection connection; // the hash table of client commands @@ -250,6 +251,27 @@ public Client(String name, String host, int port) { rsg = new RandomSkillsGenerator(); } + public Client(String name, String host, int port, boolean invisible) { + // construct new client + this.name = name; + this.host = host; + this.port = port; + this.conAsInvis = invisible; + + registerCommand(new HelpCommand(this)); + registerCommand(new MoveCommand(this)); + registerCommand(new RulerCommand(this)); + registerCommand(new ShowEntityCommand(this)); + registerCommand(new FireCommand(this)); + registerCommand(new DeployCommand(this)); + registerCommand(new ShowTileCommand(this)); + registerCommand(new AddBotCommand(this)); + registerCommand(new AssignNovaNetworkCommand(this)); + + rsg = new RandomSkillsGenerator(); + } + + public int getLocalPlayerNumber() { return localPlayerNumber; } diff --git a/MegaMek/src/megamek/client/ui/swing/MegaMekGUI.java b/MegaMek/src/megamek/client/ui/swing/MegaMekGUI.java index 5304a7f1..5becd439 100644 --- a/MegaMek/src/megamek/client/ui/swing/MegaMekGUI.java +++ b/MegaMek/src/megamek/client/ui/swing/MegaMekGUI.java @@ -735,9 +735,17 @@ void connect() { Messages.getString("MegaMek.ConnectAlert.message"), Messages.getString("MegaMek.ConnectAlert.title"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$ return; } - + boolean conAsInvis = false; + if (cd.spectateValue.equalsIgnoreCase("Yes")) { + conAsInvis = true; + } // initialize game - client = new Client(cd.playerName, cd.serverAddr, cd.port); + if(!conAsInvis){ + client = new Client(cd.playerName, cd.serverAddr, cd.port); + } + else { + client = new Client(cd.playerName, cd.serverAddr, cd.port, true); + } ClientGUI gui = new ClientGUI(client,controller); controller.clientgui = gui; frame.setCursor(new Cursor(Cursor.WAIT_CURSOR)); diff --git a/MegaMek/src/megamek/common/IPlayer.java b/MegaMek/src/megamek/common/IPlayer.java index 155a4857..8d23e498 100644 --- a/MegaMek/src/megamek/common/IPlayer.java +++ b/MegaMek/src/megamek/common/IPlayer.java @@ -147,6 +147,10 @@ public interface IPlayer extends ITurnOrdered { Vector getArtyAutoHitHexes(); void addArtyAutoHitHex(Coords c); + + boolean isInvisible(); + + void setInvisible(boolean invisible); boolean hasTAG(); @@ -192,4 +196,5 @@ public interface IPlayer extends ITurnOrdered { * @return a vector of relevant entity ids */ Vector getAirborneVTOL(); + } \ No newline at end of file diff --git a/MegaMek/src/megamek/common/Player.java b/MegaMek/src/megamek/common/Player.java index 289cfec0..ad7ec2ce 100644 --- a/MegaMek/src/megamek/common/Player.java +++ b/MegaMek/src/megamek/common/Player.java @@ -33,7 +33,7 @@ public final class Player extends TurnOrdered implements IPlayer { private String name = "unnamed"; private int id; - + private boolean invisible = false; private int team = TEAM_NONE; private boolean done = false; // done with phase @@ -228,6 +228,11 @@ public void setTeam(int team) { this.team = team; } + @Override + public boolean isInvisible() { + return this.invisible; + } + @Override public boolean isDone() { return done; @@ -282,6 +287,11 @@ public void setObserver(boolean observer) { setSeeAll(false); } } + + @Override + public void setInvisible(boolean invisible) { + this.invisible = invisible; + } @Override public int getColorIndex() { @@ -554,4 +564,5 @@ public Vector getAirborneVTOL() { public String toString() { return "Player " + getId() + " (" + getName() + ")"; } + } diff --git a/MegaMek/src/megamek/server/Server.java b/MegaMek/src/megamek/server/Server.java index a8621976..a1ad105d 100644 --- a/MegaMek/src/megamek/server/Server.java +++ b/MegaMek/src/megamek/server/Server.java @@ -971,7 +971,8 @@ private void receivePlayerName(Packet packet, int connId) { && (game.getEntitiesOwnedBy(player) < 1)) { player.setObserver(true); } - + + if (player.isInvisible() == false) { // send the player the motd sendServerChat(connId, motd); @@ -1015,6 +1016,8 @@ private void receivePlayerName(Packet packet, int connId) { sendServerChat(who); } // Found the player + + } }