/** cherche à éviter une unité */ Vector Vehicule::evade(Vehicule& target) { Vector diff = target.getPosition() - m_position; float distance = diff.norme(); float anticipation_time=0; if(target.getVelocity().norme()>0) anticipation_time = distance / target.getVelocity().norme(); Vector futur_position = target.getPosition() + (target.getVelocity()*anticipation_time/2.f); return flee(futur_position); }
/** cherche à attrapper une unité */ Vector Vehicule::pursue(Vehicule& target, const float& offset) { Vector diff = target.getPosition() - m_position; float distance = diff.norme(); float anticipation_time=0; if(target.getVelocity().norme()>0) anticipation_time = distance / target.getVelocity().norme(); Vector futur_position = target.getPosition() + (target.getVelocity()*anticipation_time/2.f); return seek(futur_position, offset); }
std::list<Vehicule> Carrefour::findVehiculeByPosition(Position * p) { std::list<Vehicule> vehicules; std::list<Vehicule *>::iterator it; for (it = this->objetRoutes.begin() ; it != this->objetRoutes.end() ; it++) { Vehicule * objr = (Vehicule *) *it; if (objr->getPosition() == p) { vehicules.push_back(*objr); } } return vehicules; }
void Carrefour::getConfiguration(Position * p) { QWidget * configWidget = new QWidget(); this->config->setQWidget(configWidget); int taille = 50; std::list<Route *>::iterator itRoutes; for (itRoutes = this->routes.begin() ; itRoutes != this->routes.end() ; itRoutes++) { Route * route = (Route *) *itRoutes; if (*(route->getPosition()) == *p) { this->config->setRoute(route); QLabel * label = new QLabel("Route", configWidget); label->move(200, taille); taille += 50; } } std::list<Vehicule *>::iterator itVehicule; for (itVehicule = this->objetRoutes.begin() ; itVehicule != this->objetRoutes.end() ; itVehicule++) { Vehicule * vehicule = (Vehicule *) *itVehicule; if (*(vehicule->getPosition()) == *p) { this->config->setVehicule(vehicule); QLabel * label = new QLabel(QString::fromStdString(vehicule->getType()), configWidget); label->move(200, taille); taille += 50; QLabel * labelPositionArrivee = new QLabel("Position d'arrivee", configWidget); labelPositionArrivee->move(50, taille); QLabel * labelX = new QLabel("X : ", configWidget); labelX->move(150, taille); QTextEdit * xTextEdit = new QTextEdit(configWidget); xTextEdit->move(180, taille); xTextEdit->setFixedSize(50, 30); this->config->setXTextEdit(xTextEdit); QLabel * labelY = new QLabel("Y : ", configWidget); labelY->move(250, taille); QTextEdit * yTextEdit = new QTextEdit(configWidget); yTextEdit->move(280, taille); yTextEdit->setFixedSize(50, 30); this->config->setYTextEdit(yTextEdit); taille += 50; QLabel * labelNbVehicule = new QLabel("Nb vehicule : ", configWidget); labelNbVehicule->move(50, taille); QTextEdit * nbVehiculeTextEdit = new QTextEdit(configWidget); nbVehiculeTextEdit->move(150, taille); nbVehiculeTextEdit->setFixedSize(50, 30); taille += 50; } } QPushButton * valideButton = new QPushButton("valide", configWidget); QObject::connect(valideButton, SIGNAL(clicked()), this, SLOT(valideConfig())); valideButton->move(100, taille); QPushButton * annuleButton = new QPushButton("annule", configWidget); QObject::connect(annuleButton, SIGNAL(clicked()), this, SLOT(annuleConfig())); annuleButton->move(300, taille); configWidget->show(); }