package main;

import ea.ActionFigur;
import ea.Taste;
import ea.Ticker;

public class Player extends ActionFigur implements Ticker {

	private Main main;
	private static PlayerSheetLoader loader = new PlayerSheetLoader();
	private boolean side;

	private float velX, velY;
	private float accelleration = 0.15f;
	private float friction = 0.2f;

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

		neuerZustand(loader.getPlayer(1), "idle_right");
		neuerZustand(loader.getPlayer(2), "walk_left");
		neuerZustand(loader.getPlayer(3), "walk_right");
		neuerZustand(loader.getPlayer(4), "strike_left");
		neuerZustand(loader.getPlayer(5), "strike_right");
		neuerZustand(loader.getPlayer(6), "swipe_left");
		neuerZustand(loader.getPlayer(7), "swipe_right");
		neuerZustand(loader.getPlayer(8), "die");
	}

	@Override
	public void tick() {
		if (!((aktuellesVerhalten() == "strike_left" || aktuellesVerhalten() == "strike_right")
				&& aktuelleFigur().aktuellesBild() < aktuelleFigur().animation().length - 1)) {

			if (main.tasteGedrueckt(Taste.W)) {
				velY -= World.SCALE * accelleration;
			}
			if (main.tasteGedrueckt(Taste.S)) {
				velY += World.SCALE * accelleration;
			}
			if (main.tasteGedrueckt(Taste.A)) {
				velX -= World.SCALE * accelleration;
				side = false;
			}
			if (main.tasteGedrueckt(Taste.D)) {
				velX += World.SCALE * accelleration;
				side = true;
			}

			setX(getX() + velX);
			setY(getY() + velY);
			velX *= (1f - friction);
			velY *= (1f - friction);

			if (!((aktuellesVerhalten() == "swipe_left" || aktuellesVerhalten() == "swipe_right")
					&& aktuelleFigur().aktuellesBild() < aktuelleFigur().animation().length - 1)) {
				if (velX > 0.2f || velY > 0.2f || velX < -0.2f || velY < -0.2f) {
					if (side) {
						zustandSetzen("walk_right");
					} else {
						zustandSetzen("walk_left");
					}
				} else {
					if (side) {
						zustandSetzen("idle_right");
					} else {
						zustandSetzen("idle_left");
					}
				}

				if (main.tasteGedrueckt(Taste.LEERTASTE)) {
					if (side) {
						zustandSetzen("swipe_right");
					} else {
						zustandSetzen("swipe_left");
					}
				}
				if (main.tasteGedrueckt(Taste.Q)) {
					if (side) {
						zustandSetzen("strike_right");
					} else {
						zustandSetzen("strike_left");
					}
				}
			}
		}
	}

}
