New engine for displaying Hearts (Big Brain)

This commit is contained in:
Maxim Derksen 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;
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);
}
}
}

View File

@ -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) {