From 0fb3c76e7e149c323fcdf3fd642013dc9d8394f2 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Tue, 28 Apr 2020 18:25:34 +0200 Subject: [PATCH] Oppdaterer visning av skade og liv med ikoner for liv, skade og kritisk skade --- .../screens/BoardActiveScreen.java | 78 +++++++++++++++--- .../networking/RoboRallyClientListener.java | 10 +-- .../utility/TextureConverterUtil.java | 26 ++++++ src/main/resources/assets/effects.png | Bin 0 -> 1203 bytes 4 files changed, 95 insertions(+), 19 deletions(-) create mode 100644 src/main/resources/assets/effects.png diff --git a/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/BoardActiveScreen.java b/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/BoardActiveScreen.java index a9318ed..4990cc6 100644 --- a/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/BoardActiveScreen.java +++ b/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/BoardActiveScreen.java @@ -190,18 +190,9 @@ public class BoardActiveScreen extends InteractiveScreen { } roboRallyWrapper.font.getData().setScale(tileDimensions / 44); roboRallyWrapper.font.draw(batch, playerName, viewPortWidth, 2 * tileDimensions * index); - roboRallyWrapper.font.draw(batch, "DMG: " + robot.getDamageTaken() + " LV: " + robot.getAmountOfLives(), - viewPortWidth, 1.5f * tileDimensions + 2 * tileDimensions * (index - 1)); - int lastFlagVisited = robot.getLastFlagVisited(); - if (lastFlagVisited > 0) { - TileType flagType = TileType.getTileTypeFromID(robot.getLastFlagVisited() + 16); - TextureRegion flagRegion = TextureConverterUtil.convertElement(new Tile(flagType, Direction.NORTH)); - batch.draw(flagRegion.getTexture(), viewPortWidth + tileDimensions, 2 * tileDimensions * - (index - 1), tileDimensions / 2, tileDimensions / 2, tileDimensions, - tileDimensions, 1, 1, 0, flagRegion.getRegionX(), - flagRegion.getRegionY(), flagRegion.getRegionWidth(), flagRegion.getRegionWidth(), - false, false); - } + drawDamage(batch, robot, index); + drawLives(batch, robot, index); + drawFlag(batch, robot, index); TextureRegion robotTexture = TextureConverterUtil.convertElement(player.getRobotID()); batch.draw(robotTexture, viewPortWidth, 2 * tileDimensions * (index - 1), tileDimensions, tileDimensions); index++; @@ -209,6 +200,69 @@ public class BoardActiveScreen extends InteractiveScreen { } + /** + * Draws the damage of the player + * @param batch The sprite batch to use for drawing + * @param robot The robot which has visited the flag + * @param index The index of the robot in the robot list + */ + private void drawDamage(SpriteBatch batch, Robot robot, int index) { + int offset = 4 * (tileDimensions / 4); + int tokenSize = tileDimensions / 4; + TextureRegion damageTexture; + for (int i = 0; i < Math.min(robot.getDamageTaken(), 10); i++) { + if (i == 9) { + damageTexture = TextureConverterUtil.getDamageTokenCriticalTexture(); + } else { + damageTexture = TextureConverterUtil.getDamageTokenTexture(); + } + batch.draw(damageTexture.getTexture(), viewPortWidth + offset + ((i % 5) * tokenSize), + tileDimensions + tileDimensions / 4 + 2 * tileDimensions * (index - 1) - + (tokenSize * ((i / 5))), + tileDimensions / 2, + tileDimensions / 2, tokenSize, tokenSize, 1, + 1, 0, damageTexture.getRegionX(), damageTexture.getRegionY(), + damageTexture.getRegionWidth(), damageTexture.getRegionWidth(), false, false); + } + } + + /** + * Draws the lives of the player + * @param batch The sprite batch to use for drawing + * @param robot The robot which has visited the flag + * @param index The index of the robot in the robot list + */ + private void drawLives(SpriteBatch batch, Robot robot, int index) { + TextureRegion lifeTexture = TextureConverterUtil.getLifeTexture(); + int heartSize = tileDimensions / 4; + for (int i = 0; i < robot.getAmountOfLives(); i++) { + batch.draw(lifeTexture.getTexture(), viewPortWidth + heartSize / 2 + i * heartSize, + tileDimensions + 2 * tileDimensions * (index - 1), tileDimensions / 2, + tileDimensions / 2, heartSize, heartSize, 1, + 1, 0, lifeTexture.getRegionX(), lifeTexture.getRegionY(), + lifeTexture.getRegionWidth(), lifeTexture.getRegionWidth(), false, false); + } + } + + /** + * Draws the last flag the player visited + * @param batch The sprite batch to use for drawing + * @param robot The robot which has visited the flag + * @param index The index of the robot in the robot list + */ + private void drawFlag(SpriteBatch batch, Robot robot, int index) { + int lastFlagVisited = robot.getLastFlagVisited(); + if (lastFlagVisited > 0) { + TileType flagType = TileType.getTileTypeFromID(robot.getLastFlagVisited() + 16); + TextureRegion flagRegion = TextureConverterUtil.convertElement(new Tile(flagType, Direction.NORTH)); + batch.draw(flagRegion.getTexture(), viewPortWidth + tileDimensions, 2 * tileDimensions * + (index - 1), tileDimensions / 2, tileDimensions / 2, tileDimensions, + tileDimensions, 1, 1, 0, flagRegion.getRegionX(), + flagRegion.getRegionY(), flagRegion.getRegionWidth(), flagRegion.getRegionWidth(), + false, false); + } + } + /** * Gets the robot with the corresponding robot id * diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java index 36a96bc..638f20d 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java @@ -109,13 +109,9 @@ class RoboRallyClientListener extends Listener { e.printStackTrace(); } } - if (newHand.isEmpty()) { - if (wrapper.getGame().getRobotPowerDown()) { - wrapper.getGame().setProgram(new ArrayList<>()); - wrapper.getGame().setGameState(GameState.SKIP_POWER_DOWN_SCREEN); - } else { - wrapper.getGame().setGameState(GameState.CHOOSING_CARDS); - } + if (newHand.isEmpty() && wrapper.getGame().getRobotPowerDown()) { + wrapper.getGame().setProgram(new ArrayList<>()); + wrapper.getGame().setGameState(GameState.SKIP_POWER_DOWN_SCREEN); } else { wrapper.getGame().setGameState(GameState.CHOOSING_CARDS); } diff --git a/src/main/java/inf112/fiasko/roborally/utility/TextureConverterUtil.java b/src/main/java/inf112/fiasko/roborally/utility/TextureConverterUtil.java index 7df0458..4429e3c 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/TextureConverterUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/TextureConverterUtil.java @@ -29,6 +29,7 @@ import java.util.Map; public final class TextureConverterUtil { private static final Texture textureSheet = new Texture(Gdx.files.internal("assets/tiles.png")); private static final Texture robotsTexture = new Texture(Gdx.files.internal("assets/robots.png")); + private static final Texture effectsTexture = new Texture(Gdx.files.internal("assets/effects.png")); private static Map tileSheetTileTextureMappings; private static Map tileSheetTileHasRotatedTextureMappings; private static Map tileSheetParticleTextureMappings; @@ -39,6 +40,30 @@ public final class TextureConverterUtil { private TextureConverterUtil() { } + /** + * Returns the texture to use to display damage tokens + * @return The damage token texture + */ + public static TextureRegion getDamageTokenCriticalTexture() { + return new TextureRegion(effectsTexture, 2 * 64, 0, 64, 64); + } + + /** + * Returns the texture to use to display damage tokens + * @return The damage token texture + */ + public static TextureRegion getDamageTokenTexture() { + return new TextureRegion(effectsTexture, 64, 0, 64, 64); + } + + /** + * Returns the texture to use to display lives + * @return The life texture + */ + public static TextureRegion getLifeTexture() { + return new TextureRegion(effectsTexture, 0, 0, 64, 64); + } + /** * Gets a list of all disposable elements which should be disposed when the software closes * @@ -48,6 +73,7 @@ public final class TextureConverterUtil { List disposables = new ArrayList<>(); disposables.add(textureSheet); disposables.add(robotsTexture); + disposables.add(effectsTexture); return disposables; } diff --git a/src/main/resources/assets/effects.png b/src/main/resources/assets/effects.png new file mode 100644 index 0000000000000000000000000000000000000000..d16b02cb96debdcdbd768054d73d424244268f1c GIT binary patch literal 1203 zcmV;k1WfyhP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1V~9lK~#8N?VPc0 z6fqEncTp%15)vuWKm#2OqCw&z5<$UZQh>-ifJ8$F5&{ZDlLqM|L=n)kv*(F?7yE3V z$G-K>|4FBF#AWT-yWjKA_(I>sF_`CEV&lx`hf?!4!BO{Z z^ZuN@P!)go_VpD1jp+yFX#4OJ8!>D9@DnCx^%-EaK>FT%i=(s0W~37cz#)K}{dY53 z4!&B)C4m0?jTtS6;qMamsTOr#54X>VgN56iWQIKgjKn6et06-nc0PB0OkpXNt8%SmX-j!`iUEkjMnNS9> z;cOt833ykwDRq5&=Vy=s05CuR1}*JSZ=71%p<8j%53oR6xa^Q*VO+uj?PGg`-z%OS3~e;(-7h^nE{Bh7{W{S11OGCk1*vSq7hNXo)F~ z9r4q@h|~Zlw{Mw|pNrpr%*ap7b&h|0F(W?-Z~D#`ay`&$4Uj8ht_NDJ0YV~11^}vo z0Dx*>f!6oHONo}Kqy^$@xmurulm)WMwL_8?h_B^peG;%h0PFw)2+(p%RAlWfw?re> zPA`B3ioj)s2)08h7ADsM`8qyKuI+K*vO)ygp%e>~Yk_)wfY9N3}TCqaK z*4c^`N?d1E0g$~3J!1HLd_VY*hAb6XixT!i0$y8!^-F@TOV%RAUetuwmKr}Y08kAC z08|430M(FTs@4XTBBq_1^9L~@N}LXdI7I8yM~Tzn5R$D=8)N{W8VFzy=GGFezMi?Y zL^IYyzX%JI!9I2<z}bo5?(7pD2>k$UW30$M}vE}RO@H$4R6hX8)TyrvWB{NV2tbHh9hteELSIp<8zekW z?8RV#639IpXvOyU$UPek9~=0CYl0mPNw0v}Ao4J{^{@Ev2jv0|7LE#F2l?l#Cw&0IHFc7P>$VLLDK- z)%hV>v_LkYju7MO{1C7}02BlQC`?WVr@8Kri<}Nlh12EQH#lgMM%sVV9k{HJkJfFE z3zrr0QQG#{AOir^Kmb5B5I`kj{rn<)zl&HuU%~g=)V|qjYXBQhYjp8(GoIGyLE=XS z0IGoifNCHBpc)9^0Bje!i!FS8Y!|wf3tyYs6Qc+o8HVe(LDM%r=M#U|{Rdy)Jhyo# RXiNYA002ovPDHLkV1nXS1eyQ< literal 0 HcmV?d00001