////////////////////////////////////////////////////////////////////////
///
/// @fn void VisiteurModifierProprieteNoeud::visiterNoeudMuret( NodeWallAbstract* noeud )
///
/// Visiteur du noeud muret.
///
/// @param[in] NodeWallAbstract * noeud :  noeud a visiter.
///
/// @return void
///
////////////////////////////////////////////////////////////////////////
void VisiteurModifierProprieteNoeud::visiterNoeudMuret( NodeWallAbstract* noeud )
{

	/// On applique le nouveau coefficient de rebond
	if(noeud->IsSelected())
	{
		if(coefRebond_!=-1)
			noeud->setReboundRatio(coefRebond_);		
		if(unSeulSelect_)
		{
			const Vecteur3& oldPos = noeud->getPosition();
			noeud->setPosition(position_);
			float oldAngle = noeud->getAngle();
			noeud->setAngle((float)rotation_);
			Vecteur3 oldEchelle; noeud->getScale(oldEchelle);
			noeud->setScale(Vecteur3(echelle_*10, oldEchelle[VY], oldEchelle[VZ]));
            Terrain* field = noeud->getField();
			// Si on arrive pas à assigner les nouvelles positions on annule les modifications et l'indique à l'usager
			if(!field || !field->FixCollindingNode(noeud,20))
			{
				noeud->setPosition(oldPos);
				noeud->setAngle(oldAngle);
				noeud->setScale(oldEchelle);
				utilitaire::afficherErreur("Nouvelles propriétés du Muret ne sont pas valides");
			}
		}
	}
    visiterNoeudComposite(noeud);
}
void VisiteurModifierProprieteNoeud::visiterNoeudNeutre( NoeudAbstrait* noeud )
{
	if(unSeulSelect_ && noeud->IsSelected())
	{
		/// On fait le deplacement contenu dans position_ par rapport à l'origine
		/*Vecteur3 deplacement = ((position_.convertir<3>())-(noeud->getPosition()));
		VisiteurDeplacement visiteurDeplacement(deplacement,true);
		noeud->acceptVisitor(visiteurDeplacement);*/
		const Vecteur3& oldPos = noeud->getPosition();
		noeud->setPosition(position_);

		float oldAngle = noeud->getAngle();
		/// On applique la nouvelle rotation
		VisiteurRotation rotationAFaire((float)rotation_,position_);
		noeud->acceptVisitor(rotationAFaire);

		Vecteur3 oldEchelle; noeud->getScale(oldEchelle);


		if(noeud->getKey() == RAZER_KEY_PORTAL)
			noeud->setScale(Vecteur3(echelle_, echelle_, 1));
		else
			noeud->setScale(Vecteur3(echelle_, echelle_, echelle_));


		noeud->updateMatrice();
        Terrain* field = noeud->getField();
		/// On regle les nouvelles collision créé
        if(!field || !field->FixCollindingNode(noeud,20))
		{
			noeud->setPosition(oldPos);
			noeud->setAngle(oldAngle);
			noeud->setScale(oldEchelle);
			noeud->updateMatrice();
			utilitaire::afficherErreur("Nouvelles propriétés du noeud ne sont pas valides");
		}
	}
}