diff --git a/CheckersClient/.idea/caches/build_file_checksums.ser b/CheckersClient/.idea/caches/build_file_checksums.ser index 81028eea2fc848506c97c5c1f3b1c93cf4c1c788..13675fdaaed4926c89b045bb8c396fb86f523650 100644 Binary files a/CheckersClient/.idea/caches/build_file_checksums.ser and b/CheckersClient/.idea/caches/build_file_checksums.ser differ diff --git a/CheckersClient/android/assets/Loading/LoadingBarBackground.png b/CheckersClient/android/assets/Loading/LoadingBarBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..5128e41cf63ae4f7d2432993ccb11f4dd96e34c6 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarBackground.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingBarBorder.png b/CheckersClient/android/assets/Loading/LoadingBarBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..7da6d2851e8b4b11e3026df1417c1cedcf1c1fa2 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarBorder.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingBarFill.png b/CheckersClient/android/assets/Loading/LoadingBarFill.png new file mode 100644 index 0000000000000000000000000000000000000000..a62a4be48ca8fdf71b70ea42ce2452a942628dfb Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarFill.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingDot.png b/CheckersClient/android/assets/Loading/LoadingDot.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0eb9fe132cdef62f6acd96ae08b1fd619b249 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingDot.png differ diff --git a/CheckersClient/android/assets/Loading/LoadingText.png b/CheckersClient/android/assets/Loading/LoadingText.png new file mode 100644 index 0000000000000000000000000000000000000000..3327f9ee7a66412f3e2e14badba2284ec74fa6c9 Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingText.png differ diff --git a/CheckersClient/android/assets/Menu/1x/ConnectionBar.png b/CheckersClient/android/assets/Menu/1x/ConnectionBar.png new file mode 100644 index 0000000000000000000000000000000000000000..99923e288792146810e0f085778c452d813bd8af Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/ConnectionBar.png differ diff --git a/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png b/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..d87d4975b87432cc4b8c6ecea587ab8f0d231755 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png differ diff --git a/CheckersClient/android/assets/Menu/1x/MainMenuForm.png b/CheckersClient/android/assets/Menu/1x/MainMenuForm.png index 795f9abecd1f2d70eb99328dc3436b8fc89c54aa..fa2fd0625e2059a7110678fbd4975f68f2c3d20b 100644 Binary files a/CheckersClient/android/assets/Menu/1x/MainMenuForm.png and b/CheckersClient/android/assets/Menu/1x/MainMenuForm.png differ diff --git a/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png b/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..ee77e4b35c5408d48caf1e5bbe9b763adc1f5785 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png differ diff --git a/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3ed55d3f843c6c381317e59784ec31c7dd7371 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png differ diff --git a/CheckersClient/android/assets/Menu/1x/flipButton.png b/CheckersClient/android/assets/Menu/1x/flipButton.png new file mode 100644 index 0000000000000000000000000000000000000000..11d2f62806263409f481bd6474f278d85c2f42a0 Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/flipButton.png differ diff --git a/CheckersClient/android/assets/Menu/Click11.wav.asd b/CheckersClient/android/assets/Menu/Click11.wav.asd new file mode 100644 index 0000000000000000000000000000000000000000..bf1f98b27e67a96ebba6a054e49ec6db5ba82a58 Binary files /dev/null and b/CheckersClient/android/assets/Menu/Click11.wav.asd differ diff --git a/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd b/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd new file mode 100644 index 0000000000000000000000000000000000000000..affd8edeb9392f173dcaa97bb57f733610c90e8f Binary files /dev/null and b/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd differ diff --git a/CheckersClient/android/assets/Pause/PauseBackground.png b/CheckersClient/android/assets/Pause/PauseBackground.png deleted file mode 100644 index 197fa67442edb07b049d2b334b6c977541036aa0..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Pause/PauseBackground.png and /dev/null differ diff --git a/CheckersClient/android/assets/Pause/PauseButton.png b/CheckersClient/android/assets/Pause/PauseButton.png deleted file mode 100644 index 42c154ceb5125b00599c90e44e1b228d7e50cae5..0000000000000000000000000000000000000000 Binary files a/CheckersClient/android/assets/Pause/PauseButton.png and /dev/null differ diff --git a/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json b/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json index 2eaad5f5e125bf3f1261282a500a514a3676e4c4..91c0c1d90fc85877454aedeae03b6ae812bc7830 100644 --- a/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json +++ b/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json @@ -111,7 +111,7 @@ com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: { background: list } plain: { - font: font + font: font-big fontColorSelected: white fontColorUnselected: dark-cyan selection: pale-blue @@ -183,7 +183,7 @@ com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: { } com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: { default: { - font: font + font: font-big fontColor: black background: textfield cursor: black @@ -210,4 +210,4 @@ com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: { titleFontColor: black } } -} \ No newline at end of file +} diff --git a/CheckersClient/android/assets/characters/AsianGirl1@1x.png b/CheckersClient/android/assets/characters/AsianGirl1@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..9207f25f0067db0cd8b0d9f7546a585682eeabfa Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl1@1x.png differ diff --git a/CheckersClient/android/assets/characters/AsianGirl2@1x.png b/CheckersClient/android/assets/characters/AsianGirl2@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f946f74ff365a73570e41a3686b2013cb84b9491 Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl2@1x.png differ diff --git a/CheckersClient/android/assets/characters/AsianGirl3@1x.png b/CheckersClient/android/assets/characters/AsianGirl3@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4d6415be2bbb29a9c896ef4f748703526f6ff3 Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl3@1x.png differ diff --git a/CheckersClient/android/assets/characters/AsianGirlPortrait@1x.png b/CheckersClient/android/assets/characters/AsianGirlPortrait@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f138ad58031933fb192c74abee8c81cf6acaf53d Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirlPortrait@1x.png differ diff --git a/CheckersClient/android/assets/characters/Grandma1@1x.png b/CheckersClient/android/assets/characters/Grandma1@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8184f9e78b481da0907fba6e2262b65e6846add9 Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma1@1x.png differ diff --git a/CheckersClient/android/assets/characters/Grandma2@1x.png b/CheckersClient/android/assets/characters/Grandma2@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae0e623fe877a26cc74a1d02815eaae524cb61c9 Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma2@1x.png differ diff --git a/CheckersClient/android/assets/characters/Grandma3@1x.png b/CheckersClient/android/assets/characters/Grandma3@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf9759a7045d1b5802cb6bb51902ed47e1cc8c6 Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma3@1x.png differ diff --git a/CheckersClient/android/assets/characters/GrandmaPortrait@1x.png b/CheckersClient/android/assets/characters/GrandmaPortrait@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..eb923bf8eeb718e32bb962687e3ec5fbc0e88d39 Binary files /dev/null and b/CheckersClient/android/assets/characters/GrandmaPortrait@1x.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy1@1x.png b/CheckersClient/android/assets/characters/HighSchoolGuy1@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f80b3dbbc2daa0dc8d5aac09e6e4c6fc976b524d Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy1@1x.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy2@1x.png b/CheckersClient/android/assets/characters/HighSchoolGuy2@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad6e0646cf20dd067e1516caa6198dbebbac895 Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy2@1x.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy3@1x.png b/CheckersClient/android/assets/characters/HighSchoolGuy3@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ead8ebdbc6a508b7489064390a122a3d7cc127f5 Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy3@1x.png differ diff --git a/CheckersClient/android/assets/characters/HighSchoolGuyPortrait@1x.png b/CheckersClient/android/assets/characters/HighSchoolGuyPortrait@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..a07477ed3ce86273e5ab690fddd337619a3ce5dc Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuyPortrait@1x.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirl1@1x.png b/CheckersClient/android/assets/characters/HipsterGirl1@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd2a9579d3302499abe202e5e7b23aa0792db59 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl1@1x.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirl2@1x.png b/CheckersClient/android/assets/characters/HipsterGirl2@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..888706fd549bc08ae191ddd112526381abc26b48 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl2@1x.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirl3@1x.png b/CheckersClient/android/assets/characters/HipsterGirl3@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..14441d5e98ac5588a0576a9307a6b41b2f080ce1 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl3@1x.png differ diff --git a/CheckersClient/android/assets/characters/HipsterGirlPortrait@1x.png b/CheckersClient/android/assets/characters/HipsterGirlPortrait@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6062657c9589c5ccfdf0051d2f72993a368d30 Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirlPortrait@1x.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuy1@1x.png b/CheckersClient/android/assets/characters/RegularGuy1@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..b736ba2e352862d74c4fed640a0444c1369e69e3 Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy1@1x.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuy2@1x.png b/CheckersClient/android/assets/characters/RegularGuy2@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f87dea69fd985da55a60493e5d24808520960bf4 Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy2@1x.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuy3@1x.png b/CheckersClient/android/assets/characters/RegularGuy3@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..1f00a24030b5f9e6226e9b0e5f064e89bc89f27d Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy3@1x.png differ diff --git a/CheckersClient/android/assets/characters/RegularGuyPortrait@1x.png b/CheckersClient/android/assets/characters/RegularGuyPortrait@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..81566ea5eb9977cd5b74c2ff69521e496e9cb0aa Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuyPortrait@1x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuy1@1x.png b/CheckersClient/android/assets/characters/RocketGuy1@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..53d5f2cb7c8ca10f1998ae568367b128b0e9ff00 Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy1@1x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuy2@1x.png b/CheckersClient/android/assets/characters/RocketGuy2@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbd38171337784452613a1aafe8d5a64d67071b Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy2@1x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuy3@1x.png b/CheckersClient/android/assets/characters/RocketGuy3@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4606ea58abb7f0c5349e3b295b5cfaf9531ca056 Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy3@1x.png differ diff --git a/CheckersClient/android/assets/characters/RocketGuyPortrait@1x.png b/CheckersClient/android/assets/characters/RocketGuyPortrait@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..8ede5685a057250e49ba5708eab0d71d67f87424 Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuyPortrait@1x.png differ diff --git a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java index 8c468e05f46ebd60fdb0f08512087b28307dffd1..ee5065b4828f3b9dea012ad197d337e91c0aadbf 100644 --- a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java +++ b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java @@ -3,6 +3,7 @@ package com.mygdx.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Stage; @@ -12,7 +13,7 @@ import com.badlogic.gdx.utils.viewport.Viewport; import com.mygdx.game.controllers.NetworkController; import com.mygdx.game.controllers.PlayerController; import com.mygdx.game.views.GameViewManager; -import com.mygdx.game.views.MenuLoadingView; +import com.mygdx.game.views.LoadingView; import java.util.ArrayList; @@ -50,11 +51,11 @@ public class UniCheckersClient extends ApplicationAdapter { // Initialize Views.. sb = new SpriteBatch(); - assetManager = new AssetManager(); + assetManager = new AssetManager(new InternalFileHandleResolver()); skin = new Skin(Gdx.files.internal("UISkins/glassy/skin/glassy-ui.json")); gvm = new GameViewManager(); - gvm.push(new MenuLoadingView(gvm, playerController, assetManager, stage, skin)); + gvm.push(new LoadingView(gvm, playerController, assetManager, stage, skin)); } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java index d0d256f416d766962c45c77396c77684f36bd198..f4fe5fb9c59255974403211fb95f1e7d6c9ebc33 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java @@ -9,6 +9,7 @@ import com.mygdx.game.controllers.commands.Command; import com.mygdx.game.controllers.commands.*; import com.mygdx.game.model.Lobby; import com.mygdx.game.model.Player; +import com.mygdx.game.views.tokens.PlayerAvatar; import java.io.IOException; import java.util.ArrayList; @@ -19,13 +20,14 @@ public class NetworkController { private Kryo kryo; private Queue<Command> commandQueue; - private boolean devMode = true; + private boolean devMode = false; public NetworkController(){ this.client = new Client(); client.start(); try { - String IP4_LAN_ADDRESS = "192.168.87.20"; + //192.168.87.34 + String IP4_LAN_ADDRESS = "192.168.87.34"; client.connect(10000, IP4_LAN_ADDRESS, 54555, 54777); } catch (IOException e) { e.printStackTrace(); @@ -56,6 +58,7 @@ public class NetworkController { kryo.register(cLobbyLeave.class, 22); kryo.register(cLobbyDelete.class, 23); kryo.register(cLobbyGetList.class, 24); + kryo.register(cSetIndexAvatar.class, 25); } public Client getClient() { return client; } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java index b583aee91f43ac58278a1522a2f08ffc9da9cc9a..dd16a30c3a85bd125a0e77fa30e7da4588da21ca 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java @@ -15,9 +15,6 @@ public class PlayerController { private Lobby lobby; //Current lobby private ArrayList<Lobby> lobbies; //List of all lobbies - - private String playerName; // NB..! THIS IS TEMPORARY.. SHOULD BE IN MODEL.. - public PlayerController(NetworkController networkController){ net = networkController; @@ -30,36 +27,23 @@ public class PlayerController { } } }); - - net.sendToServer(new cPlayerJoin()); + connectPlayer(0); } - public void issueACommand(String commandString) { - if (commandString.equals("W")){ - cPlayerPieceMove newCommand = new cPlayerPieceMove(); - net.sendToServer(newCommand); - } - } + public void lobbyGetList(){ net.sendToServer(new cLobbyGetList()); } - // This could be a command invoked on the controller that changes PlayerState in the model. (Bit hard since model isn't written yet..) - public void setPlayerName(String playerName){ - this.playerName = playerName; - System.out.println("Updating playername.. Name is " + playerName); - // UpdatePlayerName code - } + public void connectPlayer(int avatarIndex){ net.sendToServer(new cPlayerJoin(avatarIndex));} - public String getPlayerName(){ - return this.playerName; - } + public void createLobby(String name, int MAX_PLAYERS){ net.sendToServer(new cLobbyCreate(name, MAX_PLAYERS)); } - public void joinLobby(int id){ net.sendToServer(new cLobbyJoin(id)); } + public void updateIndexAvatar(int indexAvatar){ net.sendToServer(new cSetIndexAvatar(indexAvatar)); } - public void lobbyGetList(){ net.sendToServer(new cLobbyGetList()); } + public void deleteLobby(int id){ net.sendToServer(new cLobbyDelete(id)); } - public void createLobby(int MAX_PLAYERS){ net.sendToServer(new cLobbyCreate(MAX_PLAYERS)); } + public void joinLobby(int id){ net.sendToServer(new cLobbyJoin(id)); } - public void deleteLobby(int id){ net.sendToServer(new cLobbyDelete(id)); } + public void leaveLobby(int id) { net.sendToServer(new cLobbyLeave(id)); } public Lobby getLobby(){ return lobby; } @@ -76,4 +60,8 @@ public class PlayerController { public PlayerController getPlayerController(){ return this; } public NetworkController getNetWorkController() { return net; } + + + + } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java index 9da62d69f3aee8d931616c2394e8aa811240e02c..b8bb4a064a608a853094fc3f0db75d0ea0d88286 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java @@ -19,6 +19,7 @@ public class Command{ this.data = "None"; } + public void execute(PlayerController playerController, Connection connection){} public String getText(){ return text; } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java index de48edb5cfae4fc4fb5e2f5443ee8ba8d28d5e8a..45856d504f3926f95185e1915a5b1fc28830a384 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java @@ -4,11 +4,19 @@ import com.esotericsoftware.kryonet.Connection; import com.mygdx.game.controllers.PlayerController; import com.mygdx.game.model.Lobby; +import java.util.ArrayList; + public class cLobbyCreate extends Command { public cLobbyCreate() { super("cLobbyCreate"); } - public cLobbyCreate(int MAX_PLAYERS) { super("cLobbyCreate", (Integer) MAX_PLAYERS); } + public cLobbyCreate(String name, int MAX_PLAYERS) { + super("cLobbyCreate"); + ArrayList<Object> data = new ArrayList<Object>(); + data.add(name); + data.add(MAX_PLAYERS); + this.data = data; + } @Override public void execute(PlayerController playerController, Connection connection){ diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java index 59ae87197d3f28afaf2f4f472ed289be75421b6c..77d5b4e4f1eb2d301beeb96eeab8d3c33bd87ca7 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java @@ -9,7 +9,9 @@ public class cLobbyJoin extends Command{ public cLobbyJoin() { super("cLobbyJoin"); } - public cLobbyJoin(int id) { super("cLobbyJoin", (Integer) id); } + public cLobbyJoin(int id) { + super("cLobbyJoin", (Integer) id); + } @Override public void execute(PlayerController playerController, Connection connection){ diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java index 90b4200c309965ce6d68fe7d81967ee6506d292c..21c47b8be275a93e9b65009cd363ddf7685ebb24 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java @@ -12,12 +12,22 @@ public class cLobbyLeave extends Command{ @Override public void execute(PlayerController playerController, Connection connection){ - if(data instanceof Integer){ - int result = (int) data; - if (result == -1) System.out.println("Failed to leave lobby"); - else { - playerController.setLobby(new Lobby(-1)); - System.out.println("Request to leave lobby successful"); + if(data instanceof Lobby){ + Lobby lobby = (Lobby) data; + if(lobby.getID() != -1){ + if (lobby.getPlayersID().contains((Integer) connection.getID())) { + //Somebody else left + System.out.println("Somebody left the lobby"); + playerController.setLobby(lobby); + } + else{ + //The current player left + playerController.setLobby(new Lobby(-1)); + System.out.println("Request to leave lobby successful"); + } + } + else{ + System.out.println("Received leaveLobby command with an error"); } } } diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java index 77c20a07fa49c6ed732ccc96aa3e11037de26bab..bae2c3eea518a58867241addae49b42a7450f198 100644 --- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java @@ -11,6 +11,10 @@ public class cPlayerJoin extends Command { super("cPlayerJoin"); } + public cPlayerJoin(int indexAvatar) { + super("cPlayerJoin", (Integer) indexAvatar); + } + @Override public void execute(PlayerController playerController, Connection connection){ if(data instanceof Player){ diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java new file mode 100644 index 0000000000000000000000000000000000000000..b917c6980a2e03d916895cb2e4959747cc2fa23c --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java @@ -0,0 +1,26 @@ +package com.mygdx.game.controllers.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controllers.NetworkController; +import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.model.Lobby; + +public class cSetIndexAvatar extends Command { + + public cSetIndexAvatar() { super("cLobbyJoin"); } + + public cSetIndexAvatar(int indexAvatar) { + super("cSetIndexAvatar", indexAvatar); + } + + @Override + public void execute(PlayerController playerController, Connection connection){ + if(data instanceof Integer){ + int indexAvatar = (int) data; + if (indexAvatar == -1) System.out.println("Failed to set indexAvatar."); + else { + playerController.getPlayer().setIndexAvatar(indexAvatar); + } + } + } +} \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java index d198b3d091395e403dbca069f5988b14323bbf5c..4b170d62e45db0a338fdfcf35fa115da11220114 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java +++ b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java @@ -1,10 +1,12 @@ package com.mygdx.game.model; import java.util.ArrayList; +import java.util.HashSet; public class Lobby { private int ID; + private String name; private int MAX_PLAYERS; private ArrayList<Player> players; @@ -15,14 +17,39 @@ public class Lobby { players = new ArrayList<Player>(); } - public Lobby(int ID, int MAX_PLAYERS){ + public Lobby(int ID, String name, int MAX_PLAYERS){ this.ID = ID; + this.name = name; this.MAX_PLAYERS = MAX_PLAYERS; players = new ArrayList<Player>(); } public int getID(){ return ID; } + public void setName(String name){ + this.name = name; + } + + public String getName(){ + return name; + } + + public int getMaxPlayers(){ + return MAX_PLAYERS; + } + + public ArrayList<Player> getPlayers(){ + return players; + } + + public HashSet<Integer> getPlayersID(){ + HashSet set = new HashSet(); + for(Player player : players){ + set.add((Integer) player.getID()); + } + return set; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -35,9 +62,9 @@ public class Lobby { public String toString() { return "Lobby{" + "ID=" + ID + + ", name='" + name + '\'' + ", MAX_PLAYERS=" + MAX_PLAYERS + ", players=" + players + '}'; } - } diff --git a/CheckersClient/core/src/com/mygdx/game/model/Player.java b/CheckersClient/core/src/com/mygdx/game/model/Player.java index 168218638ce097035d6195ac675d782d2e72e10f..e8200a4ff01d3bb3bbc6a2d8f71d9417ff93fdc4 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/Player.java +++ b/CheckersClient/core/src/com/mygdx/game/model/Player.java @@ -3,11 +3,16 @@ package com.mygdx.game.model; public class Player { private int ID; + private int indexAvatar; + private String playerName; public Player(){} - public Player(int ID){ + public Player(int ID){ this.ID = ID; } + + public Player(int ID, int indexAvatar){ this.ID = ID; + this.indexAvatar = indexAvatar; } public int getID(){ return ID; } @@ -26,4 +31,16 @@ public class Player { "ID=" + ID + '}'; } + + public void setIndexAvatar(int indexAvatar){ + this.indexAvatar = indexAvatar; + } + + public int getIndexAvatar(){ + return this.indexAvatar; + } + + public void setPlayerName(String playerName) { + this.playerName = playerName; + } } diff --git a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java new file mode 100644 index 0000000000000000000000000000000000000000..2a1c001ba04ff01fd8fe7c3b42c56c353f3cd4ac --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java @@ -0,0 +1,72 @@ +package com.mygdx.game.views; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.views.enums.CharacterAssets; +import com.mygdx.game.views.enums.LobbyAssets; +import com.mygdx.game.views.enums.MenuAssets; + +public class LoadingView extends View { + + private Image loadingTextImage = new Image(new Texture("Loading/LoadingText.png")); + private Image loadingDotImage = new Image(new Texture("Loading/LoadingDot.png")); + private Image loadingBarFillImage = new Image(new Texture("Loading/LoadingBarFill.png")); + private Image loadingBarBorderImage = new Image(new Texture("Loading/LoadingBarBorder.png")); + private Image loadingBarBackgroundImage = new Image(new Texture("Loading/LoadingBarBackground.png")); + private float animationLoopTimer; + private float animationSpeedTimer; + + public LoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) { + super(gvm, playerController, assetManager, stage, skin); + + this.loadingBarBackgroundImage.setPosition((float)(this.col_width * 6) - this.loadingBarBackgroundImage.getWidth() / 2.0F, (float)(this.row_height * 1)); + this.loadingBarBorderImage.setPosition(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY()); + this.loadingTextImage.setPosition(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY() + this.loadingTextImage.getHeight() * 1.25F); + this.loadingDotImage.setPosition(this.loadingTextImage.getX() + this.loadingDotImage.getWidth() * 2.0F, this.loadingTextImage.getY()); + this.loadingBarFillImage.setBounds(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY(), this.loadingBarBackgroundImage.getWidth() * 0.05F, this.loadingBarBackgroundImage.getHeight()); + stage.addActor(this.loadingTextImage); + stage.addActor(this.loadingDotImage); + stage.addActor(this.loadingBarBackgroundImage); + stage.addActor(this.loadingBarFillImage); + stage.addActor(this.loadingBarBorderImage); + + for(MenuAssets asset : MenuAssets.values()) { + assetManager.load(asset.path, asset.classType); + } + + for(CharacterAssets asset : CharacterAssets.values()) { + assetManager.load(asset.path, asset.classType); + } + } + + @Override + protected void handleInput() { + + } + + @Override + public void update(float dt) { + if(assetManager.update()){ + gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin)); + } + else{ + loadingBarFillImage.setWidth(assetManager.getProgress()*loadingBarBackgroundImage.getWidth()); + } + } + + @Override + public void render(float dt) { + stage.draw(); + } + + @Override + public void dispose() { + // background.dispose(); + //playBtn.dispose(); + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java index ce115e2e806e394bba7101c51610ae6b5b01f0cf..2097722fa82cd29fe24255d65f38f9b781fd1c15 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java @@ -3,19 +3,18 @@ package com.mygdx.game.views; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.glutils.FrameBuffer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Button; -import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.List; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.SelectBox; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; @@ -23,56 +22,73 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.utils.Align; import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.model.Lobby; +import com.mygdx.game.model.Player; import com.mygdx.game.views.enums.LobbyAssets; import com.mygdx.game.views.enums.MenuAssets; +import com.mygdx.game.views.tokens.PlayerAvatar; +import java.util.ArrayList; import java.util.Arrays; -import java.util.List; +import java.util.HashMap; public class LobbyView extends View{ - private Texture background; - private Image lobbyListBubbleImage; - private Image rocketImage; - private Image exhaustImage; - private Texture rocketTexture; - private Texture exhaustTexture; - private Sound sound; + private final ArrayList<Actor> mainUIActors = new ArrayList<>(); + private ScrollPane scroller; + private Table lobbyTable; + + private boolean fadingToBlank = true; + private boolean fadeOut = true; + private boolean startFadeFromWhiteToBlank; + private boolean startRocketTransition; + + private Button createLobbyButton; + private Button lobbyListBackButton; + private Button joinLobbyButton; + private Button lobbyBackButton; + private Button lobbyListRefreshButton; + private Button lobbyRefreshButton; + private Button findLobbyButton; private Button setUserNameButton; - private Image backgroundImage; + private Button startLobbyButton; + private float fadeTransitionLength = 1f; + private float alphaFadeValue = 1; + private Image backgroundImage; + private Image exhaustImage; + private Image lobbyListBubbleImage; + private Image rocketImage; + private Image whiteImage; - private FrameBuffer previousScreenFrameBuffer; - private float fadeTransitionLength = 0.75f; - private float fadeTransitionTimer = 1; - private Image fadeImage; - private TextureRegion fadeTextureRegion; - private boolean transitionFinished = false; - private boolean fadeIn = true; - private boolean fadeOut = true; private Label mrServerBubbleLabel; + private Label outputLabel; private Sound buttonClickAudio; + private Texture background; + private Texture rocketTexture; + private Texture exhaustTexture; + private TextField lobbyCreateTextField; - private Button joinLobbyButton; - private Button createLobbyButton; - private Button lobbyRefreshButton; - private Button lobbyBackButton; - private Dialog lobbyCreateDialogue; - private SelectBox<Integer> lobbyCreateSizeSelectBox; + private SelectBox<Integer> lobbyCreateSizeSelectBox; + private ShapeRenderer shapeRenderer; - int Help_Guides = 12; - int row_height = Gdx.graphics.getHeight() / Help_Guides; - int col_width = Gdx.graphics.getWidth() / Help_Guides; - private Label outputLabel; - public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, FrameBuffer previousScreenFrameBuffer) { + public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin, ArrayList<PlayerAvatar> availableAvatars) { super(gvm, playerController, assetManager, stage, skin); - this.previousScreenFrameBuffer = previousScreenFrameBuffer; + + this.availableAvatars = availableAvatars; + + Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + tablePixmap.setColor(1, 1, 1, 1); + tablePixmap.fill(); + whiteImage = new Image(new Texture(tablePixmap)); + + startFadeFromWhiteToBlank = true; background = (Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType); rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType); @@ -87,11 +103,6 @@ public class LobbyView extends View{ exhaustImage.setSize(col_width*0.6f, row_height*2f); exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight()); - fadeTextureRegion = new TextureRegion(previousScreenFrameBuffer.getColorBufferTexture()); - fadeTextureRegion.flip(false, true); - fadeImage = new Image(fadeTextureRegion); - fadeImage.setColor(1, 1, 1, 1f); - lobbyListBubbleImage = new Image(lobbyListTexture); lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*5.5f); backgroundImage = new Image(background); @@ -112,9 +123,13 @@ public class LobbyView extends View{ createLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); createLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); - joinLobbyButton = new TextButton("Join Lobby",skin,"small"); - joinLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); - joinLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + findLobbyButton = new TextButton("Find Lobby",skin,"small"); + findLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); + findLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + + lobbyListRefreshButton = new TextButton("Refresh",skin,"small"); + lobbyListRefreshButton.setSize(col_width*1f,(float)(row_height*0.65)); + lobbyListRefreshButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); lobbyRefreshButton = new TextButton("Refresh",skin,"small"); lobbyRefreshButton.setSize(col_width*1f,(float)(row_height*0.65)); @@ -124,31 +139,53 @@ public class LobbyView extends View{ lobbyBackButton.setSize(col_width*1f,(float)(row_height*0.65)); lobbyBackButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + lobbyListBackButton = new TextButton("Back",skin,"small"); + lobbyListBackButton.setSize(col_width*1f,(float)(row_height*0.65)); + lobbyListBackButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + + joinLobbyButton = new TextButton("Join Lobby",skin,"small"); + joinLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); + joinLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*2); + + startLobbyButton = new TextButton("Start",skin,"small"); + startLobbyButton.setSize(col_width*1f,(float)(row_height*0.65)); + startLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1); + setUserNameButton = new TextButton("Text Button",skin,"small"); setUserNameButton.setSize(col_width*2,(float)(row_height*0.5)); setUserNameButton.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*4); lobbyCreateTextField = new TextField("", skin); - lobbyCreateTextField.setMessageText("Name of your lobby."); - lobbyCreateTextField.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*3); - lobbyCreateTextField.setSize(col_width*2,(float)(row_height*0.75)); - lobbyCreateTextField.scaleBy(1000); + lobbyCreateTextField.setMessageText("Enter lobby name."); + lobbyCreateTextField.setSize(col_width*1f,row_height*1f); + lobbyCreateTextField.setPosition(lobbyListRefreshButton.getX(), lobbyListRefreshButton.getY()+row_height*1.25f); lobbyCreateSizeSelectBox =new SelectBox<>(skin); lobbyCreateSizeSelectBox.setItems(2, 4, 6, 8); - lobbyCreateTextField = new TextField("", skin); - lobbyCreateTextField.setMessageText("Enter lobby name."); - lobbyCreateTextField.setSize(col_width*1.5f,row_height*0.8f); - lobbyCreateTextField.setPosition(lobbyRefreshButton.getX(), lobbyRefreshButton.getY()+row_height*1.25f); - lobbyCreateSizeSelectBox.setPosition(lobbyBackButton.getX(), lobbyCreateTextField.getY()); - lobbyCreateSizeSelectBox.setSize(lobbyBackButton.getWidth(), lobbyBackButton.getHeight()); + lobbyCreateSizeSelectBox.setPosition(lobbyListBackButton.getX(), lobbyCreateTextField.getY()); + lobbyCreateSizeSelectBox.setSize(lobbyListBackButton.getWidth(), lobbyListBackButton.getHeight()); backgroundImage.setZIndex(1); lobbyListBubbleImage.setZIndex(2); - fadeImage.setZIndex(3); outputLabel.setZIndex(3); - stage.addActor(fadeImage); + + stage.clear(); + + stage.addActor(backgroundImage); stage.addActor(outputLabel); + stage.addActor(rocketImage); + stage.addActor(exhaustImage); + stage.addActor(lobbyListBubbleImage); + mainUIActors.add(createLobbyButton); + mainUIActors.add(findLobbyButton); + mainUIActors.add(mrServerBubbleLabel); + for (Actor actor: mainUIActors){ + stage.addActor(actor); + } + stage.addActor(outputLabel); // OutputLabel for debugging purposes + whiteImage.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + whiteImage.setPosition(0,0); + stage.addActor(whiteImage); createLobbyButton.addListener(new InputListener(){ @Override @@ -160,10 +197,57 @@ public class LobbyView extends View{ buttonClickAudio.play(0.8f); outputLabel.setText("Create Lobby"); showCreateLobbyWindow(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("createLobbyButton"); + } + }); + findLobbyButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + showLobbyListWindow(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("findLobbyButton"); + } + }); + lobbyListBackButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + Gdx.input.setOnscreenKeyboardVisible(false); + stage.unfocusAll(); + try{ + if(lobby.getPlayers().size() == 1){ + playerController.deleteLobby(lobby.getID()); + } + else{ + playerController.leaveLobby(lobby.getID()); + } + + }catch(NullPointerException e){ + + } + showMainLobbyWindow(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("lobbyListBackButton"); } }); - joinLobbyButton.addListener(new InputListener(){ + lobbyListRefreshButton.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { return true; @@ -171,10 +255,15 @@ public class LobbyView extends View{ @Override public void touchUp (InputEvent event, float x, float y, int pointer, int button) { buttonClickAudio.play(0.8f); - outputLabel.setText("Touch up a Button"); - showJoinLobbyWindow(); + outputLabel.setText("Lobby refreshed!"); + lobbyListRefresh(); + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("lobbyListRefreshButton"); } }); + lobbyBackButton.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { @@ -183,10 +272,73 @@ public class LobbyView extends View{ @Override public void touchUp (InputEvent event, float x, float y, int pointer, int button) { buttonClickAudio.play(0.8f); - outputLabel.setText("Back button"); + Gdx.input.setOnscreenKeyboardVisible(false); + stage.unfocusAll(); + + while(playerController.getLobby() == null){System.out.println("NOT FINDING A LOBBY");} + + if(playerController.getLobby().getPlayers().size() == 1){ + System.out.println("Deleting lobby " + playerController.getLobby().getName()); + playerController.deleteLobby(lobby.getID()); + } + else{ + System.out.println("Leaving lobby " + playerController.getLobby().getName()); + playerController.leaveLobby(lobby.getID()); + } + showMainLobbyWindow(); + + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("LobbybackButton"); + } + }); + + joinLobbyButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + return true; + } + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + //if(lobby != null) playerController.leaveLobby(lobby.getID()); + + if(getLobbyByStringHashMap.containsKey(lobbyListStrings.getSelected())){ + Thread thread2 = new Thread(){ + public void run(){ + for(Lobby lobby : playerController.getLobbyList()){ + System.out.println("LobbyId available: " +lobby.getID()); + } + playerController.joinLobby(getLobbyByStringHashMap.get(lobbyListStrings.getSelected())); + System.out.println("joining lobby with lobbyID: " + lobbyListStrings.getSelectedIndex()); + while (playerController.getLobby() == null) { + System.out.println("Waiting for lobby"); + } + Lobby lobby = playerController.getLobby(); + System.out.println("Lobby loaded " + lobby); + } + }; + thread2.start(); + try { + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + Gdx.input.setOnscreenKeyboardVisible(false); + showLobbyWindow(); + lobbyRefresh(); + } + else{ + outputLabel.setText("LobbyListHash did not contain the selected key."); + } + } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("joinLobbyButton"); } }); + lobbyRefreshButton.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { @@ -198,7 +350,12 @@ public class LobbyView extends View{ outputLabel.setText("Lobby refreshed!"); lobbyRefresh(); } + @Override + public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { + outputLabel.setText("lobbyRefreshButton"); + } }); + lobbyCreateTextField.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { @@ -217,149 +374,222 @@ public class LobbyView extends View{ } } }); + startLobbyButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.80f); + if(!lobbyCreateTextField.getText().isEmpty()){ + Thread thread2 = new Thread(){ + public void run(){ + playerController.createLobby(lobbyCreateTextField.getText(), lobbyCreateSizeSelectBox.getSelected()); + System.out.println("Creating lobby '" + lobbyCreateTextField.getText() + "' with maxSize " + lobbyCreateSizeSelectBox.getSelected()); + while (playerController.getLobby() == null) { + System.out.println("Waiting for lobby object from server.."); + } + while(playerController.getLobby().getID() == -1){ + System.out.println("Waiting for lobby object from server. Current id is -1.."); + } + + Lobby lobby = playerController.getLobby(); + 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");} + } + }; + thread2.start(); + Gdx.input.setOnscreenKeyboardVisible(false); + showLobbyWindow(); + try { + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + //lobby = playerController.getLobby(); + lobbyRefresh(); + } + else{ + outputLabel.setText("Lobby has no name, hehe"); + } + return true; + } + }); } - private void showCreateLobbyWindow(){ - mrServerBubbleLabel.remove(); - joinLobbyButton.remove(); - createLobbyButton.remove(); + private void clearActors(){ + for (Actor actor: mainUIActors){ + actor.remove(); + } + mainUIActors.clear(); - stage.addActor(lobbyBackButton); - stage.addActor(lobbyCreateTextField); - stage.addActor(lobbyCreateSizeSelectBox); + } + private void drawGrid(){ + if(shapeRenderer == null){ + shapeRenderer = new ShapeRenderer(); // Used for draw debugging + } + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line + for (int i = 0; i < 12; i++) { + shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight()); + shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1); + } + shapeRenderer.end(); } - private Table lobbyRoomTable; - private void showJoinLobbyWindow(){ - lobbyRoomTable = new Table(); - mrServerBubbleLabel.remove(); - joinLobbyButton.remove(); - createLobbyButton.remove(); - stage.addActor(lobbyRoomTable); - stage.addActor(lobbyBackButton); - stage.addActor(lobbyRefreshButton); - lobbyRefresh(); + private ScrollPane scrollPane; + private volatile ArrayList<Lobby> currentLobbyList; + private List<String> lobbyListStrings; + private HashMap<String, Integer> getLobbyByStringHashMap; - } + public void lobbyListRefresh(){ - List<String> lobbyNames = Arrays.asList("Hello", "World!", "How", "Are", "You", "Lobby1", "Norway", "Oh yes", "No girls", "Only boys", "NTNU"); - List<String> lobbySize = Arrays.asList("2", "4", "6"); - private void lobbyRefresh(){ - if(lobbyRoomTable != null){ - lobbyRoomTable.clear(); - // models.get(availableLobbies); - lobbyRoomTable.setSize(col_width*2.5f, row_height*3f); - lobbyRoomTable.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f, row_height*8f); - Label availableLobbyLabel = new Label("Available Lobbies", skin); - lobbyRoomTable.addActor(availableLobbyLabel); - for (int i=0; i<4; i++) { - Label lobbyEntry = new Label("LobbyName: "+ lobbyNames.get((int) MathUtils.random(lobbyNames.size()-1)) + ", LobbySize = " + lobbySize.get((int) MathUtils.random(lobbySize.size()-1)), skin); - lobbyEntry.setWrap(true); - lobbyRoomTable.addActor(lobbyEntry); + Thread thread2 = new Thread(){ + public void run(){ + playerController.setLobbies(null); + playerController.lobbyGetList(); + while (playerController.getLobbyList() == null) { + System.out.println("Waiting for lobby" + currentLobbyList); + } + ArrayList<Lobby> lobbyList = playerController.getLobbyList(); + System.out.println("Lobby loaded " + lobbyList + " Number of available lobbies are " + lobbyList.size()); } - } - } - - private void showMainLobbyWindow(){ - if(lobbyRoomTable != null){ - lobbyRoomTable.remove(); - } - stage.addActor(createLobbyButton); - stage.addActor(joinLobbyButton); - stage.addActor(mrServerBubbleLabel); + }; + thread2.start(); try { - lobbyBackButton.remove(); - lobbyRefreshButton.remove(); - lobbyCreateTextField.remove(); - lobbyCreateSizeSelectBox.remove(); + thread2.join(); + System.out.println("LobbyCount AFTER" + playerController.getLobbyList().size()); + System.out.println("LobbyCount AFTER NUM OF PLAYERS" + playerController.getLobbyList().get(0).getPlayers().size()); + } catch (Exception e) { - } finally { - // Do nothing here } - } + lobbyListStrings = new List(skin, "plain"); + lobbyListStrings.setColor(1f, 1f, 1f, 1); + currentLobbyList = playerController.getLobbyList(); + String[] strings; + if(getLobbyByStringHashMap == null) getLobbyByStringHashMap = new HashMap<>(); + else getLobbyByStringHashMap.clear(); - @Override - public void handleInput() { - if(Gdx.input.isTouched()) { - int x = Gdx.input.getX(); - int y = Gdx.input.getY(); - }/* - if(Gdx.input.isButtonJustPressed(1)){ - sound.stop(); - gvm.set(new PlayView(gvm, playerController, assetManager)); - dispose(); + if(currentLobbyList.size() > 0){ + strings = new String[currentLobbyList.size()]; + for (int i = 0; i < currentLobbyList.size(); i++) { + strings[i] = currentLobbyList.get(i).getName() + "\t" + currentLobbyList.get(i).getPlayers().size()+ "/" + currentLobbyList.get(i).getMaxPlayers(); + getLobbyByStringHashMap.put(strings[i], currentLobbyList.get(i).getID()); + } + } + else{ + strings = new String[1]; + strings[0] = "No lobbies currently available."; } - */ - } - @Override - public void update(float dt) { - stage.act(dt); - handleInput(); + if(scrollPane != null) scrollPane.remove(); - } + lobbyListStrings.setItems(strings); + scrollPane = new ScrollPane(lobbyListStrings); + scrollPane.setBounds(0, 0, col_width*4f, row_height*4); + scrollPane.setPosition(col_width*0.25f, row_height*6); + scrollPane.setSmoothScrolling(false); + scrollPane.setTransform(true); - @Override - public void render(float dt) { - if(!transitionFinished){ - fadeToWhiteTransition(dt); + mainUIActors.add(scrollPane); + for (Actor actor: mainUIActors){ + stage.addActor(actor); } - else{ - stage.draw(); + } + private void showCreateLobbyWindow(){ + clearActors(); + mainUIActors.add(lobbyListBackButton); + mainUIActors.add(lobbyCreateTextField); + mainUIActors.add(lobbyCreateSizeSelectBox); + mainUIActors.add(startLobbyButton); + lobbyListBackButton.setY(startLobbyButton.getY()); + for (Actor actor: mainUIActors){ + stage.addActor(actor); } - drawGrid(); } - - private void addActorsAfterTransition(){ - stage.addActor(backgroundImage); - stage.addActor(outputLabel); - stage.addActor(rocketImage); - stage.addActor(exhaustImage); - stage.addActor(lobbyListBubbleImage); - stage.addActor(createLobbyButton); - stage.addActor(joinLobbyButton); - stage.addActor(mrServerBubbleLabel); + private void showLobbyListWindow(){ + clearActors(); + mainUIActors.add(lobbyListBackButton); + mainUIActors.add(lobbyListRefreshButton); + mainUIActors.add(joinLobbyButton); + joinLobbyButton.setPosition(col_width*4, row_height*3); + lobbyListRefreshButton.setY(row_height*3); + lobbyListBackButton.setY(row_height*3); + + for (Actor actor: mainUIActors){ + stage.addActor(actor); + } + lobbyListRefresh(); } - private float alphaFade1 = 1; - private float alphaFade2 = 1; - - /* - Helper class. - Creates the logic for transitioning between two states. - Fades from a texture region to white, then from white to the current stage. - */ - private void fadeToWhiteTransition(float dt){ - if (fadeIn) { - if (alphaFade1 <= 0) { - fadeIn = false; - stage.clear(); - addActorsAfterTransition(); - outputLabel.setText("Fade to white is complete."); + float[] player1Pos = {col_width*3.75f, row_height*2}; + float[] player2Pos = {col_width*3.5f, row_height*1.5f}; + + float[] player3Pos = {col_width*4.3f, row_height*2}; + float[] player4Pos = {col_width*4.1f, row_height*1.5f}; + + float[] player5Pos = {col_width*5, row_height*2}; + float[] player6Pos = {col_width*4.8f, row_height*1.5f}; + + private Lobby lobby; + private ArrayList<Player> playersInLobby; + ArrayList<float[]> playerPositions= new ArrayList<>(Arrays.asList(player1Pos, player2Pos, player3Pos, player4Pos, player5Pos, player6Pos));; + + private final ArrayList<PlayerAvatar> availableAvatars; + private ArrayList<PlayerAvatar> lobbyAvatars = new ArrayList<>(); + + private void lobbyRefresh(){ + try{ + + Thread thread2 = new Thread(){ + public void run(){ + playerController.lobbyGetList(); + } + }; + thread2.start(); + try { + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); } - else{ - fadeImage.setColor(1, 1, 1, alphaFade1); - alphaFade1 -= dt/fadeTransitionLength; - outputLabel.setText("Fading to white."); - stage.draw(); + 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); } + }catch (Exception e){ + //System.out.println("Cannot refresh lobby at this time."); } - else { - if(alphaFade2 <= 0){ - outputLabel.setText("Fade to normal state is complete."); - transitionFinished = true; - stage.draw(); - } - else{ - outputLabel.setText("Fade from white to background image."); - backgroundImage.setColor(1, 1, 1, 1-alphaFade2); - alphaFade2 -= dt/fadeTransitionLength; - stage.draw(); - } + } + + private void showLobbyWindow(){ + clearActors(); + mainUIActors.add(lobbyBackButton); + mainUIActors.add(lobbyRefreshButton); + + for (Actor actor: mainUIActors){ + stage.addActor(actor); } + } + private void showMainLobbyWindow(){ + clearActors(); + mainUIActors.add(createLobbyButton); + mainUIActors.add(findLobbyButton); + mainUIActors.add(mrServerBubbleLabel); + for (Actor actor: mainUIActors){ + stage.addActor(actor); + } } @Override @@ -370,19 +600,60 @@ public class LobbyView extends View{ sound.dispose(); */ } + @Override + public void handleInput() { + if(Gdx.input.isTouched()) { + int x = Gdx.input.getX(); + int y = Gdx.input.getY(); + } + } - private ShapeRenderer shapeRenderer; - // For debugging purposes only.. - private void drawGrid(){ - if(shapeRenderer == null){ - shapeRenderer = new ShapeRenderer(); // Used for draw debugging + float updateAvatarTimer = 0; + float updateAvatarFrequency = 0.120f; //update every 250ms + float refreshLobbyTimer = 1; + + @Override + public void render(float dt) { + Gdx.gl.glClearColor(1, 1, 1, 1); + updateAvatarTimer+= dt; + + if(refreshLobbyTimer >= 1) { + lobbyRefresh(); + refreshLobbyTimer=0; } - shapeRenderer.begin(ShapeRenderer.ShapeType.Line); - shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line - for (int i = 0; i < 12; i++) { - shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight()); - shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1); + else { + refreshLobbyTimer += dt; } - shapeRenderer.end(); + + if(startFadeFromWhiteToBlank){ + whiteImage.setColor(1, 1, 1, alphaFadeValue); + alphaFadeValue -= dt/fadeTransitionLength; + if(alphaFadeValue <= 0){ + startFadeFromWhiteToBlank = false; + whiteImage.setZIndex(0); + } + } + else if(startRocketTransition){ + + } + stage.draw(); + stage.getBatch().begin(); + for(PlayerAvatar playerAvatar : lobbyAvatars){ + if(updateAvatarTimer>= updateAvatarFrequency){ + playerAvatar.updateTexture(); + } + playerAvatar.draw(stage.getBatch()); + } + if(updateAvatarTimer>= updateAvatarFrequency){ + updateAvatarTimer=0; + } + stage.getBatch().end(); + drawGrid(); + } + + @Override + public void update(float dt) { + stage.act(dt); + handleInput(); } } diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java deleted file mode 100644 index 86567c1e037742b47b148188e9f22a152d47c888..0000000000000000000000000000000000000000 --- a/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.mygdx.game.views; - -import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.scenes.scene2d.Stage; -import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.mygdx.game.controllers.PlayerController; -import com.mygdx.game.views.enums.MenuAssets; - -public class MenuLoadingView extends View { - - private Texture background; - private Texture playBtn; - - public MenuLoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) { - super(gvm, playerController, assetManager, stage, skin); - - // Loading Menu Assets in the background. - for(MenuAssets asset : MenuAssets.values()) { - assetManager.load(asset.path, asset.classType); - } - - background = new Texture ("Pause/PauseBackground.png"); - playBtn = new Texture ("Pause/PauseButton.png"); - - } - - @Override - protected void handleInput() { - - } - - @Override - public void update(float dt) { - assetManager.update(); - if(assetManager.isFinished()){ - gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin)); - } - else{ - System.out.print("LOADING... "); - System.out.print( (int) MathUtils.floor(assetManager.getProgress()*100)); - System.out.print("%"); - System.out.println(""); - } - } - - @Override - public void render(float dt) { - - stage.draw(); - } - - @Override - public void dispose() { - // background.dispose(); - //playBtn.dispose(); - } -} diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java index b9e5014899aa2fcd3501c692ab478489250aa1be..14cccc5dd20e4feb1f7181b4a8e5a2ad23110b91 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java +++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java @@ -6,8 +6,7 @@ import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g3d.utils.MeshBuilder; -import com.badlogic.gdx.graphics.glutils.FrameBuffer; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; @@ -15,37 +14,66 @@ import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; +import com.badlogic.gdx.scenes.scene2d.utils.Drawable; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.utils.Align; import com.mygdx.game.controllers.PlayerController; +import com.mygdx.game.views.enums.CharacterAssets; import com.mygdx.game.views.enums.LobbyAssets; import com.mygdx.game.views.enums.MenuAssets; +import com.mygdx.game.views.tokens.PlayerAvatar; + +import java.util.ArrayList; +import java.util.Arrays; public class MenuView extends View{ - private Texture background; + private boolean startFadeFromWhiteToBlank; + private boolean startFadeFromBlankToWhite; + + private Button formButton; + private Image backgroundImage; private Image formImage; - private Texture form; - private Texture formButtonTex; - private Sound loopAudio; - private Button formButton; - private TextField usernameTextField; - private Texture readyBtn; + private Image connectionBarImage; + private Image connectionBarGreenCircle; + private Image connectionBarRedCircle; + private Music music; + + private ShapeRenderer shapeRenderer; + private Sound buttonClickAudio; private Sound transitionAudio; - private ShapeRenderer shapeRenderer; - int Help_Guides = 12; - int row_height = Gdx.graphics.getHeight() / Help_Guides; - int col_width = Gdx.graphics.getWidth() / Help_Guides; + + private Texture background; + private Texture form; + private Texture formButtonTex; + + private TextField usernameTextField; + private Label outputLabel; - private Texture bufferTexture; + private Image whiteImage; + private float fadeTransitionLength = 1f; + private float alphaFadeValue = 1; + - public MenuView(final GameViewManager gvm, final PlayerController playerController, final AssetManager assetManager, final Stage stage, final Skin skin) { + private ImageButton nextAvatarButton; + private ImageButton previousAvatarButton; + private Image avatarPortraitImage; + private String currentAvatar; + + + private ArrayList<PlayerAvatar> availableAvatars; + int currentIndexAvatar = 0; + + + public MenuView(final GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin) { super(gvm, playerController, assetManager, stage, skin); for(LobbyAssets asset : LobbyAssets.values()) { @@ -60,17 +88,12 @@ public class MenuView extends View{ form = (Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType); - music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path)); - music.setVolume(1); - music.setLooping(true); - music.play(); - this.formImage = new Image(form); formImage.setPosition(col_width*5, row_height*5); formImage.setAlign((Align.center)); formButtonTex = (Texture) assetManager.get(MenuAssets.FORM_BUTTON.path, MenuAssets.FORM_BUTTON.classType); - this.loopAudio = (Sound) assetManager.get(MenuAssets.LOOP_AUDIO.path, MenuAssets.LOOP_AUDIO.classType); + music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path)); buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType); transitionAudio = (Sound) assetManager.get(MenuAssets.TRANSITION_AUDIO.path, MenuAssets.TRANSITION_AUDIO.classType); @@ -82,41 +105,144 @@ public class MenuView extends View{ usernameTextField = new TextField("", skin); usernameTextField.setMessageText("Your name .."); usernameTextField.setSize(col_width*2, row_height*1); - usernameTextField.setPosition(col_width*5-usernameTextField.getMaxWidth(),row_height*6.5f-usernameTextField.getMaxHeight()/2); - + usernameTextField.setPosition(col_width*5-usernameTextField.getMaxWidth(),row_height*8.15f-usernameTextField.getMaxHeight()/2); - formButton = new TextButton("Enter",skin,"small"); - formButton.setSize(col_width*2,(float)(row_height*0.5)); - formButton.setPosition(col_width*6-formButton.getWidth()/2,row_height*5-formButton.getHeight()/2); + formButton = new TextButton("Enter",skin,"default"); + formButton.setPosition(col_width*6-formButton.getWidth()/2,row_height*2.25f-formButton.getHeight()/2); formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*6-formImage.getHeight()/2); + Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565); + tablePixmap.setColor(1, 1, 1, 1); + tablePixmap.fill(); + whiteImage = new Image(new Texture(tablePixmap)); + whiteImage.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + whiteImage.setPosition(0,0); + + startFadeFromBlankToWhite = false; + startFadeFromWhiteToBlank = true; + + music.setVolume(1); + music.setLooping(true); + music.play(); + availableAvatars = new ArrayList<>(); + + // SPRITES + Texture anim_tex_1 = assetManager.get(CharacterAssets.ASIAN_GIRL_ANIM_FRAME1.path, Texture.class); + Texture anim_tex_2 = assetManager.get(CharacterAssets.ASIAN_GIRL_ANIM_FRAME2.path, Texture.class); + Texture anim_tex_3 = assetManager.get(CharacterAssets.ASIAN_GIRL_ANIM_FRAME3.path, Texture.class); + Texture portrait = assetManager.get(CharacterAssets.ASIAN_GIRL_PORTRAIT.path, Texture.class); + ArrayList<Texture> anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3)); + PlayerAvatar asianGirlAvatar = new PlayerAvatar(anim_tex_arr, portrait, "Small Girl"); + availableAvatars.add(asianGirlAvatar); + + anim_tex_1 = assetManager.get(CharacterAssets.GRANDMA_ANIM_FRAME1.path, Texture.class); + anim_tex_2 = assetManager.get(CharacterAssets.GRANDMA_ANIM_FRAME2.path, Texture.class); + anim_tex_3 = assetManager.get(CharacterAssets.GRANDMA_ANIM_FRAME3.path, Texture.class); + portrait = assetManager.get(CharacterAssets.GRANDMA_PORTRAIT.path, Texture.class); + anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3)); + PlayerAvatar grandmaAvatar = new PlayerAvatar(anim_tex_arr, portrait, "Grandma"); + availableAvatars.add(grandmaAvatar); + + anim_tex_1 = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_ANIM_FRAME1.path, Texture.class); + anim_tex_2 = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_ANIM_FRAME2.path, Texture.class); + anim_tex_3 = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_ANIM_FRAME3.path, Texture.class); + portrait = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_PORTRAIT.path, Texture.class); + anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3)); + PlayerAvatar highSchoolGuy = new PlayerAvatar(anim_tex_arr, portrait, "High School Guy"); + availableAvatars.add(highSchoolGuy); + + anim_tex_1 = assetManager.get(CharacterAssets.HIPSTER_GIRL_ANIM_FRAME1.path, Texture.class); + anim_tex_2 = assetManager.get(CharacterAssets.HIPSTER_GIRL_ANIM_FRAME2.path, Texture.class); + anim_tex_3 = assetManager.get(CharacterAssets.HIPSTER_GIRL_ANIM_FRAME3.path, Texture.class); + portrait = assetManager.get(CharacterAssets.HIPSTER_GIRL_PORTRAIT.path, Texture.class); + anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3)); + PlayerAvatar hipsterGirl = new PlayerAvatar(anim_tex_arr, portrait, "Fashion Girl"); + availableAvatars.add(hipsterGirl); + + anim_tex_1 = assetManager.get(CharacterAssets.REGULAR_GUY_ANIM_FRAME1.path, Texture.class); + anim_tex_2 = assetManager.get(CharacterAssets.REGULAR_GUY_ANIM_FRAME2.path, Texture.class); + anim_tex_3 = assetManager.get(CharacterAssets.REGULAR_GUY_ANIM_FRAME3.path, Texture.class); + portrait = assetManager.get(CharacterAssets.REGULAR_GUY_PORTRAIT.path, Texture.class); + anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3)); + PlayerAvatar regularGuy = new PlayerAvatar(anim_tex_arr, portrait, "Regular Guy"); + availableAvatars.add(regularGuy); + + anim_tex_1 = assetManager.get(CharacterAssets.ROCKET_GUY_ANIM_FRAME1.path, Texture.class); + anim_tex_2 = assetManager.get(CharacterAssets.ROCKET_GUY_ANIM_FRAME2.path, Texture.class); + anim_tex_3 = assetManager.get(CharacterAssets.ROCKET_GUY_ANIM_FRAME3.path, Texture.class); + portrait = assetManager.get(CharacterAssets.ROCKET_GUY_PORTRAIT.path, Texture.class); + anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3)); + PlayerAvatar rocketGuy = new PlayerAvatar(anim_tex_arr, portrait, "Rocket Guy"); + availableAvatars.add(rocketGuy); + + Drawable drawable = new TextureRegionDrawable(new TextureRegion(assetManager.get(MenuAssets.NEXT_AVATAR_BUTTON.path, Texture.class))); + nextAvatarButton = new ImageButton(drawable); + + TextureRegion texReg = new TextureRegion(assetManager.get(MenuAssets.NEXT_AVATAR_BUTTON.path, Texture.class)); + texReg.flip(true,false); + Drawable flippedDrawable = new TextureRegionDrawable(texReg); + previousAvatarButton = new ImageButton(flippedDrawable); + + Drawable portraitDrawable = new TextureRegionDrawable(new TextureRegion(availableAvatars.get(currentIndexAvatar).getPortrait())); + avatarPortraitImage = new Image(portraitDrawable); + avatarPortraitImage.setBounds(0, 0, col_width*1.8f, col_width*1.8f); + + avatarPortraitImage.setPosition(formImage.getX()+formImage.getWidth()/2-avatarPortraitImage.getWidth()/2, formImage.getY()+row_height*2); + nextAvatarButton.setPosition(avatarPortraitImage.getX()+ avatarPortraitImage.getWidth()+col_width*0.8f-nextAvatarButton.getWidth(), avatarPortraitImage.getY()+ avatarPortraitImage.getHeight()/2-nextAvatarButton.getHeight()/2); + previousAvatarButton.setPosition(avatarPortraitImage.getX()-col_width*0.8f, avatarPortraitImage.getY()+ avatarPortraitImage.getHeight()/2-previousAvatarButton.getHeight()/2); + + + connectionBarImage = new Image(assetManager.get(MenuAssets.CONNECTION_BAR.path, Texture.class)); + connectionBarGreenCircle = new Image(assetManager.get(MenuAssets.GREEN_CIRCLE_SMALL.path, Texture.class)); + connectionBarRedCircle = new Image(assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, Texture.class)); + + connectionBarImage.setPosition(Gdx.graphics.getWidth()-connectionBarImage.getWidth(), Gdx.graphics.getHeight()-connectionBarImage.getHeight()); + connectionBarRedCircle.setPosition(connectionBarImage.getX()+connectionBarImage.getWidth()*0.75f, connectionBarImage.getY()+connectionBarImage.getHeight()/2-connectionBarRedCircle.getHeight()/2); + connectionBarGreenCircle.setPosition(connectionBarImage.getX()+connectionBarImage.getWidth()*0.75f, connectionBarImage.getY()+connectionBarImage.getHeight()/2-connectionBarGreenCircle.getHeight()/2); + + previousAvatarButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + if(currentIndexAvatar >0){ + currentIndexAvatar -= 1; + } + updateAvatarPortrait(); + outputLabel.setText("PREV AVATAR: current avatar is: " + currentAvatar); + return true; + } + + }); + + nextAvatarButton.addListener(new InputListener(){ + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + buttonClickAudio.play(0.8f); + if(currentIndexAvatar <availableAvatars.size()-1){ + currentIndexAvatar += 1; + } + updateAvatarPortrait(); + outputLabel.setText("NEXT AVATAR: current avatar is: " + availableAvatars.get(currentIndexAvatar).getName()); + return true; + } + }); // Adding listeners formButton.addListener(new InputListener(){ - @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { if(!usernameTextField.equals("Your name ..")){ buttonClickAudio.play(0.70f); transitionAudio.play(0.50f); - FrameBuffer fbo; - fbo = new FrameBuffer(Pixmap.Format.RGB888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); - fbo.begin(); - /* - stage.getBatch().begin(); - stage.getBatch().draw(background, 0, 0); - stage.getBatch().draw(form, Gdx.graphics.getWidth()/2-form.getWidth()/2, Gdx.graphics.getHeight()/2-form.getHeight()/2); - stage.getBatch().end(); - */ - stage.draw(); - fbo.end(); - gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, fbo)); + startFadeFromBlankToWhite = true; + whiteImage.setZIndex(stage.getActors().size); + playerController.updateIndexAvatar(currentIndexAvatar); } return true; } }); - usernameTextField.addListener(new InputListener(){ + usernameTextField.addListener(new InputListener(){ @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { buttonClickAudio.play(0.8f); @@ -128,61 +254,68 @@ public class MenuView extends View{ public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { buttonClickAudio.play(0.8f); if(usernameTextField.getText().isEmpty()){ - playerController.setPlayerName(usernameTextField.getText()); + playerController.getPlayer().setPlayerName(usernameTextField.getText()); outputLabel.setText(""); } } }); - - //Stratas - /* - backgroundImage.setZIndex(1); - formImage.setZIndex(2); - usernameTextField.setZIndex(3); - formButton.setZIndex(3); - outputLabel.setZIndex(3); - - */ - //loopAudio.loop(0.9f); - // Adding the initial actors in the scene stage.addActor(backgroundImage); + stage.addActor(connectionBarImage); + stage.addActor(connectionBarRedCircle); stage.addActor(outputLabel); stage.addActor(formImage); stage.addActor(usernameTextField); stage.addActor(formButton); - + stage.addActor(nextAvatarButton); + stage.addActor(previousAvatarButton); + stage.addActor(avatarPortraitImage); + stage.addActor(whiteImage); } + private void updateAvatarPortrait(){ + Drawable portraitDrawable = new TextureRegionDrawable(new TextureRegion(availableAvatars.get(currentIndexAvatar).getPortrait())); + avatarPortraitImage.setDrawable(portraitDrawable); + } @Override public void handleInput() { - if(Gdx.input.isTouched()) { - int x = Gdx.input.getX(); - int y = Gdx.input.getY(); - }/* - if(Gdx.input.isButtonJustPressed(1)){ -<<<<<<< HEAD - sound.stop(); - gvm.set(new PlayView(gvm, playerController, assetManager)); -======= - music.stop(); - gvm.set(new PlayView(gvm, super.playerController)); ->>>>>>> master - dispose(); - } - */ + } + @Override public void update(float dt) { assetManager.update(); stage.act(dt); handleInput(); - } @Override public void render(float dt) { + Gdx.gl.glClearColor(1, 1, 1, 1); + if(startFadeFromWhiteToBlank){ + whiteImage.setColor(1, 1, 1, alphaFadeValue); + alphaFadeValue -= dt/(fadeTransitionLength)/0.5; + outputLabel.setText("alphaFadeValue: " +alphaFadeValue); + if(alphaFadeValue <= 0){ + startFadeFromWhiteToBlank = false; + whiteImage.setZIndex(0); + } + } + else if(startFadeFromBlankToWhite){ + whiteImage.setColor(1, 1, 1, alphaFadeValue); + alphaFadeValue += dt/fadeTransitionLength; + outputLabel.setText("alphaFadeValue: " +alphaFadeValue); + if(alphaFadeValue >= 1){ + startFadeFromBlankToWhite = false; + gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, availableAvatars)); + } + } + + if(playerController.getPlayer() != null){ + stage.addActor(connectionBarGreenCircle); + connectionBarRedCircle.remove(); + } stage.draw(); drawGrid(); } diff --git a/CheckersClient/core/src/com/mygdx/game/views/View.java b/CheckersClient/core/src/com/mygdx/game/views/View.java index a702c0dcf6db495332d8e3cc5e376636560a53e0..36018df802ea679bbc9c3fe2c24326a063b962a4 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/View.java +++ b/CheckersClient/core/src/com/mygdx/game/views/View.java @@ -1,6 +1,7 @@ package com.mygdx.game.views; import com.badlogic.gdx.ApplicationAdapter; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector3; @@ -13,11 +14,15 @@ public abstract class View extends ApplicationAdapter { protected OrthographicCamera cam; protected Vector3 mouse; protected final GameViewManager gvm; - protected PlayerController playerController; - protected AssetManager assetManager; - protected Stage stage; + protected final PlayerController playerController; + protected final AssetManager assetManager; + protected final Stage stage; protected Skin skin; + public final int Help_Guides = 12; + public final int row_height = Gdx.graphics.getHeight() / Help_Guides; + public final int col_width = Gdx.graphics.getWidth() / Help_Guides; + protected View(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin){ this.gvm = gvm; this.stage = stage; diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java new file mode 100644 index 0000000000000000000000000000000000000000..faa815eedbc5537d6efecfd5fe59f6f9342646a0 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java @@ -0,0 +1,44 @@ +package com.mygdx.game.views.enums; + +import com.badlogic.gdx.graphics.Texture; + +public enum CharacterAssets { + + ASIAN_GIRL_ANIM_FRAME1("characters/AsianGirl1@1x.png", Texture.class), + ASIAN_GIRL_ANIM_FRAME2("characters/AsianGirl2@1x.png", Texture.class), + ASIAN_GIRL_ANIM_FRAME3("characters/AsianGirl3@1x.png", Texture.class), + ASIAN_GIRL_PORTRAIT("characters/AsianGirlPortrait@1x.png", Texture.class), + + GRANDMA_ANIM_FRAME1("characters/Grandma1@1x.png", Texture.class), + GRANDMA_ANIM_FRAME2("characters/Grandma2@1x.png", Texture.class), + GRANDMA_ANIM_FRAME3("characters/Grandma3@1x.png", Texture.class), + GRANDMA_PORTRAIT("characters/GrandmaPortrait@1x.png", Texture.class), + + HIGHSCHOOL_GUY_ANIM_FRAME1("characters/HighSchoolGuy1@1x.png", Texture.class), + HIGHSCHOOL_GUY_ANIM_FRAME2("characters/HighSchoolGuy2@1x.png", Texture.class), + HIGHSCHOOL_GUY_ANIM_FRAME3("characters/HighSchoolGuy3@1x.png", Texture.class), + HIGHSCHOOL_GUY_PORTRAIT("characters/HighSchoolGuyPortrait@1x.png", Texture.class), + + HIPSTER_GIRL_ANIM_FRAME1("characters/HipsterGirl1@1x.png", Texture.class), + HIPSTER_GIRL_ANIM_FRAME2("characters/HipsterGirl2@1x.png", Texture.class), + HIPSTER_GIRL_ANIM_FRAME3("characters/HipsterGirl3@1x.png", Texture.class), + HIPSTER_GIRL_PORTRAIT("characters/HipsterGirlPortrait@1x.png", Texture.class), + + REGULAR_GUY_ANIM_FRAME1("characters/RegularGuy1@1x.png", Texture.class), + REGULAR_GUY_ANIM_FRAME2("characters/RegularGuy2@1x.png", Texture.class), + REGULAR_GUY_ANIM_FRAME3("characters/RegularGuy3@1x.png", Texture.class), + REGULAR_GUY_PORTRAIT("characters/RegularGuyPortrait@1x.png", Texture.class), + + ROCKET_GUY_ANIM_FRAME1("characters/RocketGuy1@1x.png", Texture.class), + ROCKET_GUY_ANIM_FRAME2("characters/RocketGuy2@1x.png", Texture.class), + ROCKET_GUY_ANIM_FRAME3("characters/RocketGuy3@1x.png", Texture.class), + ROCKET_GUY_PORTRAIT("characters/RocketGuyPortrait@1x.png", Texture.class); + + public final String path; + public final Class classType; + + private CharacterAssets(String menuAssetPath, Class classType) { + this.path = menuAssetPath; + this.classType = classType; + } +} \ No newline at end of file diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java index b4489177112b3c9816ceeab337af0c3fb244280f..3a6f241eebaffbb325068a599752ef4778f7f175 100644 --- a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java @@ -11,7 +11,13 @@ public enum MenuAssets { FORM("Menu/1x/MainMenuForm.png", Texture.class), LOOP_AUDIO("Menu/MenuLoop.mp3",Sound .class), BUTTON_CLICK_AUDIO("Menu/ButtonClick1.mp3",Sound .class), - TRANSITION_AUDIO("Menu/1.5s_fade.mp3",Sound .class); + TRANSITION_AUDIO("Menu/1.5s_fade.mp3",Sound .class), + + NEXT_AVATAR_BUTTON("Menu/1x/flipButton.png",Texture.class), + CONNECTION_BAR("Menu/1x/ConnectionBar.png",Texture.class), + GREEN_CIRCLE_SMALL("Menu/1x/GreenCircleSmall.png",Texture.class), + RED_CIRCLE_SMALL("Menu/1x/RedCircleSmall.png",Texture.class); + public final String path; public final Class classType; diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java new file mode 100644 index 0000000000000000000000000000000000000000..9fee46ac3851906d102cfe957ab88c3bca2471e9 --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java @@ -0,0 +1,21 @@ +package com.mygdx.game.views.enums; + +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Texture; + + +public enum PlayAssets { + + GAME_BOARD("Game/GameBoard/1x/GameBoard@1x.png", Texture.class), + BALL("Game/1x/Ball.png", Texture.class), + LOOP_AUDIO("Game/Audio/GameLoop.mp3",Sound.class), + TRANSITION_AUDIO("Game/Audio/TransitionFX.mp3",Sound.class); + + public final String path; + public final Class classType; + + PlayAssets(String menuAssetPath, Class classType) { + this.path = menuAssetPath; + this.classType = classType; + } +} diff --git a/CheckersClient/core/src/com/mygdx/game/views/tokens/PlayerAvatar.java b/CheckersClient/core/src/com/mygdx/game/views/tokens/PlayerAvatar.java new file mode 100644 index 0000000000000000000000000000000000000000..9d3a3777e46d3bae5cf50bf061fec5fd610a789a --- /dev/null +++ b/CheckersClient/core/src/com/mygdx/game/views/tokens/PlayerAvatar.java @@ -0,0 +1,54 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.mygdx.game.views.tokens; + +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Sprite; +import java.util.ArrayList; + +public class PlayerAvatar extends Sprite { + private final ArrayList<Texture> textureArray; + private final Texture portrait; + private final String name; + private int currentTexture = 0; + private boolean reversed = false; + + public PlayerAvatar(ArrayList<Texture> textureArray, Texture portrait, String name) { + super(textureArray.get(0)); + this.textureArray = textureArray; + this.portrait = portrait; + this.name = name; + setTexture(textureArray.get(currentTexture)); + } + + public void updateTexture() { + if (this.reversed) { + --this.currentTexture; + if (this.currentTexture <= 0) { + this.reversed = false; + } + } else { + ++this.currentTexture; + if (this.currentTexture == this.textureArray.size() - 1) { + this.reversed = true; + } + } + //System.out.println("Updating texture. Current texture Int: " + currentTexture + " numOfTextures: " + textureArray.size()); + setTexture(textureArray.get(currentTexture)); + } + + public ArrayList<Texture> getTextures() { + return this.textureArray; + } + + public Texture getPortrait() { + return this.portrait; + } + + public String getName() { + return this.name; + } +} diff --git a/CheckersServer/.idea/caches/build_file_checksums.ser b/CheckersServer/.idea/caches/build_file_checksums.ser index cded6a6adf181af804787500f203a3a24ec0611d..480a5d2f508b4aad98032d39a6cb4fff257b0c33 100644 Binary files a/CheckersServer/.idea/caches/build_file_checksums.ser and b/CheckersServer/.idea/caches/build_file_checksums.ser differ diff --git a/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml b/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..50fec341c8000eb96f59c19192ccb94fd1f8912d --- /dev/null +++ b/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml @@ -0,0 +1,9 @@ +<component name="libraryTable"> + <library name="Gradle: CheckersServer.core.core-1.0"> + <CLASSES> + <root url="jar://$PROJECT_DIR$/core/build/libs/core-1.0.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> +</component> \ No newline at end of file diff --git a/CheckersServer/.idea/libraries/Gradle__CheckersServer_desktop_desktop_1_0.xml b/CheckersServer/.idea/libraries/Gradle__CheckersServer_desktop_desktop_1_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..369215da594e454a7837187b554b3dc8ecc711ec --- /dev/null +++ b/CheckersServer/.idea/libraries/Gradle__CheckersServer_desktop_desktop_1_0.xml @@ -0,0 +1,9 @@ +<component name="libraryTable"> + <library name="Gradle: CheckersServer.desktop.desktop-1.0"> + <CLASSES> + <root url="jar://$PROJECT_DIR$/desktop/build/libs/desktop-1.0.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> +</component> \ No newline at end of file diff --git a/CheckersServer/build.gradle b/CheckersServer/build.gradle index c5f57c6b5dcd11f5867a795bf1dcec2c4fe27208..5c2215da91e6b1acf38c9b87f66c340d43d3d0f7 100644 --- a/CheckersServer/build.gradle +++ b/CheckersServer/build.gradle @@ -10,7 +10,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.4' + classpath 'com.android.tools.build:gradle:4.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" diff --git a/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt b/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt deleted file mode 100644 index 132c9615d9d596862f77abe67fd9035d73672b7a..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.controller - -class CameraController { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java index 18c9ad7015af7207b2eeee3a46afa3d8edbbf8ff..5520677151edabdba4005f42c891100d79aac05d 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java @@ -10,11 +10,12 @@ import com.mygdx.game.model.Player; import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; public class NetworkController { - private final int MAX_PLAYERS = 2; - private final int MAX_LOBBIES = 2; + private final int MAX_PLAYERS = 8; + private final int MAX_LOBBIES = 40; private ArrayList<Player> players; private ArrayList<Lobby> lobbies; @@ -47,14 +48,23 @@ public class NetworkController { } } public void disconnected (Connection connection) { + for (Lobby lobby : getLobbies()){ + for (int playerId: lobby.getPlayersID()){ + if(connection.getID() == playerId){ + System.out.println("Aye captain"); + //leaveLobby(connection.getID(),lobby.getID()); + //if(lobby.getPlayersCount()==0) deleteLobby(lobby.getID()); + } + } + } playerKick(connection.getID()); } }); } - public Player playerJoin(int newID){ + public Player playerJoin(int newID, int indexAvatar){ if(players.size() < MAX_PLAYERS){ - Player player = new Player(newID); + Player player = new Player(newID, indexAvatar); players.add(player); return player; } @@ -63,13 +73,24 @@ public class NetworkController { public void playerKick(int id){ int index = players.indexOf(new Player(id)); - if (index!= -1) players.remove(index); + if (index!= -1) { + for(Lobby lobby : lobbies){ + if(lobby.getPlayersID().contains(id)){ + ArrayList<Connection> connections = getConnections(lobby); + cLobbyLeave command = new cLobbyLeave(leaveLobby(id, lobby.getID())); + for(Connection c : connections){ + c.sendTCP(command); + } + } + } + players.remove(index); + } } - public Lobby createLobby(int MAX_PLAYERS){ + public Lobby createLobby(String name, int MAX_PLAYERS){ if(lobbies.size() < MAX_LOBBIES){ lobby_id++; - Lobby lobby = new Lobby(lobby_id, MAX_PLAYERS); + Lobby lobby = new Lobby(lobby_id, name, MAX_PLAYERS); lobbies.add(lobby); return lobby; } @@ -83,36 +104,50 @@ public class NetworkController { } public Lobby joinLobby(int playerID, int lobbyID){ - int lobby_idx = lobbies.indexOf(new Lobby(lobbyID)); - int player_idx = players.indexOf(new Player(playerID)); - if (lobby_idx != -1 && player_idx != -1) { - Lobby lobby = lobbies.get(lobby_idx); - Player player = players.get(player_idx); + Lobby lobby = getLobby(lobbyID); + Player player = getPlayer(playerID); + if (lobby.getID() != -1 && player.getID() != -1) { if(lobby.playerJoin(player) != -1){ - lobbies.set(lobby_idx, lobby); + lobbies.set(lobbies.indexOf(lobby), lobby); return lobby; } } return new Lobby(-1); } - public int leaveLobby(int playerID, int lobbyID){ - int lobby_idx = lobbies.indexOf(new Lobby(lobbyID)); - int player_idx = players.indexOf(new Player(playerID)); - if (lobby_idx != -1 && player_idx != -1) { - Lobby lobby = lobbies.get(lobby_idx); - Player player = players.get(player_idx); + public Lobby leaveLobby(int playerID, int lobbyID){ + Lobby lobby = getLobby(lobbyID); + Player player = getPlayer(playerID); + if (lobby.getID() != -1 && player.getID() != -1) { if(lobby.playerKick(player) != -1){ - if(lobby.getPlayersCount() == 0) deleteLobby(lobby_idx); - else lobbies.set(lobby_idx, lobby); - return 0; + if(lobby.getPlayersCount() == 0) deleteLobby(lobbyID); + else lobbies.set(lobbies.indexOf(lobby), lobby); + return lobby; } } - return -1; + return new Lobby(-1); + } + + public Lobby getLobby(int lobbyID){ + int lobby_idx = lobbies.indexOf(new Lobby(lobbyID)); + if (lobby_idx != -1){ + return lobbies.get(lobby_idx); + } + return new Lobby(-1); + } + + public Player getPlayer(int playerID){ + int player_idx = players.indexOf(new Player(playerID)); + if (player_idx != -1){ + return players.get(player_idx); + } + return new Player(-1); } public ArrayList<Lobby> getLobbies(){ return lobbies; } + public ArrayList<Player> getPlayers(){ return players; } + public void registerClasses(){ kryo.register(ArrayList.class, 100); kryo.register(Lobby.class, 5); @@ -125,10 +160,18 @@ public class NetworkController { kryo.register(cLobbyLeave.class, 22); kryo.register(cLobbyDelete.class, 23); kryo.register(cLobbyGetList.class, 24); + kryo.register(cSetIndexAvatar.class, 25); } public NetworkController getNetworkController() { return this; } - public Connection[] getConnections(){ return server.getConnections(); } + public ArrayList<Connection> getConnections(Lobby lobby){ + HashSet<Integer> players_id = lobby.getPlayersID(); + ArrayList<Connection> connections = new ArrayList<Connection>(); + for (Connection c : server.getConnections()) { + if (players_id.contains((Integer) c.getID())) connections.add(c); + } + return connections; + } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java index e0a85104aacf5e6967b3de07f8ae197eb8a16f60..06c2633c9e2718e9766088afad23cf65728902cc 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java @@ -6,6 +6,8 @@ import com.mygdx.game.controller.commands.Command; import com.mygdx.game.model.Lobby; import com.mygdx.game.model.Player; +import java.util.ArrayList; + public class cLobbyCreate extends Command { public cLobbyCreate() { super("cLobbyCreate"); } @@ -14,9 +16,10 @@ public class cLobbyCreate extends Command { @Override public void execute(NetworkController net, Connection connection){ - if(data instanceof Integer){ - int MAX_PLAYERS = (int) data; - data = net.createLobby(MAX_PLAYERS); + if(data instanceof ArrayList){ + String name = (String) ((ArrayList) data).get(0); + int MAX_PLAYERS = (int) ((ArrayList) data).get(1); + data = net.createLobby(name, MAX_PLAYERS); System.out.printf("Request to create lobby received. Returning Lobby w. ID: %d \n", ((Lobby)data).getID()); connection.sendTCP(this); } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java index 09736981208b8473d4c22158ceb726f9be2c91fb..029006dfdf6409a238319fef327e5c869f907c43 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java @@ -14,23 +14,14 @@ public class cLobbyDelete extends Command{ public void execute(NetworkController net, Connection connection){ if(data instanceof Integer) { int lobby_id = (int) data; - int lobby_idx = net.getLobbies().indexOf(new Lobby(lobby_id)); - if (lobby_idx != -1) { - //Notify all players in the lobby - Lobby lobby = net.getLobbies().get(lobby_idx); - HashSet<Integer> players_id = lobby.getPlayersID(); - data = (Integer) net.deleteLobby(lobby_id); - for (Connection c : net.getConnections()) { - if (players_id.contains((Integer) c.getID())) c.sendTCP(this); - } - } - else { - //Notify the sender only - data = (Integer) net.deleteLobby(lobby_id); - connection.sendTCP(this); - } + Lobby lobby = net.getLobby(lobby_id); + //Notify all players in the lobby + data = (Integer) net.deleteLobby(lobby_id); System.out.printf("Request from Player w. ID: %d to delete Lobby w. ID: %d. Returning code: %d \n", connection.getID(), lobby_id, ((Integer) data)); + for (Connection c : net.getConnections(lobby)) { + c.sendTCP(this); + } } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java index b49e1547e05e03677e92cb7d6e57731a9dec7fd6..6ccd56a74c4d2f52823b12bc1e2627b77048e14d 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java @@ -16,5 +16,6 @@ public class cLobbyGetList extends Command{ data = net.getLobbies(); System.out.printf("Request to get list of lobbies from Client. Returning: %s \n", data.toString()); connection.sendTCP(this); + System.out.println("Number of available lobbies" + net.getLobbies().size()); } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java index 6cb5990df1c0873976f41488d239ec621bed8d71..e27c87eb04923377c80eea1d421a2d05ec27327f 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java @@ -17,7 +17,9 @@ public class cLobbyJoin extends Command{ data = net.joinLobby(connection.getID(), lobby_id); System.out.printf("Request from Player w. ID: %d to join Lobby w. ID: %d. Returning Lobby w. ID: %d \n", connection.getID(), lobby_id, ((Lobby)data).getID()); - connection.sendTCP(this); + for (Connection c : net.getConnections(net.getLobby(lobby_id))) { + c.sendTCP(this); + } } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java index 12ff2fa5f909ba25b1c94f7ec6b61c8cf9da0ffa..f8665622965d4e6a4606a3fe930f7cf786c62e55 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java @@ -4,20 +4,27 @@ import com.esotericsoftware.kryonet.Connection; import com.mygdx.game.controller.NetworkController; import com.mygdx.game.model.Lobby; +import java.util.ArrayList; import java.util.HashSet; public class cLobbyLeave extends Command{ public cLobbyLeave() { super("cLobbyLeave"); } + public cLobbyLeave(Lobby lobby) { super("cLobbyLeave", lobby); } + @Override public void execute(NetworkController net, Connection connection){ if(data instanceof Integer) { int lobby_id = (int) data; - data = (Integer) net.leaveLobby(connection.getID(),lobby_id); - System.out.printf("Request from Player w. ID: %d to leave Lobby w. ID: %d. Returning code: %d \n", - connection.getID(), lobby_id, ((Integer)data)); - connection.sendTCP(this); + Lobby lobby = net.getLobby(lobby_id); + ArrayList<Connection> connections = net.getConnections(lobby); + data = net.leaveLobby(connection.getID(),lobby_id); + System.out.printf("Request from Player w. ID: %d to leave Lobby w. ID: %d. Returning Lobby w. ID: %d \n", + connection.getID(), lobby_id, ((Lobby)data).getID()); + for (Connection c : connections) { + c.sendTCP(this); + } } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java index 5bca00f6ca8b356c64af42ec2c8fe08f67097dc3..c99cadce1f7c244f7dd26c2586647b8326fb577d 100644 --- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java @@ -14,9 +14,12 @@ public class cPlayerJoin extends Command { @Override public void execute(NetworkController net, Connection connection){ - data = net.playerJoin(connection.getID()); - System.out.printf("Request to join from Client. Returning ID: %d \n", ((Player)data).getID()); - connection.sendTCP(this); - if(((Player)data).getID() == -1) connection.close(); + if (data instanceof Integer){ + int indexAvatar = (int) data; + data = net.playerJoin(connection.getID(), indexAvatar); + System.out.printf("Request to join from Client. Returning ID: %d \n", ((Player)data).getID()); + connection.sendTCP(this); + if(((Player)data).getID() == -1) connection.close(); + } } } diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java new file mode 100644 index 0000000000000000000000000000000000000000..a3dc1e88d5891fc0ee138c48e3186c142c6b39b3 --- /dev/null +++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java @@ -0,0 +1,35 @@ +package com.mygdx.game.controller.commands; + +import com.esotericsoftware.kryonet.Connection; +import com.mygdx.game.controller.NetworkController; +import com.mygdx.game.model.Player; + +import java.util.HashSet; + +public class cSetIndexAvatar extends Command { + + public cSetIndexAvatar() { super("cLobbyJoin"); } + + public cSetIndexAvatar(int indexAvatar) { + super("cSetIndexAvatar", indexAvatar); + } + + @Override + public void execute(NetworkController net, Connection connection){ + if(data instanceof Integer){ + int indexAvatar = (int) data; + if (indexAvatar == -1) System.out.println("Failed to set index avatar."); + else { + for (Player p : net.getPlayers()) { + if(p.getID() == connection.getID()){ + p.setIndexAvatar(indexAvatar); + connection.sendTCP(this); + } + else{ + connection.sendTCP(new cSetIndexAvatar(-1)); + } + } + } + } + } +} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt b/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt deleted file mode 100644 index 1313b07b8081f83d858636c649b39a408cf1ed81..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.managers - -class ViewManager { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java index d558e7b2bb432894d846e8986a90bc1bb192f317..57eb0c96655bf2236e828692b88130fc4000b314 100644 --- a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java +++ b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java @@ -6,6 +6,7 @@ import java.util.HashSet; public class Lobby { private int ID; + private String name; private int MAX_PLAYERS; private ArrayList<Player> players; @@ -16,14 +17,15 @@ public class Lobby { players = new ArrayList<Player>(); } - public Lobby(int ID, int MAX_PLAYERS){ + public Lobby(int ID, String name, int MAX_PLAYERS){ this.ID = ID; + this.name = name; this.MAX_PLAYERS = MAX_PLAYERS; players = new ArrayList<Player>(); } public int playerJoin(Player player){ - if(players.size() < MAX_PLAYERS){ + if(players.size() < MAX_PLAYERS && !getPlayersID().contains(player.getID())){ players.add(player); return 0; } @@ -62,6 +64,7 @@ public class Lobby { public String toString() { return "Lobby{" + "ID=" + ID + + ", name='" + name + '\'' + ", MAX_PLAYERS=" + MAX_PLAYERS + ", players=" + players + '}'; diff --git a/CheckersServer/core/src/com/mygdx/game/model/Player.java b/CheckersServer/core/src/com/mygdx/game/model/Player.java index dcdbf53880bf6148551ec35aeb51bf52d017b6e2..2797bc0136acc153b84b08f80ef547ddf9e8b8fe 100644 --- a/CheckersServer/core/src/com/mygdx/game/model/Player.java +++ b/CheckersServer/core/src/com/mygdx/game/model/Player.java @@ -3,11 +3,16 @@ package com.mygdx.game.model; public class Player { private int ID; + private int indexAvatar; + private String playerName; public Player(){} - public Player(int ID){ + public Player(int ID){ this.ID = ID; } + + public Player(int ID, int indexAvatar){ this.ID = ID; + this.indexAvatar = indexAvatar; } public int getID(){ return ID; } @@ -27,4 +32,15 @@ public class Player { '}'; } + public void setIndexAvatar(int indexAvatar){ + this.indexAvatar = indexAvatar; + } + + public int getPlayerAvatar(int indexAvatar){ + return this.indexAvatar; + } + + public void setPlayerName(String playerName) { + this.playerName = playerName; + } } diff --git a/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt b/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt deleted file mode 100644 index 18c8c08a3333370e4e003f0b0019270a5f8fe7c7..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.singletons - -class AssetLoader { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt b/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt deleted file mode 100644 index a6cdbeb1eb6158a79c848759219690491cb88d41..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.mygdx.game.views - -abstract class AbstractView { - -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt b/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt deleted file mode 100644 index 2564b4066b150acea47b864812f917a1d1c0f90a..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class JoinView { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt b/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt deleted file mode 100644 index 817f848849cfb382d9c19f2b617598acb4bb8bce..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class LoadingView : WaitingView() { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt b/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt deleted file mode 100644 index 0db2ca11a2a33c8425cc298d64d333bca1d07b48..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class LobbyView { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt b/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt deleted file mode 100644 index c7557ddd383976a73e3af964301a27618e395cbe..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -class LoginView { -} \ No newline at end of file diff --git a/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt b/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt deleted file mode 100644 index 38edc85c3f81329ca929b58ba92e46a6e4c9f1bf..0000000000000000000000000000000000000000 --- a/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.mygdx.game.views - -open class WaitingView{ -} \ No newline at end of file