コード例 #1
0
/** The transition choose the most fitted state at the moment of the race. */
void
FSMDriver3::transition(CarState &cs) {
    DrivingState *state = current_state;

    if(gameTicks <= 10000){
        distRaced = cs.getDistRaced();
        ticks_on_inside_track = inside_track->get_ticks_in_state();
        ticks_on_stuck = stuck->get_ticks_in_state();
        ticks_on_out_of_track = out_of_track->get_ticks_in_state();
        damage = cs.getDamage();
        gameTicks += 1;
    }/*
    else if(gameTicks == 10000){
        distRaced = cs.getDistRaced();
        gameTicks+=1;
        ticks_on_inside_track = inside_track->get_ticks_in_state();
        ticks_on_stuck = stuck->get_ticks_in_state();
        ticks_on_out_of_track = out_of_track->get_ticks_in_state();
        damage = cs.getDamage();
    }*/

    setTrackType();

    if(stuck->isStuck(cs)) {
        state = stuck;
    } else {
        if (cs.getTrack(1) > 0)
            state = inside_track;
        else {
            state = out_of_track;
        }
    }

    if (current_state != state) changeTo(state);
}
コード例 #2
0
TrackSpiralArcSpiral::TrackSpiralArcSpiral(TrackElementSpiral *inSpiral, TrackElementArc *arc, TrackElementSpiral *outSpiral)
    : TrackComposite()
    , inSpiral_(inSpiral)
    , arc_(arc)
    , outSpiral_(outSpiral)
    , trackSpArcSChanges_(0x0)
    , validParameters_(false)
{
    // Type //
    //
    setTrackType(TrackComponent::DTT_SPARCS);

    // Transform //
    //
    double sHeading = inSpiral_->getLocalHeading(inSpiral_->getSStart());
    setLocalTransform(inSpiral_->getLocalPoint(inSpiral_->getSStart()), sHeading);

    inSpiral_->setLocalTransform(0.0, 0.0, 0.0); // identity matrix
    arc_->setLocalTransform(getLocalTransform().inverted().map(arc_->getLocalPoint(arc_->getSStart())), arc_->getLocalHeading(arc_->getSStart()) - sHeading);
    outSpiral_->setLocalTransform(getLocalTransform().inverted().map(outSpiral_->getLocalPoint(outSpiral_->getSStart())), outSpiral_->getLocalHeading(outSpiral_->getSStart()) - sHeading);

    // Composite //
    //
    addTrackComponent(inSpiral);
    addTrackComponent(arc);
    addTrackComponent(outSpiral);

    // Parameters //
    //
    pa_ = new SpArcSParameters(outSpiral_->getLocalPoint(outSpiral_->getSEnd()), outSpiral_->getLocalHeadingRad(outSpiral_->getSEnd()), 1.0);

    pa_->setFactor(calcFactor());

    if (!pa_->isValid()) // does also initialize the parameters
    {
        validParameters_ = false;
        qDebug() << "WARNING 1004261530! Loaded TrackSpiralArcSpiral is not valid!";
    }
    else
    {
        validParameters_ = true;
    }
}
コード例 #3
0
TrackSpiralArcSpiral::TrackSpiralArcSpiral(const QPointF &startPos, const QPointF &endPos, double startHeadingDeg, double endHeadingDeg, double factor)
    : TrackComposite()
    , inSpiral_(NULL)
    , arc_(NULL)
    , outSpiral_(NULL)
    , trackSpArcSChanges_(0x0)
    , validParameters_(false)
{
    // Type //
    //
    setTrackType(TrackComponent::DTT_SPARCS);

    // Track //
    //
    inSpiral_ = new TrackElementSpiral(0.0, 0.0, 0.0, 0.0, 49.6551724137931, 0.0, 0.003448275862068966);
    arc_ = new TrackElementArc(49.61879011646819, 1.416290576997416, 0.0856123662306776 * 360.0 / (2.0 * M_PI), 49.65517241379311, 124.3448275876508, 0.003448275862068966);
    outSpiral_ = new TrackElementSpiral(167.5020491350196, 37.88185581403775, 0.5143876337743012 * 360.0 / (2.0 * M_PI), 174, 49.6551724137931, 0.003448275862068966, 0.0);

    addTrackComponent(inSpiral_);
    addTrackComponent(arc_);
    addTrackComponent(outSpiral_);

    setLocalTransform(startPos, startHeadingDeg);

    // Parameters //
    //
    pa_ = new SpArcSParameters(outSpiral_->getLocalPoint(outSpiral_->getSEnd()), outSpiral_->getLocalHeadingRad(outSpiral_->getSEnd()), factor);
    //	pa_->setFactor(calcFactor());

    setGlobalPointAndHeading(endPos, endHeadingDeg, false);

    if (pa_->isValid())
    {
        validParameters_ = true;
    }
}