package main.entities;

import ea.Taste;
import main.Malin;
import main.SheetLoader;

public class Player extends LivingEntity {

	private Malin main; // Referenz auf die main Klasse. Wird später für den Keyboardinput verwendet
	private static SheetLoader loader = new SheetLoader("/res/images/player_sprite_sheet.png", 64, 32, new int[] {5, 8, 7, 6, 2, 5, 4, 7});

	public Player(Malin main) {
		super(loader.getFigur(0), "idle_left");
		this.main = main;

		// Entity-Eigenschaften werden festgelegt
		width = 0.7f;
		height = 0.8f;
		spriteOffsetY = -0.14f;
		spriteScale = 0.8f;
		posX = 4f;
		posY = 4f;
		hp = 10f;
		
		// unterschiedliche Animationsgeschwindigkeiten
		// für idle
		loader.getFigur(0).animationsGeschwindigkeitSetzen(200);
		// fürs laufen
		loader.getFigur(1).animationsGeschwindigkeitSetzen(50);

		// Zustände werden hinzugefügt
		actionFigur.neuerZustand(loader.getFigur(0), "idle");
		actionFigur.neuerZustand(loader.getFigur(1), "walk");
		actionFigur.neuerZustand(loader.getFigur(2), "strike");
		actionFigur.neuerZustand(loader.getFigur(3), "swipe");
		actionFigur.neuerZustand(loader.getFigur(7), "die");
	}

	@Override
	protected void update() {
		// Bei dieser animation bleibt man sofort stehen.
		if (!((actionFigur.aktuellesVerhalten().equals("strike"))
				&& actionFigur.aktuelleFigur().aktuellesBild() < actionFigur.aktuelleFigur().animation().length - 1)) {
			// Bei diser soll man sich nicht bewegen können aber weiter rutschen
			if (!((actionFigur.aktuellesVerhalten().equals("swipe"))
					&& actionFigur.aktuelleFigur().aktuellesBild() < actionFigur.aktuelleFigur().animation().length - 1)) {
				
				// wasd movement
				if (main.tasteGedrueckt(Taste.A)) {
					moveLeft();
				}
				if (main.tasteGedrueckt(Taste.D)) {
					moveRight();
				}
				if (main.tasteGedrueckt(Taste.W)) {
					moveUp();
				}
				if (main.tasteGedrueckt(Taste.S)) {
					moveDown();
				}
				
				// Auf idle stellen wenn man sich nicht bewegt
				if (velX == 0 && velY == 0) {
					zustandSetzen("idle");
				} else {
					zustandSetzen("walk");
				}

				// Attacken
				if (main.tasteGedrueckt(Taste.LEERTASTE)) {
					zustandSetzen("swipe");
				}
				if (main.tasteGedrueckt(Taste.Q)) {
					zustandSetzen("strike");
				}
				if (main.tasteGedrueckt(Taste.F)) {
					zustandSetzen("die");
				}
			}
			
			// auf Kollisionen prüfen
			checkTileCollisions(main.getWorld().getCurrentMap());
			// LivingEntity auch updaten lassen
			super.update();
		} else {
			velX = 0;
			velY = 0;
		}
	}
}
