/*====================ÉCOLE POLYTECHNIQUE DE MONTRÉAL============================

	NOM DU FICHIER :CBalle.h

	DESCRIPTION :	Déclaration des fonctions de la classe Balle

	AUTEUR : Martin Bisson, Anne-Marie Buki, Mylene Denis & Jean-Francois Pérusse

	DATE DE CRÉATION : 2004-3-16

	MISES À JOUR :

===============================================================================*/
#ifndef CBALLE_H
#define CBALLE_H
#include "CVector3f.h"

class GLUquadric;
typedef GLUquadric GLUquadricObj;

#define NB_CALCS 20

class CBalle {
private:
	float coefRestitution;
	float coefAmortissement;
	CVector3f Pos;
	CVector3f DernierePosition;
	CVector3f Direction;
	CVector3f DerniereDirection;
	const float rayon;

	static GLUquadricObj *quadric;

public:
	bool SurTrou;

	CBalle(float coefRestitution = 0.9f, float coefAmortissement = 0.1f);
	CBalle(const CBalle& balle);
	~CBalle();
	void AfficheGL() const;

	void Avance();
	void Recule();
	bool StopBall();

	void setSurTrou(bool SurTrou)
	{
		this->SurTrou = SurTrou;
	}
	
	bool getSurTrou() { return SurTrou; }

	void setDernierePosition(CVector3f Position);
	CVector3f getDernierePosition();
	void setDerniereDirection(CVector3f Direction);
	CVector3f getDerniereDirection();

	float getCoefRestitution() { return coefRestitution; }
	float getCoefAmortissement() { return coefAmortissement; }
	void setPos(const CVector3f pos) {
		SurTrou = false;
		this->Pos = pos;
	}
	CVector3f getPos() const {
		return this->Pos;
	}
	void setDirection(const CVector3f dir) {
		this->Direction = dir;
		if (Direction.GetPosZ() != 0)
			Direction.setZ(0);
	}
	void setZ(float Z)
	{
	    Pos.setZ(Z);
	}
	CVector3f getDirection() const { return this->Direction; }
	float getRayon() const { return this->rayon; }
};
#endif //CBALLE_H
