Ejemplo n.º 1
0
////////////////////////////////////////////////////////////////////////
///
/// @fn VisiteurNoeudTest::testSelectionObjet()
///
/// Test pour la sélection d'objets
///
///
/// @return void
///
////////////////////////////////////////////////////////////////////////
void VisiteurNoeudTest::testSelectionObjet()
{
	RazerGameTree* arbre = new RazerGameTree(NULL,999,999);
    NoeudAbstrait	*noeud1 = arbre->creerNoeud( RAZER_KEY_MALLET ),
                    *noeud2 = arbre->creerNoeud( RAZER_KEY_PORTAL ),
                    *noeud3 = arbre->creerNoeud( RAZER_KEY_PORTAL ),
                    *noeud4 = arbre->creerNoeud( RAZER_KEY_MALLET ),
                    *noeud5 = arbre->creerNoeud( RAZER_KEY_PUCK );

	arbre->add(noeud1);
	arbre->add(noeud2);
	arbre->add(noeud3);
	arbre->add(noeud4);
	arbre->add(noeud5);
	arbre->setCanBeSelected(false);
	noeud1->setCanBeSelected(true);
	noeud2->setCanBeSelected(true);
	noeud3->setCanBeSelected(true);
	noeud4->setCanBeSelected(true);
	noeud5->setCanBeSelected(true);
	noeud1->setSelection(false);
	noeud2->setSelection(false);
	noeud3->setSelection(false);
	noeud4->setSelection(false);
	noeud5->setSelection(false);

	// assignation de position tres eloigné pour éviter que les boites de collisions se touchent
	noeud1->setPosition(Vecteur3(-500.0,500.0,0.0));
	noeud2->setPosition(Vecteur3(500.0,500.0,0));
	noeud3->setPosition(Vecteur3(0.0,0.0,0.0));
	noeud4->setPosition(Vecteur3(-500.0,-500.0,0.0));
	noeud5->setPosition(Vecteur3(500.0,-500.0,0.0));

	VisiteurSelection v(Vecteur2(-500.0,500.0),Vecteur2(-500.0,500.0),false);
	CPPUNIT_ASSERT(v.mToggleSelection == false);

	arbre->acceptVisitor(v);
	v.faireSelection();

	CPPUNIT_ASSERT(noeud1->IsSelected() == true);
	CPPUNIT_ASSERT(noeud2->IsSelected() == false);
	CPPUNIT_ASSERT(noeud3->IsSelected() == false);
	CPPUNIT_ASSERT(noeud4->IsSelected() == false);
	CPPUNIT_ASSERT(noeud5->IsSelected() == false);
	noeud1->setSelection(false);

	VisiteurSelection v2(Vecteur2(-550.0,450.0),Vecteur2(550.0,550.0),true);
	CPPUNIT_ASSERT(v2.mToggleSelection == true);

	arbre->acceptVisitor(v2);
	v2.faireSelection();
	CPPUNIT_ASSERT(noeud1->IsSelected() == true);
	CPPUNIT_ASSERT(noeud2->IsSelected() == true);
	CPPUNIT_ASSERT(noeud3->IsSelected() == false);
	CPPUNIT_ASSERT(noeud4->IsSelected() == false);
	CPPUNIT_ASSERT(noeud5->IsSelected() == false);

	arbre->empty();
	delete arbre;
}
Ejemplo n.º 2
0
Vecteur2 CameraPinhole::mondeVersImage(const Vecteur3 &P) const
{
	// UVW : Dans le repere camera
	Vecteur3 dist = P-_position;
	Vecteur3 UVW = _mondeVersCamera*(dist);
	// Distance focale
	reel distance = 1;
	// UVW' : Projete dans le repere camera
	Vecteur3 UVW_ = Vecteur3(UVW._x*distance/UVW._z, UVW._y*distance/UVW._z, distance);
	// uv' : Projete dans le plan image
	Vecteur2 uv_ = Vecteur2(UVW_._x/_dU, UVW_._y/_dV);
	// xy : Projete dans les coordonnees image
	Vecteur2 xy = Vecteur2(int((uv_._u+0.5)*(1./_invNbX)), int((uv_._v+0.5)*(1./_invNbY)));
	return xy;
}
Ejemplo n.º 3
0
////////////////////////////////////////////////////////////////////////
///
/// @fn SourisEtatAjout::SourisEtatAjout()
///
/// Ce constructeur appelle le constructeur de base, cree un noeud de base afin de voir un affichage
///
/// @param[in] GestionnaireEtatAbstrait* : contexte.
///
/// @return Aucune (constructeur).
///
////////////////////////////////////////////////////////////////////////
SourisEtatAjout::SourisEtatAjout(FieldModificationStrategyType modifType): 
    SourisEtatTransformation(modifType)
{
    FieldModificationStrategyEvent event;
    event.mPosition = Vecteur2(0,0);
    event.mType = FIELD_MODIFICATION_EVENT_CLICK;
    FacadeModele::getInstance()->getEditionField()->BeginModification(mModifType,event);
}
Ejemplo n.º 4
0
////////////////////////////////////////////////////////////////////////
///
/// @fn void VisiteurNoeudTest::testDeplacerObjet()
///
/// Cas de test: Déplacement d'objets.
///
/// @return Aucune.
///
////////////////////////////////////////////////////////////////////////
void VisiteurNoeudTest::testDeplacerObjet()
{

    NoeudAbstrait* n = new NoeudAbstrait(RAZER_KEY_NONE);
	n->setPosition(Vecteur3(0.0,0.0));
	n->setSelection(true);
	VisiteurDeplacement v(Vecteur2(25.0,-10.0));
	n->acceptVisitor(v);
	CPPUNIT_ASSERT(n->getPosition() == Vecteur3(25.0,-10.0));
}
Ejemplo n.º 5
0
////////////////////////////////////////////////////////////////////////
///
/// @fn void AIRenforcementTest::testDirectionPhaseDeplacement()
///
/// Test de la direction lorsque la rondelle traverse la ligne du milieu, s'il commence à se déplacer
///
///
/// @return void
///
////////////////////////////////////////////////////////////////////////
void AIRenforcementTest::testDirectionPhaseDeplacement()
{
    // Place le maillet
     NoeudMaillet* wMaillet = partie->getField()->getRightMallet();
     wMaillet->setPosition(Vecteur3(55,0,0));
    // Place la rondelle
    NoeudRondelle* wPuck = partie->getField()->getPuck();
    wPuck->setPosition(Vecteur3(1,0,0));
    wPuck->modifierVelocite(Vecteur3(150,0,0));
    
    // Setup strat
    auto joueurVirtuel = (std::dynamic_pointer_cast<PlayerReinforcementAI>(wMaillet->getPlayer()));
    AIMailletRenforcement* aimaillet = (AIMailletRenforcement*)joueurVirtuel->getAiMaillet();
    
    aimaillet->changerStrat(OFFENSIVE_LIGNE_DROITE);
    AIStratOffensiveRenforcement* strat = ((AIStratOffensiveRenforcement*)aimaillet->getStrategie());
    //strat->setMalletTargetPos(Vecteur2()); PAS A SETTER
    strat->setPointImpact(Vecteur2(50,0));
    strat->setPointVise(Vecteur2(-150,0));
    strat->setTimeBeforeImpact(0); // pas utilisé pour le moment
    joueurVirtuel->obtenirDirectionAI(wMaillet);
}
Ejemplo n.º 6
0
////////////////////////////////////////////////////////////////////////
///
/// @fn VisiteurCollision::visiter(NoeudMaillet& noeud)
///
/// Fonction qui permet de taiter la collision entre la
///	rondelle et les maillets
///
/// @param[in] typeNoeud : Le type du noeud.
///
/// @return Aucune
///
////////////////////////////////////////////////////////////////////////
void VisiteurCollision::visiter(NoeudMaillet& noeud)
{
	rondelleQuitte_ = false;

	static Vecteur2 forceCollision; // vecteur de la force de la collision en X,Y
	static Vecteur3 vitesseRondelle; // vitesse de la rondelle
	static Vecteur3 posMaillet; // position du maillet
	posMaillet = noeud.obtenirPositionRelative();
	vitesseRondelle = rondelle_->obtenirVitesse();

	// calcul de la force de collision
	forceCollision = aidecollision::calculerCollisionCercle(
		Vecteur2(posMaillet[X], posMaillet[Y]), // position du maillet
		noeud.obtenirRayon(), // rayon du maillet
		Vecteur2(rondelle_->obtenirPositionRelative()[X], rondelle_->obtenirPositionRelative()[Y]), // position de la rondelle
		rondelle_->obtenirRayon(), // rayon de la rondelle
		noeud.obtenirCoefficientRebondissement(), 0.01, // coefficient de rebondissement et d'amortissement
		Vecteur2(vitesseRondelle[X], vitesseRondelle[Y])); // vitesse de la rondelle

	if (forceCollision[X] != 0 || forceCollision[Y] != 0) // vérifier qu'il y a bien une collision
	{
		for (int i = 0; i < 2; ++i) // faire varier la vitesse de la rondelle selon la force
			vitesseRondelle[i] += forceCollision[i];
		// jouer un son de collision
		GestionnaireSon::obtenirInstance()->jouerSonCollision(ArbreRenduINF2990::NOM_MAILLET);

		rondelle_->modifierVitesse(vitesseRondelle);

		// s'il y a une collision entre la rondelle et les bordures de la table,
		// rondelleQuitte_ indiquera au maillet qu'il tente de pouser la rondelle hors de la table
		// ce qui appliquera une force sur le maillet contraire à son déplacement
		if (rondelle_->animerCollision())
			rondelleQuitte_ = true;
		else
			rondelle_->calculerRotation(Vecteur3(forceCollision[X], forceCollision[Y], 0.0));
	}
}
Ejemplo n.º 7
0
Vecteur2 CameraPinhole::imageVersEcran(int x, int y) const
{
	return Vecteur2(x*_invNbX - 0.5, y*_invNbY - 0.5);
}
Ejemplo n.º 8
0
   ////////////////////////////////////////////////////////////////////////
   ///
   /// @fn void VuePerspectiveCiel::deplacerZ(float deplacement)
   ///
   /// Ne fait rien, car se déplacer dans l'axe de la profondeur n'a pas
   /// vraiment de signification avec une vue orthogonale.
   ///
   /// @param[in]  deplacement : Déplacement selon l'axe Z.
   ///
   /// @return Aucune.
   ///
   ////////////////////////////////////////////////////////////////////////
   void VuePerspectiveCiel::deplacerZ(float deplacement)
   {
	   Vecteur2 deplacementVirtuel = projection_.convertirDistanceClotureAVirtuelle(Vecteur2(deplacement, 0));
	   obtenirCamera().deplacerZ(deplacementVirtuel[0], 0);
   }