//////////////////////////////////////////////////////////////////////// /// /// @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"); } } }