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