package main;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

import ea.Figur;
import ea.internal.gra.PixelFeld;

public class SheetLoader {

	private static Figur[] figures;

	/**
	 * Macht aus einem Spritesheet Figuren.
	 * @param path - Der pfad zum sheet
	 * @param width - die Breite von einem Bild
	 * @param height - die Höhe von einem Bild (nicht das ganze sheet)
	 * @param lengths - die Anzahl der Frames der verschiedenen Animationen
	 */
	public SheetLoader(String path, int width, int height, int[] frames) {
		
		try {
			// Bild laden
			BufferedImage sheet = ImageIO.read(Tile.class.getResourceAsStream(path));
			
			// Anzahl der Animationen
			int rows = frames.length;
			
			// Sprites anordnen *magie*
			PixelFeld[][] sprites = new PixelFeld[rows][];
			for (int i = 0; i < frames.length; i++) {
				sprites[i] = new PixelFeld[frames[i]];
			}
			for (int i = 0; i < sprites.length; i++) {
				loadSprites(sprites[i], i, width, height, sheet);
			}
			Figur fig;
			figures = new Figur[rows];
			for (int i = 0; i < figures.length; i++) {
				fig = new Figur();
				fig.animationSetzen(sprites[i]);
				figures[i] = fig;
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public Figur getFigur(int y) {
		return figures[y];
	}

	private void loadSprites(PixelFeld[] sprites, int row, int w, int h, BufferedImage sheet) {
		for (int s = 0; s < sprites.length; s++) {
			sprites[s] = new PixelFeld(w, h, 1);
			for (int x = 0; x < w; x++) {
				for (int y = 0; y < h; y++) {
					Color clr = new Color(sheet.getRGB((s * w + x), (row * h + y)), true);
					sprites[s].farbeSetzen(x, y, clr);
				}
			}
		}
	}
}
