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

	NOM DU FICHIER :CEditeurObjet.cpp

	DESCRIPTION :	Ce fichier contient l'implémentation du générateur dynamique 
					de CEditeurObjet et des fonctions de CEditeurObjet

	AUTEUR : Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse

	DATE DE CRÉATION : 2004-3-17

	MISES À JOUR :

===============================================================================*/
#include "CEditeurObjet.h"
#include "CEditeurTrou.h"
#include "CEditeurDepart.h"
#include "CEditeurTrappe.h"
#include "CEditeurTroudeau.h"
#include "CEditeurBande.h"




/*------------------------------------------------------------------
  Fonction :	CEditeurObjet::CreerObjet

  Description :	Fonction qui crée un objet du type qu'on lui passe

  Paramètres :
	 type_editeurobjet Type : Type de l'objet que l'on veut créer
	 const vector2f& Pos : Position de l'objet que l'on veut créer

  Valeur retournée :	CEditeurObjet* : Pointeur vers l'objet nouvellement alloué

  Par : 2004-3-17 Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse
  MAJ: 
------------------------------------------------------------------*/
CEditeurObjet* CEditeurObjet::CreerObjet(type_editeurobjet Type, const vector2f& Pos)
{
    switch (Type)
    {
    case (EDITEUROBJET_NONE):
    case (EDITEUROBJET_END):
    default:
	return 0;
	break;
    case (EDITEUROBJET_TROU):
	return new CEditeurTrou(Pos);
	break;
    case (EDITEUROBJET_DEPART_UP):
    case (EDITEUROBJET_DEPART_RIGHT):
    case (EDITEUROBJET_DEPART_DOWN):
    case (EDITEUROBJET_DEPART_LEFT):
	return new CEditeurDepart(Pos, Type);
	break;
    case (EDITEUROBJET_TRAPPE):
	return new CEditeurTrappe(Pos);
	break;
    case (EDITEUROBJET_TROUDEAU):
	return new CEditeurTroudeau(Pos);
    case (EDITEUROBJET_BANDE_N):
    case (EDITEUROBJET_BANDE_NE):
    case (EDITEUROBJET_BANDE_E):
    case (EDITEUROBJET_BANDE_SE):
	return new CEditeurBande(Pos, Type);
	break;
    }
}





/*------------------------------------------------------------------
  Fonction :	CEditeurObjet::GetLeft

  Description :	Fonction qui retourne la position la plus à gauche de l'objet

  Paramètres :

  Valeur retournée :	float : Valeur la plus à gauche de l'objet

  Par : 2004-3-17 Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse
  MAJ: 
------------------------------------------------------------------*/
float CEditeurObjet::GetLeft() const
{
    return this->Position.GetPosX() - (this->Width/TAILLE_TUILE)/2.0;
}




/*------------------------------------------------------------------
  Fonction :	CEditeurObjet::GetRight

  Description :	Fonction qui retourne la position la plus à droite de l'objet

  Paramètres :

  Valeur retournée :	float : Valeur la plus à droite de l'objet

  Par : 2004-3-17 Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse
  MAJ: 
------------------------------------------------------------------*/
float CEditeurObjet::GetRight() const
{
    return this->Position.GetPosX() + (this->Width/TAILLE_TUILE)/2.0;
}




/*------------------------------------------------------------------
  Fonction :	CEditeurObjet::GetTop

  Description :	Fonction qui retourne la position la plus en haut de l'objet

  Paramètres :

  Valeur retournée :	float : Valeur la plus en haut de l'objet

  Par : 2004-3-17 Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse
  MAJ: 
------------------------------------------------------------------*/
float CEditeurObjet::GetTop() const
{
    return this->Position.GetPosY() + (this->Height/TAILLE_TUILE)/2.0;
}




/*------------------------------------------------------------------
  Fonction :	CEditeurObjet::GetBottom

  Description :	Fonction qui retourne la position la plus basse de l'objet

  Paramètres :

  Valeur retournée :	float : Valeur la plus basse de l'objet

  Par : 2004-3-17 Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse
  MAJ: 
------------------------------------------------------------------*/
float CEditeurObjet::GetBottom() const
{	
    return this->Position.GetPosY() - (this->Height/TAILLE_TUILE)/2.0;
}




/*------------------------------------------------------------------
  Fonction :	CEditeurObjet::MouseOverRectangle

  Description :	Cette fonction détermine si la souris est au-dessus 
				du rectangle formé par l'objet (qui est aussi le 
				rectangle d'affichage)

  Paramètres :
	 float MouseX : Position en X de la souris
	 float MouseY : Position en Y de la souris

  Valeur retournée :	bool : vrai si la souris est au-dessus du rectangle formée par l'objet

  Par : 2004-3-17 Martin Bisson, Anne-Marie Buki, Mylène Denis & Jean-François Pérusse
  MAJ: 
------------------------------------------------------------------*/
bool CEditeurObjet::MouseOverRectangle(float MouseX, float MouseY) const
{
    return (MouseX > GetLeft() && MouseX <= GetRight() && MouseY > GetBottom() && MouseY <= GetTop());
}
