Beispiel #1
0
/**
    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);
}
Beispiel #2
0
/**
    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();
}