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

	NOM DU FICHIER :CPartie.h

	DESCRIPTION :	Déclaration des fonctions de la classe gérant la partie

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

	DATE DE CRÉATION : 2004-3-16

	MISES À JOUR :

===============================================================================*/
#ifndef CPARTIE_H
#define CPARTIE_H

#define NUM_BIRD_SOUNDS 6

#include <qstring.h>
#include <vector>
#include "CTerrain.h"
#include "CJoueur.h"
#include "CAnimation.h"

enum type_etatjeu { ETAT_PLACEMENTBALLE, //On place la balle sur le départ
		    ETAT_FRAPPEBALLE, //On choisit l'orientation/vitesse
		    ETAT_CALCULS, //La balle se déplace
		    ETAT_INACTIF, //Mode inactif (carte de pointage, etc.)
		    ETAT_REPLAY	};	

class CPartie {
public:
	CPartie();
	~CPartie();

	CTerrain* getTerrain();
 	void setTerrain(CTerrain*);

	int getTerrainCourant();
	void setTerrainCourant(int Terrain);
	int getJoueurCourant();
	void setJoueurCourant(int Joueur);
	type_etatjeu getEtatJeu();
	void setEtatJeu(type_etatjeu Etat);
	int getCoupCourant();
	void setCoupCourant(int Coup);

	bool JoueurSuivant();
	bool TerrainSuivant();
	bool TerrainPrecedent();
	void CoupSuivant();
	bool BallInHole();
	bool BallInWater();
	void AjoutPointage();

	void AfficheGL();
	void AfficheLigne();
	void AfficheBaton();
	
	bool ChargerParcours(QString Parcours, int NbTerrains);
	void SetJoueurs( std::vector< CJoueur > Joueurs );
	
	//Position de la souris
	CVector3f getMousePosition();
	void setMousePosition(CVector3f V);
	bool PlacerBalleSurDepart(float x, float y);
	bool ComparerPosition(CVector3f& DirTemp);

	const std::vector< CJoueur >& getJoueurs() const { return LesJoueurs; }
	const std::vector< CTerrain* >& getTerrains() const { return LesTerrains; }

	void Trier(void);
	void TrierTotal(void);

	static void ChargeTextures();
	static void DechargeTextures();
	
	static void ChargeSons();
	
	void PlayBirdSound();
	void PlayWaterSound();
	
	void UpdateAnimations();
	
	void setJoueOiseaux(bool Valeur) { JoueOiseaux = Valeur; }

private:
	static CPngTexture TexBaton;
	std::vector< CJoueur > LesJoueurs;
	std::vector< CTerrain* > LesTerrains;
	CTerrain* TDJ;
	int CoupCourant;
	int JoueurCourant; 
	int TerrainCourant;
	type_etatjeu EtatJeu;
	CVector3f PosSouris;
	static int LastBird;
	static int GameSource;
	static int WaterSource;
	static int BirdSoundsBuffer[NUM_BIRD_SOUNDS];
	static int WaterSoundBuffer;
	bool JoueOiseaux;
};
#endif //CPARTIE_H
