package main;

import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

import ea.Bild;
import ea.Knoten;
import ea.Ticker;

public class HUD extends Knoten implements Ticker {
	private Bild[] volles_Herz;
	private Bild halbes_Herz;
	private Bild[] leeres_Herz;
	private BufferedImage hauptBild;
	private Bild[] HPLeiste;
	private final static int SCALE = 50;

	public HUD() {
		// inizialisieren der Arrays, laden der Bilder und für den ticker anmelden
		volles_Herz = new Bild[3];
		leeres_Herz = new Bild[3];
		HPLeiste = new Bild[3];
		Main.instance.manager.anmelden(this, 20);
		try {
			hauptBild = ImageIO.read(HUD.class.getResourceAsStream("/res/images/icons.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		// volles_Herz:
		BufferedImage buff = skalieren(hauptBild.getSubimage(16, 0, 16, 16));
		volles_Herz[0] = new Bild(0, 0, buff);
		volles_Herz[1] = new Bild(48, 0, buff);
		volles_Herz[2] = new Bild(96, 0, buff);
		// halbes_Herz:
		buff = skalieren(hauptBild.getSubimage(32, 0, 16, 16));
		halbes_Herz = new Bild(48, 0, buff);
		// leeres_Herz
		buff = skalieren(hauptBild.getSubimage(48, 0, 16, 16));
		leeres_Herz[0] = new Bild(0, 0, buff);
		leeres_Herz[1] = new Bild(48, 0, buff);
		leeres_Herz[2] = new Bild(96, 0, buff);
	}

	private BufferedImage skalieren(BufferedImage buff) {
		BufferedImage scaled = new BufferedImage(SCALE, SCALE, BufferedImage.TYPE_INT_RGB);
		scaled.getGraphics().drawImage(buff, 0, 0, SCALE, SCALE, null);
		return scaled;
	}

	@Override
	public void tick() {
		//Prototyp, deshalb erstmal nur lokale Hp und außerdem hardgecoded (bleibt wahrscheinlich nicht so)
		float localeHP = 1f;
		//erstes Herz:
		if (localeHP < 0.165f) {
			HPLeiste[0] = leeres_Herz[0];
		} else if (localeHP < 0.33f) {
			halbes_Herz.setX(0);
			HPLeiste[0] = halbes_Herz;
		} else {
			HPLeiste[0] = volles_Herz[0];
		}
		//zweites Herz:
		if (localeHP < 0.495f) {
			HPLeiste[1] = leeres_Herz[1];
		} else if (localeHP < 0.66f) {
			halbes_Herz.setX(48);
			HPLeiste[1] = halbes_Herz;
		} else {
			HPLeiste[1] = volles_Herz[1];
		}
		//drittes Herz:
		if (localeHP < 0.825f) {
			HPLeiste[2] = leeres_Herz[2];
		} else if (localeHP < 0.99f) {
			halbes_Herz.setX(96);
			HPLeiste[2] = halbes_Herz;
		} else {
			HPLeiste[2] = volles_Herz[2];
		}
		add(HPLeiste[0]);
		add(HPLeiste[1]);
		add(HPLeiste[2]);
	}

}
