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
	// Hérite de la classe ObjetGraphique
	// Ne pas oublier qu'il y a des propriétés et méthodes reçues par l'héritage

	
	//-------------------------------------------------------------------------
	// PROPRIETES
	//-------------------------------------------------------------------------	
	protected double rayon = 30;	
	protected double depY = 0; // déplacement
	
	// début et fin de l'arc, en degrés
	protected double debut = 0;
	protected double fin = 360;
	
	// Est-ce que le joueur est en train d'appuyer sur "up"
	protected boolean montee = false;
	
	// Vitesse du cercle
	protected double vitesse = -1.0;
	
	// Un pas pour l'application des forces, permet de régler
	// un peu la jouabilité
	protected double pas = 0.2;
	
	// Valeur de la force (norme) appliquée lorsque le joueur appuie sur up
	protected double impulsion = 25;
	
	
	//-------------------------------------------------------------------------
	// METHODES
	//-------------------------------------------------------------------------
	
	//-------------------------------------------------------------------------
	// Constructeurs de la classe
	//-------------------------------------------------------------------------	
	public Cercle(){
		x=400;
		y=200;
	}
	
	public Cercle(double debutArc, double finArc){
		x=400;
		y=200;
		debut = debutArc;
		fin = finArc;
	}
	
	
	//-------------------------------------------------------------------------
	// Méthode d'accès en lecture au rayon, peut être utile
	// par exemple pour la classe qui vérifiera si la ligne passe dans le 
	// cercle
	//-------------------------------------------------------------------------	
	public double getRayon(){
		return rayon;
	}
	
	//-------------------------------------------------------------------------
	// Méthode qui retourne la position du cercle en y 
	// (utile pour la classe qui vérifiera si la ligne passe dans le cercle)
	//-------------------------------------------------------------------------
	@Override
	public double getY(){
		return y;
	}
	
	//-------------------------------------------------------------------------
	// Méthode qui note que up a été appuyée
	// -> le booléen permet de ne plus être tributaire
	//    de la vitesse de répétition du clavier
	//-------------------------------------------------------------------------		
	public void Monter(){	
		montee = true;
	}
	
	
	//-------------------------------------------------------------------------
	// Méthode qui note que up a été relâchée
	//-------------------------------------------------------------------------	
	public void ArreterMonter(){
		montee = false;
	}
	

	
	//-------------------------------------------------------------------------	
	// Redéfinition de la méthode Afficher, spécifiquement pour la classe 
	//-------------------------------------------------------------------------	
	@Override
	void Afficher(Graphics g) {
		// choix de la couleur et de l'épaisseur 
		Graphics2D g2D = (Graphics2D) g;
		g2D.setStroke(new BasicStroke(5.0f));
		g.setColor(this.couleur);

		// dessin de l'arc
		g2D.draw(new Arc2D.Double(x-rayon/2, y-rayon, rayon, rayon*2, debut, fin, Arc2D.OPEN));
	}


	//-------------------------------------------------------------------------	
	// Redéfinition de la méthode Animer, spécifiquement pour la classe 
	//-------------------------------------------------------------------------	
	@Override
	void Animer() {
		// pas est à prendre comme un "delta t"
		
		// chute libre
		vitesse = vitesse + 9.81 * pas;

		// impulsion
		if (montee==true) {
			vitesse = vitesse - impulsion *pas;
		}
		
		depY = 1/2 * 9.81 + vitesse * pas;
		
		if (depY<-10) {
			depY=-10;
		}
		if (depY>10){
			depY =10;
		}
		y+=depY;
	}
	
	

	
}
