From 1cace21e88582dd653f377c90e0a87b7528e2059 Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:47:17 +0200 Subject: [PATCH 01/10] la til tilgang til client og server --- .../roborally/objects/RoboRallyGame.java | 69 ++++++++++++++++--- 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java b/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java index a3ee01f..596deba 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java +++ b/src/main/java/inf112/fiasko/roborally/objects/RoboRallyGame.java @@ -1,11 +1,15 @@ package inf112.fiasko.roborally.objects; +import com.esotericsoftware.kryonet.Client; +import com.esotericsoftware.kryonet.Connection; import inf112.fiasko.roborally.element_properties.Action; import inf112.fiasko.roborally.element_properties.Direction; import inf112.fiasko.roborally.element_properties.GameState; import inf112.fiasko.roborally.element_properties.Position; import inf112.fiasko.roborally.element_properties.RobotID; import inf112.fiasko.roborally.element_properties.TileType; +import inf112.fiasko.roborally.networking.RoboRallyClient; +import inf112.fiasko.roborally.networking.RoboRallyServer; import inf112.fiasko.roborally.utility.BoardLoaderUtil; import inf112.fiasko.roborally.utility.DeckLoaderUtil; @@ -30,6 +34,19 @@ public class RoboRallyGame implements IDrawableGame { private final boolean host; private Deck mainDeck; private GameState gameState = GameState.INITIAL_SETUP; + private String nameOfPlayer; + private RoboRallyClient client; + private RoboRallyServer server; + + + + public String getNameOfPlayer() { + return nameOfPlayer; + } + + public void setNameOfPlayer(String nameOfPlayer) { + this.nameOfPlayer = nameOfPlayer; + } /** * Returns the gameState of the game @@ -39,6 +56,22 @@ public class RoboRallyGame implements IDrawableGame { return gameState; } + @Override + public RoboRallyClient getClient() { + return client; + } + + @Override + public void setClient(RoboRallyClient client) { + this.client=client; + + } + + @Override + public void setServer(RoboRallyServer server) { + this.server=server; + } + /** * Sets the gameState of the game * @param gameState the gameState @@ -51,7 +84,8 @@ public class RoboRallyGame implements IDrawableGame { * Instantiates a new robo rally game * @param debug Whether to start the game in debugging mode */ - public RoboRallyGame(List playerList, String boardName, boolean host, boolean debug) { + public RoboRallyGame(List playerList, String boardName, boolean host, boolean debug, String name) { + this.nameOfPlayer = name; this.host = host; this.playerList = playerList; if (debug) { @@ -60,11 +94,11 @@ public class RoboRallyGame implements IDrawableGame { initializeGame(boardName); } } - /** * Instantiates a new robo rally game */ - public RoboRallyGame(List playerList, String boardName,boolean host) { + public RoboRallyGame(List playerList, String boardName,boolean host,String nameOfPlayer) { + this.nameOfPlayer = nameOfPlayer; this.host = host; this.playerList = playerList; initializeGame(boardName); @@ -183,6 +217,14 @@ public class RoboRallyGame implements IDrawableGame { repairTiles = gameBoard.getPositionsOfTileOnBoard(TileType.FLAG_1, TileType.FLAG_2, TileType.FLAG_3, TileType.FLAG_4, TileType.WRENCH, TileType.WRENCH_AND_HAMMER); } + private Player getPlayerFromName(String name){ + for (Player player:playerList) { + if(player.getName().equals(name)){ + return player; + } + } + return null; + } /** * Runs all the steps of one turn in the game @@ -215,15 +257,26 @@ public class RoboRallyGame implements IDrawableGame { gameBoard.executePowerdown(); if (host) { distributeProgrammingCardsToPlayers(); + for (Connection connection: server.getPlayerNames().keySet()) { + String playerName = server.getPlayerNames().get(connection); + Player player = getPlayerFromName(playerName); + if(player.getPlayerDeck()!=null) { + server.sendToClient(connection, player.getPlayerDeck()); + } + } } + setGameState(GameState.CHOOSING_CARDS); // TODO: Make program for this player, if not in power down // TODO: Ask player for new power down // Run the phases of the game - runPhase(1); - runPhase(2); - runPhase(3); - runPhase(4); - runPhase(5); + while (getGameState()==GameState.CHOOSING_CARDS) { + //loops waiting for the player to be done choosing their cards + } + runPhase(1); + runPhase(2); + runPhase(3); + runPhase(4); + runPhase(5); // Repair robots on repair tiles repairAllRobotsOnRepairTiles(); From b1892e3447980874553c67b6034cec64faaafdaa Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:47:42 +0200 Subject: [PATCH 02/10] la til getters og sertters for client og server --- .../inf112/fiasko/roborally/objects/IDrawableGame.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/inf112/fiasko/roborally/objects/IDrawableGame.java b/src/main/java/inf112/fiasko/roborally/objects/IDrawableGame.java index e6ac90c..cb6abdb 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/IDrawableGame.java +++ b/src/main/java/inf112/fiasko/roborally/objects/IDrawableGame.java @@ -1,6 +1,8 @@ package inf112.fiasko.roborally.objects; import inf112.fiasko.roborally.element_properties.GameState; +import inf112.fiasko.roborally.networking.RoboRallyClient; +import inf112.fiasko.roborally.networking.RoboRallyServer; import java.util.List; @@ -63,4 +65,10 @@ public interface IDrawableGame { */ GameState getGameState(); + + RoboRallyClient getClient(); + + void setClient(RoboRallyClient client); + + void setServer(RoboRallyServer server); } From ce97c923259cc8fd41b86f13ac6b728b6a3e872c Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:48:33 +0200 Subject: [PATCH 03/10] la til en function som lar deg sendet et objekt til bare en client --- .../inf112/fiasko/roborally/networking/RoboRallyServer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java index 43323e4..396f0d2 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java @@ -53,8 +53,13 @@ public class RoboRallyServer { public void sendToAllClients(Object object) { server.sendToAllTCP(object); } + + public void sendToClient(Connection connection, Object object){ + server.sendToTCP(connection.getID(),object); + } } + /** * This listener handles all sending and responses for the server */ From 847586d06cbe644b18da04033f88367fefcd1a6c Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:49:11 +0200 Subject: [PATCH 04/10] =?UTF-8?q?la=20til=20mulighet=20til=20=C3=A5=20mota?= =?UTF-8?q?=20programming=20cards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fiasko/roborally/networking/RoboRallyClient.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java index 52dc749..b613fbf 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java @@ -4,8 +4,10 @@ import com.esotericsoftware.kryonet.Client; import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Listener; import inf112.fiasko.roborally.game_wrapper.RoboRallyWrapper; +import inf112.fiasko.roborally.game_wrapper.screens.CardChoiceScreen; import inf112.fiasko.roborally.networking.containers.ErrorResponse; import inf112.fiasko.roborally.networking.containers.GameStartInfo; +import inf112.fiasko.roborally.objects.ProgrammingCardDeck; import inf112.fiasko.roborally.objects.RoboRallyGame; import inf112.fiasko.roborally.utility.NetworkUtil; @@ -16,7 +18,6 @@ import java.io.IOException; */ public class RoboRallyClient { private final Client client; - /** * Instantiates a new Robo Rally client * @param ipAddress The ip address of the server to connect to @@ -64,7 +65,10 @@ class RoboRallyClientListener extends Listener { } else if (object instanceof GameStartInfo) { GameStartInfo info = (GameStartInfo) object; wrapper.roboRallyGame = new RoboRallyGame(info.getPlayerList(), info.getBoardName(), - wrapper.server != null); + wrapper.server != null,info.getPlayerName()); + } + else if(object instanceof ProgrammingCardDeck){ + wrapper.setScreen(new CardChoiceScreen(wrapper,(ProgrammingCardDeck) object)); } } } From bd9dbf555561596c8320bb690cc255fdb34ad2d8 Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:49:49 +0200 Subject: [PATCH 05/10] fjernet cardchoisescreen --- .../roborally/game_wrapper/ScreenManager.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/game_wrapper/ScreenManager.java b/src/main/java/inf112/fiasko/roborally/game_wrapper/ScreenManager.java index 42e29a8..43b4144 100644 --- a/src/main/java/inf112/fiasko/roborally/game_wrapper/ScreenManager.java +++ b/src/main/java/inf112/fiasko/roborally/game_wrapper/ScreenManager.java @@ -15,7 +15,6 @@ import inf112.fiasko.roborally.game_wrapper.screens.StartMenuScreen; */ public class ScreenManager { private BoardActiveScreen boardActiveScreen; - private CardChoiceScreen cardChoiceScreen; private PowerDownScreen powerDownScreen; private LoadingScreen loadingScreen; private UsernameScreen usernameScreen; @@ -103,15 +102,5 @@ public class ScreenManager { return boardActiveScreen; } - /** - * Gets an instance of the card choice screen - * @param roboRallyWrapper The Robo Rally launcher instance to use - * @return A card choice screen instance - */ - public synchronized CardChoiceScreen getCardChoiceScreen(RoboRallyWrapper roboRallyWrapper) { - if (this.cardChoiceScreen == null) { - this.cardChoiceScreen = new CardChoiceScreen(roboRallyWrapper); - } - return cardChoiceScreen; - } + } From 0ddf309e703ee62a0bc162fcec0ebf24f6950bb6 Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:50:21 +0200 Subject: [PATCH 06/10] =?UTF-8?q?endre=20p=C3=A5=20neste=20screen=20fra=20?= =?UTF-8?q?loading=20screenet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roborally/game_wrapper/screens/LobbyScreen.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LobbyScreen.java b/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LobbyScreen.java index b13c8ad..4c07e21 100644 --- a/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LobbyScreen.java +++ b/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LobbyScreen.java @@ -14,8 +14,10 @@ import inf112.fiasko.roborally.game_wrapper.SimpleButton; import inf112.fiasko.roborally.networking.containers.GameStartInfo; import inf112.fiasko.roborally.objects.Player; import inf112.fiasko.roborally.utility.IOUtil; +import com.esotericsoftware.kryonet.Connection; import java.util.List; +import java.util.Map; /** * This screen allows the host to wait for players to join @@ -44,9 +46,13 @@ public class LobbyScreen extends AbstractScreen { startGameButton.addListener(new InputListener() { @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { - List playerlist = IOUtil.playerGenerator(roboRallyWrapper.server.getPlayerNames(), + Map playernames = roboRallyWrapper.server.getPlayerNames(); + List playerlist = IOUtil.playerGenerator(playernames, roboRallyWrapper.server.getRobotID()); - roboRallyWrapper.server.sendToAllClients(new GameStartInfo("Checkmate.txt",playerlist)); + for (Connection connection:playernames.keySet()) { + roboRallyWrapper.server.sendToClient(connection,new GameStartInfo("Checkmate.txt" + ,playerlist,playernames.get(connection))); + } roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getLoadingScreen(roboRallyWrapper)); return true;//her we do stuff } From cafde5245db11ac63480b9dbda714e2b817eebd4 Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:50:45 +0200 Subject: [PATCH 07/10] endre til et annet screen --- .../game_wrapper/screens/LoadingScreen.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LoadingScreen.java b/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LoadingScreen.java index 43d7e8a..10257ba 100644 --- a/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LoadingScreen.java +++ b/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/LoadingScreen.java @@ -47,13 +47,17 @@ public class LoadingScreen extends AbstractScreen { roboRallyWrapper.batch.end(); long time = System.currentTimeMillis(); //TODO: Allow to set any condition and next screen - if (roboRallyWrapper.roboRallyGame.getGameState() != initialGameState) { + if (roboRallyWrapper.roboRallyGame != null && roboRallyWrapper.roboRallyGame.getGameState() != initialGameState ) { handleScreenChange(); } } private void handleScreenChange() { - roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getBoardActiveScreen(this.roboRallyWrapper)); + switch (initialGameState) { + case SENDING_CARDS: + roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getBoardActiveScreen(this.roboRallyWrapper)); + break; + } } @Override @@ -64,7 +68,12 @@ public class LoadingScreen extends AbstractScreen { @Override public void show() { startTime = System.currentTimeMillis(); - initialGameState = roboRallyWrapper.roboRallyGame.getGameState(); + if (roboRallyWrapper.roboRallyGame == null){ + initialGameState = GameState.INITIAL_SETUP; + } + else { + initialGameState = roboRallyWrapper.roboRallyGame.getGameState(); + } } } From 693ade38f534f2f4ffd9d77391dca8a13d4d8044 Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:51:14 +0200 Subject: [PATCH 08/10] la til slik at den tar et deck i input --- .../roborally/game_wrapper/screens/CardChoiceScreen.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/CardChoiceScreen.java b/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/CardChoiceScreen.java index d8595a3..c567104 100644 --- a/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/CardChoiceScreen.java +++ b/src/main/java/inf112/fiasko/roborally/game_wrapper/screens/CardChoiceScreen.java @@ -19,6 +19,7 @@ import inf112.fiasko.roborally.game_wrapper.RoboRallyWrapper; import inf112.fiasko.roborally.game_wrapper.SimpleButton; import inf112.fiasko.roborally.objects.IDeck; import inf112.fiasko.roborally.objects.ProgrammingCard; +import inf112.fiasko.roborally.objects.ProgrammingCardDeck; import inf112.fiasko.roborally.utility.DeckLoaderUtil; import java.awt.*; @@ -44,12 +45,14 @@ public class CardChoiceScreen extends InputAdapter implements Screen { private final int maxCards; private final Stage stage; private final InputMultiplexer inputMultiplexer; + private ProgrammingCardDeck deck; /** * Instantiates a new card choice screen * @param roboRallyWrapper The Robo Rally wrapper which is parent of this screen */ - public CardChoiceScreen(final RoboRallyWrapper roboRallyWrapper) { + public CardChoiceScreen(final RoboRallyWrapper roboRallyWrapper, ProgrammingCardDeck deck) { + this.deck = deck; this.roboRallyWrapper = roboRallyWrapper; camera = new OrthographicCamera(); int applicationWidth = 600; @@ -89,6 +92,10 @@ public class CardChoiceScreen extends InputAdapter implements Screen { stage.setViewport(viewport); inputMultiplexer.addProcessor(this); inputMultiplexer.addProcessor(stage); + if(roboRallyWrapper.roboRallyGame.getClient()==null){ + roboRallyWrapper.roboRallyGame.setClient(roboRallyWrapper.client); + roboRallyWrapper.roboRallyGame.setServer(roboRallyWrapper.server); + } } /** From c389b29195f4ecaf09b34e0221d8aaaf361c8c0a Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:51:29 +0200 Subject: [PATCH 09/10] la til flere game stats --- .../inf112/fiasko/roborally/element_properties/GameState.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/inf112/fiasko/roborally/element_properties/GameState.java b/src/main/java/inf112/fiasko/roborally/element_properties/GameState.java index f9c9dee..720f360 100644 --- a/src/main/java/inf112/fiasko/roborally/element_properties/GameState.java +++ b/src/main/java/inf112/fiasko/roborally/element_properties/GameState.java @@ -16,5 +16,7 @@ public enum GameState { //Indicates that the user is in the process of choosing whether to power down CHOOSING_POWER_DOWN, //Indicates that the user is in the process of choosing whether to stay in power down - CHOOSING_STAY_IN_POWER_DOWN + CHOOSING_STAY_IN_POWER_DOWN, + //Indicates that the user is in the process of sending their cards to the server + SENDING_CARDS } From 4632fe3acdeaefc8d98f801ac2477fb4cd2f585a Mon Sep 17 00:00:00 2001 From: Tobydrama Date: Tue, 14 Apr 2020 14:51:53 +0200 Subject: [PATCH 10/10] la til playername --- .../networking/containers/GameStartInfo.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/inf112/fiasko/roborally/networking/containers/GameStartInfo.java b/src/main/java/inf112/fiasko/roborally/networking/containers/GameStartInfo.java index d060020..b10ada8 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/containers/GameStartInfo.java +++ b/src/main/java/inf112/fiasko/roborally/networking/containers/GameStartInfo.java @@ -10,12 +10,21 @@ import java.util.List; public class GameStartInfo { private String boardName; private List playerList; + private String playerName; /** * Empty initialization method used by kryo */ public GameStartInfo() {} + public void setPlayerName(String playerName) { + this.playerName = playerName; + } + + public String getPlayerName() { + return playerName; + } + /** * Sets the name of the board to be used * @param boardName The name of the board to be used, with extension @@ -37,7 +46,8 @@ public class GameStartInfo { * @param boardName The name of the board to be used, with extension * @param playerList List of players for the game */ - public GameStartInfo(String boardName, List playerList) { + public GameStartInfo(String boardName, List playerList,String name) { + this.playerName=name; this.boardName = boardName; this.playerList = playerList; }