package linea;

import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Arc2D;

public class Cercle extends ObjetGraphique { // il s'agit plutôt d'arcs de cercle

	protected double rayon = 50;
	protected double depY = 0;

	// début et fin de l'arc, en degrés
	protected double debut = 0;
	protected double fin = 360;

	protected boolean montee = false;
	protected boolean descente = false;
	protected double vitesse = 0;

	// pas = "delta t", permet de régler la jouabilité
	protected double pas = 0.2;
	protected double impulsion = 2;

	public static int xCercle = 400;

	public Cercle() {
		x = xCercle;
		y = (double)ZoneDessin.hauteur / 2;
	}

	public Cercle(double debutArc, double finArc) {
		x = xCercle;
		y = (double)ZoneDessin.hauteur / 2;
		debut = debutArc;
		fin = finArc;
	}

	public double getRayon() {
		return rayon;
	}

	public void setRayon(double r) {
		rayon = r;
	}

	public void Monter() {
		montee = true;
	}

	public void ArreterMonter() {
		montee = false;
	}

	public void Descendre() {
		descente = true;
	}

	public void ArreterDescendre() {
		descente = false;
	}

	@Override
	void Afficher(Graphics g) {
		Graphics2D g2D = (Graphics2D) g;
		g2D.setStroke(new BasicStroke(5.0f));
		g.setColor(this.couleur);
		g2D.draw(new Arc2D.Double(x - rayon / 2, y - rayon, rayon, rayon * 2, debut, fin, Arc2D.OPEN));
	}

	@Override
	void Animer() {
		// acceleration vers le haut
		if (montee == true) {
			vitesse -= impulsion * pas;
		}

		// acceleration vers le bas
		if (descente == true) {
			vitesse += impulsion * pas;
		}

		// limiter la vitesse max
		if (vitesse < -10) {
			vitesse = -10;
		}
		if (vitesse > 10) {
			vitesse = 10;
		}

		y += vitesse;
	}

	public void ResterDansLigne(Ligne li) {
		double collisionHautPos = y + rayon;
		double collisionBasPos = y - rayon;
		double yLigne = li.GetHauteurPointCercle();

		if (yLigne < collisionBasPos) {
			y = yLigne + rayon;
			if (vitesse > 0)
				vitesse = 0;
		}
		if (yLigne > collisionHautPos) {
			y = yLigne - rayon;
			if (vitesse < 0)
				vitesse = 0;
		}
	}

	public boolean VerifierCollision(Ligne li) {
		double collisionHautPos = y + rayon;
		double collisionBasPos = y - rayon;
		double yLigne = li.GetHauteurPointCercle();

		return yLigne <= collisionBasPos || yLigne >= collisionHautPos;
	}
}
