diff --git a/core/assets/buttons/battle_overlay.pdn b/core/assets/buttons/battle_overlay.pdn new file mode 100644 index 0000000000000000000000000000000000000000..26f1c9270234330dee350ebd161ea4074476a00f Binary files /dev/null and b/core/assets/buttons/battle_overlay.pdn differ diff --git a/core/assets/crew/background.png b/core/assets/crew/background.png new file mode 100644 index 0000000000000000000000000000000000000000..6940a39e42533fe79f1bd917d04d58f458e0c3e4 Binary files /dev/null and b/core/assets/crew/background.png differ diff --git a/core/assets/enemy/battle_overlay.png b/core/assets/enemy/battle_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea485c5e17a7d50fd93b833957d23b5420e46ce Binary files /dev/null and b/core/assets/enemy/battle_overlay.png differ diff --git a/core/assets/ship/fed/fed_cruiser_2_base.png b/core/assets/ship/barrage/fed_cruiser_2_base.png similarity index 100% rename from core/assets/ship/fed/fed_cruiser_2_base.png rename to core/assets/ship/barrage/fed_cruiser_2_base.png diff --git a/core/assets/ship/fed/fed_cruiser_shields1.png b/core/assets/ship/barrage/fed_cruiser_shields1.png similarity index 100% rename from core/assets/ship/fed/fed_cruiser_shields1.png rename to core/assets/ship/barrage/fed_cruiser_shields1.png diff --git a/core/assets/ship/fed/fed_cruiser_base.png b/core/assets/ship/barragebase.png similarity index 100% rename from core/assets/ship/fed/fed_cruiser_base.png rename to core/assets/ship/barragebase.png diff --git a/core/assets/ship/fed/fed_cruiser_floor.png b/core/assets/ship/barragefloor.png similarity index 100% rename from core/assets/ship/fed/fed_cruiser_floor.png rename to core/assets/ship/barragefloor.png diff --git a/core/assets/ship/circle/circle_cruiser_2_base.png b/core/assets/ship/boarder/circle_cruiser_2_base.png similarity index 100% rename from core/assets/ship/circle/circle_cruiser_2_base.png rename to core/assets/ship/boarder/circle_cruiser_2_base.png diff --git a/core/assets/ship/circle/circle_cruiser_shields1.png b/core/assets/ship/boarder/circle_cruiser_shields1.png similarity index 100% rename from core/assets/ship/circle/circle_cruiser_shields1.png rename to core/assets/ship/boarder/circle_cruiser_shields1.png diff --git a/core/assets/ship/circle/circle_cruiser_base.png b/core/assets/ship/boarderbase.png similarity index 100% rename from core/assets/ship/circle/circle_cruiser_base.png rename to core/assets/ship/boarderbase.png diff --git a/core/assets/ship/circle/circle_cruiser_floor.png b/core/assets/ship/boarderfloor.png similarity index 100% rename from core/assets/ship/circle/circle_cruiser_floor.png rename to core/assets/ship/boarderfloor.png diff --git a/core/assets/ship/kestral/kestral_shields1.png b/core/assets/ship/default/kestral_shields1.png similarity index 100% rename from core/assets/ship/kestral/kestral_shields1.png rename to core/assets/ship/default/kestral_shields1.png diff --git a/core/assets/ship/kestral/kestral_base.png b/core/assets/ship/defaultbase.png similarity index 100% rename from core/assets/ship/kestral/kestral_base.png rename to core/assets/ship/defaultbase.png diff --git a/core/assets/ship/kestral/kestral_floor.png b/core/assets/ship/defaultfloor.png similarity index 100% rename from core/assets/ship/kestral/kestral_floor.png rename to core/assets/ship/defaultfloor.png diff --git a/core/assets/ship/anaerobic/shields.png b/core/assets/ship/killer/shields.png similarity index 100% rename from core/assets/ship/anaerobic/shields.png rename to core/assets/ship/killer/shields.png diff --git a/core/assets/ship/anaerobic/an2base.png b/core/assets/ship/killerbase.png similarity index 100% rename from core/assets/ship/anaerobic/an2base.png rename to core/assets/ship/killerbase.png diff --git a/core/assets/ship/anaerobic/an2floor.png b/core/assets/ship/killerfloor.png similarity index 100% rename from core/assets/ship/anaerobic/an2floor.png rename to core/assets/ship/killerfloor.png diff --git a/core/assets/ship/stealth/stealth_base.png b/core/assets/ship/stealthbase.png similarity index 100% rename from core/assets/ship/stealth/stealth_base.png rename to core/assets/ship/stealthbase.png diff --git a/core/assets/ship/stealth/stealth_floor.png b/core/assets/ship/stealthfloor.png similarity index 100% rename from core/assets/ship/stealth/stealth_floor.png rename to core/assets/ship/stealthfloor.png diff --git a/core/assets/ship/rock/rock_cruiser_floor.png b/core/assets/ship/tank/rock_cruiser_floor.png similarity index 100% rename from core/assets/ship/rock/rock_cruiser_floor.png rename to core/assets/ship/tank/rock_cruiser_floor.png diff --git a/core/assets/ship/rock/rock_cruiser_shields1.png b/core/assets/ship/tank/rock_cruiser_shields1.png similarity index 100% rename from core/assets/ship/rock/rock_cruiser_shields1.png rename to core/assets/ship/tank/rock_cruiser_shields1.png diff --git a/core/assets/ship/rock/rock_cruiser_base.png b/core/assets/ship/tankbase.png similarity index 100% rename from core/assets/ship/rock/rock_cruiser_base.png rename to core/assets/ship/tankbase.png diff --git a/core/assets/ship/rock/rock_cruiser_2_floor.png b/core/assets/ship/tankfloor.png similarity index 100% rename from core/assets/ship/rock/rock_cruiser_2_floor.png rename to core/assets/ship/tankfloor.png diff --git a/core/assets/ship/tile.png b/core/assets/ship/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..5e125300d422dbbdfbc946f77900233af9326f30 Binary files /dev/null and b/core/assets/ship/tile.png differ diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_green1.png b/core/assets/shipsys/cameras/camerasgreen.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_green1.png rename to core/assets/shipsys/cameras/camerasgreen.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_orange1.png b/core/assets/shipsys/cameras/camerasorange.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_orange1.png rename to core/assets/shipsys/cameras/camerasorange.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_overlay.png b/core/assets/shipsys/cameras/camerasoverlay.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_overlay.png rename to core/assets/shipsys/cameras/camerasoverlay.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_red1.png b/core/assets/shipsys/cameras/camerasred.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_sensors_red1.png rename to core/assets/shipsys/cameras/camerasred.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_green1.png b/core/assets/shipsys/cockpit/cockpitgreen.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_green1.png rename to core/assets/shipsys/cockpit/cockpitgreen.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_orange1.png b/core/assets/shipsys/cockpit/cockpitorange.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_orange1.png rename to core/assets/shipsys/cockpit/cockpitorange.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_overlay.png b/core/assets/shipsys/cockpit/cockpitoverlay.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_overlay.png rename to core/assets/shipsys/cockpit/cockpitoverlay.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_red1.png b/core/assets/shipsys/cockpit/cockpitred.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_pilot_red1.png rename to core/assets/shipsys/cockpit/cockpitred.png diff --git a/core/assets/shipsys/engine/engineover.png b/core/assets/shipsys/engine/engineoverlay.png similarity index 100% rename from core/assets/shipsys/engine/engineover.png rename to core/assets/shipsys/engine/engineoverlay.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_green1.png b/core/assets/shipsys/medbay/medbaygreen.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_green1.png rename to core/assets/shipsys/medbay/medbaygreen.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_orange1.png b/core/assets/shipsys/medbay/medbayorange.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_orange1.png rename to core/assets/shipsys/medbay/medbayorange.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_overlay.png b/core/assets/shipsys/medbay/medbayoverlay.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_overlay.png rename to core/assets/shipsys/medbay/medbayoverlay.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_red1.png b/core/assets/shipsys/medbay/medbayred.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_medbay_red1.png rename to core/assets/shipsys/medbay/medbayred.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_green1.png b/core/assets/shipsys/o2/o2green.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_green1.png rename to core/assets/shipsys/o2/o2green.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_orange1.png b/core/assets/shipsys/o2/o2orange.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_orange1.png rename to core/assets/shipsys/o2/o2orange.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_overlay.png b/core/assets/shipsys/o2/o2overlay.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_overlay.png rename to core/assets/shipsys/o2/o2overlay.png diff --git a/Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_red1.png b/core/assets/shipsys/o2/o2red.png similarity index 100% rename from Ressourcen/Rainmeter-skin/resources/game_data/img/icons/s_oxygen_red1.png rename to core/assets/shipsys/o2/o2red.png diff --git a/core/assets/shipsys/shields/shieldsover.png b/core/assets/shipsys/shields/shieldsoverlay.png similarity index 100% rename from core/assets/shipsys/shields/shieldsover.png rename to core/assets/shipsys/shields/shieldsoverlay.png diff --git a/core/assets/shipsys/weapon_system/bomb.png b/core/assets/shipsys/weapon_system/bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..61dfec12ca5f68822fd7631cb7cba19a3ac776de Binary files /dev/null and b/core/assets/shipsys/weapon_system/bomb.png differ diff --git a/core/assets/shipsys/weapon/desktop.ini b/core/assets/shipsys/weapon_system/desktop.ini similarity index 100% rename from core/assets/shipsys/weapon/desktop.ini rename to core/assets/shipsys/weapon_system/desktop.ini diff --git a/core/assets/shipsys/weapon/generalbox.png b/core/assets/shipsys/weapon_system/generalbox.png similarity index 100% rename from core/assets/shipsys/weapon/generalbox.png rename to core/assets/shipsys/weapon_system/generalbox.png diff --git a/core/assets/shipsys/weapon_system/healbomb.png b/core/assets/shipsys/weapon_system/healbomb.png new file mode 100644 index 0000000000000000000000000000000000000000..338d5e827583b04f2906324af06336955154bfd9 Binary files /dev/null and b/core/assets/shipsys/weapon_system/healbomb.png differ diff --git a/core/assets/shipsys/weapon/laser.png b/core/assets/shipsys/weapon_system/laser.png similarity index 100% rename from core/assets/shipsys/weapon/laser.png rename to core/assets/shipsys/weapon_system/laser.png diff --git a/core/assets/shipsys/weapon/minibox.png b/core/assets/shipsys/weapon_system/minibox.png similarity index 100% rename from core/assets/shipsys/weapon/minibox.png rename to core/assets/shipsys/weapon_system/minibox.png diff --git a/core/assets/shipsys/weapon_system/radio.png b/core/assets/shipsys/weapon_system/radio.png new file mode 100644 index 0000000000000000000000000000000000000000..5f47b417847962fc29d21185b7011f8f936883c0 Binary files /dev/null and b/core/assets/shipsys/weapon_system/radio.png differ diff --git a/core/assets/shipsys/weapon_system/radiobomb.png b/core/assets/shipsys/weapon_system/radiobomb.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3373a064a2c651372cd9a9ae5c5d841688da0f Binary files /dev/null and b/core/assets/shipsys/weapon_system/radiobomb.png differ diff --git a/core/assets/shipsys/weapon_system/rocket.png b/core/assets/shipsys/weapon_system/rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..6271e0f5e57be397e7fc91ff74b693bd244eecad Binary files /dev/null and b/core/assets/shipsys/weapon_system/rocket.png differ diff --git a/core/assets/shipsys/weapon/smallbox.png b/core/assets/shipsys/weapon_system/smallbox.png similarity index 100% rename from core/assets/shipsys/weapon/smallbox.png rename to core/assets/shipsys/weapon_system/smallbox.png diff --git a/core/assets/shipsys/weapon/weaponsgreen.png b/core/assets/shipsys/weapon_system/weapon_systemgreen.png similarity index 100% rename from core/assets/shipsys/weapon/weaponsgreen.png rename to core/assets/shipsys/weapon_system/weapon_systemgreen.png diff --git a/core/assets/shipsys/weapon/weaponsorange.png b/core/assets/shipsys/weapon_system/weapon_systemorange.png similarity index 100% rename from core/assets/shipsys/weapon/weaponsorange.png rename to core/assets/shipsys/weapon_system/weapon_systemorange.png diff --git a/core/assets/shipsys/weapon/s_weapons_overlay.png b/core/assets/shipsys/weapon_system/weapon_systemoverlay.png similarity index 100% rename from core/assets/shipsys/weapon/s_weapons_overlay.png rename to core/assets/shipsys/weapon_system/weapon_systemoverlay.png diff --git a/core/assets/shipsys/weapon/weaponsred.png b/core/assets/shipsys/weapon_system/weapon_systemred.png similarity index 100% rename from core/assets/shipsys/weapon/weaponsred.png rename to core/assets/shipsys/weapon_system/weapon_systemred.png diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java index 995407694ac37189eba6dd6d7e5f9a81128fc4b6..cd0ef82a6a46e9c0bc5467e7324fdc9550275939 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java @@ -81,7 +81,7 @@ public class Client { * * @throws IllegalArgumentException on error */ - public boolean login(String username, ShipType shipType) throws IllegalArgumentException { + public boolean login(String username, ShipType shipType, int difficulty) throws IllegalArgumentException { try { // ==================== LOG-IN ==================== send.println("[LOGIN]:" + username); @@ -97,7 +97,8 @@ public class Client { received = receive.readLine(); // ==================== NEW GAME ==================== if (received.equals("[NEW-GAME]")){ - System.out.println("<CLIENT>:[NEW-GAME]:[USERNAME]:"+username+":[SHIP-TYPE]:"+shipType); + System.out.println("<CLIENT>:[NEW-GAME]:[USERNAME]:"+username+":[SHIP-TYPE]:"+shipType+":[DIFFICULTY]:"+difficulty); + send.println(difficulty); sendObject.writeObject(shipType); received = receive.readLine(); } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/ClientControllerCommunicator.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/ClientControllerCommunicator.java index eddd4de9d3412753098ef4083bf773ef40491b68..f9ae6b7fc731128050636239df1394e3dd1b4809 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/ClientControllerCommunicator.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/ClientControllerCommunicator.java @@ -1,10 +1,12 @@ package com.galaxytrucker.galaxytruckerreloaded.Communication; +import com.galaxytrucker.galaxytruckerreloaded.Controller.*; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet; import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.ShipType; import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject; +import com.galaxytrucker.galaxytruckerreloaded.Server.RequestType; import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject; import lombok.*; @@ -48,8 +50,8 @@ public class ClientControllerCommunicator { * @param username - the username * @return true if the user already exists else create a enw spaceship */ - public boolean login(String username) { - boolean permittedLogin = client.login(username, ShipType.DEFAULT); + public boolean login(String username, ShipType ship, int difficulty) { + boolean permittedLogin = client.login(username, ship, difficulty); if (permittedLogin) { this.clientShip = client.getMyShip(); this.map = client.getOverworld(); @@ -57,12 +59,34 @@ public class ClientControllerCommunicator { return permittedLogin; } + /** + * Issue logout request + * @return true if the user was succesfully logged out + */ + public boolean logout() { + try { + RequestObject requestObject = new RequestObject(); + requestObject.setRequestType(RequestType.LOGOUT); + requestObject.setShip(clientShip); + ResponseObject responseObject = sendRequest(requestObject); + return responseObject.isValidRequest(); + } + catch(Exception e) { + e.printStackTrace(); + return false; + } + } + /** Constructor * @param client - the client object, used to connect to server */ public static ClientControllerCommunicator getInstance(Client client){ if (singleton == null){ singleton = new ClientControllerCommunicator(client); } + CrewController.getInstance(singleton); + HangerController.getInstance(); + TraderController.getInstance(singleton); + TravelController.getInstance(singleton); // TODO CREATE ALL CONTROLLERS HERE, all controllers should be singletons return singleton; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/BattleController.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/BattleController.java index f779b6602562d097044135077f9fb3809d48d57c..9da29831fe9a8f18901c4d5f61923fe1d3b8d060 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/BattleController.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/BattleController.java @@ -8,6 +8,7 @@ import lombok.*; @Setter @RequiredArgsConstructor(access = AccessLevel.PUBLIC) public class BattleController extends Controller{ + @NonNull private Ship myself; diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/CrewController.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/CrewController.java index 9ef3d096eec5574d9a42bffd712c9639f6886369..29cea0ecbed625c42aa017b71adeaf0278ab544b 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/CrewController.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/CrewController.java @@ -12,15 +12,29 @@ import lombok.*; @Getter @Setter -@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class CrewController extends Controller { + private static CrewController singleton; + /** * ClientControllerCommunicator */ @NonNull private ClientControllerCommunicator clientControllerCommunicator; + /** + * return the instance of this singleton + * @param communicator the communicator + * @return the singleton instance + */ + public static CrewController getInstance(ClientControllerCommunicator communicator) { + if(singleton == null) { + singleton = new CrewController(communicator); + } + return singleton; + } + /** * Move a crew member to a different section * diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/HangerController.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/HangerController.java index e8b677f1d5f65fd7700698d91aa73a2310f07f91..83b4bb3062cc6c7e4836edf418eb4c49584cb096 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/HangerController.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/HangerController.java @@ -7,9 +7,18 @@ import lombok.Setter; @Getter @Setter -@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class HangerController extends Controller { + private static HangerController singleton; + + public static HangerController getInstance() { + if(singleton == null) { + singleton = new HangerController(); + } + return singleton; + } + /** * Picks a Shipmodel * @param username - the specified username diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TraderController.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TraderController.java index 706877335a6caa5161101d9f7c5dc0c006d0e267..5eee83c3c85af10a3a91a37ca72bd72b220194f4 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TraderController.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TraderController.java @@ -16,22 +16,27 @@ import java.util.List; @Getter @Setter -@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class TraderController extends Controller{ - /** the trader */ - @NonNull - private Trader trader; - /** ClientControllerCommunicator */ @NonNull private ClientControllerCommunicator clientControllerCommunicator; + private static TraderController singleton; + + public static TraderController getInstance(ClientControllerCommunicator communicator) { + if(singleton == null) { + singleton = new TraderController(communicator); + } + return singleton; + } + /** * Buy a weapon from the trader * @param weapon - the weapon to buy */ - public boolean purchaseWeapon(Weapon weapon) { + public boolean purchaseWeapon(Trader trader, Weapon weapon) { try { RequestObject requestObject = new RequestObject(); requestObject.setWeapon(weapon); @@ -65,7 +70,7 @@ public class TraderController extends Controller{ * Buy crew from a trader * @param crew - the crew to buy */ - public boolean purchaseCrew(Crew crew) { + public boolean purchaseCrew(Trader trader, Crew crew) { try { RequestObject requestObject = new RequestObject(); requestObject.setRequestType(RequestType.TRADERBUYCREW); @@ -98,7 +103,7 @@ public class TraderController extends Controller{ * Buy rockets from the trader * @param amount - the amount of rockets to buy */ - public boolean purchaseRockets(int amount) { + public boolean purchaseRockets(Trader trader, int amount) { try { RequestObject requestObject = new RequestObject(); requestObject.setRequestType(RequestType.TRADERBUYROCKETS); @@ -130,7 +135,7 @@ public class TraderController extends Controller{ * Buy fuel from the trader * @param amount - the amount of fuel to buy */ - public boolean purchaseFuel( int amount) { + public boolean purchaseFuel(Trader trader, int amount) { try { RequestObject requestObject = new RequestObject(); requestObject.setShip(clientControllerCommunicator.getClientShip()); @@ -162,7 +167,7 @@ public class TraderController extends Controller{ * Buy health from the trader * @param amount - the amount to buy */ - public boolean purchaseHP(int amount) { + public boolean purchaseHP(Trader trader, int amount) { try { RequestObject requestObject = new RequestObject(); requestObject.setShip(clientControllerCommunicator.getClientShip()); @@ -194,7 +199,7 @@ public class TraderController extends Controller{ * Sell weapon to the trader * @param weapon the weapon */ - public boolean sellWeapon(Weapon weapon) { + public boolean sellWeapon(Trader trader, Weapon weapon) { try { RequestObject requestObject = new RequestObject(); requestObject.setShip(clientControllerCommunicator.getClientShip()); @@ -228,7 +233,7 @@ public class TraderController extends Controller{ * sell rockets to the trader * @param amount the amount of rockets */ - public boolean sellRockets(int amount) { + public boolean sellRockets(Trader trader, int amount) { try { RequestObject requestObject = new RequestObject(); requestObject.setShip(clientControllerCommunicator.getClientShip()); diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TravelController.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TravelController.java index 85f240aeb289d96841e8567de587ac287e7baec3..67ea4a3712966cfd2c94d10fd5daf337f19ed4da 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TravelController.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Controller/TravelController.java @@ -12,13 +12,22 @@ import java.util.List; @Getter @Setter -@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class TravelController extends Controller{ /** ClientControllerCommunicator */ @NonNull private ClientControllerCommunicator clientControllerCommunicator; + private static TravelController singleton; + + public static TravelController getInstance(ClientControllerCommunicator communicator) { + if(singleton == null) { + singleton = new TravelController(communicator); + } + return singleton; + } + /** * travels from one location to another * @param destination - the destination diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Main.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Main.java index 298006821ee86cef117fdc96fa95a9902179ba1e..1626125cbca3e1215c332d925bf2cf192532a0b3 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Main.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Main.java @@ -4,6 +4,8 @@ import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.galaxytrucker.galaxytruckerreloaded.Communication.Client; +import com.galaxytrucker.galaxytruckerreloaded.Server.Server; +import com.galaxytrucker.galaxytruckerreloaded.Server.ServerServiceCommunicator; import com.galaxytrucker.galaxytruckerreloaded.View.Screen.LoginScreen; import com.galaxytrucker.galaxytruckerreloaded.View.Screen.MainMenu; import lombok.Getter; @@ -27,9 +29,34 @@ public class Main extends Game { * the client */ @Getter - @Setter private Client client; + /** + * the server + */ + @Getter + @Setter + private boolean server; + + /** + * start a server, if there isnt one + */ + public void startServer() { + if(!server) { + Server.runServer(); + server = true; + } + } + + /** + * start a client, if there isnt already one + */ + public void startClient() { + if(client == null) { + client = new Client("localhost", 5050); + } + } + @Override public void create() { batch = new SpriteBatch(); diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java index c39dce62a0c948d56bf6be6e4541bdd4e5003a86..a9a7d60762782cb892f43e5fbe8c560fbf650409 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java @@ -28,6 +28,14 @@ public class Overworld implements Serializable { @NonNull private int seed; + /** + * the difficulty of the map + * 0 = easy + * 1 = middle + * 2 = hard + */ + private int difficulty; + /** Username used as ID */ @NonNull private String associatedUser; diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/ShipType.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/ShipType.java index 0025590a653dd5748d8513d1ee5578c2af868fa5..bf08f4a8ba10ca888171faaaa5f9aeb1b153983c 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/ShipType.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/ShipType.java @@ -1,5 +1,30 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout; + public enum ShipType { - DEFAULT,TANK,KILLER,BARRAGE,STEALTH,BOARDER + DEFAULT,TANK,KILLER,BARRAGE,STEALTH,BOARDER; + + public ShipType next() { + switch(this) { + case DEFAULT: return TANK; + case TANK: return KILLER; + case KILLER: return BARRAGE; + case BARRAGE: return STEALTH; + case STEALTH: return BOARDER; + case BOARDER: return DEFAULT; + default: return null; + } + } + + public ShipType previous() { + switch(this) { + case DEFAULT: return BOARDER; + case TANK: return DEFAULT; + case BARRAGE: return KILLER; + case BOARDER: return STEALTH; + case STEALTH: return BARRAGE; + case KILLER: return TANK; + default: return null; + } + } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java index d92bbe80f2379d7b019ddba4cda8089ccbbea4bf..9cf1de47aa7e55bb4d146639f5521a082570c5fa 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java @@ -16,6 +16,7 @@ import lombok.Setter; import java.io.*; import java.net.Socket; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; /** * Handle each client in a separate thread @@ -69,6 +70,8 @@ public class ClientHandler implements Runnable { @Setter private boolean gameActive = true; + private boolean clientRunning = true; + /** * Map seed */ @@ -123,68 +126,76 @@ public class ClientHandler implements Runnable { @Override public void run() { planetNames.addAll(Arrays.asList(names)); - // ==================== LOGIN ==================== - try { - this.username = receive.readLine().replace("[LOGIN]:", ""); - if (serverServiceCommunicator.isLoggedIn(username)) { - send.println(false); - } else { - send.println(true); - // ==================== NEW GAME ==================== - try { - this.user = serverServiceCommunicator.getUserService().getUser(username); - if (user.isFirstGame()) { - send.println("[NEW-GAME]"); - // ==================== Overworld Creation ==================== - this.seed = UUID.randomUUID().hashCode(); - Overworld overworld = generateOverworld(this.seed, username); - user.setOverworld(overworld); - //====================== Ship Creation ================== - ShipType shipType = (ShipType) receiveObject.readObject(); - user.setUserShip(generateShip(shipType, username, overworld)); - //======================================================= - user.setFirstGame(false); - } - // ==================== UPDATE LOGIN ==================== - user.setLoggedIn(true); - serverServiceCommunicator.getUserService().updateUser(user); - // ==================== FETCH SHIP ==================== - try { - send.println("[FETCH-SHIP]"); - sendObject.writeObject(this.serverServiceCommunicator.getClientShip(username)); - } catch (Exception f) { - f.printStackTrace(); - send.println("[EXCEPTION]:[FETCH-SHIP]:[USERNAME]:" + username); - throw new IllegalArgumentException(f.getMessage()); - } - // ==================== FETCH MAP ==================== + while(clientRunning) { + // ==================== LOGIN ==================== + try { + this.username = receive.readLine().replace("[LOGIN]:", ""); + if (serverServiceCommunicator.isLoggedIn(username)) { + send.println(false); + } else { + send.println(true); + // ==================== NEW GAME ==================== try { - send.println("[FETCH-MAP]"); - sendObject.writeObject(this.serverServiceCommunicator.getClientMap(username)); - } catch (Exception f) { - f.printStackTrace(); - send.println("[EXCEPTION]:[FETCH-MAP]:[USERNAME]:" + username); - throw new IllegalArgumentException(f.getMessage()); - } - } catch (Exception e) { - e.printStackTrace(); - send.println("[EXCEPTION]:[NEW-GAME]:[USERNAME]:" + username); + this.user = serverServiceCommunicator.getUserService().getUser(username); + if (user.isFirstGame()) { + send.println("[NEW-GAME]"); + // ==================== Overworld Creation ==================== + int difficulty = Integer.parseInt(receive.readLine()); + this.seed = UUID.randomUUID().hashCode(); + Overworld overworld = generateOverworld(this.seed, username, difficulty); + user.setOverworld(overworld); + //====================== Ship Creation ================== + ShipType shipType = (ShipType) receiveObject.readObject(); + user.setUserShip(generateShip(shipType, username, overworld)); + //======================================================= + user.setFirstGame(false); + } + // ==================== UPDATE LOGIN ==================== + user.setLoggedIn(true); + serverServiceCommunicator.getUserService().updateUser(user); + // ==================== FETCH SHIP ==================== + try { + send.println("[FETCH-SHIP]"); + sendObject.writeObject(this.serverServiceCommunicator.getClientShip(username)); + } catch (Exception f) { + f.printStackTrace(); + send.println("[EXCEPTION]:[FETCH-SHIP]:[USERNAME]:" + username); + throw new IllegalArgumentException(f.getMessage()); + } + // ==================== FETCH MAP ==================== + try { + send.println("[FETCH-MAP]"); + sendObject.writeObject(this.serverServiceCommunicator.getClientMap(username)); + } catch (Exception f) { + f.printStackTrace(); + send.println("[EXCEPTION]:[FETCH-MAP]:[USERNAME]:" + username); + throw new IllegalArgumentException(f.getMessage()); + } + } catch (Exception e) { + e.printStackTrace(); + send.println("[EXCEPTION]:[NEW-GAME]:[USERNAME]:" + username); + } + gameActive = true; + // ==================== RUNNING ==================== + while (gameActive) { + RequestObject request = (RequestObject) receiveObject.readObject(); + sendObject.writeObject(this.serverServiceCommunicator.getResponse(request)); + if (request.getRequestType() == RequestType.LOGOUT) { + gameActive = false; + } + } } - // ==================== RUNNING ==================== - while (gameActive) { - sendObject.writeObject(this.serverServiceCommunicator.getResponse((RequestObject) receiveObject.readObject())); + } catch (Exception e) { + e.printStackTrace(); + // Socket will be closed thanks to exception, therefor cannot send more data + // Thread will terminate with socket exception + try { + serverServiceCommunicator.logoutAfterException(username); + send.println("[EXCEPTION]:[LOGIN]:[USERNAME]:" + username); + } catch (Exception f) { + f.printStackTrace(); } } - } catch (Exception e) { - e.printStackTrace(); - // Socket will be closed thanks to exception, therefor cannot send more data - // Thread will terminate with socket exception - try { - serverServiceCommunicator.logoutAfterException(username); - send.println("[EXCEPTION]:[LOGIN]:[USERNAME]:" + username); - } catch (Exception f) { - f.printStackTrace(); - } } } @@ -211,7 +222,7 @@ public class ClientHandler implements Runnable { * @param seed - the world seed * @return the generated overworld */ - private Overworld generateOverworld(int seed, String username) { + private Overworld generateOverworld(int seed, String username, int difficulty) { Random random = new Random(seed); List<PlanetEvent> planetEvents = new ArrayList<PlanetEvent>(); planetEvents.add(PlanetEvent.SHOP); @@ -225,19 +236,50 @@ public class ClientHandler implements Runnable { //TODO ADD TRADER WITH ITEMS TO MAP planets.add(new Planet(UUID.randomUUID().hashCode(), getPlanetName(planetNames, usedPlanetNames, seed), 0, 0, PlanetEvent.VOID, new ArrayList<Ship>())); - for (int i = 0; i < 5; i++) { - for (int a = 0; a < 5; a++) { - String nextPlanet = getPlanetName(planetNames, usedPlanetNames, seed); - planets.add(new Planet(UUID.randomUUID().hashCode(), nextPlanet, i, a, - planetEvents.get(random.nextInt(planetEvents.size() - 1)), new ArrayList<Ship>())); + + /** + * max - max range + */ + int max = 3; + /** + * min -min range + */ + int min = 1; + + for (int x = 0; x < 1000; x+=100) { + for (int y = 0; y < 100; y+=50) { + + //Random multiplication + int randomNumber = ThreadLocalRandom.current().nextInt(min,max +1); + + int randomPlanetNumber = ThreadLocalRandom.current().nextInt(1, 5); + + //X und Y Koordinaten randomisen + int randX = x*randomNumber; + int randY = y*randomNumber; + + for(int planetenAnzahl = 0; planetenAnzahl <= randomPlanetNumber; planetenAnzahl++){ + String nextPlanet = getPlanetName(planetNames, usedPlanetNames, seed); + planets.add(new Planet(UUID.randomUUID().hashCode(), nextPlanet,x ,randY, + planetEvents.get(random.nextInt(planetEvents.size() - 1)), new ArrayList<Ship>())); + } + + + //Doppelte Planeten check noch ohne Funktion! + for(Planet test : planets){ + if(test.getPosX() == randX && test.getPosY() == randY){ + + } + } } } // Boss planet planets.add(new Planet(UUID.randomUUID().hashCode(), getPlanetName(planetNames, usedPlanetNames, seed), - 30, 30, PlanetEvent.BOSS, new ArrayList<Ship>())); + 500, 200, PlanetEvent.BOSS, new ArrayList<Ship>())); Overworld overworld = new Overworld(UUID.randomUUID().hashCode(), seed, username); overworld.setStartPlanet(planets.get(0)); overworld.setPlanetMap(planets); + overworld.setDifficulty(difficulty); return overworld; } @@ -251,7 +293,6 @@ public class ClientHandler implements Runnable { private Ship generateShip(ShipType shipType, String username, Overworld overworld) { List<Weapon> inventory = new ArrayList<>(); List<Room> rooms = new ArrayList<>(); - List<Tile> tiles = new ArrayList<>(); List<Integer> crewStats = new ArrayList<>(); switch (shipType) { // ========== KESTREL A ========== @@ -260,6 +301,7 @@ public class ClientHandler implements Runnable { crewStats.add(2); } for (int i = 0; i < 17; i++) { + List<Tile> tiles = new ArrayList<>(); // ========== Tile generator ========== // 2 Above each other if (i == 0 || i == 16) { @@ -312,11 +354,11 @@ public class ClientHandler implements Runnable { weapons.getTiles().get(0).setStandingOnMe(crew); weapons.setCrew(crewInRoom); // Add Weapons - Weapon laser = new Weapon(UUID.randomUUID().hashCode(), WeaponType.LASER, 2, 1, 1, 1, 0, - (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser Gun", 30); - Weapon rocket = new Weapon(UUID.randomUUID().hashCode(), WeaponType.ROCKET,1, 2, 2, 1, 1, (float) 1.0, - (float) 0.25, 4, (float) 1.0, 2, 1, "Allahu Akbar", 30); - // TODO Add weapon price list based on weapon level + Weapon laser = new Weapon(UUID.randomUUID().hashCode(), 2, 1, 1, 1, 0, + (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser", 30); + Weapon rocket = new Weapon(UUID.randomUUID().hashCode(), 1, 2, 2, 1, 1, (float) 1.0, + (float) 0.25, 4, (float) 1.0, 2, 1, "Rocket", 30); + // TODO add weapon price list laser.setWeaponSystem(weapons); rocket.setWeaponSystem(weapons); List<Weapon> shipWeapons = new ArrayList<>(); @@ -365,115 +407,584 @@ public class ClientHandler implements Runnable { room.setTiles(tiles); rooms.add(room); } - tiles.clear(); } return new Ship(UUID.randomUUID().hashCode(), username, shipType, 30, 60, 11, 7, 8, 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false); // ========== ROCK A ========== case TANK: + crewStats = new ArrayList<>(); crewStats.add(0); crewStats.add(3); crewStats.add(4); crewStats.add(3); crewStats.add(0); - // ========== Tile Generator ========== - for (int i=0;i<18;++i){ - // Vertical 2x1 - if (i<=4 || i==14 || i==16 || i==17) { - tiles.add(new Tile(UUID.randomUUID().hashCode(),0,0)); - tiles.add(new Tile(UUID.randomUUID().hashCode(),0,1)); - } - // Horizontal 1x2 - else if (i == 6 || i== 7 || i==10 || i==11){ - tiles.add(new Tile(UUID.randomUUID().hashCode(),0,0)); - tiles.add(new Tile(UUID.randomUUID().hashCode(),1,0)); - } - // Normal 4x4 - else{ - tiles.add(new Tile(UUID.randomUUID().hashCode(),0,0)); - tiles.add(new Tile(UUID.randomUUID().hashCode(),1,0)); - tiles.add(new Tile(UUID.randomUUID().hashCode(),0,1)); - tiles.add(new Tile(UUID.randomUUID().hashCode(),1,1)); - } - // ========== Room Generator ========== - // O2 - if (i==0){ - rooms.add(new System(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(), - tiles,1,5,0,SystemType.O2,new ArrayList<Weapon>())); + for (int i = 0; i < 18; i++) { + List<Tile> tiles = new ArrayList<>(); + // ========== Tile Generator ========== + // 2 Above each other + if (i == 0 || i == 1 || i==2 || i==3 || i==4 || i==14 || i==16 || i==17) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); } - // Cameras - else if (i==1){ - rooms.add(new System(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(), - tiles,1,5,0,SystemType.CAMERAS,new ArrayList<Weapon>())); + // 2 beside each other + else if (i == 6 || i ==7 || i == 10 || i == 11 ) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + } else { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 1)); } - // Shields - else if (i==5){ - rooms.add(new System(UUID.randomUUID().hashCode(),0,100,i, new ArrayList<Crew>(), - tiles,2,5,0,SystemType.SHIELDS,new ArrayList<Weapon>())); + // ========== Room Generator ========== + //O2 + if(i==0) { + Room o2 = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.O2, new ArrayList<Weapon>()); + o2.setTiles(tiles); + rooms.add(o2); } - // Engine - else if (i==8){ - Room engine = new System(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(), - tiles,2,5, 0,SystemType.ENGINE,new ArrayList<Weapon>()); - Crew c = new Crew(UUID.randomUUID().hashCode(),"Varnas",8, 8, crewStats, 3 * crewStats.size() * 2, username); - c.setTile(tiles.get(0)); - tiles.get(0).setStandingOnMe(c); + //Engine + else if(i==8) { + Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>()); engine.setTiles(tiles); - c.setCurrentRoom(engine); + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Isac", 8, 8, crewStats, 3*3+3*4+3*3, username); + crew.setTile(engine.getTiles().get(0)); + engine.getTiles().get(0).setStandingOnMe(crew); + crew.setCurrentRoom(engine); List<Crew> crewInRoom = engine.getCrew(); - crewInRoom.add(c); + crewInRoom.add(crew); engine.setCrew(crewInRoom); rooms.add(engine); } - // Weapons - else if (i==12){ - System weapons = new System(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(), - tiles,3,5,0,SystemType.WEAPON_SYSTEM,new ArrayList<Weapon>()); - Weapon rocket2 = new Weapon(UUID.randomUUID().hashCode(),WeaponType.ROCKET,2,3,2,1,1, - (float) 0.3,(float)0.25,4,(float)1.0,2,1,"Rocket 2",25); - Weapon rocket1 = new Weapon(UUID.randomUUID().hashCode(),WeaponType.ROCKET,2,2,2,1,1, - (float) 0.3,(float)0.25,4,(float)1.0,2,1,"Rocket 1",25); - // TODO Add weapon price list based on weapon level - List<Weapon> currentWeapons = weapons.getShipWeapons(); + //Weapons + else if(i==12) { + System weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>()); + weapons.setTiles(tiles); + // Add Weapons + Weapon rocket2 = new Weapon(UUID.randomUUID().hashCode(), 2, 3, 2, 1, 1, (float) 1.0, + (float) 0.25, 4, (float) 1.0, 2, 1, "Rocket", 30); + Weapon rocket1 = new Weapon(UUID.randomUUID().hashCode(), 1, 2, 2, 1, 1, (float) 1.0, + (float) 0.25, 4, (float) 1.0, 2, 1, "Rocket", 30); + // TODO add weapon price list rocket1.setWeaponSystem(weapons); rocket2.setWeaponSystem(weapons); - currentWeapons.add(rocket1); - currentWeapons.add(rocket2); - weapons.setShipWeapons(currentWeapons); + List<Weapon> shipWeapons = new ArrayList<>(); + shipWeapons.add(rocket1); + shipWeapons.add(rocket2); + weapons.setShipWeapons(shipWeapons); rooms.add(weapons); } - // Medbay - else if (i==15){ - rooms.add(new System(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(), - tiles,1,5,0,SystemType.MEDBAY,new ArrayList<Weapon>())); + //Medbay + else if(i==15) { + Room medbay = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.MEDBAY, new ArrayList<Weapon>()); + medbay.setTiles(tiles); + rooms.add(medbay); } - // Cockpit - else if (i==16){ - Room cockpit = new System(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(), - tiles,1,5,0,SystemType.COCKPIT,new ArrayList<Weapon>()); - Crew c = new Crew(UUID.randomUUID().hashCode(),"Bomfy",8,8,crewStats,3 * crewStats.size() * 2, username); - c.setTile(cockpit.getTiles().get(0)); - c.setCurrentRoom(cockpit); - tiles.get(0).setStandingOnMe(c); + //Shields + else if(i==5) { + Room shields = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.SHIELDS, new ArrayList<Weapon>()); + shields.setTiles(tiles); + rooms.add(shields); + } + //Cameras + else if(i==1) { //TODO irgendeine logik hinter energy/maxenergy? + Room cameras = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.CAMERAS, new ArrayList<Weapon>()); + cameras.setTiles(tiles); + rooms.add(cameras); + } + //Cockpit + else if(i==16) { + Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>()); cockpit.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Ahmad", 8, 8, crewStats, 3*3+3*4+3*3, username); + crew.setTile(cockpit.getTiles().get(0)); + crew.setCurrentRoom(cockpit); List<Crew> crewInRoom = cockpit.getCrew(); - crewInRoom.add(c); + crewInRoom.add(crew); + cockpit.getTiles().get(0).setStandingOnMe(crew); cockpit.setCrew(crewInRoom); rooms.add(cockpit); } + //otherwise else { - rooms.add(new Room(UUID.randomUUID().hashCode(),0,100,i,new ArrayList<Crew>(),tiles)); + Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>()); + room.setTiles(tiles); + rooms.add(room); } - tiles.clear(); } return new Ship(UUID.randomUUID().hashCode(), username, shipType, 50, 10, 30, 4, 9, 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false); case KILLER: - - // ========== Tile Generator ========== - - // ========== Room Generator ========== + crewStats = new ArrayList<>(); + crewStats.add(3); + crewStats.add(4); + crewStats.add(0); + crewStats.add(1); + crewStats.add(2); + for (int i = 0; i < 16; i++) { + List<Tile> tiles = new ArrayList<>(); + // ========== Tile Generator ========== + // 2 Above each other + if (i == 11 || i == 12 || i==13 || i==14 || i==15) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + } + // 2 beside each other + else if (i == 2 || i ==3 || i == 5 || i == 6 || i==7 || i==10 ) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + } else { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 1)); + } + // ========== Room Generator ========== + //O2 + if(i==7) { + Room o2 = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.O2, new ArrayList<Weapon>()); + o2.setTiles(tiles); + rooms.add(o2); + } + //Medbay TODO?? + //Engine + else if(i==4) { + Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>()); + engine.setTiles(tiles); + rooms.add(engine); + } + //Weapon + else if(i==9) { + System weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>()); + weapons.setTiles(tiles); + // Add Weapons + Weapon laser = new Weapon(UUID.randomUUID().hashCode(), 2, 1, 1, 1, 0, + (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser", 30); + Weapon radio = new Weapon(UUID.randomUUID().hashCode(), 4, 0, 3, 1, 0, (float) 1.0, + (float) 0.12, 0, (float) 0.0, 2, 3, "Radio", 45); + // TODO add weapon price list + radio.setWeaponSystem(weapons); + laser.setWeaponSystem(weapons); + List<Weapon> shipWeapons = new ArrayList<>(); + shipWeapons.add(radio); + shipWeapons.add(laser); + weapons.setShipWeapons(shipWeapons); + rooms.add(weapons); + } + //Cockpit + else if(i==14) { + Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>()); + cockpit.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Ahmad", 8, 8, crewStats, 30, username); + crew.setTile(cockpit.getTiles().get(0)); + crew.setCurrentRoom(cockpit); + List<Crew> crewInRoom = cockpit.getCrew(); + crewInRoom.add(crew); + cockpit.getTiles().get(0).setStandingOnMe(crew); + cockpit.setCrew(crewInRoom); + rooms.add(cockpit); + } + //Cameras + else if(i==6) { + Room cameras = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.CAMERAS, new ArrayList<Weapon>()); + cameras.setTiles(tiles); + rooms.add(cameras); + } + //Shields + else if(i==8) { + Room shields = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.SHIELDS, new ArrayList<Weapon>()); + shields.setTiles(tiles); + rooms.add(shields); + } + //otherwise + else { + Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>()); + room.setTiles(tiles); + rooms.add(room); + } + } + return new Ship(UUID.randomUUID().hashCode(), username, shipType, 25, 40, 0, 10, 8, + 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false); + case BARRAGE: + crewStats = new ArrayList<>(); + crewStats.add(2); + crewStats.add(4); + crewStats.add(2); + crewStats.add(1); + crewStats.add(1); + for(int i=0; i<18; i++) { + List<Tile> tiles = new ArrayList<>(); + // ========== Tile Generator ========== + // 2 Above each other + if (i == 0 || i == 1 || i==7 || i==8 || i==9 || i==12 || i==17) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + } + // 2 beside each other + else if (i == 2 || i ==3 || i == 5 || i == 6 || i==13 || i==14 ) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + } else { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 1)); + } + // ========== Room Generator ========== + //O2 + if(i==9) { + Room o2 = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.O2, new ArrayList<Weapon>()); + o2.setTiles(tiles); + rooms.add(o2); + } + //Engine + else if(i==4) { + Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>()); + engine.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Isac", 8, 8, crewStats, 30, username); + crew.setTile(engine.getTiles().get(0)); + crew.setCurrentRoom(engine); + List<Crew> crewInRoom = engine.getCrew(); + crewInRoom.add(crew); + engine.getTiles().get(0).setStandingOnMe(crew); + engine.setCrew(crewInRoom); + rooms.add(engine); + } + //Medbay + else if(i==10) { + Room medbay = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.MEDBAY, new ArrayList<Weapon>()); + medbay.setTiles(tiles); + rooms.add(medbay); + } + //Shields + else if(i==11) { + Room shields = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.SHIELDS, new ArrayList<Weapon>()); + shields.setTiles(tiles); + rooms.add(shields); + } + //Cameras + else if(i==13) { + Room cameras = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.CAMERAS, new ArrayList<Weapon>()); + cameras.setTiles(tiles); + rooms.add(cameras); + } + //Cockpit + else if(i==7) { + Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>()); + cockpit.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Ahmad", 8, 8, crewStats, 30, username); + crew.setTile(cockpit.getTiles().get(0)); + crew.setCurrentRoom(cockpit); + List<Crew> crewInRoom = cockpit.getCrew(); + crewInRoom.add(crew); + cockpit.getTiles().get(0).setStandingOnMe(crew); + cockpit.setCrew(crewInRoom); + rooms.add(cockpit); + } + //Weapons + else if(i==15) { + System weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>()); + weapons.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Newton", 8, 8, crewStats, 30, username); + crew.setTile(weapons.getTiles().get(0)); + crew.setCurrentRoom(weapons); + List<Crew> crewInRoom = weapons.getCrew(); + crewInRoom.add(crew); + weapons.getTiles().get(0).setStandingOnMe(crew); + weapons.setCrew(crewInRoom); + // Add Weapons + Weapon laser = new Weapon(UUID.randomUUID().hashCode(), 2, 1, 1, 1, 0, + (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser", 30); + Weapon laser2 = new Weapon(UUID.randomUUID().hashCode(), 2, 1, 1, 1, 0, + (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser", 30); + Weapon laser3 = new Weapon(UUID.randomUUID().hashCode(), 2, 1, 1, 1, 0, + (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser", 30); + // TODO add weapon price list + laser.setWeaponSystem(weapons); + laser2.setWeaponSystem(weapons); + laser3.setWeaponSystem(weapons); + List<Weapon> shipWeapons = new ArrayList<>(); + shipWeapons.add(laser); + shipWeapons.add(laser2); + shipWeapons.add(laser3); + weapons.setShipWeapons(shipWeapons); + rooms.add(weapons); + } + //otherwise + else { + Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>()); + room.setTiles(tiles); + rooms.add(room); + } + } + return new Ship(UUID.randomUUID().hashCode(), username, shipType, 20, 10, 0, 3, 8, + 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false); + case STEALTH: + crewStats = new ArrayList<>(); + crewStats.add(4); + crewStats.add(1); + crewStats.add(0); + crewStats.add(3); + crewStats.add(2); + for(int i=0; i<15; i++) { + List<Tile> tiles = new ArrayList<>(); + // ========== Tile Generator ========== + // 2 Above each other + if (i == 2 || i == 6 || i==9 || i==14) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + } + // 2 beside each other + else if (i == 1 || i ==3 || i == 8 || i == 10 || i==12 || i==13 ) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + } else { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 1)); + } + // ========== Room Generator ========== + //O2 + if(i==12) { + Room o2 = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.O2, new ArrayList<Weapon>()); + o2.setTiles(tiles); + rooms.add(o2); + } + //Engines + else if(i==0) { + Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>()); + engine.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Isac", 8, 8, crewStats, 30, username); + crew.setTile(engine.getTiles().get(0)); + crew.setCurrentRoom(engine); + List<Crew> crewInRoom = engine.getCrew(); + crewInRoom.add(crew); + engine.getTiles().get(0).setStandingOnMe(crew); + engine.setCrew(crewInRoom); + rooms.add(engine); + } + //Medbay + else if(i==5) { + Room medbay = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.MEDBAY, new ArrayList<Weapon>()); + medbay.setTiles(tiles); + rooms.add(medbay); + } + //Weapons + else if(i==11) { + System weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>()); + weapons.setTiles(tiles); + // Add Weapons + Weapon laser = new Weapon(UUID.randomUUID().hashCode(), 1, 1, 1, 1, 0, + (float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser", 30); + Weapon bomb = new Weapon(UUID.randomUUID().hashCode(), 2, 6, 5, 1, 1, + (float) 1.5, (float) 0.18, 4, (float) 1.5, 3, 1, "Bomb", 35); + // TODO add weapon price list + laser.setWeaponSystem(weapons); + bomb.setWeaponSystem(weapons); + List<Weapon> shipWeapons = new ArrayList<>(); + shipWeapons.add(laser); + shipWeapons.add(bomb); + weapons.setShipWeapons(shipWeapons); + rooms.add(weapons); + } + //Shields + else if(i==4) { + Room shields = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.SHIELDS, new ArrayList<Weapon>()); + shields.setTiles(tiles); + rooms.add(shields); + } + //Cameras + else if(i==1) { + Room cameras = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.CAMERAS, new ArrayList<Weapon>()); + cameras.setTiles(tiles); + rooms.add(cameras); + } + //Cockpit + else if(i==14) { + Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>()); + cockpit.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Ahmad", 8, 8, crewStats, 30, username); + crew.setTile(cockpit.getTiles().get(0)); + crew.setCurrentRoom(cockpit); + List<Crew> crewInRoom = cockpit.getCrew(); + crewInRoom.add(crew); + cockpit.getTiles().get(0).setStandingOnMe(crew); + cockpit.setCrew(crewInRoom); + rooms.add(cockpit); + } + //otherwise + else { + Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>()); + room.setTiles(tiles); + rooms.add(room); + } + } + return new Ship(UUID.randomUUID().hashCode(), username, shipType, 30, 100, 25, 25, 10, + 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false); + case BOARDER: + crewStats = new ArrayList<>(); + crewStats.add(2); + crewStats.add(2); + crewStats.add(2); + crewStats.add(0); + crewStats.add(4); + for(int i=0; i<16; i++) { + List<Tile> tiles = new ArrayList<>(); + // ========== Tile Generator ========== + // 2 Above each other + if (i == 1 || i == 3 || i==7 || i==8 || i==9 || i==10 || i==12 || i==14 || i==15) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + } + // 2 beside each other + else if (i == 5 || i ==6) { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + } else { + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 0)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 0, 1)); + tiles.add(new Tile(UUID.randomUUID().hashCode(), 1, 1)); + } + // ========== Room Generator ========== + //O2 + if (i ==3) { + Room o2 = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.O2, new ArrayList<Weapon>()); + o2.setTiles(tiles); + rooms.add(o2); + } + //Engines + else if (i ==2) { + Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>()); + engine.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Isac", 8, 8, crewStats, 30, username); + crew.setTile(engine.getTiles().get(0)); + crew.setCurrentRoom(engine); + List<Crew> crewInRoom = engine.getCrew(); + crewInRoom.add(crew); + engine.getTiles().get(0).setStandingOnMe(crew); + engine.setCrew(crewInRoom); + rooms.add(engine); + } + //Medbay + else if (i ==13) { + Room medbay = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.MEDBAY, new ArrayList<Weapon>()); + medbay.setTiles(tiles); + rooms.add(medbay); + } + //Weapons + else if (i ==11) { + System weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>()); + weapons.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "crew1", 8, 8, crewStats, 30, username); + crew.setTile(weapons.getTiles().get(0)); + crew.setCurrentRoom(weapons); + List<Crew> crewInRoom = weapons.getCrew(); + crewInRoom.add(crew); + weapons.getTiles().get(0).setStandingOnMe(crew); + weapons.setCrew(crewInRoom); + // Add Weapons + Weapon radioBomb = new Weapon(UUID.randomUUID().hashCode(), 2, 2, 5, 1, 0, + (float) 1.5, (float) 0.05, 4, (float) 1.5, 5, 1, "RadioBomb", 75); + Weapon healBomb = new Weapon(UUID.randomUUID().hashCode(), 2, 0, 6, 1, 1, + (float) 1.5, (float) 0.1, 4, (float) 0, -4, 1, "HealBomb", 60); + // TODO add weapon price list + radioBomb.setWeaponSystem(weapons); + healBomb.setWeaponSystem(weapons); + List<Weapon> shipWeapons = new ArrayList<>(); + shipWeapons.add(radioBomb); + shipWeapons.add(healBomb); + weapons.setShipWeapons(shipWeapons); + rooms.add(weapons); + } + //Shields + else if (i ==4) { + Room shields = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 2, 5, 0, SystemType.SHIELDS, new ArrayList<Weapon>()); + shields.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "crew2", 8, 8, crewStats, 30, username); + crew.setTile(shields.getTiles().get(0)); + crew.setCurrentRoom(shields); + List<Crew> crewInRoom = shields.getCrew(); + crewInRoom.add(crew); + shields.getTiles().get(0).setStandingOnMe(crew); + shields.setCrew(crewInRoom); + rooms.add(shields); + } + //Cameras + else if (i ==7) { + Room cameras = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.CAMERAS, new ArrayList<Weapon>()); + cameras.setTiles(tiles); + rooms.add(cameras); + } + //Cockpit + else if (i ==15) { + Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), + new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>()); + cockpit.setTiles(tiles); + // Add crew + Crew crew = new Crew(UUID.randomUUID().hashCode(), "Ahmad", 8, 8, crewStats, 30, username); + crew.setTile(cockpit.getTiles().get(0)); + crew.setCurrentRoom(cockpit); + List<Crew> crewInRoom = cockpit.getCrew(); + crewInRoom.add(crew); + cockpit.getTiles().get(0).setStandingOnMe(crew); + cockpit.setCrew(crewInRoom); + rooms.add(cockpit); + } + //otherwise + else { + Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>()); + room.setTiles(tiles); + rooms.add(room); + } + } + return new Ship(UUID.randomUUID().hashCode(), username, shipType, 40, 10, 20, 7, 6, + 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false); default: return null; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java index 7320b627f0a527fa282821d6cb279551be395a48..55e1373a7062cc93a2c087e610c4e8326457176d 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java @@ -4,13 +4,14 @@ import lombok.*; import javax.persistence.Entity; import javax.persistence.Id; +import java.io.Serializable; /** Response sent from the server to the client */ @Getter @Setter @RequiredArgsConstructor(access = AccessLevel.PUBLIC) @Entity -public class ResponseObject { +public class ResponseObject implements Serializable { /** ID */ @Id diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java index fa233b26ad99010e8e2ff486670ee4fb920683ba..7577671e356286c89f5a71d0a8e65235df1f9659 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java @@ -4,6 +4,7 @@ package com.galaxytrucker.galaxytruckerreloaded.Server; import com.galaxytrucker.galaxytruckerreloaded.Communication.Client; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.ShipType; import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database; +import lombok.Setter; import java.net.ServerSocket; import java.net.Socket; @@ -21,6 +22,7 @@ public class Server implements Runnable{ private Thread serverThread; /** ServerServiceCommunicator */ + @Setter private ServerServiceCommunicator serverServiceCommunicator; /** Server port */ @@ -43,22 +45,6 @@ public class Server implements Runnable{ } } - /** Main method (TESTING ONLY) */ // TODO REMOVE WHEN DONE - public static void main(String[] args){ - Server server = new Server(); - server.setPort(5050); - server.serverServiceCommunicator = new ServerServiceCommunicator(); - new Thread(server).start(); - try { - Thread.sleep(1000); - } - catch (Exception f){ - f.printStackTrace(); - } - //Client client = new Client("localhost",5050); - //boolean a = client.login("ahmad", ShipType.DEFAULT); - } - /** Start server on specified port * @param port - the port to bind */ private void bindPort(int port) { diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TraderService.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TraderService.java index b6f34195bbca401e6aedfe3b9247f578c9c74263..38fd92439ad679a86e13305effba8d8b78063349 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TraderService.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TraderService.java @@ -121,7 +121,7 @@ public class TraderService extends PlanetEventService { ship.setCoins(shipCoins - crew.getPrice()); //List<Crew> shipCrew = ship. TODO wie crew von schiff? //set current Room - crew.setCurrentRoom(ship.getSystems().get(0)); //TODO in welchen raum setzen? + crew.setCurrentRoom(ship.getSystems().get(0)); crew.setAssociatedUser(ship.getAssociatedUser()); crewDAO.update(crew); return true; @@ -133,7 +133,7 @@ public class TraderService extends PlanetEventService { trader.setCrewStock(traderCrew); traderDAO.update(trader); //set current Room - crew.setCurrentRoom(null); //TODO ? + crew.setCurrentRoom(null); crew.setAssociatedUser(user); crewDAO.update(crew); //remove from ship? diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TravelService.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TravelService.java index 83a26d6907a3030092c2b90ccb1b892a5b948940..1a6a4d36dd80a94f24d5fb1518c4c95e3f2ef13e 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TravelService.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/TravelService.java @@ -40,7 +40,7 @@ public class TravelService { // if (u.getOverworld().getPlanetMap().containsValue(p)) { // return !s.getPlanet().equals(p) && s.getFTLCharge() == 100; // } - return false; + return true; } catch (Exception e) { e.printStackTrace(); return false; diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/CrewDismissButton.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/CrewSelectButton.java similarity index 89% rename from core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/CrewDismissButton.java rename to core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/CrewSelectButton.java index df0ca86366ef80273ff45e064bb63b2f050aeff6..a0cb370084c5b26b341a993aad23317f0c716c7d 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/CrewDismissButton.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/CrewSelectButton.java @@ -15,7 +15,7 @@ import com.galaxytrucker.galaxytruckerreloaded.View.UI.ShipInformation.CrewUI; /** * Button for dismissing a Crew Member */ -public class CrewDismissButton extends ImButton +public class CrewSelectButton extends ImButton { /** * Background @@ -38,7 +38,7 @@ public class CrewDismissButton extends ImButton * * @param crew the crew member */ - public CrewDismissButton(Texture texture, float x, float y, float width, float height, int crew, CrewUI ui) { + public CrewSelectButton(Texture texture, float x, float y, float width, float height, int crew, CrewUI ui) { super(texture, x, y, width, height); this.crewID = crew; this.ui = ui; diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/InventoryCloseButton.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/InventoryCloseButton.java index dbd1aa5f4932cdf359c00c630ca00f7674968e65..23192191b464be3fffe2ac75d8648c26e696b670 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/InventoryCloseButton.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/InventoryCloseButton.java @@ -11,6 +11,7 @@ import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.Button; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.ImButton; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Events.ShopUI; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory.InventoryUI; +import com.galaxytrucker.galaxytruckerreloaded.View.UI.Map.MapUI; /** * used to close the inventory @@ -28,6 +29,12 @@ public class InventoryCloseButton extends ImButton { */ private ShopUI shop; + /** + * map ui, if Button on map + * otherwise null + */ + private MapUI map; + /** * the inventory ui, if button on inventory * otherwise null @@ -45,17 +52,23 @@ public class InventoryCloseButton extends ImButton { else if(inventory != null) { inventory.disposeInventoryUI(); } + + else if (map != null) { + map.disposeMapUI(); + } } /** * constructor * @param ui the shop ui this is on, or null * @param inventory the inventory ui this is on, or null + * @param map the map ui this is on, or null */ - public InventoryCloseButton(float x, float y, float width, float height, ShopUI ui, InventoryUI inventory) { + public InventoryCloseButton(float x, float y, float width, float height, ShopUI ui, InventoryUI inventory, MapUI map) { super(new Texture("close_on.png"), x, y, width, height); shop = ui; this.inventory = inventory; + this.map = map; this.addListener(new ClickListener() { public void clicked(InputEvent event, float x, float y) { leftClick(); diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/MainMenuButton.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/MainMenuButton.java index e17a65014d733b58e47683b197aaa4ebc4b762f2..99abf6fba2c6e4fc7689a9c8583ed9f9938915ba 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/MainMenuButton.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/MainMenuButton.java @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.galaxytrucker.galaxytruckerreloaded.Communication.ClientControllerCommunicator; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.Button; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.ImButton; @@ -28,7 +29,10 @@ public class MainMenuButton extends ImButton { */ @Override public void leftClick() { - main.setScreen(new MainMenu(main)); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).logout(); + if(success) { + main.setScreen(new MainMenu(main)); + } } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/TileButton.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/TileButton.java new file mode 100644 index 0000000000000000000000000000000000000000..017c85b409dd8c93fdaaca4872e57f8bcd55b348 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/InGameButtons/TileButton.java @@ -0,0 +1,38 @@ +package com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons; + +import com.badlogic.gdx.Input; +import com.badlogic.gdx.audio.Sound; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room; +import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.ImButton; +import com.galaxytrucker.galaxytruckerreloaded.View.UI.ShipInformation.RoomUI; + +public class TileButton extends ImButton { + + /** + * the click sound + */ + private Sound clickSound; + + private RoomUI ui; + + @Override + public void leftClick() { + ui.chosen(); + } + + public TileButton(float x, float y, float width, float height, RoomUI ui) { + super(new Texture("ship/tile.png"), x, y, width, height); + this.ui = ui; + + this.addListener(new ClickListener() { + public void clicked(InputEvent event, float x, float y) { + leftClick(); + } + }); + + this.getImage().setFillParent(true); + } +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/MenuButtons/ShipSelectButton.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/MenuButtons/ShipSelectButton.java deleted file mode 100644 index 9342452ad4612698ddaf5b7ec89ed66fd6b25def..0000000000000000000000000000000000000000 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Buttons/MenuButtons/ShipSelectButton.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons; - -import com.badlogic.gdx.audio.Sound; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.scenes.scene2d.InputEvent; -import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; -import com.galaxytrucker.galaxytruckerreloaded.Main; -import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; -import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.ShipType; -import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.Button; -import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.ImButton; -import com.galaxytrucker.galaxytruckerreloaded.View.Screen.ShipSelector; - -/** - * the button representing one ship in the ship selector - */ -public class ShipSelectButton extends ImButton { - - /** - * Click sound effect - */ - private Sound clickSound; - - /** - * the ship this button represents in the ship selector - */ - private ShipType ship; - - /** - * the screen this button is on - */ - private ShipSelector screen; - - /** - * Left-Click action of the Button. - */ - @Override - public void leftClick() { - screen.setShip(ship); - } - - /** - * constructor - * @param ship the ship, (index of ship in list in shipselector) - * @param screen the screen this button is on - */ - public ShipSelectButton(float x, float y, float width, float height, ShipType ship, ShipSelector screen) { - super(new Texture("yes.png"), x, y, width, height); - this.screen = screen; - this.ship = ship; - this.addListener(new ClickListener() { - public void clicked(InputEvent event, float x, float y) { - leftClick(); - } - }); - } -} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ChooseDifficultyScreen.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ChooseDifficultyScreen.java index e653478a1f8b63d0466c6b86df216b03cdde7b17..b8b5a308511f1f9df964cd3fc4720e0e15d8ad79 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ChooseDifficultyScreen.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ChooseDifficultyScreen.java @@ -205,5 +205,6 @@ public class ChooseDifficultyScreen implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/CreateOrJoinServer.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/CreateOrJoinServer.java index d8d69ff8e2ca45bc5789ddda88881070a18c4f32..c00d393a35541b3ce5c94b41155036e58ef13fa7 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/CreateOrJoinServer.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/CreateOrJoinServer.java @@ -140,10 +140,9 @@ public class CreateOrJoinServer implements Screen { * start a game on a new server */ public void startServer() { - String[] args = new String[0]; - Server.main(args); - main.setClient(new Client("localhost", 5050)); - boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username); + main.startServer(); + main.startClient(); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username, ship, difficulty); if(success) { main.setScreen(new LobbyScreenHost(main, ship, false, difficulty, username)); } @@ -154,7 +153,8 @@ public class CreateOrJoinServer implements Screen { * go back to last screen */ public void goBack() { - main.setScreen(new ShipSelector(main, false, 0)); //TODO set difficulty once that is a ship attribute + main.setScreen(new ShipSelector(main, false, difficulty)); + dispose(); } /** @@ -221,5 +221,6 @@ public class CreateOrJoinServer implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/GamePlay.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/GamePlay.java index 866edcb88229e4d26f6e2072cc00c55dbc86dfc7..8aa52d0018223567eec46cf5f4ef0bf044424156 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/GamePlay.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/GamePlay.java @@ -10,15 +10,16 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.Viewport; +import com.galaxytrucker.galaxytruckerreloaded.Controller.CrewController; +import com.galaxytrucker.galaxytruckerreloaded.Controller.TravelController; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew; -import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.PlanetEvent; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Trader; -import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room; -import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.ShipType; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.SystemType; import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Events.EventGUI; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Events.GameOver; @@ -27,7 +28,6 @@ import com.galaxytrucker.galaxytruckerreloaded.View.UI.Options.*; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.EnemyShip; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -121,6 +121,8 @@ public class GamePlay implements Screen { */ private Stage pauseStage; + private Stage tileStage; + /** * the viewport */ @@ -131,6 +133,13 @@ public class GamePlay implements Screen { */ private PauseMenuUI pauseMenuUI; + /** + * whether or not a crew member was chosen to be moved + */ + private boolean crewMoving = false; + + private Crew chosenCrew; + /** * Constructor * @@ -141,48 +150,15 @@ public class GamePlay implements Screen { background = new Texture("1080p.png"); viewport = new FitViewport(main.WIDTH, main.HEIGHT); - stage = new Stage(viewport); - pauseStage = new Stage(viewport); + stage = new Stage(viewport, main.batch); + pauseStage = new Stage(viewport, main.batch); + tileStage = new Stage(viewport, main.batch); - player = new ShipView(main, fakeShip(), stage, fakeMap(), this); //TODO wie schiff aus controller? + player = new ShipView(main, main.getClient().getMyShip(), stage, tileStage, main.getClient().getOverworld(), this); Gdx.input.setInputProcessor(stage); } - //TODO only for testing - public Ship fakeShip(){ - Trader trader = new Trader(); - //Planet planet = new Planet("planet", 125f, 125f, PlanetEvent.SHOP, false, new LinkedList<>(), trader); - Planet planet = new Planet(); - List<Room> rooms = new LinkedList<>(); -// rooms.add(new BlankRoom()); -// rooms.add(new BlankRoom()); -// rooms.add(new BlankRoom()); - List<Weapon> weapons = new LinkedList<>(); -// weapons.add(new LaserBlaster("karl")); -// weapons.add(new LaserBlaster("test")); - return new Ship(1, "aaron", ShipType.DEFAULT, 100, 49, 5, 5, 7, 9, 23, 6f, planet, 6, 6, rooms, weapons, false); - } - - /** - * später durch laden aus controller ersetzen - */ - public Overworld fakeMap() { - Overworld res = new Overworld(2, 1, "aaron"); - HashMap<String, Planet> hmap = new HashMap<>(); - Planet sp = new Planet(0, "planet1", (float) 78, (float) 199, PlanetEvent.SHOP, new LinkedList<Ship>()); - String f = "78, 199"; - hmap.put(f, sp); - Planet sp1 = new Planet(1, "planet2", (float) 200, (float) 154, PlanetEvent.COMBAT, new LinkedList<Ship>()); - String f1 = "200, 154"; - hmap.put(f1, sp1); - //TODO - //res.setPlanetMap(hmap); - res.setStartPlanet(sp); - - return res; - } - @Override public void show() { @@ -215,6 +191,7 @@ public class GamePlay implements Screen { else if(optionUI != null) { optionUI.render(); } else if(pauseMenuUI != null) { pauseMenuUI.render(); } + stage.draw(); } @@ -241,6 +218,10 @@ public class GamePlay implements Screen { Gdx.input.setInputProcessor(pauseStage); createPauseMenu(); } + if(crewMoving && Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) { + Gdx.input.setInputProcessor(stage); + crewMoving = false; + } } /** @@ -268,7 +249,7 @@ public class GamePlay implements Screen { * @return whether or not it is a valid request */ public boolean travel(Planet planet) { - boolean success = true; //TODO call to controller + boolean success = TravelController.getInstance(null).travel(planet); //Communicator can be null since already created, so never used if(success) { createEvent(planet.getEvent()); if(planet.getEvent() == PlanetEvent.SHOP) { @@ -531,14 +512,46 @@ public class GamePlay implements Screen { * @param crew the id of the crew member * @param room the new room */ - public void crewMoved(int crew, Room room) {} //call controller, ask for permission + private void crewMoved(Crew crew, Room room) { + boolean success = CrewController.getInstance(null).moveCrewToRoom(crew, room); + if(success) { + player.crewMoved(crew, room); + } + } + + /** + * a crew member was chosen to be moved. + * @param crew the crew member + */ + public void crewMoving(Crew crew) { + crewMoving = !crewMoving; + if(crewMoving) { + Gdx.input.setInputProcessor(tileStage); + chosenCrew = crew; + } + else { + Gdx.input.setInputProcessor(stage); + chosenCrew = null; + } + } + + /** + * a room was chosen with the tile buttons + * @param room the room that was chosen + */ + public void roomChosen(Room room) { + if(crewMoving && chosenCrew != null) { + crewMoved(chosenCrew, room); + Gdx.input.setInputProcessor(stage); + } + } /** * update the health of a crew member * @param crew the crew member * @param health the new health */ - public void crewHealth(int crew, int health) { player.crewHealth(crew, health); } + public void crewHealth(Crew crew, int health) { player.crewHealth(crew, health); } /** * update the energy status of the overall energy not yet assigned to a system @@ -556,7 +569,7 @@ public class GamePlay implements Screen { * the player has chosen a new amount of energy for a system * @param amount how much should be subtracted/added */ - public void roomSystemEnergyChosen(int id, int amount) { + public void roomSystemEnergyChosen(Room room, int amount) { //call controller } @@ -564,17 +577,17 @@ public class GamePlay implements Screen { * the energy for a system is updated * @param amount the new total amount */ - public void roomSystemEnergyUpdate(int id, int amount) { - player.roomSystemEnergyUpdate(id, amount); + public void roomSystemEnergyUpdate(Room room, int amount) { + player.roomSystemEnergyUpdate(room, amount); } /** * update the status of a system - * @param id the id of the system + * @param room the system * @param amount the new status */ - public void roomSystemStatusUpdate(int id, int amount) { - player.roomSystemStatusUpdate(id, amount); + public void roomSystemStatusUpdate(Room room, int amount) { + player.roomSystemStatusUpdate(room, amount); } /** @@ -596,44 +609,50 @@ public class GamePlay implements Screen { /** * load the crew of a ship - * @param shipId the ship id * @return the crew members */ - public List<Crew> loadCrew(int shipId) { //TODO call controller -// List<Crew> result = new LinkedList<>(); -// Crew c1 = new Crew(1, "ana", 7, 10); -// result.add(c1); -// Crew c2 = new Crew(2, "battle", 8, 10); -// result.add(c2); -// return result; - return null; + public List<Crew> loadCrew() { + List<Crew> crew = new LinkedList<>(); + List<Room> rs = main.getClient().getMyShip().getSystems(); + for(Room r : rs) { + crew.addAll(r.getCrew()); + } + return crew; } /** * load the weapons of a ship - * @param shipId the ship id * @return the weapons of the ship in a list */ - public List<Weapon> loadWeapons(int shipId) { + public List<Weapon> loadWeapons() { List<Weapon> weapons = new LinkedList<>(); -// weapons.add(new LaserBlaster("karl")); -// weapons.add(new LaserBlaster("test")); + weapons.addAll(main.getClient().getMyShip().getInventory()); + for(Room r : main.getClient().getMyShip().getSystems()) { + if(r instanceof System) { + if(((System) r).getSystemType() == SystemType.WEAPON_SYSTEM) { + weapons.addAll(((System) r).getShipWeapons()); + } + } + } + //BIS HIER LÖSCHEN return weapons; } /** * load the missiles of a ship - * @param shipId the id of the ship * @return the amount of missiles */ - public int loadMissiles(int shipId) { return 0; } + public int loadMissiles() { + return main.getClient().getMyShip().getMissiles(); + } /** * load the fuel of a ship - * @param shipId the id of the ship * @return the amount of fuel */ - public int loadFuel(int shipId) { return 0; } + public int loadFuel() { + return main.getClient().getMyShip().getFuel(); + } @Override public void pause() { diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenHost.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenHost.java index 2f4a0ac33f40de169be08736b4ca18f02851d8f4..b556ed2aa55d39ea52743f66b0ca4a5a91b94abb 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenHost.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenHost.java @@ -1,5 +1,6 @@ package com.galaxytrucker.galaxytruckerreloaded.View.Screen; +import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.files.FileHandle; @@ -166,7 +167,7 @@ public class LobbyScreenHost implements Screen { * continue the game with the players that are in the lobby */ public void resumeGame() { - + main.setScreen(new GamePlay(main)); //TODO irgendwas an server kommunizieren? } /** @@ -239,5 +240,6 @@ public class LobbyScreenHost implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenNormal.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenNormal.java index 568a7b4f631a7145cdd3b04b1c200703ce5e6646..8f35b6561c16d90ea7078223fac548188453b162 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenNormal.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenNormal.java @@ -231,6 +231,7 @@ public class LobbyScreenNormal implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LoginScreen.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LoginScreen.java index 29bbf7e0084ffa5696b1080b04970dce436f17b5..1a49735d4799ba19b2b057fca4c834315edf4f08 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LoginScreen.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LoginScreen.java @@ -83,6 +83,16 @@ public class LoginScreen implements Screen { */ private LoginBackButton backButton; + /** + * the glyphlayout for the server address, if multiplayer + * */ + private GlyphLayout glyph2 = new GlyphLayout(); + + /** + * the server address field, if multiplayer + */ + private TextField address; + /** * Constructor * @@ -124,6 +134,16 @@ public class LoginScreen implements Screen { stage.addActor(username); stage.addActor(backButton); + if(!singleplayer) { + address = new TextField("", skin); + address.setSize(248, 50); + address.setPosition(main.WIDTH/2 - username.getWidth()/2, main.HEIGHT/2 + 100); + stage.addActor(address); + + glyph2.setText(font, "Please enter the server address"); //localhost if you are host + + } + Gdx.input.setInputProcessor(stage); } @@ -147,6 +167,9 @@ public class LoginScreen implements Screen { main.batch.begin(); main.batch.draw(background, 0, 0, main.WIDTH, main.HEIGHT); font.draw(main.batch, glyph, main.WIDTH/2 - glyph.width/2, main.HEIGHT/2 + 50); + if(!singleplayer) { + font.draw(main.batch, glyph2, main.WIDTH/2 - glyph2.width/2, main.HEIGHT/2 + 250); + } main.batch.end(); stage.draw(); } @@ -175,6 +198,7 @@ public class LoginScreen implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } /** @@ -182,24 +206,32 @@ public class LoginScreen implements Screen { */ public void login() { String name = username.getText(); - ShipType ship = ShipType.DEFAULT; if(singleplayer) { - String[] args = new String[0]; - Server.main(args); - main.setClient(new Client("localhost", 5050)); - boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username.getText()); + main.startClient(); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(name, ShipType.DEFAULT, 0); //ShipType sowieso irrelevant, da kein neues schiff erstellt wird if(success) { - main.setScreen(new SPResumeLobby(main, singleplayer)); + main.setScreen(new SPResumeLobby(main)); + dispose(); } } else { - boolean host = false; //whether or not the player was host last time? - if(host) { - main.setScreen(new LobbyScreenHost(main, ship, true, 0, name)); //TODO diff von server laden + if(address.getText().equals("localhost") || address.getText().equals("127.0.0.1")) + { + main.startClient(); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(name, ShipType.DEFAULT, 0); + if(success) { + main.setScreen(new LobbyScreenHost(main, main.getClient().getMyShip().getShipType(), true, 0, name)); //TODO diff von server laden + dispose(); + } } else { - main.setScreen(new LobbyScreenHost(main, ship, true, 0, name)); + main.startClient(); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(name, ShipType.DEFAULT, 0); + if(success) { + main.setScreen(new LobbyScreenHost(main, main.getClient().getMyShip().getShipType(), true, 0, name)); + dispose(); + } } } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java index 31de98cbe35f2cc4195809c7a9bb1e7eb0829748..e1c9c59e0d63a1e7edbf3fb2fa2eea887e37cb6c 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java @@ -12,6 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.Viewport; import com.galaxytrucker.galaxytruckerreloaded.Main; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.ShipType; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.*; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Options.*; @@ -82,14 +83,11 @@ public class SPResumeLobby implements Screen { */ private String seedName = "TestSeed"; - private boolean singleplayer; - private SPResumeLobbyBackButton spResumeLobbyBackButton; /** Constructor */ - public SPResumeLobby(Main main, boolean singleplayer){ + public SPResumeLobby(Main main){ this.main = main; - this.singleplayer = singleplayer; background = new Texture("1080p.png"); spResumeStartGame = new SPResumeStartGame(7*main.WIDTH/8 - 124, main.HEIGHT/8 , 248, 50, this); @@ -108,9 +106,9 @@ public class SPResumeLobby implements Screen { params.size = 15; font = generator.generateFont(params); - glyph.setText(font, "Your Ship: " + shipName); - glyph2.setText(font, "Your Difficulty: " + difficultyName); - glyph3.setText(font, "Your Seed: " + seedName); + glyph.setText(font, "Your Ship: " + main.getClient().getMyShip().getShipType()); + glyph2.setText(font, "Your Difficulty: " + main.getClient().getOverworld().getDifficulty()); + glyph3.setText(font, "Your Seed: " + main.getClient().getOverworld().getSeed()); viewport = new FitViewport(main.WIDTH, main.HEIGHT); stage = new Stage(viewport); @@ -185,6 +183,7 @@ public class SPResumeLobby implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } /** @@ -199,7 +198,7 @@ public class SPResumeLobby implements Screen { * go back to previous screen */ public void goBack() { - main.setScreen(new LoginScreen(main, singleplayer)); + main.setScreen(new LoginScreen(main, true)); dispose(); } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java index efc4aaf9228d36241eae7648a790061fbd1d84ef..3662c41044e0dfa0272a4adc121b2c9ecace54e2 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java @@ -136,8 +136,8 @@ public class SelectLobbyScreen implements Screen { * join a lobby by taking the text from the text field */ public void joinLobby() { - main.setClient(new Client(lobby.getText(), 5050)); - boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username); + main.startClient(); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username, ship, difficulty); if(success) { main.setScreen(new LobbyScreenNormal(main, ship, false, difficulty, username)); } @@ -217,5 +217,6 @@ public class SelectLobbyScreen implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ShipSelector.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ShipSelector.java index 274a873ed23a929a7883b06c51954c882658f449..63cc65d9024d7e8f39d10419f209ecccfbdf9b9a 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ShipSelector.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ShipSelector.java @@ -17,17 +17,12 @@ import com.badlogic.gdx.utils.viewport.Viewport; import com.galaxytrucker.galaxytruckerreloaded.Communication.Client; import com.galaxytrucker.galaxytruckerreloaded.Communication.ClientControllerCommunicator; import com.galaxytrucker.galaxytruckerreloaded.Main; -import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.ShipType; import com.galaxytrucker.galaxytruckerreloaded.Server.Server; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton; -import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.ShipSelectButton; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.ShipSelectorBackButton; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.ShipSelectorButtons.LeftArrowButton; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.ShipSelectorButtons.RightArrowButton; -import org.h2.index.RangeIndex; - -import java.util.List; /** * Ship selector screen when creating new game @@ -49,16 +44,6 @@ public class ShipSelector implements Screen { */ private Stage stage; - /** - * the textures of the ships to choose from - */ - private List<Texture> ships; - - /** - * the buttons for the ships - */ - private List<ShipSelectButton> shipButtons; - /** * button to create game */ @@ -121,10 +106,6 @@ public class ShipSelector implements Screen { private Image shipImage; - private String[] shipList = {"ship/kestral/kestral_base.png", "ship/anaerobic/an2base.png", "ship/fed/fed_cruiser_2_base.png"}; - - private int currentShip = 0; - /** Constructor * @param main - main class */ public ShipSelector(Main main, boolean singleplayer, int difficulty){ @@ -163,7 +144,9 @@ public class ShipSelector implements Screen { leftArrowButton = new LeftArrowButton(main.WIDTH/4 -30 , main.HEIGHT/2-25+100, 60, 50, this); rightArrowButton = new RightArrowButton(3*main.WIDTH/4 -30 , main.HEIGHT/2-25+100, 60, 50, this); - shipImage = new Image(new Texture(shipList[currentShip])); + + ship = ShipType.DEFAULT; + shipImage = new Image(new Texture("ship/" + ship.toString().toLowerCase() + "base.png")); shipImage.setPosition(main.WIDTH/2 - shipImage.getWidth()/2, main.HEIGHT/2 - shipImage.getHeight()/2+100); stage.addActor(shipImage); @@ -173,7 +156,6 @@ public class ShipSelector implements Screen { stage.addActor(leftArrowButton); stage.addActor(rightArrowButton); - //get ships from server, for each one texture and one button Gdx.input.setInputProcessor(stage); } @@ -210,7 +192,7 @@ public class ShipSelector implements Screen { leftArrowButton = new LeftArrowButton(main.WIDTH/4 -30 , main.HEIGHT/2-25+100, 60, 50, this); rightArrowButton = new RightArrowButton(3*main.WIDTH/4 -30 , main.HEIGHT/2-25+100, 60, 50, this); - shipImage = new Image(new Texture(shipList[currentShip])); + shipImage = new Image(new Texture("ship/" + ship.toString().toLowerCase() + "base.png")); shipImage.setPosition(main.WIDTH/2 - shipImage.getWidth()/2, main.HEIGHT/2 - shipImage.getHeight()/2+100); stage.addActor(shipImage); @@ -220,8 +202,6 @@ public class ShipSelector implements Screen { stage.addActor(leftArrowButton); stage.addActor(rightArrowButton); - //get ships from server, for each one texture and one button - Gdx.input.setInputProcessor(stage); } @@ -274,15 +254,7 @@ public class ShipSelector implements Screen { public void dispose() { background.dispose(); stage.dispose(); - } - - /** - * the ship is selected - * @param ship the index of the ship in the list of possible ships - */ - public void setShip(ShipType ship) { - this.ship = ship; - //TODO set difficulty + font.dispose(); } /** @@ -290,10 +262,9 @@ public class ShipSelector implements Screen { */ public void startGame() { if(singleplayer) { - String[] args = new String[0]; - Server.main(args); - main.setClient(new Client("localhost", 5050)); - boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username.getText()); + main.startServer(); + main.startClient(); + boolean success = ClientControllerCommunicator.getInstance(main.getClient()).login(username.getText(), ship, difficulty); if(success) { main.setScreen(new GamePlay(main)); //TODO ? } @@ -308,24 +279,16 @@ public class ShipSelector implements Screen { * shows the next ship in shipselector */ public void nextShip() { - currentShip +=1; - if(currentShip > shipList.length-1){ - currentShip = 0; - } + ship = ship.next(); dispose(); prepareUI(); - //TODO Liste von SHips, die man durchschaltet } /** * shows the prev ship in shipselector */ public void prevShip() { - //TODO Liste von SHips, die man durchschaltet - currentShip -=1; - if(currentShip < 0){ - currentShip = shipList.length-1; - } + ship = ship.previous(); dispose(); prepareUI(); } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Events/ShopUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Events/ShopUI.java index 76cc4f212db079d5c563f108a2c5932fa9bcc5c2..caf1f2c330da6716ae362342e7ec79bbc2ca89b3 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Events/ShopUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Events/ShopUI.java @@ -97,7 +97,7 @@ public class ShopUI { sellElements.add(new ShopSellElement(main, stage, new Texture("laser.png"), 0, 0, this, w, 0)); } - closeButton = new InventoryCloseButton(0, 0, 10, 10, this, null); + closeButton = new InventoryCloseButton(0, 0, 10, 10, this, null, null); stage.addActor(closeButton); background = new Texture("shop/storeback.png"); diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryCrewSlotUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryCrewSlotUI.java index 23202b09d033832ca2bbc65983bbc92572a5da11..d37acddec84fde9af426114f4aa91fde27aa06f4 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryCrewSlotUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryCrewSlotUI.java @@ -2,8 +2,10 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory; import com.badlogic.gdx.graphics.Texture; -import java.util.LinkedList; import java.util.List; + +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew; @@ -27,11 +29,6 @@ public class InventoryCrewSlotUI extends InventorySlotUI { */ private Texture healthBox; - /** - * the name of the crew member - */ - private String name; - /** * the health of the crew member */ @@ -44,15 +41,34 @@ public class InventoryCrewSlotUI extends InventorySlotUI { private int currTexture; + private GlyphLayout glyphName = new GlyphLayout(); + + private GlyphLayout glyphEngine = new GlyphLayout(); + + private GlyphLayout glyphWeapon = new GlyphLayout(); + + private GlyphLayout glyphShield = new GlyphLayout(); + + private GlyphLayout glyphRepair = new GlyphLayout(); + + private GlyphLayout glyphCombat = new GlyphLayout(); + /** * Constructor * * @param main - main class */ - public InventoryCrewSlotUI(Main main, Crew crew, float x, float y) { - super(main, x, y); + public InventoryCrewSlotUI(Main main, Crew crew, float x, float y, BitmapFont font) { + super(main, x, y, font); + + glyphName.setText(font, crew.getName()); + List<Integer> stats = crew.getStats(); + glyphEngine.setText(font, "Engine: "+stats.get(0)); + glyphWeapon.setText(font, "Weapon: "+stats.get(1)); + glyphShield.setText(font, "Shield: "+stats.get(2)); + glyphRepair.setText(font, "Repair: "+stats.get(3)); + glyphCombat.setText(font, "Combat: "+stats.get(4)); - name = crew.getName(); health = crew.getHealth(); maxhealth = crew.getMaxhealth(); currTexture = (int) (((float) health/maxhealth) * 10); @@ -78,6 +94,12 @@ public class InventoryCrewSlotUI extends InventorySlotUI { public void render() { super.render(); main.batch.begin(); + font.draw(main.batch, glyphName, posX+72, posY + 50); + font.draw(main.batch, glyphEngine, posX+72, posY + 30); + font.draw(main.batch, glyphWeapon, posX+72, posY + 10); + font.draw(main.batch, glyphShield, posX+200, posY + 50); + font.draw(main.batch, glyphRepair, posX+200, posY + 30); + font.draw(main.batch, glyphCombat, posX+200, posY + 10); main.batch.draw(crewTexture, posX, posY, 72, 72); //48 main.batch.draw(healthBox, posX+5, posY-15, 50, 15); float x = posX+11; diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryIntSlotUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryIntSlotUI.java index 3590eb42144ec465e9500cc94a4103c14ce96b7f..51634067637de66e42dc3c0239fb8e2fe28b6561 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryIntSlotUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryIntSlotUI.java @@ -1,35 +1,26 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.galaxytrucker.galaxytruckerreloaded.Main; public class InventoryIntSlotUI extends InventorySlotUI { - /** - * the value of the thing - */ - private int value; - - /** - * the texture - */ - private Texture texture; - - /** - * the text explaining what this inventory slot represents - */ - private String text; + private GlyphLayout glyphLayout = new GlyphLayout(); /** * Constructor * * @param main - main class */ - public InventoryIntSlotUI(Main main, int value, float x, float y, String text) { - super(main, x, y); - this.value = value; - this.text = text; - //texture = new Texture(); + public InventoryIntSlotUI(Main main, int value, float x, float y, String text, BitmapFont font) { + super(main, x, y, font); + + glyphLayout.setText(font, text + ": " + value); } /** @@ -38,18 +29,6 @@ public class InventoryIntSlotUI extends InventorySlotUI { @Override public void disposeInventorySlotUI() { super.disposeInventorySlotUI(); - //texture.dispose(); - } - - /** - * render - * without stage stuff - */ - public void render() { - super.render(); - /*main.batch.begin(); - main.batch.draw(texture, 0, 0, 0, 0);//TODO whxy - main.batch.end();*/ } /** @@ -67,4 +46,15 @@ public class InventoryIntSlotUI extends InventorySlotUI { public void hideInventorySlotUI() { } + + /** + * render + * without stage stuff + */ + public void render() { + super.render(); + main.batch.begin(); + font.draw(main.batch, glyphLayout, posX, posY); + main.batch.end(); + } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventorySlotUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventorySlotUI.java index ae6f80c72b99524701036634ce483301dd948fa2..c92c374578411c6f1dd4db5b04b996f5defb5584 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventorySlotUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventorySlotUI.java @@ -1,8 +1,12 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.galaxytrucker.galaxytruckerreloaded.Main; public abstract class InventorySlotUI { @@ -17,25 +21,21 @@ public abstract class InventorySlotUI { */ protected float posY; - /** - * Inventory slot background - */ - private Texture inventorySlotTexture; - protected Main main; + protected BitmapFont font; + /** * Constructor * * @param main - main class */ - public InventorySlotUI(Main main, float x, float y) { + public InventorySlotUI(Main main, float x, float y, BitmapFont font) { this.main = main; + this.font = font; posX = x; posY = y; - - //inventorySlotTexture = new Texture(); } /** @@ -43,9 +43,6 @@ public abstract class InventorySlotUI { * without stage stuff */ public void render() { - /*main.batch.begin(); - main.batch.draw(inventorySlotTexture, posX, posY, 0, 0); //TODO wh - main.batch.end();*/ } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryUI.java index 1f5804f9454689358d5a9e56261470c2b10b1f26..b42d1427ccffd673437c47bca1ccf26411c5cb13 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryUI.java @@ -2,6 +2,7 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.scenes.scene2d.Stage; import java.util.LinkedList; @@ -44,7 +45,7 @@ public class InventoryUI { * @param crew the crew members * @param weapons the weapons */ - public InventoryUI(Main main, List<Crew> crew, List<Weapon> weapons, int fuel, int missiles, Stage stage, ShipView shipView) { + public InventoryUI(Main main, List<Crew> crew, List<Weapon> weapons, int fuel, int missiles, Stage stage, ShipView shipView, BitmapFont font) { this.main = main; this.stage = stage; this.shipView = shipView; @@ -54,24 +55,24 @@ public class InventoryUI { x = main.WIDTH/2 - inventoryBackground.getWidth()/2; y = main.HEIGHT/2 - inventoryBackground.getHeight()/2; - closeButton = new InventoryCloseButton(x+750, y+5, 248, 50, null, this); + closeButton = new InventoryCloseButton(x+700, y+15, 248, 50, null, this, null); stage.addActor(closeButton); slots = new LinkedList<>(); float cx = x + 25; float cy = y + 560; for(Crew c : crew) { - slots.add(new InventoryCrewSlotUI(main, c, cx, cy)); + slots.add(new InventoryCrewSlotUI(main, c, cx, cy, font)); cy -= 80; } - float wy = y + 550; - float wx = cx + 200; + float wy = y + 525; + float wx = cx + 400; for(Weapon w : weapons) { - slots.add(new InventoryWeaponSlotUI(main, w, wx, wy)); - wy -=90; + slots.add(new InventoryWeaponSlotUI(main, w, wx, wy, font)); + wy -=100; } - slots.add(new InventoryIntSlotUI(main, fuel, wx+200, y+550, "fuel")); //TODO xy - slots.add(new InventoryIntSlotUI(main, missiles, wx+200, y+750, "missiles")); //TODO xy + slots.add(new InventoryIntSlotUI(main, fuel, x+50, y+50, "fuel", font)); + slots.add(new InventoryIntSlotUI(main, missiles, x+150, y+50, "missiles", font)); } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryWeaponSlotUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryWeaponSlotUI.java index 30d01ad6b4f48b1af18891744147144c61afded1..c817bb766c7ba52bed6a162e1525e7221948092a 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryWeaponSlotUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryWeaponSlotUI.java @@ -1,6 +1,8 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon; @@ -11,41 +13,32 @@ public class InventoryWeaponSlotUI extends InventorySlotUI { */ private Texture weaponTexture; - /** Weapon damage */ - private int damage; + private GlyphLayout glyphDamage = new GlyphLayout(); + private GlyphLayout glyphCooldown = new GlyphLayout(); + private GlyphLayout glyphMissile = new GlyphLayout(); + private GlyphLayout glyphCrewDamage = new GlyphLayout(); + private GlyphLayout glyphBurst = new GlyphLayout(); + private GlyphLayout glyphPrecision = new GlyphLayout(); - /** Weapon coolDown */ - private int cooldown; - - /** Weapon energy */ - private int energy; - - private int missileCost; - private float dropchance; - private int crewdamage; - /** - * How many projectiles are fired per burst - */ - private int burst; - private float precision; + private GlyphLayout glyphName = new GlyphLayout(); /** * constructor * @param main the main class * @param weapon the weapon to be displayed */ - public InventoryWeaponSlotUI(Main main, Weapon weapon, float x, float y) { - super(main, x, y); - damage = weapon.getDamage(); - cooldown = weapon.getCooldown(); - energy = weapon.getEnergy(); - missileCost = weapon.getMissileCost(); - dropchance = weapon.getDropChance(); - crewdamage = weapon.getCrewDamage(); - burst = weapon.getBurst(); - precision = weapon.getAccuracy(); - - weaponTexture = new Texture("shipsys/weapon/laser.png"); + public InventoryWeaponSlotUI(Main main, Weapon weapon, float x, float y, BitmapFont font) { + super(main, x, y, font); + glyphDamage.setText(font, "Damage: "+weapon.getDamage()); + glyphCooldown.setText(font, "Cooldown: "+weapon.getCooldown()); + glyphMissile.setText(font, "Missile Cost: "+weapon.getMissileCost()); + glyphCrewDamage.setText(font, "Crew Damage: "+weapon.getCrewDamage()); + glyphBurst.setText(font, "Burst: "+weapon.getBurst()); + glyphPrecision.setText(font, "Precision: "+weapon.getAccuracy()); + + String name = weapon.getWeaponName(); + weaponTexture = new Texture("shipsys/weapon_system/"+name.toLowerCase()+".png"); + glyphName.setText(font, name); } /** @@ -60,7 +53,14 @@ public class InventoryWeaponSlotUI extends InventorySlotUI { public void render() { super.render(); main.batch.begin(); - main.batch.draw(weaponTexture, posX, posY, 22, 67); + font.draw(main.batch, glyphName, posX, posY + weaponTexture.getHeight() + 25); + font.draw(main.batch, glyphBurst, posX+72, posY+60); + font.draw(main.batch, glyphCooldown, posX+72, posY+40); + font.draw(main.batch, glyphCrewDamage, posX+72, posY+20); + font.draw(main.batch, glyphDamage, posX+220, posY+60); + font.draw(main.batch, glyphMissile, posX+220, posY+40); + font.draw(main.batch, glyphPrecision, posX+220, posY+20); + main.batch.draw(weaponTexture, posX, posY, weaponTexture.getWidth(), weaponTexture.getHeight()); main.batch.end(); } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Map/MapUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Map/MapUI.java index 8a931283178ff677bfa695b5f8cfa5817852cd0a..7ff37f1832e1cc1a8d1d8044587d0e853c756f6b 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Map/MapUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Map/MapUI.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet; +import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.InventoryCloseButton; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.MapButton; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; @@ -18,15 +19,36 @@ public class MapUI { */ private Texture mapTexture; + /** + * the mapbuttons representing the locations on the map + */ private List<MapButton> locations; - private Main main; + private InventoryCloseButton closeButton; - private Stage stage; + /** + * main class extending game + */ + private Main main; + /** + * the ui this is a part of + */ private ShipView shipView; + /** + * the map this ui displays + */ + private Overworld map; + + /** + * the x position + */ private float x; + + /** + * the y position + */ private float y; /** @@ -35,23 +57,26 @@ public class MapUI { */ public MapUI(Main main, Stage stage, Overworld map, ShipView shipView) { this.main = main; - this.stage = stage; this.shipView = shipView; + this.map = main.getClient().getOverworld(); mapTexture = new Texture("map/map_overlay.png"); - x = main.WIDTH/2 - mapTexture.getWidth()/2; - y = main.HEIGHT/2 - mapTexture.getHeight()/2; + x = Main.WIDTH/2f - mapTexture.getWidth()/2f; + y = Main.HEIGHT/2f - mapTexture.getHeight()/2f; + + closeButton = new InventoryCloseButton(x+955, y-80, 248, 50, null, null, this); + stage.addActor(closeButton); locations = new LinkedList<>(); //TODO -// for(String f : map.getPlanetMap().keySet()) { -// float fx = Float.parseFloat(f.split(",")[0]); -// float fy = Float.parseFloat(f.split(",")[1]); -// MapButton mb = new MapButton(new Texture("map/map_button.png"), (x+fx), (y+fy), 10, 10, this, map.getPlanetMap().get(f)); -// locations.add(mb); -// stage.addActor(mb); -// } + for(Planet f : map.getPlanetMap()) { + float fx = f.getPosX(); + float fy = f.getPosY(); + MapButton mb = new MapButton(new Texture("map/map_button.png"), (x+fx+120), (y+fy+80), 20, 20, this, f); + locations.add(mb); + stage.addActor(mb); + } } /** @@ -60,7 +85,7 @@ public class MapUI { */ public void render() { main.batch.begin(); - main.batch.draw(mapTexture, x, y, 1160, 626); + main.batch.draw(mapTexture, x, y-100, 1160, 626); main.batch.end(); } @@ -73,7 +98,7 @@ public class MapUI { m.remove(); } shipView.deleteMap(); - + closeButton.remove(); } /** @@ -85,6 +110,7 @@ public class MapUI { boolean success = shipView.travel(planet); if(success) { disposeMapUI(); + closeButton.remove(); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/EnemyShip.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/EnemyShip.java index 663110a39da5e92288b371dd9457dcf757229edd..73ecef2d25e1ebd9fb689f49ddc79c39fb30f6a6 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/EnemyShip.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/EnemyShip.java @@ -21,17 +21,32 @@ public class EnemyShip extends AbstractShip { */ private List<EnemySystemUI> systems; + private float x; + private float y; + /** * the hull status ui of the enemy ship */ private EnemyHullUI hull; + public EnemyShip(Main main, Ship ship, Stage stage, GamePlay game, Texture enemyBackground, List<EnemySystemUI> systems, EnemyHullUI hull) { + super(main, ship, stage, game); + this.enemyBackground = new Texture("battle/battle_overlay.png"); + //TODO Systeme des Schiffes in SystemUI umwandeln + this.systems = systems; + this.hull = hull; + x = main.WIDTH - enemyBackground.getWidth() - main.WIDTH/6; + y = main.HEIGHT/2 - enemyBackground.getHeight()/2; + } + /** * to render the ui */ @Override public void render() { - + main.batch.begin(); + main.batch.draw(enemyBackground, x, y, 400, 700); + main.batch.end(); } /** @@ -56,6 +71,7 @@ public class EnemyShip extends AbstractShip { @Override public void disposeShipView() { + } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java index 21442971f00500ecf896ea3626c9ef73b91b39aa..504994e898e938d172c05982681236ed09f8975b 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java @@ -1,12 +1,19 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.scenes.scene2d.Stage; import com.galaxytrucker.galaxytruckerreloaded.Main; +import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet; import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; -import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.*; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System; +import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.AutofireButton; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.MoveButton; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.ShipButton; @@ -15,6 +22,7 @@ import com.galaxytrucker.galaxytruckerreloaded.View.UI.Inventory.InventoryUI; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Map.MapUI; import com.galaxytrucker.galaxytruckerreloaded.View.UI.ShipInformation.*; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -87,37 +95,179 @@ public class ShipView extends AbstractShip { */ private MapUI mapUI; + private float width, height; + private float roomWidth, roomHeight; + + private BitmapFont font15; + + private Stage tileStage; + /** * Constructor * @param main - the main class for SpriteBatch */ - public ShipView(Main main, Ship ship, Stage stage, Overworld map, GamePlay game) { + public ShipView(Main main, Ship ship, Stage stage, Stage tileStage, Overworld map, GamePlay game) { super(main, ship, stage, game); - //java.util.List crew = ship.get ?? + this.tileStage = tileStage; + + //font generator to get bitmapfont from .ttf file + FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.local("fonts/JustinFont11Bold.ttf")); + FreeTypeFontGenerator.FreeTypeFontParameter params = new FreeTypeFontGenerator.FreeTypeFontParameter(); + //setting parameters of font + params.borderWidth = 1; + params.borderColor = Color.BLACK; + params.characters = FreeTypeFontGenerator.DEFAULT_CHARS; + params.magFilter = Texture.TextureFilter.Nearest; + params.minFilter = Texture.TextureFilter.Nearest; + params.genMipMaps = true; + params.size = 15; + + font15 = generator.generateFont(params); + + shipBackground = new Texture("ship/" + main.getClient().getMyShip().getShipType().toString().toLowerCase() + "base.png"); + shipRoomBackground = new Texture("ship/" + main.getClient().getMyShip().getShipType().toString().toLowerCase() + "floor.png"); + weaponGeneralBackground = new Texture("shipsys/weapon_system/generalbox.png"); + + width = shipBackground.getWidth()*1.5f; + height = shipBackground.getHeight()*1.5f; + roomWidth = shipRoomBackground.getWidth()*1.5f; + roomHeight = shipRoomBackground.getHeight()*1.5f; + + float roomsBaseX = (70 + width/2); + float roomsBaseY = main.HEIGHT/2; + + List<Crew> crews = new ArrayList<>(); + for(Room r : ship.getSystems()) { + crews.addAll(r.getCrew()); + } + crew = new HashMap<>(); + float cy = Main.HEIGHT - 150; + for(Crew c : crews) { + crew.put(c.getId(), new CrewUI(main, c, stage, this, 30, cy, font15, getRoomX(ship.getShipType(), c.getCurrentRoom().getInteriorID(), roomsBaseX), getRoomY(ship.getShipType(), c.getCurrentRoom().getInteriorID(), roomsBaseY))); + cy -= 60; + } this.map = map; + //uis for all the systems/rooms rooms = new HashMap<>(); - List<Room> existingRooms = ship.getSystems(); - for(Room r : existingRooms) { - //TODO wie system das zu raum gehört? dann sys id als key, roomui als value + List<Room> existingSystems = ship.getSystems(); + float sx = 60; + for(Room r : existingSystems) { + if(r instanceof System) { + if(r instanceof Shield) { + rooms.put(r.getId(), new ShieldUI(main, tileStage, this, getRoomX(ship.getShipType(), r.getInteriorID(), roomsBaseX), getRoomY(ship.getShipType(), r.getInteriorID(), roomsBaseY), (Shield) r, sx)); + } + else if(! (r instanceof WeaponSystem)) { + rooms.put(r.getId(), new SubsystemUI(main, tileStage, this, getRoomX(ship.getShipType(), r.getInteriorID(), roomsBaseX), getRoomY(ship.getShipType(), r.getInteriorID(), roomsBaseY), (System) r, sx)); + } + sx += 55; + } + else { + rooms.put(r.getId(), new RoomUI(main, r, tileStage, this, getRoomX(ship.getShipType(), r.getInteriorID(), roomsBaseX), getRoomY(ship.getShipType(), r.getInteriorID(), roomsBaseY))); + } + } + //need to be done extra bc they need the actual weapon, not just the system + for(Weapon w : ship.getInventory()) { + rooms.put(w.getId(), new WeaponUI(main, tileStage, this, getRoomX(ship.getShipType(), w.getWeaponSystem().getInteriorID(), roomsBaseX), getRoomY(ship.getShipType(), w.getWeaponSystem().getInteriorID(), roomsBaseY), w, sx + 55)); } moveButton = new MoveButton(850, main.HEIGHT - 90, 150, 92, this); - inventory = new ShipButton(750,main.HEIGHT - 80, 50, 92, this); + inventory = new ShipButton(660,main.HEIGHT - 60, 248, 50, this); money = new ScrapUI(main, ship.getCoins()); hull = new HullUI(main, ship.getHp()); energy = new EnergyUI(main, ship.getEnergy()); - shipBackground = new Texture("ship/anaerobic/an2base.png"); - shipRoomBackground = new Texture("ship/anaerobic/an2floor.png"); - weaponGeneralBackground = new Texture("shipsys/weapon/generalbox.png"); - stage.addActor(inventory); stage.addActor(moveButton); } + /** + * get the x position of a room depending on the interior id and the ship type + * @param id the interior id of the room (from left to right, up to down) + * @param bx the x position of the start (the most to the left) + * @return the total x position (lower right corner of the room) + */ + private float getRoomX(ShipType type, int id, float bx) { + switch(type) { + case DEFAULT: + switch(id) { + case 0: return bx - 360; + case 1: + case 2: + case 3: + return bx-312; + case 4: + case 6: + return bx-216; + case 5: + return bx-168; + case 7: + case 8: + case 9: + case 10: + return bx-72; + case 11: + case 12: + return bx+24; + case 13: + case 14: + return bx+120; + case 15: + return bx+216; + case 16: return bx+312; + } + case BARRAGE: return 0; + case BOARDER: return 0; + case TANK: return 0; + case KILLER: return 0; + case STEALTH: return 0; + default: return 0; + } + } + + /** + * return the y position of a room, depending on the ship type + * @param type the ship type + * @param id the interior id + * @return total y position (lower right corner of room) + */ + private float getRoomY(ShipType type, int id, float by) { + switch(type) { + case DEFAULT: + switch(id) { + case 0: + case 2: + case 5: + case 14: + case 15: + case 16: + return by - 48; + case 1: + case 4: + return by +48; + case 3: + case 6: + case 9: + case 12: + return by -96; + case 7: return by +96; + case 8: + case 11: + case 13: + return by; + case 10 : return by -144; + } + case BARRAGE: return 0; + case BOARDER: return 0; + case TANK: return 0; + case KILLER: return 0; + case STEALTH: return 0; + default: return 0; + } + } + /** * renders the ship * no stage stuff!! only textures @@ -126,8 +276,8 @@ public class ShipView extends AbstractShip { public void render() { main.batch.begin(); - main.batch.draw(shipBackground, main.WIDTH -1730, main.HEIGHT/2 - shipBackground.getHeight()/2 - 200, 1000, 1000); - main.batch.draw(shipRoomBackground, main.WIDTH -1500, main.HEIGHT/2 - shipRoomBackground.getHeight()/2 - 100, 550, 550); + main.batch.draw(shipBackground, 70, main.HEIGHT/2 - height/2, width, height); + main.batch.draw(shipRoomBackground, (70 + width/2) - roomWidth/2, main.HEIGHT/2 - roomHeight/2, roomWidth, roomHeight); main.batch.draw(weaponGeneralBackground, 700, 100, 328, 90); main.batch.end(); @@ -135,16 +285,23 @@ public class ShipView extends AbstractShip { hull.render(); energy.render(); + tileStage.draw(); + + + for(RoomUI r : rooms.values()) { + r.render(); + } + + for(CrewUI c : crew.values()) { + c.render(); + } + if(inventoryUI != null) { inventoryUI.render(); } else if(mapUI != null) { mapUI.render(); } - - for(RoomUI r : rooms.values()) { - r.render(); - } } /** @@ -165,6 +322,10 @@ public class ShipView extends AbstractShip { for(RoomUI r : rooms.values()) { r.disposeRoomUI(); } + for(CrewUI c : crew.values()) { + c.disposeCrewUI(); + } + font15.dispose(); } /** @@ -193,7 +354,7 @@ public class ShipView extends AbstractShip { */ public void openInventory() { if(inventoryUI == null){ - inventoryUI = new InventoryUI(main, game.loadCrew(id), game.loadWeapons(id), game.loadFuel(id), game.loadMissiles(id), stage, this); + inventoryUI = new InventoryUI(main, game.loadCrew(), game.loadWeapons(), game.loadFuel(), game.loadMissiles(), stage, this, font15); } } @@ -236,24 +397,41 @@ public class ShipView extends AbstractShip { /** * a crew member is moved to a new room * called by crew ui after player attempts to move a crew - * @param crewid the id of the crew member + * @param crew the crew member * @param room the new room */ - public void crewMoved(int crewid, Room room) { - game.crewMoved(crewid, room); + public void crewMoved(Crew crew, Room room) { + this.crew.get(crew.getId()).crewMoved(room); + } + + /** + * a crew member is moving to a new room + * called by button + * @param crew the crew member that was chosen + */ + public void crewMoving(Crew crew) { + game.crewMoving(crew); + } + + /** + * a room was chosen to move a crew member to + * @param room the room + */ + public void roomChosen(Room room) { + game.roomChosen(room); } /** * crew member health update. called by game - * @param crewid the crew member + * @param crew the crew member * @param health the new health */ - public void crewHealth(int crewid, int health) { + public void crewHealth(Crew crew, int health) { if(health == 0) { - crew.get(crewid).crewDied(); + this.crew.get(crew.getId()).crewDied(); } else { - crew.get(crewid).statusUpdate(health); + this.crew.get(crew.getId()).statusUpdate(health); } } @@ -265,25 +443,25 @@ public class ShipView extends AbstractShip { * update the energy of a system in a room * @param amount the new total amount */ - public void roomSystemEnergyUpdate(int sysid, int amount) { - rooms.get(sysid).systemEnergyUpdate(amount); + public void roomSystemEnergyUpdate(Room room, int amount) { + rooms.get(room.getId()).systemEnergyUpdate(amount); } /** * update the status of a system in a room - * @param sysid the system id + * @param room the system * @param amount the new status */ - public void roomSystemStatusUpdate(int sysid, int amount) { - rooms.get(sysid).systemStatusUpdate(amount); + public void roomSystemStatusUpdate(Room room, int amount) { + rooms.get(room.getId()).systemStatusUpdate(amount); } /** * the player has chosen a new amount of energy * @param amount how much should be subtracted/added */ - public void roomSystemEnergyChosen(int id, int amount) { - game.roomSystemEnergyChosen(id, amount); + public void roomSystemEnergyChosen(Room room, int amount) { + game.roomSystemEnergyChosen(room, amount); } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/CrewUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/CrewUI.java index 260d5c050b3ae6b50bd64914044a844154f0c063..9445bd773a850f4bce6a2d0bb7a0de7f27fe437a 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/CrewUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/CrewUI.java @@ -2,17 +2,20 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.ShipInformation; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.scenes.scene2d.Stage; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew; -import java.util.LinkedList; import java.util.List; import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room; -import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.CrewDismissButton; +import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.CrewSelectButton; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; /** @@ -47,59 +50,69 @@ public class CrewUI { * button to click to send the crew to another room. After the button is clicked, * the player needs to click on a room in their own ship */ - private CrewDismissButton crewButton; + private CrewSelectButton crewButton; /** - * the name of the crew member + * the background box */ - private String name; + private Texture background; /** - * id of the crew member + * the crew member displayed with this ui */ - private int id; + private Crew crew; /** - * the current health of the crew member + * the main class */ - private int health; + private Main main; /** - * the maximum health of the crew member + * the shipview of this crewui */ - private int maxhealth; + private ShipView shipView; /** - * the main class + * the x position of the picture of the crew member in the upper left corner */ - private Main main; + private float x; /** - * the stage for buttons + * the y position of the picture of the crew member in the upper left corner */ - private Stage stage; + private float y; /** - * rooms of the ship + * the position of the room the crew member is in */ - private List<Room> rooms; + private float roomX, roomY; - private ShipView shipView; + /** + * the font used to draw the name + */ + private BitmapFont font; + + /** + * the glyph layout used for better positioning + */ + private GlyphLayout glyph = new GlyphLayout(); /** * constructor * @param main the main class * @param crew the crew member */ - public CrewUI(Main main, Crew crew, Stage stage, Ship ship, ShipView shipView) { + public CrewUI(Main main, Crew crew, Stage stage, ShipView shipView, float x, float y, BitmapFont font, float rX, float rY) { this.main = main; - this.stage = stage; + this.crew = crew; this.shipView = shipView; + this.x = x; + this.y = y; + this.font = font; + this.roomX = rX; + this.roomY = rY; - name = crew.getName(); - maxhealth = crew.getMaxhealth(); - health = crew.getHealth(); - id = crew.getId(); + glyph.setText(font, crew.getName()); if(crew.getName().equals("ana")) { crewImage = new Texture("crew/anaerobic.png"); @@ -108,21 +121,21 @@ public class CrewUI { crewImage = new Texture("crew/battle.png"); } else { - crewImage = new Texture("crew/energy.png"); //TODO wie sieht das mit namen aus? + crewImage = new Texture("crew/energy.png"); } - crewButton = new CrewDismissButton(crewImage, 0, 0, 10, 10, crew.getId(), this); + crewButton = new CrewSelectButton(crewImage, x, y+15, 50, 50, crew.getId(), this); stage.addActor(crewButton); - crewInShip = crewImage; //TODO for now + crewInShip = crewImage; crewStatus = new Texture("gameuis/energybar.png"); box = new Texture("crew/health_box.png"); - currentTexture = 10; + background = new Texture("crew/background.png"); - rooms = ship.getSystems(); + currentTexture = 10; } /** @@ -143,48 +156,35 @@ public class CrewUI { */ public void render() { main.batch.begin(); - main.batch.draw(crewInShip, 0, 0, 0, 0); //TODO whxy - main.batch.draw(box, 0, 0, 10, 10); //TODO xywh - float x=0; + main.batch.draw(background, x, y, 200, 55); + font.draw(main.batch, glyph, x + 55, y + 40); + main.batch.draw(crewInShip, roomX, roomY, 50, 50); + main.batch.draw(box, x + 35, y +5, 140, 20); + float ex=x+55; for(int i=0;i<=currentTexture;i++) { - main.batch.draw(crewStatus, x, 0, 0, 0); //TODO whxy - x+=5; + main.batch.draw(crewStatus, ex, y+13, 8.75f, 5); + ex+=8.75; } main.batch.end(); } /** * the crew member was moved to a new room - * + * called by shipview * * @param room the new room */ public void crewMoved(Room room) { - shipView.crewMoved(id, room); + } /** * the crew was chosen to be moved - * called by button crewdismiss + * called by button crewSelect * now waiting for the user to choose a room on the ship */ public void crewMoving() { - boolean chosen = false; - while(!chosen) { - if(Gdx.input.justTouched()) { - int tx = Gdx.input.getX(); - int ty = Gdx.input.getY(); - for(Room r : rooms) { - //TODO -// if (r.getPosX() <= tx && r.getPosX() + r.getWidth() >= tx //TODO ist die berechnung richtig -// && r.getPosY() <= ty && r.getPosY()+r.getHeight() >= ty) { //TODO wo sind die x und y koordinaten des schiffes? -// chosen = true; -// crewMoved(r); -// break; -// } - } - } - } + shipView.crewMoving(crew); } /** @@ -209,7 +209,7 @@ public class CrewUI { * @param status the new status */ public void statusUpdate(int status) { - int percent = status/maxhealth; + int percent = status/crew.getMaxhealth(); currentTexture = percent * 10; //adapt currentTexture according to amount of textures we end up having } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/RoomUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/RoomUI.java index 069ce529564b22174a67095c2032d2628cd41f4f..0aa2146bd0c7de2e4c142919d0434c195cea710a 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/RoomUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/RoomUI.java @@ -7,39 +7,39 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Tile; +import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.TileButton; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.AbstractShip; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; public class RoomUI { - /** - * the system of this room - */ - private SubsystemUI system; /** - * the normal texture of the room + * the texture for the case that the room is low on oxygen */ - private Texture roomTexture; + protected Texture roomLowOxyTexture; /** - * the texture for the case that the room is low on oxygen + * the texture of the tiles the room is made up of */ - private Texture roomLowOxyTexture; + private Texture tileTexture; + + protected Room room; + + protected Main main; + + protected ShipView ship; /** - * Höhe des Raumes. Räume sind immer rechteckig. + * x position of the room */ - private int height; + protected float x; /** - * Weite des Raumes. Räume sind immer rechteckig. + * y position of the room */ - private int width; - - private Main main; - - private ShipView ship; + protected float y; /** * Constructor @@ -47,67 +47,66 @@ public class RoomUI { * @param main - the main class for SpriteBatch * @param room the room */ - public RoomUI(Main main, Room room, Stage stage, ShipView ship) { + public RoomUI(Main main, Room room, Stage stage, ShipView ship, float x, float y) { this.main = main; - // TODO -// height = room.getHeight(); -// width = room.getWidth(); + this.room = room; + this.ship = ship; + this.x = x; + this.y = y; + + tileTexture = new Texture("ship/tile.png"); - //System sys = TODO wie system? - //dann neue systemui mit stage + for(Tile t : room.getTiles()) { + stage.addActor(new TileButton(x + (t.getPosX()*48), y + (t.getPosY()*48), 48, 48, this)); + } } /** * renders everything this room consists of */ public void render() { - system.render(); - //und textures TODO räume schöner abtrennen? aktuell einfach generell + symbole + main.batch.begin(); + /*for(Tile t : room.getTiles()) { + main.batch.draw(tileTexture, x + (t.getPosX()*48), y + (t.getPosY()*48), 48, 48); + }*/ + main.batch.end(); } /** * Dispose of room ui */ public void disposeRoomUI() { - system.disposeSubsystemUI(); - //texturen - } - /** - * energy status update from controller - */ - public void systemEnergyUpdate(int energy) { - system.energyUpdate(energy); } /** - * system status update from controller + * animation for the case that the room was hit */ - public void systemStatusUpdate(int damage) { - system.systemStatusUpdate(damage); + public void roomHitAnimation() { + } /** - * the player chooses a new amount - * @param amount how much should be subtracted/added + * the rooms texture changes because it is low on oxygen + * */ - public void systemEnergyChosen(int id, int amount) { - ship.roomSystemEnergyChosen(id, amount); + public void roomLowOnOxygen() { + } /** - * animation for the case that the room was hit + * the amount of energy given to a system (if this room is a system) is changed + * @param amount the new amount */ - public void roomHitAnimation() { + public void systemEnergyUpdate(int amount) { } /** - * the rooms texture changes because it is low on oxygen - * + * the status of the system (if this room is a system) is changed + * @param amount the new amount */ - public void roomLowOnOxygen() { - + public void systemStatusUpdate(int amount) { } /** @@ -117,6 +116,13 @@ public class RoomUI { } + /** + * the room was chosen with a tile button + */ + public void chosen() { + ship.roomChosen(room); + } + /** * setup called after initialisation * diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ScrapUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ScrapUI.java index 3e0d6590c3383f7a54a64841bd8e437ed5a82d29..05f8a76c5fabd8dc35375dd1fd015f350f76f4eb 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ScrapUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ScrapUI.java @@ -1,7 +1,12 @@ package com.galaxytrucker.galaxytruckerreloaded.View.UI.ShipInformation; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.galaxytrucker.galaxytruckerreloaded.Main; public class ScrapUI { @@ -14,13 +19,17 @@ public class ScrapUI { /** * the amount of money */ - private int amount; + private int amount = 0; /** * the main class with the sprite batch */ private Main main; + private BitmapFont font; + + private GlyphLayout glyph = new GlyphLayout(); + /** * Constructor * @@ -29,9 +38,25 @@ public class ScrapUI { */ public ScrapUI(Main main, int money) { this.main = main; - amount = money; + this.amount = money; scrapBackground = new Texture("gameuis/top_scrap.png"); + + //font generator to get bitmapfont from .ttf file + FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.local("fonts/JustinFont11Bold.ttf")); + FreeTypeFontGenerator.FreeTypeFontParameter params = new FreeTypeFontGenerator.FreeTypeFontParameter(); + //setting parameters of font + params.borderWidth = 1; + params.borderColor = Color.BLACK; + params.characters = FreeTypeFontGenerator.DEFAULT_CHARS; + params.magFilter = Texture.TextureFilter.Nearest; + params.minFilter = Texture.TextureFilter.Nearest; + params.genMipMaps = true; + params.size = 25; + + font = generator.generateFont(params); + + glyph.setText(font, Integer.toString(amount)); } /** @@ -40,7 +65,8 @@ public class ScrapUI { */ public void render() { main.batch.begin(); - main.batch.draw(scrapBackground, 600, main.HEIGHT - 90, 147, 60); + main.batch.draw(scrapBackground, 600, Main.HEIGHT - 90, 147, 60); + font.draw(main.batch, glyph, 600 + (147f/2) - glyph.width/2, (Main.HEIGHT - 40) - glyph.height/2); main.batch.end(); } @@ -67,6 +93,7 @@ public class ScrapUI { */ public void disposeScrapUI() { scrapBackground.dispose(); + font.dispose(); } /** @@ -75,5 +102,6 @@ public class ScrapUI { */ public void changeAmount(int amount) { this.amount += amount; + glyph.setText(font, Integer.toString(this.amount)); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ShieldUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ShieldUI.java index 53a1ec23d0ad4da93a5bc2102264a672fd9be745..d4ac82983e824a7ec02d5110a4a357758d1c07b3 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ShieldUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/ShieldUI.java @@ -7,6 +7,7 @@ import java.util.LinkedList; import java.util.List; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Shield; +import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; public class ShieldUI extends SubsystemUI { @@ -36,8 +37,8 @@ public class ShieldUI extends SubsystemUI { * @param main - the main class * @param shield the shield */ - public ShieldUI(Main main, Shield shield, Stage stage, RoomUI roomUI) { - super(main, shield, stage, roomUI); + public ShieldUI(Main main, Stage stage, ShipView ship, float x, float y, Shield shield, float sx) { + super(main, stage, ship, x, y, shield, sx); onShip = new Texture("ship/anaerobic/shields.png"); @@ -61,8 +62,8 @@ public class ShieldUI extends SubsystemUI { /** * Dispose of shield ui */ - public void disposeShieldUI() { - super.disposeSubsystemUI(); + public void disposeRoomUI() { + super.disposeRoomUI(); shieldTexture.dispose(); upperBackground.dispose(); @@ -89,24 +90,6 @@ public class ShieldUI extends SubsystemUI { main.batch.end(); } - /** - * Setup called after initialisation - */ - private void setup() { - } - - /** - * Show shield ui - */ - public void showShieldUI() { - } - - /** - * hide the shield ui - */ - public void hideShieldUI() { - } - /** * shield was hit */ diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/SubsystemUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/SubsystemUI.java index c18f643bac37f9bd6984ba0546b0df9ed0b23330..2e6f928e0d7e40d26409f662546a81867a3d8a2f 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/SubsystemUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/SubsystemUI.java @@ -8,16 +8,15 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import java.util.LinkedList; import java.util.List; import com.galaxytrucker.galaxytruckerreloaded.Main; -import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Engine; -import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Shield; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.*; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System; -import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.WeaponSystem; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.SystemButton; +import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; /** * shows the subsystems of the ship */ -public class SubsystemUI { +public class SubsystemUI extends RoomUI { /** * the textures to display the system in its current damage level @@ -37,16 +36,6 @@ public class SubsystemUI { */ private SystemButton energyButton; - /** - * x position of the room - */ - private float x; - - /** - * y position of the room - */ - private float y; - /** * the current energy level */ @@ -65,97 +54,62 @@ public class SubsystemUI { */ protected int id; - protected Main main; - - protected Stage stage; - private int currentStatus; - private RoomUI roomUI; + /** + * the x position of the subsystem in the lower left corner + */ + private float sx; /** * constructor * @param main the main class * @param system the system */ - public SubsystemUI(Main main, System system, Stage stage, RoomUI roomUI) { - this.main = main; - this.stage = stage; - this.roomUI = roomUI; - -// x = system.getPosX(); -// y = system.getPosY(); + public SubsystemUI(Main main, Stage stage, ShipView ship, float x, float y, System system, float sx) { + super(main, system, stage, ship, x, y); + this.sx = sx; energy = system.getEnergy(); maxEnergy = system.getMaxEnergy(); damage = system.getDamage(); systemTexture = new java.util.LinkedList<>(); id = system.getId(); - if(system instanceof Engine) { - systemTexture.add(new Texture("shipsys/engine/enginegreen.png")); - systemTexture.add(new Texture("shipsys/engine/engineorange.png")); - systemTexture.add(new Texture("shipsys/engine/enginered.png")); - } - else if (system instanceof Shield) { - systemTexture.add(new Texture("shipsys/shields/shieldsgreen.png")); - systemTexture.add(new Texture("shipsys/shields/shieldsorange.png")); - systemTexture.add(new Texture("shipsys/shields/shieldsred.png")); - } - else if(system instanceof WeaponSystem) { - systemTexture.add(new Texture("shipsys/weapon/weapongreen.png")); - systemTexture.add(new Texture("shipsys/weapon/weaponorange.png")); - systemTexture.add(new Texture("shipsys/weapon/weaponred.png")); - } - energyButton = new SystemButton(systemTexture.get(0), x, y, 15, 15, this); //TODO w, h also x y for corner!! not these + String sysType = system.getSystemType().toString().toLowerCase(); + + systemTexture.add(new Texture("shipsys/"+sysType+"/"+sysType+"green.png")); + systemTexture.add(new Texture("shipsys/"+sysType+"/"+sysType+"orange.png")); + systemTexture.add(new Texture("shipsys/"+sysType+"/"+sysType+"red.png")); + systemTexture.add(new Texture("shipsys/"+sysType+"/"+sysType+"overlay.png")); + + energyButton = new SystemButton(systemTexture.get(0), sx, 50, 50, 50, this); energyTexture = new Texture("gameuis/energybar.png"); stage.addActor(energyButton); - - Gdx.input.setInputProcessor(stage); } public void render() { + super.render(); main.batch.begin(); - float x = 0; //TODO + float sy = 90; for(int i = 0; i<energy; i++) { - main.batch.draw(energyTexture, x, 0, 10, 10); - x += 5; //TODO? + main.batch.draw(energyTexture, sx + 18, sy, 20, 5); + sy += 8; } - //TODO else für alle level - main.batch.draw(systemTexture.get(currentStatus), 0, 0, 15, 15); //TODO position, w, h + main.batch.draw(systemTexture.get(3), (x + 24 + (24*room.getTiles().get(room.getTiles().size()-1).getPosX()))-16, (y + 24 + (24*room.getTiles().get(room.getTiles().size()-1).getPosY()))-16, 32, 32); main.batch.end(); } - /** - * Setup called after initialisation - */ - private void setup() { - } - - /** - * show the Subsystem ui - */ - public void showSubsystemUI() { - - } - - /** - * hide the Subsystem ui - */ - public void hideSubsystemUI() { - - } - /** * dispose of the Subsystem UI */ - public void disposeSubsystemUI() { + public void disposeRoomUI() { + super.disposeRoomUI(); energyTexture.dispose(); for(Texture t : systemTexture) { t.dispose(); } - stage.dispose(); energyButton.remove(); } @@ -187,7 +141,7 @@ public class SubsystemUI { * if energy supply already activated and not at maximum, then more energy to this system */ public void activateEnergy() { - roomUI.systemEnergyChosen(id, 1); //TODO how much + ship.roomSystemEnergyChosen(room, 1); } /** @@ -195,6 +149,6 @@ public class SubsystemUI { * called by button */ public void lessEnergy() { - roomUI.systemEnergyChosen(id, -1); + ship.roomSystemEnergyChosen(room, -1); } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/WeaponUI.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/WeaponUI.java index 304233127f19aca7ccab1e57d729766b0af208f1..b2e4d574f8b22003e6b9faa9ebbd16421982bac4 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/WeaponUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/ShipInformation/WeaponUI.java @@ -7,8 +7,10 @@ import java.util.LinkedList; import java.util.List; import com.galaxytrucker.galaxytruckerreloaded.Main; import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room; +import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System; import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon; import com.galaxytrucker.galaxytruckerreloaded.View.Buttons.InGameButtons.WeaponActivateButton; +import com.galaxytrucker.galaxytruckerreloaded.View.UI.Ship.ShipView; /** * shows the weapons of the ship @@ -54,8 +56,8 @@ public class WeaponUI extends SubsystemUI { * @param main the main class * @param weapon the weapon */ - public WeaponUI(Main main, Weapon weapon, Stage stage, RoomUI roomUI) { - super(main, weapon.getWeaponSystem(), stage, roomUI); + public WeaponUI(Main main, Stage stage, ShipView ship, float x, float y, Weapon weapon, float sx) { + super(main, stage, ship, x, y, weapon.getWeaponSystem(), sx); cooldown = weapon.getCooldown(); energy = weapon.getEnergy(); @@ -88,8 +90,8 @@ public class WeaponUI extends SubsystemUI { /** * dispose of everything */ - public void disposeWeaponUI() { - super.disposeSubsystemUI(); + public void disposeRoomUI() { + super.disposeRoomUI(); //weaponBackground.dispose(); @@ -100,12 +102,6 @@ public class WeaponUI extends SubsystemUI { activateButton.remove(); } - /** - * Setup called after initialisation - */ - private void setup() { - } - /** * animation for when the weapon was shot */ diff --git a/database.mv.db b/database.mv.db index d69079387e21d64acfde1da8ab4bfe2e611999b2..7a87282e34745059e6dd0408379ae22a946d0993 100644 Binary files a/database.mv.db and b/database.mv.db differ diff --git a/database.trace.db b/database.trace.db new file mode 100644 index 0000000000000000000000000000000000000000..b5d127f528068e72448c401efc8541fb97091f78 --- /dev/null +++ b/database.trace.db @@ -0,0 +1,240 @@ +2020-07-13 18:48:28 database: flush +org.h2.message.DbException: Allgemeiner Fehler: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" +General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" [50000-199] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:90) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2787) + at org.h2.mvstore.MVStore.panic(MVStore.java:441) + at org.h2.mvstore.MVStore.<init>(MVStore.java:404) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3343) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:162) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:95) + at org.h2.engine.Database.getPageStore(Database.java:2739) + at org.h2.engine.Database.open(Database.java:769) + at org.h2.engine.Database.openDatabase(Database.java:319) + at org.h2.engine.Database.<init>(Database.java:313) + at org.h2.engine.Engine.openSession(Engine.java:69) + at org.h2.engine.Engine.openSession(Engine.java:201) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:178) + at org.h2.engine.Engine.createSession(Engine.java:161) + at org.h2.engine.Engine.createSession(Engine.java:31) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:336) + at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:169) + at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:148) + at org.h2.Driver.connect(Driver.java:69) + at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) + at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:331) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:250) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:228) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:369) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:98) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:73) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) + at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) + at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) + at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) + at com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database.<clinit>(Database.java:28) + at com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.ObjectDAO.<init>(ObjectDAO.java:13) + at com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.UserDAO.<init>(UserDAO.java:8) + at com.galaxytrucker.galaxytruckerreloaded.Server.Services.UserService.<init>(UserService.java:15) + at com.galaxytrucker.galaxytruckerreloaded.Server.ServerServiceCommunicator.<init>(ServerServiceCommunicator.java:27) + at com.galaxytrucker.galaxytruckerreloaded.Server.Server.runServer(Server.java:38) + at com.galaxytrucker.galaxytruckerreloaded.Main.startServer(Main.java:46) + at com.galaxytrucker.galaxytruckerreloaded.View.Screen.ShipSelector.startGame(ShipSelector.java:265) + at com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton.leftClick(CreateGameButton.java:18) + at com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton$1.clicked(CreateGameButton.java:26) + at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88) + at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:59) + at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:351) + at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:360) + at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:221) + at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:128) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Allgemeiner Fehler: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" +General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" [50000-199] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) + ... 67 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:883) + at org.h2.mvstore.FileStore.open(FileStore.java:172) + at org.h2.mvstore.MVStore.<init>(MVStore.java:390) + ... 61 more +2020-07-13 18:49:57 database: flush +org.h2.message.DbException: Allgemeiner Fehler: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" +General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" [50000-199] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:90) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2787) + at org.h2.mvstore.MVStore.panic(MVStore.java:441) + at org.h2.mvstore.MVStore.<init>(MVStore.java:404) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3343) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:162) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:95) + at org.h2.engine.Database.getPageStore(Database.java:2739) + at org.h2.engine.Database.open(Database.java:769) + at org.h2.engine.Database.openDatabase(Database.java:319) + at org.h2.engine.Database.<init>(Database.java:313) + at org.h2.engine.Engine.openSession(Engine.java:69) + at org.h2.engine.Engine.openSession(Engine.java:201) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:178) + at org.h2.engine.Engine.createSession(Engine.java:161) + at org.h2.engine.Engine.createSession(Engine.java:31) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:336) + at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:169) + at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:148) + at org.h2.Driver.connect(Driver.java:69) + at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) + at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:331) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:250) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:228) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:369) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:98) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:73) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) + at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) + at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) + at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) + at com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database.<clinit>(Database.java:28) + at com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.ObjectDAO.<init>(ObjectDAO.java:13) + at com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.UserDAO.<init>(UserDAO.java:8) + at com.galaxytrucker.galaxytruckerreloaded.Server.Services.UserService.<init>(UserService.java:15) + at com.galaxytrucker.galaxytruckerreloaded.Server.ServerServiceCommunicator.<init>(ServerServiceCommunicator.java:27) + at com.galaxytrucker.galaxytruckerreloaded.Server.Server.runServer(Server.java:38) + at com.galaxytrucker.galaxytruckerreloaded.Main.startServer(Main.java:46) + at com.galaxytrucker.galaxytruckerreloaded.View.Screen.ShipSelector.startGame(ShipSelector.java:265) + at com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton.leftClick(CreateGameButton.java:18) + at com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton$1.clicked(CreateGameButton.java:26) + at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88) + at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:59) + at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:351) + at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:360) + at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:221) + at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:128) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Allgemeiner Fehler: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" +General error: "java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7]" [50000-199] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) + ... 67 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:/Users/lnittsch/Documents/UniMaterial/ReSWP2/galaxytrucker/database.mv.db [1.4.199/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:883) + at org.h2.mvstore.FileStore.open(FileStore.java:172) + at org.h2.mvstore.MVStore.<init>(MVStore.java:390) + ... 61 more +2020-07-13 18:55:48 database: flush +org.h2.message.DbException: Allgemeiner Fehler: "java.lang.IllegalStateException: The file is locked: nio:C:/Users/playj/OneDrive/Desktop/UNI/SWP2/galaxytrucker/database.mv.db [1.4.199/7]" +General error: "java.lang.IllegalStateException: The file is locked: nio:C:/Users/playj/OneDrive/Desktop/UNI/SWP2/galaxytrucker/database.mv.db [1.4.199/7]" [50000-199] + at org.h2.message.DbException.get(DbException.java:194) + at org.h2.message.DbException.convert(DbException.java:347) + at org.h2.mvstore.db.MVTableEngine$1.uncaughtException(MVTableEngine.java:90) + at org.h2.mvstore.MVStore.handleException(MVStore.java:2787) + at org.h2.mvstore.MVStore.panic(MVStore.java:441) + at org.h2.mvstore.MVStore.<init>(MVStore.java:404) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3343) + at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:162) + at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:95) + at org.h2.engine.Database.getPageStore(Database.java:2739) + at org.h2.engine.Database.open(Database.java:769) + at org.h2.engine.Database.openDatabase(Database.java:319) + at org.h2.engine.Database.<init>(Database.java:313) + at org.h2.engine.Engine.openSession(Engine.java:69) + at org.h2.engine.Engine.openSession(Engine.java:201) + at org.h2.engine.Engine.createSessionAndValidate(Engine.java:178) + at org.h2.engine.Engine.createSession(Engine.java:161) + at org.h2.engine.Engine.createSession(Engine.java:31) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:336) + at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:169) + at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:148) + at org.h2.Driver.connect(Driver.java:69) + at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) + at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:331) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:250) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:228) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:369) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:98) + at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:73) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) + at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) + at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) + at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) + at com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database.<clinit>(Database.java:28) + at com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.ObjectDAO.<init>(ObjectDAO.java:13) + at com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.UserDAO.<init>(UserDAO.java:8) + at com.galaxytrucker.galaxytruckerreloaded.Server.Services.UserService.<init>(UserService.java:15) + at com.galaxytrucker.galaxytruckerreloaded.Server.ServerServiceCommunicator.<init>(ServerServiceCommunicator.java:27) + at com.galaxytrucker.galaxytruckerreloaded.Server.Server.runServer(Server.java:38) + at com.galaxytrucker.galaxytruckerreloaded.Main.startServer(Main.java:46) + at com.galaxytrucker.galaxytruckerreloaded.View.Screen.ShipSelector.startGame(ShipSelector.java:265) + at com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton.leftClick(CreateGameButton.java:18) + at com.galaxytrucker.galaxytruckerreloaded.View.Buttons.MenuButtons.CreateGameButton$1.clicked(CreateGameButton.java:26) + at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88) + at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:59) + at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:351) + at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:360) + at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:221) + at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:128) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Allgemeiner Fehler: "java.lang.IllegalStateException: The file is locked: nio:C:/Users/playj/OneDrive/Desktop/UNI/SWP2/galaxytrucker/database.mv.db [1.4.199/7]" +General error: "java.lang.IllegalStateException: The file is locked: nio:C:/Users/playj/OneDrive/Desktop/UNI/SWP2/galaxytrucker/database.mv.db [1.4.199/7]" [50000-199] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) + ... 67 more +Caused by: java.lang.IllegalStateException: The file is locked: nio:C:/Users/playj/OneDrive/Desktop/UNI/SWP2/galaxytrucker/database.mv.db [1.4.199/7] + at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:883) + at org.h2.mvstore.FileStore.open(FileStore.java:172) + at org.h2.mvstore.MVStore.<init>(MVStore.java:390) + ... 61 more