From 723e1de3e073ece566fe8e72919b4bf6d704a6d8 Mon Sep 17 00:00:00 2001 From: njs11009 Date: Wed, 9 Dec 2015 01:21:40 -0500 Subject: [PATCH] Added player flags to support invisibility. Suppressed connection messages if player connects as invisible. Added in an option to check if client wishes to connect as invisible (leaves an unused variable in /client/Client.java). --- MegaMek/src/megamek/client/Client.java | 24 ++++++++++++++++++- .../megamek/client/ui/swing/MegaMekGUI.java | 12 ++++++++-- MegaMek/src/megamek/common/IPlayer.java | 5 ++++ MegaMek/src/megamek/common/Player.java | 13 +++++++++- MegaMek/src/megamek/server/Server.java | 5 +++- 5 files changed, 54 insertions(+), 5 deletions(-) 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 + + } }