From 00291ade593a01d0271d12982427476fef81079b Mon Sep 17 00:00:00 2001 From: Aaron <rudkowsk@uni-bremen.de> Date: Mon, 13 Jul 2020 14:20:10 +0100 Subject: [PATCH] inventory --- core/assets/shipsys/weapon_system/bomb.png | Bin 0 -> 1080 bytes .../assets/shipsys/weapon_system/healbomb.png | Bin 0 -> 1984 bytes core/assets/shipsys/weapon_system/radio.png | Bin 0 -> 2172 bytes .../shipsys/weapon_system/radiobomb.png | Bin 0 -> 1588 bytes core/assets/shipsys/weapon_system/rocket.png | Bin 0 -> 1593 bytes .../Server/ClientHandler.java | 24 ++++---- .../View/Screen/ChooseDifficultyScreen.java | 1 + .../View/Screen/CreateOrJoinServer.java | 1 + .../View/Screen/GamePlay.java | 44 ++++++++------ .../View/Screen/LobbyScreenHost.java | 1 + .../View/Screen/LobbyScreenNormal.java | 1 + .../View/Screen/LoginScreen.java | 1 + .../View/Screen/SPResumeLobby.java | 1 + .../View/Screen/SelectLobbyScreen.java | 1 + .../View/Screen/ShipSelector.java | 1 + .../UI/Inventory/InventoryCrewSlotUI.java | 36 ++++++++++-- .../View/UI/Inventory/InventoryIntSlotUI.java | 49 +++++++--------- .../View/UI/Inventory/InventorySlotUI.java | 30 ++++++---- .../View/UI/Inventory/InventoryUI.java | 12 ++-- .../UI/Inventory/InventoryWeaponSlotUI.java | 54 +++++++++--------- .../View/UI/Ship/ShipView.java | 21 +++---- database.mv.db | Bin 57344 -> 57344 bytes 22 files changed, 159 insertions(+), 119 deletions(-) create mode 100644 core/assets/shipsys/weapon_system/bomb.png create mode 100644 core/assets/shipsys/weapon_system/healbomb.png create mode 100644 core/assets/shipsys/weapon_system/radio.png create mode 100644 core/assets/shipsys/weapon_system/radiobomb.png create mode 100644 core/assets/shipsys/weapon_system/rocket.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 GIT binary patch literal 1080 zcmV-81jqY{P)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm100006VoOIv0P6tt z0OiFf>U{tJ010qNS#tmY3ljhU3ljkVnw%H_000McNliru<OdB5HvpJcuBiY31I0;1 zK~z}7#hB4+TXhu2KfjxMn<k{COJi$ASY1c4$Qav{R>lzYL6}8G!J$tws8R+Fd@1x{ z5a`4H1MzM2VTdc{L4-2LCI!U>EY8xjU6!R$+h)nqHnuY{F*n)6xZ&pJ-ZZ&M^g!V9 zOMZOrIp=%M`Q;~Q(tLdbrCQ&ol5t_SE;kDu9T~3qn;?|T;BvDb2iL;3_B9P2?CmK( z$9B>cYq6bldqS;;0o=X$6##Ev{OHhqQnTP`|0L7?$*T47i800}#w^7rYzXR?^B3Ma zbK=wxE5C+tx)gp|Tt+ImxpMgve7#<7d>vr%=SALqZxm0Ln?yXtqX&PIczm#wh;P4c z3#?c4w11M-<rM(F3*6(H|0)18{#nK+#sFAdju4Hcs&Xw_RlmoM`-nzTRnJy6E!%}^ zLJF>~mc9J)=*s|1MK;UcuZKba%*_Xy6PK@Vpfr7XivHeS5_@|HNn&Gji_Ux=MF<oj z=*;KY*xbV7@zCS-qR0-;zHz1^N}^S5vhAVv`ua<%sxtZ6MHHn(d~=Jv-M{(qhZU|& zeafkmC%75-mRRh2#xI=3;gI+vw#~!!EeeJHk}ON4l5x>+s3l3l;c#&Mi*M*T;-yp) z^c?X3Fz{kOj}u82Zr|qo`)^V#7Wr*youy!u{l9XgcN0SMTCzJ7hK64v`Y?>FI7lY; za64VZA`zDF-v>Zdi$vCcN0J1cE``yN;ffU5QuXM_Fu}DjkHXs=JMIG@lgsi?E=Px= z0Pr9b1t1zpVK%{pT`_6HK;NqyF;Nfn;}0g7n-7$0Q>$CE$z+^b+PZPCR1eh5uKBML z+ew!{W>d=y+LEzo^g??{V|3awkBjoZ<lF~zpH|5YB>?C?t&;8D#hK|sDk$v%=iCQ8 z84Te)SKwau?(-&d4xS8#cp>&0u6=KNz<JkG78Y;u$~%>ES-5kH4_`fM32yoXV%KCl zXJx&0WId=E!N#3p#k!gibYwk^i%aWHhnX|e#ifzY$-ACXl+@>8EIR1OdT?gC>H|08 zX*pK~1=qgUGM6>M8qnBn+L~iu-#|&<`u;0BRMp0_Qp;6s46oh)L=A(r5oes8?RtU# zw}DuxSo5|Wd6vz}NCWD}T&rxxKT9eZ7qXd`R>Qwl(5g_I0bAv*9$KMlBUA&nqMI3^ zrb9ySp|PXQ_-Ac_&8{PaaWH6g99#=itChxf(lxa(Hy^OP|FBeby=Kh6z6xqVYkFKy y*Rtwzhe4|j^z~er)w=Jh2WSbltK3GQ0M7uNjK#kCMv5B%0000<MNUMnLSTYPRR>o9 literal 0 HcmV?d00001 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 GIT binary patch literal 1984 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 SpORw$0000<MNUMnLSTZt^`*T4 literal 0 HcmV?d00001 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 GIT binary patch literal 2172 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 literal 0 HcmV?d00001 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 GIT binary patch literal 1588 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 literal 0 HcmV?d00001 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 GIT binary patch literal 1593 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 literal 0 HcmV?d00001 diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java index 811a569e..418c5703 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java @@ -354,9 +354,9 @@ public class ClientHandler implements Runnable { 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 Gun", 30); + (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, "Allahu Akbar", 30); + (float) 0.25, 4, (float) 1.0, 2, 1, "Rocket", 30); // TODO add weapon price list laser.setWeaponSystem(weapons); rocket.setWeaponSystem(weapons); @@ -465,9 +465,9 @@ public class ClientHandler implements Runnable { 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, "Allahu Akbar2", 30); + (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, "Allahu Akbar", 30); + (float) 0.25, 4, (float) 1.0, 2, 1, "Rocket", 30); // TODO add weapon price list rocket1.setWeaponSystem(weapons); rocket2.setWeaponSystem(weapons); @@ -570,9 +570,9 @@ public class ClientHandler implements Runnable { 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 Gun", 30); + (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, "Allahu Akbar", 45); + (float) 0.12, 0, (float) 0.0, 2, 3, "Radio", 45); // TODO add weapon price list radio.setWeaponSystem(weapons); laser.setWeaponSystem(weapons); @@ -719,11 +719,11 @@ public class ClientHandler implements Runnable { 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 Gun", 30); + (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 Gun2", 30); + (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 Gun2", 30); + (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); @@ -806,7 +806,7 @@ public class ClientHandler implements Runnable { 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 Gun", 30); + (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 @@ -926,9 +926,9 @@ public class ClientHandler implements Runnable { 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, "Radio Bomb", 75); + (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, "Heal Bomb", 60); + (float) 1.5, (float) 0.1, 4, (float) 0, -4, 1, "HealBomb", 60); // TODO add weapon price list radioBomb.setWeaponSystem(weapons); healBomb.setWeaponSystem(weapons); diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ChooseDifficultyScreen.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ChooseDifficultyScreen.java index e653478a..b8b5a308 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 c427320d..c00d393a 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/CreateOrJoinServer.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/CreateOrJoinServer.java @@ -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 d6df9e94..ff30f161 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/GamePlay.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/GamePlay.java @@ -20,7 +20,9 @@ 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.ShipLayout.WeaponSystem; import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Events.EventGUI; import com.galaxytrucker.galaxytruckerreloaded.View.UI.Events.GameOver; @@ -564,44 +566,48 @@ 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) { - List<Weapon> weapons = new LinkedList<>(); -// weapons.add(new LaserBlaster("karl")); -// weapons.add(new LaserBlaster("test")); + public List<Weapon> loadWeapons() { + List<Weapon> weapons = 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()); + } + } + } 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 15a22790..b556ed2a 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenHost.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LobbyScreenHost.java @@ -240,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 568a7b4f..8f35b656 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 cea80419..1a49735d 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LoginScreen.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/LoginScreen.java @@ -198,6 +198,7 @@ public class LoginScreen implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java index 9fd93fbb..e1c9c59e 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SPResumeLobby.java @@ -183,6 +183,7 @@ public class SPResumeLobby implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java index a98fc651..3662c410 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/SelectLobbyScreen.java @@ -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 a425bfc4..63cc65d9 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ShipSelector.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/Screen/ShipSelector.java @@ -254,6 +254,7 @@ public class ShipSelector implements Screen { public void dispose() { background.dispose(); stage.dispose(); + font.dispose(); } /** 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 23202b09..e2f8b961 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryCrewSlotUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryCrewSlotUI.java @@ -4,8 +4,12 @@ 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; +import sun.jvm.hotspot.gc.shared.G1YCType; /** * to represent a crew member in the inventory @@ -27,11 +31,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,6 +43,18 @@ 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 * @@ -52,7 +63,14 @@ public class InventoryCrewSlotUI extends InventorySlotUI { public InventoryCrewSlotUI(Main main, Crew crew, float x, float y) { super(main, x, y); - name = crew.getName(); + 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)); + health = crew.getHealth(); maxhealth = crew.getMaxhealth(); currTexture = (int) (((float) health/maxhealth) * 10); @@ -78,6 +96,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 3590eb42..b51c8576 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryIntSlotUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryIntSlotUI.java @@ -1,24 +1,16 @@ 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 @@ -27,9 +19,8 @@ public class InventoryIntSlotUI extends InventorySlotUI { */ 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(); + + glyphLayout.setText(font, text + ": " + value); } /** @@ -38,18 +29,7 @@ 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();*/ + font.dispose(); } /** @@ -67,4 +47,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 ae6f80c7..79e5e353 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,13 +21,10 @@ public abstract class InventorySlotUI { */ protected float posY; - /** - * Inventory slot background - */ - private Texture inventorySlotTexture; - protected Main main; + protected BitmapFont font; + /** * Constructor * @@ -32,10 +33,22 @@ public abstract class InventorySlotUI { public InventorySlotUI(Main main, float x, float y) { this.main = main; + //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; + + font = generator.generateFont(params); + posX = x; posY = y; - - //inventorySlotTexture = new Texture(); } /** @@ -43,9 +56,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 1f5804f9..ee09eebd 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryUI.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Inventory/InventoryUI.java @@ -54,7 +54,7 @@ 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); stage.addActor(closeButton); slots = new LinkedList<>(); @@ -64,14 +64,14 @@ public class InventoryUI { slots.add(new InventoryCrewSlotUI(main, c, cx, cy)); 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; + 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")); + slots.add(new InventoryIntSlotUI(main, missiles, x+150, y+50, "missiles")); } /** 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 30d01ad6..a82c52a8 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,23 +13,14 @@ 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 @@ -36,16 +29,16 @@ public class InventoryWeaponSlotUI extends InventorySlotUI { */ 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"); + 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/Ship/ShipView.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java index 15b6920b..f6eabf59 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/View/UI/Ship/ShipView.java @@ -147,7 +147,7 @@ public class ShipView extends AbstractShip { } 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()); @@ -161,7 +161,7 @@ public class ShipView extends AbstractShip { * 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 + * @return the total x position (lower right corner of the room) */ private float getRoomX(ShipType type, int id, float bx) { switch(type) { @@ -205,7 +205,7 @@ public class ShipView extends AbstractShip { * return the y position of a room, depending on the ship type * @param type the ship type * @param id the interior id - * @return + * @return total y position (lower right corner of room) */ private float getRoomY(ShipType type, int id, float by) { switch(type) { @@ -259,12 +259,6 @@ public class ShipView extends AbstractShip { hull.render(); energy.render(); - if(inventoryUI != null) { - inventoryUI.render(); - } - else if(mapUI != null) { - mapUI.render(); - } for(RoomUI r : rooms.values()) { r.render(); @@ -273,6 +267,13 @@ public class ShipView extends AbstractShip { for(CrewUI c : crew.values()) { c.render(); } + + if(inventoryUI != null) { + inventoryUI.render(); + } + else if(mapUI != null) { + mapUI.render(); + } } /** @@ -324,7 +325,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); } } diff --git a/database.mv.db b/database.mv.db index 282b0ee8e905d0131b3537ea59faa356e1e2e545..bf06dadd61d71c6ec7a71fa2f6686a4096a679e1 100644 GIT binary patch literal 57344 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 literal 57344 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 PBXckTpdI`PfJ6T;x1WP( -- GitLab