- apt->getDynamics()->getParking(gateId, &lat, &lon, &heading);
- heading += 180.0;
- if (heading > 360)
- heading -= 360;
- geo_direct_wgs_84(0, lat, lon, heading,
- 2.2 * radius, &lat2, &lon2, &az2);
- wpt =
- createOnGround(ac, "taxiStart", SGGeod::fromDeg(lon2, lat2),
- aptElev, vTaxiReduced);
- waypoints.push_back(wpt);
-
- geo_direct_wgs_84(0, lat, lon, heading,
- 0.1 * radius, &lat2, &lon2, &az2);
-
- wpt =
- createOnGround(ac, "taxiStart2", SGGeod::fromDeg(lon2, lat2),
- aptElev, vTaxiReduced);
- waypoints.push_back(wpt);
-
- wpt =
- createOnGround(ac, "END", SGGeod::fromDeg(lon, lat), aptElev,
+ if (!gate.isValid()) {
+ wpt = createOnGround(ac, "END-Parking", apt->geod(), aptElev,
+ vTaxiReduced);
+ pushBackWaypoint(wpt);
+ return true;
+ }
+
+ FGParking* parking = gate.parking();
+ double heading = SGMiscd::normalizePeriodic(0, 360, parking->getHeading() + 180.0);
+ double az; // unused
+ SGGeod pos;
+
+ SGGeodesy::direct(parking->geod(), heading, 2.2 * parking->getRadius(),
+ pos, az);
+
+ wpt = createOnGround(ac, "taxiStart", pos, aptElev, vTaxiReduced);
+ pushBackWaypoint(wpt);
+
+ SGGeodesy::direct(parking->geod(), heading, 0.1 * parking->getRadius(),
+ pos, az);
+ wpt = createOnGround(ac, "taxiStart2", pos, aptElev, vTaxiReduced);
+ pushBackWaypoint(wpt);
+
+ wpt = createOnGround(ac, "END-Parking", parking->geod(), aptElev,