X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIFlightPlan.cxx;h=13285885051d2d5ac6cef5515629e8673ed7f68e;hb=467513cbaf40a7e1bd4077d71b60eef6c881741a;hp=d3b042bbe4c31760aa520ef6906b406d9f622f11;hpb=7313b8f1dfed534bc73a0072f8d1542c3e8c9c08;p=flightgear.git diff --git a/src/AIModel/AIFlightPlan.cxx b/src/AIModel/AIFlightPlan.cxx index d3b042bbe..132858850 100644 --- a/src/AIModel/AIFlightPlan.cxx +++ b/src/AIModel/AIFlightPlan.cxx @@ -175,28 +175,20 @@ FGAIFlightPlan::FGAIFlightPlan(FGAIAircraft *ac, if (wpt->name == "END") wpt->finished = true; else wpt->finished = false; waypoints.push_back(wpt); - } - } - catch (const sg_exception &) { - SG_LOG(SG_GENERAL, SG_WARN, - "Error reading AI flight plan: "); - cerr << "Errno = " << errno << endl; - if (errno == ENOENT) - { - SG_LOG(SG_GENERAL, SG_WARN, "Reason: No such file or directory"); - } - } + } // of node loop + } catch (const sg_exception &e) { + SG_LOG(SG_GENERAL, SG_WARN, "Error reading AI flight plan: " << + e.getMessage() << " from " << e.getOrigin()); } - else - { + } else { // cout << path.str() << endl; // cout << "Trying to create this plan dynamically" << endl; // cout << "Route from " << dep->id << " to " << arr->id << endl; time_t now = time(NULL) + fgGetLong("/sim/time/warp"); time_t timeDiff = now-start; leg = 1; - /* - if ((timeDiff > 300) && (timeDiff < 1200)) + + if ((timeDiff > 60) && (timeDiff < 1200)) leg = 2; else if ((timeDiff >= 1200) && (timeDiff < 1500)) leg = 3; @@ -204,14 +196,15 @@ FGAIFlightPlan::FGAIFlightPlan(FGAIAircraft *ac, leg = 4; else if (timeDiff >= 2000) leg = 5; - */ + /* if (timeDiff >= 2000) leg = 5; - + */ SG_LOG(SG_GENERAL, SG_INFO, "Route from " << dep->getId() << " to " << arr->getId() << ". Set leg to : " << leg << " " << ac->getTrafficRef()->getCallSign()); wpt_iterator = waypoints.begin(); + bool dist = 0; create(ac, dep,arr, leg, alt, speed, lat, lon, - firstLeg, radius, fltType, acType, airline); + firstLeg, radius, fltType, acType, airline, dist); wpt_iterator = waypoints.begin(); //cerr << "after create: " << (*wpt_iterator)->name << endl; //leg++; @@ -419,6 +412,7 @@ void FGAIFlightPlan::setLeadDistance(double speed, double bearing, //lead_distance = turn_radius * sin(leadInAngle * SG_DEGREES_TO_RADIANS); lead_distance = turn_radius * tan((leadInAngle * SG_DEGREES_TO_RADIANS)/2); + /* if ((lead_distance > (3*turn_radius)) && (current->on_ground == false)) { // cerr << "Warning: Lead-in distance is large. Inbound = " << inbound // << ". Outbound = " << outbound << ". Lead in angle = " << leadInAngle << ". Turn radius = " << turn_radius << endl; @@ -428,7 +422,7 @@ void FGAIFlightPlan::setLeadDistance(double speed, double bearing, if ((leadInAngle > 90) && (current->on_ground == true)) { lead_distance = turn_radius * tan((90 * SG_DEGREES_TO_RADIANS)/2); return; - } + }*/ } void FGAIFlightPlan::setLeadDistance(double distance_ft){ @@ -501,3 +495,20 @@ int FGAIFlightPlan::getRouteIndex(int i) { else return 0; } + + +double FGAIFlightPlan::checkTrackLength(string wptName) { + // skip the first two waypoints: first one is behind, second one is partially done; + double trackDistance = 0; + wpt_vector_iterator wptvec = waypoints.begin(); + wptvec++; + wptvec++; + while ((wptvec != waypoints.end()) && ((*wptvec)->name != wptName)) { + trackDistance += (*wptvec)->trackLength; + wptvec++; + } + if (wptvec == waypoints.end()) { + trackDistance = 0; // name not found + } + return trackDistance; +} \ No newline at end of file