New engine for displaying Hearts (Big Brain)

This commit is contained in:
2021-06-27 23:03:55 +02:00
parent 83120aef20
commit 805ae2a960
2 changed files with 58 additions and 23 deletions

View File

@@ -1,37 +1,72 @@
package main; 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.Knoten;
import ea.Ticker; import ea.Ticker;
public class HUD extends Knoten implements 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() { public HUD() {
ActionFigur herz_1 = new ActionFigur(loader.getFigur(0), "herz_1"); // inizialisieren der Variablen, laden der Bilder und für den ticker anmelden
ActionFigur herz_2 = new ActionFigur(loader.getFigur(1), "herz_2"); HPLeiste = new BufferedImage[3];
ActionFigur herz_3 = new ActionFigur(loader.getFigur(2), "herz_3"); Main.instance.manager.anmelden(this, 50);
herz_1.neuerZustand(loader.getFigur(0), "leeres_Herz"); try {
herz_1.neuerZustand(loader.getFigur(1), "halbes_Herz"); hauptBild = ImageIO.read(HUD.class.getResourceAsStream("/res/images/icons.png"));
herz_1.neuerZustand(loader.getFigur(2), "volles_Herz"); } catch (IOException e) {
herz_2.neuerZustand(loader.getFigur(0), "leeres_Herz"); e.printStackTrace();
herz_2.neuerZustand(loader.getFigur(1), "halbes_Herz"); }
herz_2.neuerZustand(loader.getFigur(2), "volles_Herz"); BufferedImage buff;
herz_3.neuerZustand(loader.getFigur(0), "leeres_Herz"); // volles_Herz:
herz_3.neuerZustand(loader.getFigur(1), "halbes_Herz"); buff = hauptBild.getSubimage(16, 0, 16, 16);
herz_3.neuerZustand(loader.getFigur(2), "volles_Herz"); volles_Herz = buff;
herz_1.zustandSetzen("volles_Herz"); // halbes_Herz:
herz_2.zustandSetzen("halbes_Herz"); buff = hauptBild.getSubimage(32, 0, 16, 16);
herz_3.zustandSetzen("leeres_Herz"); halbes_Herz = buff;
add(herz_2); // leeres_Herz
add(herz_3); buff = hauptBild.getSubimage(48, 0, 16, 16);
add(herz_1); leeres_Herz = buff;
herz_1.positionSetzen(20, 0); HPLeiste[0] = volles_Herz;
HPLeiste[1] = volles_Herz;
HPLeiste[2] = volles_Herz;
} }
//wird alle 50ms ausgeführt:
@Override @Override
public void tick() { 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);
}
} }
} }

View File

@@ -31,7 +31,7 @@ public class Spider extends LivingEntity {
} }
protected void update() { protected void update() {
Player player = Main.instance.getWorld().getCurrentMap().getPlayer(); Player player = Main.instance.getWorld().getPlayer();
if (!actionFigur.aktuellesVerhalten().equals(getDamageAnimationName())) { if (!actionFigur.aktuellesVerhalten().equals(getDamageAnimationName())) {
if (lineOfSightClear(player)) { if (lineOfSightClear(player)) {
if (dist(player) < 1f) { if (dist(player) < 1f) {