X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIFlightPlanCreatePushBack.cxx;h=34f21a1fc196b0faabef515b10a6c18e6b4613fe;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=3b9ade3747ffcbac4f2e06e9598909f86a3bfe51;hpb=1df8130bddbbc3bc590c37c31f5256470f839cfb;p=flightgear.git diff --git a/src/AIModel/AIFlightPlanCreatePushBack.cxx b/src/AIModel/AIFlightPlanCreatePushBack.cxx index 3b9ade374..34f21a1fc 100644 --- a/src/AIModel/AIFlightPlanCreatePushBack.cxx +++ b/src/AIModel/AIFlightPlanCreatePushBack.cxx @@ -22,16 +22,23 @@ # include #endif -#include "AIFlightPlan.hxx" #include + +#include #include #include #include #include +#include "AIFlightPlan.hxx" +#include "AIAircraft.hxx" +#include "performancedata.hxx" + -void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, +// TODO: Use James Turner's createOnGround functions. +void FGAIFlightPlan::createPushBack(FGAIAircraft *ac, + bool firstFlight, FGAirport *dep, double latitude, double longitude, double radius, @@ -40,10 +47,17 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, const string& airline) { double lat, lon, heading; + double vTaxi = ac->getPerformance()->vTaxi(); + double vTaxiBackward = vTaxi * (-2.0/3.0); + double vTaxiReduced = vTaxi * (2.0/3.0); FGTaxiRoute *pushBackRoute; + // Active runway can be conditionally set by ATC, so at the start of a new flight, this + // must be reset. + activeRunway.clear(); + if (!(dep->getDynamics()->getGroundNetwork()->exists())) { //cerr << "Push Back fallback" << endl; - createPushBackFallBack(firstFlight, dep, latitude, longitude, + createPushBackFallBack(ac, firstFlight, dep, latitude, longitude, radius, fltType, aircraftType, airline); } else { if (firstFlight) { @@ -68,7 +82,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, // Elevation is currently disregarded when on_ground is true // because the AIModel obtains a periodic ground elevation estimate. wpt->altitude = dep->getElevation(); - wpt->speed = -10; + wpt->speed = vTaxiBackward; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -88,7 +102,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, dep->getDynamics()->getParking(gateId, &lat, &lon, &heading); } if (gateId < 0) { - createPushBackFallBack(firstFlight, dep, latitude, longitude, + createPushBackFallBack(ac, firstFlight, dep, latitude, longitude, radius, fltType, aircraftType, airline); return; @@ -134,7 +148,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, // Elevation is currently disregarded when on_ground is true // because the AIModel obtains a periodic ground elevation estimate. wpt->altitude = dep->getElevation(); - wpt->speed = -10; + wpt->speed = vTaxiBackward; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -145,13 +159,13 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, } // some special considerations for the last point: wpt->name = string("PushBackPoint"); - wpt->speed = 15; + wpt->speed = vTaxi; //for (wpt_vector_iterator i = waypoints.begin(); i != waypoints.end(); i++) { // cerr << "Waypoint Name: " << (*i)->name << endl; //} } else { //cerr << "Creating direct forward departure route fragment" << endl; - double lat2, lon2, az2; + double lat2 = 0.0, lon2 = 0.0, az2 = 0.0; waypoint *wpt; geo_direct_wgs_84 ( 0, lat, lon, heading, 2, &lat2, &lon2, &az2 ); @@ -160,7 +174,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, wpt->latitude = lat2; wpt->longitude = lon2; wpt->altitude = dep->getElevation(); - wpt->speed = 10; + wpt->speed = vTaxiReduced; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -176,7 +190,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, wpt->latitude = lat2; wpt->longitude = lon2; wpt->altitude = dep->getElevation(); - wpt->speed = 10; + wpt->speed = vTaxiReduced; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -204,7 +218,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, wpt->latitude = tn->getLatitude(); wpt->longitude = tn->getLongitude(); wpt->altitude = dep->getElevation(); - wpt->speed = 10; + wpt->speed = vTaxiReduced; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -223,7 +237,7 @@ void FGAIFlightPlan::createPushBack(bool firstFlight, FGAirport *dep, * This is the backup function for airports that don't have a * network yet. ******************************************************************/ -void FGAIFlightPlan::createPushBackFallBack(bool firstFlight, FGAirport *dep, +void FGAIFlightPlan::createPushBackFallBack(FGAIAircraft *ac, bool firstFlight, FGAirport *dep, double latitude, double longitude, double radius, @@ -234,9 +248,13 @@ void FGAIFlightPlan::createPushBackFallBack(bool firstFlight, FGAirport *dep, double heading; double lat; double lon; - double lat2; - double lon2; - double az2; + double lat2 = 0.0; + double lon2 = 0.0; + double az2 = 0.0; + + double vTaxi = ac->getPerformance()->vTaxi(); + double vTaxiBackward = vTaxi * (-2.0/3.0); + double vTaxiReduced = vTaxi * (2.0/3.0); @@ -250,7 +268,7 @@ void FGAIFlightPlan::createPushBackFallBack(bool firstFlight, FGAirport *dep, wpt->latitude = lat; wpt->longitude = lon; wpt->altitude = dep->getElevation(); - wpt->speed = -10; + wpt->speed = vTaxiBackward; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -267,7 +285,7 @@ void FGAIFlightPlan::createPushBackFallBack(bool firstFlight, FGAirport *dep, wpt->latitude = lat2; wpt->longitude = lon2; wpt->altitude = dep->getElevation(); - wpt->speed = -10; + wpt->speed = vTaxiBackward; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true; @@ -283,7 +301,7 @@ void FGAIFlightPlan::createPushBackFallBack(bool firstFlight, FGAirport *dep, wpt->latitude = lat2; wpt->longitude = lon2; wpt->altitude = dep->getElevation(); - wpt->speed = 10; + wpt->speed = vTaxiReduced; wpt->crossat = -10000; wpt->gear_down = true; wpt->flaps_down= true;