package main.entities;

import java.util.ArrayList;

import ea.Taste;
import ea.Vektor;
import main.Main;
import main.SheetLoader;

public class Player extends LivingEntity {

	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() {
		super(loader.getFigur(0), "idle");

		// Entity-Eigenschaften werden festgelegt
		width = 0.7f;
		height = 0.8f;
		spriteOffsetY = -0.14f;
		spriteScale = 0.8f;
		posX = 4f;
		posY = 4f;
		
		// 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.instance.tasteGedrueckt(Taste.A)) {
					velX -= accelleration;
				}
				if (Main.instance.tasteGedrueckt(Taste.D)) {
					velX += accelleration;
				}
				if (Main.instance.tasteGedrueckt(Taste.W)) {
					velY -= accelleration;
				}
				if (Main.instance.tasteGedrueckt(Taste.S)) {
					velY += accelleration;
				}
				
				// Auf idle stellen wenn man sich nicht bewegt
				if (velX == 0 && velY == 0) {
					zustandSetzen("idle");
				} else {
					zustandSetzen("walk");
				}

				// Attacken
				if (Main.instance.tasteGedrueckt(Taste.LEERTASTE)) {
					zustandSetzen("swipe");
				}
				if (Main.instance.tasteGedrueckt(Taste.Q)) {
					zustandSetzen("strike");
				}
				if (Main.instance.tasteGedrueckt(Taste.F)) {
					zustandSetzen("die");
				}
			}
			
			// LivingEntity auch updaten lassen
			super.update();
		} else {
			velX = 0;
			velY = 0;
		}

		// auf Kollisionen prüfen
		checkTileCollisions(Main.instance.getWorld().getCurrentMap());
		
		if (actionFigur.aktuellesVerhalten().equals("swipe") && actionFigur.aktuelleFigur().aktuellesBild() == 1) {
			ArrayList<Entity> entities = Main.instance.getWorld().getCurrentMap().getEntities();
			for (Entity e : entities) {
				if (e instanceof LivingEntity && e != this) {
					LivingEntity le = (LivingEntity) e;
					Vektor toE = vectorToEntity(le);
					toE = toE.normiert();
					le.velX += toE.x * 0.05f;
					le.velY += toE.y * 0.05f;
					le.takeDamage(0.1f);
				}
			}
		}
	}
}
