+ // Test code: let my virtual co-pilot handle ATC:
+
+
+
+ FGAIFlightPlan *fp = ai_ac.GetFlightPlan();
+
+ /* test code : find out how the routing develops */
+ if (fp) {
+ int size = fp->getNrOfWayPoints();
+ //cerr << "Setting pos" << pos << " ";
+ //cerr << "setting intentions " ;
+ // This indicates that we have run out of waypoints: Im future versions, the
+ // user should be able to select a new route, but for now just shut down the
+ // system.
+ if (size < 3) {
+ //cerr << "Shutting down the atc_mgr" << endl;
+ return;
+ }
+ //cerr << "Size of waypoint cue " << size << " ";
+ //for (int i = 0; i < size; i++) {
+ // int val = fp->getRouteIndex(i);
+ //cerr << fp->getWayPoint(i)->getName() << " ";
+ //if ((val) && (val != pos)) {
+ //intentions.push_back(val);
+ //cerr << "[done ] " << endl;
+ //}
+ //}
+ //cerr << "[done ] " << endl;
+ }
+ if (fp) {
+ //cerr << "Currently at leg : " << fp->getLeg() << endl;
+ }
+ double longitude = fgGetDouble("/position/longitude-deg");
+ double latitude = fgGetDouble("/position/latitude-deg");
+ double heading = fgGetDouble("/orientation/heading-deg");
+ double speed = fgGetDouble("/velocities/groundspeed-kt");
+ double altitude = fgGetDouble("/position/altitude-ft");
+
+ /*
+ SGGeod me(SGGeod::fromDegM(longitude,
+ latitude,
+ altitude));
+ SGGeod wpt1(SGGeod::fromDegM(fp->getWayPoint(1)->getLongitude(),
+ fp->getWayPoint(1)->getLatitude(),
+ fp->getWayPoint(1)->getAltitude()));
+ SGGeod wpt2(SGGeod::fromDegM(fp->getWayPoint(1)->getLongitude(),
+ fp->getWayPoint(1)->getLatitude(),
+ fp->getWayPoint(1)->getAltitude()));
+
+ double course1, az1, dist1;
+ double course2, az2, dist2;
+ SGGeodesy::inverse(me, wpt1, course1, az1, dist1);
+
+ cerr << "Bearing to nearest waypoint : " << course1 << " " << dist1 << ". (course " << course2 << ")." << endl;
+ */
+ ai_ac.setLatitude(latitude);
+ ai_ac.setLongitude(longitude);
+ ai_ac.setAltitude(altitude);
+ ai_ac.setHeading(heading);
+ ai_ac.setSpeed(speed);
+ ai_ac.update(time);
+ controller = ai_ac.getATCController();
+ FGATCDialogNew::instance()->update(time);
+ if (controller) {
+ //cerr << "name of previous waypoint : " << fp->getPreviousWaypoint()->getName() << endl;
+
+ //cerr << "Running FGATCManager::update()" << endl;
+ //cerr << "Currently under control of " << controller->getName() << endl;
+ controller->updateAircraftInformation(ai_ac.getID(),
+ latitude,
+ longitude,
+ heading,
+ speed,
+ altitude, time);
+ //string airport = fgGetString("/sim/presets/airport-id");
+ //FGAirport *apt = FGAirport::findByIdent(airport);
+ // AT this stage we should update the flightplan, so that waypoint incrementing is conducted as well as leg loading.
+ int n = trans_num->getIntValue();
+ if (n == 1) {
+ //cerr << "Toggling ground network visibility " << networkVisible << endl;
+ networkVisible = !networkVisible;
+ trans_num->setIntValue(-1);
+ }
+ if ((controller != prevController) && (prevController)) {
+ prevController->render(false);
+ }
+ controller->render(networkVisible);
+
+ //cerr << "Adding groundnetWork to the scenegraph::update" << endl;
+ prevController = controller;
+ }
+ for (AtcVecIterator atc = activeStations.begin(); atc != activeStations.end(); atc++) {
+ (*atc)->update(time);
+ }