From c5e29e01323cec86b896e00cc28fc8e41afca966 Mon Sep 17 00:00:00 2001 From: stefagr <stefagr@stud.ntnu.no> Date: Mon, 5 Apr 2021 17:45:44 +0200 Subject: [PATCH] some more bugfix --- .../game/controllers/NetworkController.java | 8 +-- .../game/controllers/PlayerController.java | 25 +++++--- .../src/com/mygdx/game/views/LobbyView.java | 58 +++++++++---------- .../src/com/mygdx/game/views/MenuView.java | 2 +- 4 files changed, 46 insertions(+), 47 deletions(-) diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java index d8dde9c..bb21226 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java @@ -13,12 +13,12 @@ import com.mygdx.game.views.tokens.PlayerAvatar; import java.io.IOException; import java.util.ArrayList; +import java.util.LinkedList; public class NetworkController { private Client client; private Kryo kryo; - private Queue<Command> commandQueue; private boolean devMode = false; @@ -34,18 +34,12 @@ public class NetworkController { } kryo = client.getKryo(); registerClasses(); - commandQueue = new Queue<>(); } public void sendToServer(Command command){ - //commandQueue.addFirst(command); client.sendTCP(command); } - public void clearCommands(){ - commandQueue.clear(); - } - public void registerClasses(){ kryo.register(ArrayList.class, 100); kryo.register(Lobby.class, 5); diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java index 3bc79d7..f2410d9 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java @@ -7,10 +7,12 @@ import com.mygdx.game.model.Lobby; import com.mygdx.game.model.Player; import java.util.ArrayList; +import java.util.LinkedList; public class PlayerController { private NetworkController net; + private LinkedList<Command> receivedCommands; private Player player; //This is the current player private Lobby lobby; //Current lobby private ArrayList<Lobby> lobbies; //List of all lobbies @@ -20,6 +22,7 @@ public class PlayerController { player = new Player(-1); lobby = new Lobby(-1); lobbies = new ArrayList<Lobby>(); + receivedCommands = new LinkedList<Command>(); net.getClient().addListener(new Listener() { public void received (Connection connection, Object object) { @@ -27,26 +30,32 @@ public class PlayerController { Command command = (Command) object; System.out.println("Received: "+ command.toString()); command.execute(getPlayerController(), connection); + receivedCommands.removeFirst(); + receivedCommands.addFirst(command); } } }); connectPlayer(0); } + private void sendCommand(Command command){ + receivedCommands.addFirst(null); + net.sendToServer(command); + } - public void lobbyGetList(){ net.sendToServer(new cLobbyGetList()); } + public void lobbyGetList(){ sendCommand(new cLobbyGetList()); } - public void connectPlayer(int avatarIndex){ net.sendToServer(new cPlayerJoin(avatarIndex));} + public void connectPlayer(int avatarIndex){ sendCommand(new cPlayerJoin(avatarIndex));} - public void createLobby(String name, int MAX_PLAYERS){ net.sendToServer(new cLobbyCreate(name, MAX_PLAYERS)); } + public void createLobby(String name, int MAX_PLAYERS){ sendCommand(new cLobbyCreate(name, MAX_PLAYERS)); } - public void updateIndexAvatar(int indexAvatar){ net.sendToServer(new cSetIndexAvatar(indexAvatar)); } + public void updateIndexAvatar(int indexAvatar){ sendCommand(new cSetIndexAvatar(indexAvatar)); } - public void deleteLobby(int id){ net.sendToServer(new cLobbyDelete(id)); } + public void deleteLobby(int id){ sendCommand(new cLobbyDelete(id)); } - public void joinLobby(int id){ net.sendToServer(new cLobbyJoin(id)); } + public void joinLobby(int id){ sendCommand(new cLobbyJoin(id)); } - public void leaveLobby(int id) { net.sendToServer(new cLobbyLeave(id)); } + public void leaveLobby(int id) { sendCommand(new cLobbyLeave(id)); } public Lobby getLobby(){ return lobby; } @@ -64,6 +73,8 @@ public class PlayerController { public NetworkController getNetWorkController() { return net; } + public Command getLastCommand(){ return receivedCommands.getFirst(); } + diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java index f754833..dce43f9 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java @@ -275,7 +275,7 @@ public class LobbyView extends View{ Gdx.input.setOnscreenKeyboardVisible(false); stage.unfocusAll(); - while(playerController.getLobby() == null){System.out.println("NOT FINDING A LOBBY");} + if(playerController.getLobby() == null){System.out.println("NOT FINDING A LOBBY");} if(playerController.getLobby().getPlayers().size() == 1){ System.out.println("Deleting lobby " + playerController.getLobby().getName()); @@ -312,22 +312,17 @@ public class LobbyView extends View{ } playerController.joinLobby(getLobbyByStringHashMap.get(lobbyListStrings.getSelected())); System.out.println("joining lobby with lobbyID: " + lobbyListStrings.getSelectedIndex()); - while (playerController.getLobby() == null) { + while (playerController.getLastCommand() == null) { System.out.println("Waiting for lobby"); } Lobby lobby = playerController.getLobby(); System.out.println("Lobby loaded " + lobby); + Gdx.input.setOnscreenKeyboardVisible(false); + showLobbyWindow(); + lobbyRefresh(); } }; thread.start(); - try { - thread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - Gdx.input.setOnscreenKeyboardVisible(false); - showLobbyWindow(); - lobbyRefresh(); } else{ outputLabel.setText("LobbyListHash did not contain the selected key."); @@ -383,7 +378,7 @@ public class LobbyView extends View{ public void run(){ playerController.createLobby(lobbyCreateTextField.getText(), lobbyCreateSizeSelectBox.getSelected()); System.out.println("Creating lobby '" + lobbyCreateTextField.getText() + "' with maxSize " + lobbyCreateSizeSelectBox.getSelected()); - while (playerController.getLobby() == null) { + while (playerController.getLastCommand() == null) { System.out.println("Waiting for lobby object from server.."); } while(playerController.getLobby().getID() == -1){ @@ -394,7 +389,7 @@ public class LobbyView extends View{ System.out.println("Lobby loaded successfully. '" + playerController.getLobby().getName() + "', maxPlayers: " + lobby.getMaxPlayers() + ", NumOfPlayersInLobby: " + lobby.getPlayers().size()); playerController.joinLobby(playerController.getLobby().getID()); - while(playerController.getLobby().getPlayers().size() == 0){System.out.println("NOT JOINED LOBBY YET");} + while(playerController.getLastCommand() == null){System.out.println("NOT JOINED LOBBY YET");} Gdx.input.setOnscreenKeyboardVisible(false); showLobbyWindow(); lobbyRefresh(); @@ -441,7 +436,7 @@ public class LobbyView extends View{ public void run(){ playerController.setLobbies(null); playerController.lobbyGetList(); - while (playerController.getLobbyList() == null) { + while (playerController.getLastCommand() == null) { System.out.println("Waiting for lobby" + currentLobbyList); } ArrayList<Lobby> lobbyList = playerController.getLobbyList(); @@ -529,26 +524,25 @@ public class LobbyView extends View{ private ArrayList<PlayerAvatar> lobbyAvatars = new ArrayList<>(); private void lobbyRefresh(){ - Thread thread = new Thread(){ - public void run(){ - while(playerController.getLobby() == null) {} - lobbyAvatars.clear(); - lobby = playerController.getLobby(); - playersInLobby = lobby.getPlayers(); - //System.out.println("My avatar Index: "+ playerController.getPlayer().getIndexAvatar()); - //System.out.println("Number of players in lobby: "+ lobby.getPlayers().size()); - - for(int i = 0; i<playersInLobby.size(); i++){ - //System.out.println("This players ID: "+ playersInLobby.get(i).getID() + " avatarIndex: "+ playersInLobby.get(i).getIndexAvatar()); - PlayerAvatar pa = availableAvatars.get(playersInLobby.get(i).getIndexAvatar()); - pa.setScale(0.3f, 0.3f); - pa.setOrigin(0, 0); - pa.setPosition(playerPositions.get(i)[0], playerPositions.get(i)[1]); - lobbyAvatars.add(pa); - } + if(playerController.getLobby() == null) { + System.out.println("Error during lobby refresh: not in a lobby"); + } + else{ + lobbyAvatars.clear(); + lobby = playerController.getLobby(); + playersInLobby = lobby.getPlayers(); + //System.out.println("My avatar Index: "+ playerController.getPlayer().getIndexAvatar()); + //System.out.println("Number of players in lobby: "+ lobby.getPlayers().size()); + + for(int i = 0; i<playersInLobby.size(); i++){ + //System.out.println("This players ID: "+ playersInLobby.get(i).getID() + " avatarIndex: "+ playersInLobby.get(i).getIndexAvatar()); + PlayerAvatar pa = availableAvatars.get(playersInLobby.get(i).getIndexAvatar()); + pa.setScale(0.3f, 0.3f); + pa.setOrigin(0, 0); + pa.setPosition(playerPositions.get(i)[0], playerPositions.get(i)[1]); + lobbyAvatars.add(pa); } - }; - thread.start(); + } } private void showLobbyWindow(){ diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java index 14cccc5..3051fb3 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java @@ -312,7 +312,7 @@ public class MenuView extends View{ } } - if(playerController.getPlayer() != null){ + if(playerController.getPlayer().getID() != -1){ stage.addActor(connectionBarGreenCircle); connectionBarRedCircle.remove(); } -- GitLab