diff --git a/Zoelda/src/main/HUD.java b/Zoelda/src/main/HUD.java index 41e9bc8..c8e5db6 100644 --- a/Zoelda/src/main/HUD.java +++ b/Zoelda/src/main/HUD.java @@ -1,37 +1,72 @@ package main; -import ea.ActionFigur; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.IOException; +import javax.imageio.ImageIO; +import ea.BoundingRechteck; import ea.Knoten; import ea.Ticker; public class HUD extends Knoten implements Ticker { - private static SheetLoader loader = new SheetLoader("/res/images/herzen.png", 16, 16, new int[] { 1, 1, 1 }); + private BufferedImage volles_Herz; + private BufferedImage halbes_Herz; + private BufferedImage leeres_Herz; + private BufferedImage hauptBild; + private BufferedImage[] HPLeiste; + private final static int SCALE = 50; public HUD() { - ActionFigur herz_1 = new ActionFigur(loader.getFigur(0), "herz_1"); - ActionFigur herz_2 = new ActionFigur(loader.getFigur(1), "herz_2"); - ActionFigur herz_3 = new ActionFigur(loader.getFigur(2), "herz_3"); - herz_1.neuerZustand(loader.getFigur(0), "leeres_Herz"); - herz_1.neuerZustand(loader.getFigur(1), "halbes_Herz"); - herz_1.neuerZustand(loader.getFigur(2), "volles_Herz"); - herz_2.neuerZustand(loader.getFigur(0), "leeres_Herz"); - herz_2.neuerZustand(loader.getFigur(1), "halbes_Herz"); - herz_2.neuerZustand(loader.getFigur(2), "volles_Herz"); - herz_3.neuerZustand(loader.getFigur(0), "leeres_Herz"); - herz_3.neuerZustand(loader.getFigur(1), "halbes_Herz"); - herz_3.neuerZustand(loader.getFigur(2), "volles_Herz"); - herz_1.zustandSetzen("volles_Herz"); - herz_2.zustandSetzen("halbes_Herz"); - herz_3.zustandSetzen("leeres_Herz"); - add(herz_2); - add(herz_3); - add(herz_1); - herz_1.positionSetzen(20, 0); + // inizialisieren der Variablen, laden der Bilder und für den ticker anmelden + HPLeiste = new BufferedImage[3]; + Main.instance.manager.anmelden(this, 50); + try { + hauptBild = ImageIO.read(HUD.class.getResourceAsStream("/res/images/icons.png")); + } catch (IOException e) { + e.printStackTrace(); + } + BufferedImage buff; + // volles_Herz: + buff = hauptBild.getSubimage(16, 0, 16, 16); + volles_Herz = buff; + // halbes_Herz: + buff = hauptBild.getSubimage(32, 0, 16, 16); + halbes_Herz = buff; + // leeres_Herz + buff = hauptBild.getSubimage(48, 0, 16, 16); + leeres_Herz = buff; + HPLeiste[0] = volles_Herz; + HPLeiste[1] = volles_Herz; + HPLeiste[2] = volles_Herz; } + //wird alle 50ms ausgeführt: @Override public void tick() { - float localHp = Main.instance.getWorld().getPlayer().getHP(); + // teilt den Wert der HP in Teile auf, welche der Anzahl der Herzen entspricht + // und prüft dann für den eigenen Teil des Herzens, ob das jeweilige Herz voll, + // halb oder leer ist (BIG BRAIN): + float localeHP; + for (int i = 0; i < HPLeiste.length; i++) { + localeHP = Main.instance.getWorld().getPlayer().getHP(); + ; + localeHP -= ((float) i) * (1f / HPLeiste.length); + if (localeHP <= 0f) { + HPLeiste[i] = leeres_Herz; + } else if (localeHP < (1 / (float) (2 * HPLeiste.length))) { + HPLeiste[i] = halbes_Herz; + } else if (localeHP > 1 / (float) (2 * HPLeiste.length)) { + HPLeiste[i] = volles_Herz; + } + } + } + + //Zeichnet alle Herzen im Array HPLeiste[] auf den Bildschirm + @Override + public void zeichnen(Graphics2D g, BoundingRechteck r) { + for (int i = 0; i < HPLeiste.length; i++) { + g.drawImage(HPLeiste[i], i * SCALE, 0, SCALE, SCALE, null); + } } } diff --git a/Zoelda/src/main/entities/Spider.java b/Zoelda/src/main/entities/Spider.java index 3990ff8..4cd2782 100644 --- a/Zoelda/src/main/entities/Spider.java +++ b/Zoelda/src/main/entities/Spider.java @@ -31,7 +31,7 @@ public class Spider extends LivingEntity { } protected void update() { - Player player = Main.instance.getWorld().getCurrentMap().getPlayer(); + Player player = Main.instance.getWorld().getPlayer(); if (!actionFigur.aktuellesVerhalten().equals(getDamageAnimationName())) { if (lineOfSightClear(player)) { if (dist(player) < 1f) {