X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIFlightPlanCreateCruise.cxx;h=4f714cc8cd3f13af267ceb0a976e5aa3d0108ded;hb=de35bbe4ed350bc3e90f66a11039e983587c5ea0;hp=0af5ed1fa7385a7e68f4c31412500d97157ce6cb;hpb=b452234cb203c3336cfc5299be8ff4789a0eb416;p=flightgear.git diff --git a/src/AIModel/AIFlightPlanCreateCruise.cxx b/src/AIModel/AIFlightPlanCreateCruise.cxx index 0af5ed1fa..4f714cc8c 100755 --- a/src/AIModel/AIFlightPlanCreateCruise.cxx +++ b/src/AIModel/AIFlightPlanCreateCruise.cxx @@ -18,20 +18,25 @@ * * **************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include +#endif + #include #include #include "AIFlightPlan.hxx" -#include -#include +#include "AIAircraft.hxx" #include #include #include +#include #include #include -SG_USING_STD(iostream); +using std::iostream; void FGAIFlightPlan::evaluateRoutePart(double deplat, double deplon, @@ -75,15 +80,10 @@ void FGAIFlightPlan::evaluateRoutePart(double deplat, } } //cerr << "1"<< endl; - //SGGeoc geoc = SGGeoc::fromCart(SGVec3d(newPos[0], newPos[1], newPos[2])); - - //double midlat = geoc.getLatitudeDeg(); - //double midlon = geoc.getLongitudeDeg(); - - Point3D temp = sgCartToPolar3d(Point3D(newPos[0], newPos[1],newPos[2])); - double midlat = temp.lat() * SG_RADIANS_TO_DEGREES; - double midlon = temp.lon() * SG_RADIANS_TO_DEGREES; + SGGeoc geoc = SGGeoc::fromCart(SGVec3d(newPos[0], newPos[1], newPos[2])); + double midlat = geoc.getLatitudeDeg(); + double midlon = geoc.getLongitudeDeg(); prevNode = tmpNode; tmpNode = globals->get_airwaynet()->findNearestNode(midlat, midlon); @@ -309,64 +309,22 @@ void FGAIFlightPlan::createCruise(bool firstFlight, FGAirport *dep, * Note that this is the original version that does not * do any dynamic route computation. ******************************************************************/ -void FGAIFlightPlan::createCruise(bool firstFlight, FGAirport *dep, +void FGAIFlightPlan::createCruise(FGAIAircraft *ac, bool firstFlight, FGAirport *dep, FGAirport *arr, double latitude, double longitude, double speed, double alt, const string& fltType) { - double wind_speed; - double wind_heading; - double heading; - double lat, lon, az; - double lat2, lon2, az2; - double azimuth; waypoint *wpt; - - wpt = new waypoint; - wpt->name = "Cruise"; //wpt_node->getStringValue("name", "END"); - wpt->latitude = latitude; - wpt->longitude = longitude; - wpt->altitude = alt; - wpt->speed = speed; - wpt->crossat = -10000; - wpt->gear_down = false; - wpt->flaps_down= false; - wpt->finished = false; - wpt->on_ground = false; - wpt->routeIndex = 0; + wpt = createInAir(ac, "Cruise", SGGeod::fromDeg(longitude, latitude), alt, speed); waypoints.push_back(wpt); - string rwyClass = getRunwayClassFromTrafficType(fltType); - arr->getDynamics()->getActiveRunway(rwyClass, 2, activeRunway); - if (!(globals->get_runways()->search(arr->getId(), - activeRunway, - &rwy))) - { - SG_LOG(SG_INPUT, SG_ALERT, "Failed to find runway " << - activeRunway << - " at airport " << arr->getId()<< " of class " << rwyClass << " (5)"); - exit(1); - } - heading = rwy._heading; - azimuth = heading + 180.0; - while ( azimuth >= 360.0 ) { azimuth -= 360.0; } - + double heading = ac->getTrafficRef()->getCourse(); + arr->getDynamics()->getActiveRunway(rwyClass, 2, activeRunway, heading); + rwy = arr->getRunwayByIdent(activeRunway); + // begin descent 110km out + SGGeod beginDescentPoint = rwy->pointOnCenterline(-110000); - geo_direct_wgs_84 ( 0, rwy._lat, rwy._lon, azimuth, - 110000, - &lat2, &lon2, &az2 ); - wpt = new waypoint; - wpt->name = "BOD"; - wpt->latitude = lat2; - wpt->longitude = lon2; - wpt->altitude = alt; - wpt->speed = speed; - wpt->crossat = alt; - wpt->gear_down = false; - wpt->flaps_down= false; - wpt->finished = false; - wpt->on_ground = false; - wpt->routeIndex = 0; + wpt = createInAir(ac, "BOD", beginDescentPoint, alt, speed); waypoints.push_back(wpt); }