From 2bd9d077cce15595ef321bd60f35734252b2a3ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 18 Aug 2022 10:23:12 +0200 Subject: [PATCH] Create bar with player HP --- data.mv.db | Bin 32768 -> 32768 bytes .../demo/entity/Character.java | 3 + .../bartlomiejpluta/demo/entity/Enemy.java | 1 + .../bartlomiejpluta/demo/entity/Player.java | 2 + .../com/bartlomiejpluta/demo/gui/Bar.java | 65 ++++++++++++++++++ .../com/bartlomiejpluta/demo/gui/HUD.java | 5 ++ .../00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml | 14 ++++ 7 files changed, 90 insertions(+) create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/Bar.java diff --git a/data.mv.db b/data.mv.db index 737ff6554794e0db9c874e68bd8b5c051479ff7c..c75a95647dabfd5eb4be653b74f04c72e637809a 100644 GIT binary patch literal 32768 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 literal 32768 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 M$tFq0G+6%+0EkM{cK`qY diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Character.java b/src/main/java/com/bartlomiejpluta/demo/entity/Character.java index 8755ab5..152e122 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Character.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Character.java @@ -24,6 +24,9 @@ public abstract class Character extends EntityDelegate { @Getter protected boolean immortal = false; + @Getter + protected int maxHp; + @Getter protected int hp; diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java b/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java index 4e7541b..e3fa059 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java @@ -31,6 +31,7 @@ public class Enemy extends Character implements NPC { this.template = template; name = template.getName(); hp = template.getHp(); + maxHp = hp; setSpeed(template.getSpeed()); setAnimationSpeed(template.getAnimationSpeed()); setBlocking(template.isBlocking()); diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java index b8e9eb4..1c9b825 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java @@ -10,6 +10,8 @@ public class Player extends Character { public Player(@NonNull Context context, @NonNull Entity entity) { super(context, entity); + this.hp = 100; + this.maxHp = 100; } @Override diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/Bar.java b/src/main/java/com/bartlomiejpluta/demo/gui/Bar.java new file mode 100644 index 0000000..e047a17 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/Bar.java @@ -0,0 +1,65 @@ +package com.bartlomiejpluta.demo.gui; + +import lombok.*; + +import com.bartlomiejpluta.base.api.gui.*; +import com.bartlomiejpluta.base.lib.gui.*; + +import com.bartlomiejpluta.base.api.screen.*; +import com.bartlomiejpluta.base.api.context.Context; +import com.bartlomiejpluta.base.api.input.*; + +public class Bar extends BaseComponent { + + @Setter + private float value = 1.0f; + private float actualValue = 1.0f; + private float speed = 0.05f; + private final Color stroke; + private final Color fill; + + public Bar(Context context, GUI gui) { + super(context, gui); + + this.stroke = gui.createColor(); + this.fill = gui.createColor(); + + stroke.setAlpha(1f); + fill.setAlpha(1f); + } + + public void setStrokeColor(Integer hex) { + stroke.setRGB(hex); + } + + public void setFillColor(Integer hex) { + fill.setRGB(hex); + } + + @Override + public float getContentWidth() { + return width; + } + + @Override + public float getContentHeight() { + return height; + } + + @Override + public void draw(Screen screen, GUI gui) { + var remainingDistance = value - actualValue; + actualValue += remainingDistance * speed; + + gui.beginPath(); + gui.drawRectangle(x, y, Math.max(width * actualValue, 0), height); + gui.setFillColor(fill); + gui.fill(); + gui.closePath(); + gui.beginPath(); + gui.drawRectangle(x, y, width, height); + gui.setStrokeColor(stroke); + gui.stroke(); + gui.closePath(); + } +} \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/HUD.java b/src/main/java/com/bartlomiejpluta/demo/gui/HUD.java index 1e411c2..8441a57 100644 --- a/src/main/java/com/bartlomiejpluta/demo/gui/HUD.java +++ b/src/main/java/com/bartlomiejpluta/demo/gui/HUD.java @@ -26,6 +26,9 @@ public class HUD extends BorderLayout { private float logVisibilityDuration = 0f; + @Ref("hp") + private Bar hp; + @Ref("debug") private Label debugLbl; @@ -60,6 +63,8 @@ public class HUD extends BorderLayout { public void update(float dt) { super.update(dt); + hp.setValue((float) player.getHp() / (float) player.getMaxHp()); + if(logVisibilityDuration > 0) { logVisibilityDuration -= dt * 1000; } else { diff --git a/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml b/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml index f767e3e..6daf65c 100644 --- a/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml +++ b/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml @@ -8,6 +8,20 @@ width="1f" height="1f"> + + + + + +