#include <string>
#include <math.h>
#include <time.h>
+
#ifdef _MSC_VER
# include <float.h>
# define finite _finite
alt_lock = false;
roll = 0;
headingChangeRate = 0.0;
+ headingError = 0;
holdPos = false;
_performance = 0; //TODO initialize to JET_TRANSPORT from PerformanceDB
-
+ dt = 0;
}
void FGAIAircraft::checkVisibility()
{
- double visibility_meters = fgGetDouble("/environment/visibility-m");
-
- FGViewer* vw = globals->get_current_view();
- double course, distance;
-
- SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
- SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0);
- view.CourseAndDistance(current, &course, &distance);
- if (distance > visibility_meters) {
- invisible = true;
- } else {
- invisible = false;
- }
+ double visibility_meters = fgGetDouble("/environment/visibility-m");
+ FGViewer* vw = globals->get_current_view();
+ invisible = (SGGeodesy::distanceM(vw->getPosition(), pos) > visibility_meters);
}
}
//TODO let the fp handle this (loading of next leg)
- fp->IncrementWaypoint((bool) trafficRef);
- if (!(fp->getNextWaypoint()) && trafficRef)
+ fp->IncrementWaypoint( trafficRef != 0 );
+ if (!(fp->getNextWaypoint()) && trafficRef != 0)
if (!loadNextLeg()) {
setDie(true);
return;
// Only do the proper hitlist stuff if we are within visible range of the viewer.
if (!invisible) {
double visibility_meters = fgGetDouble("/environment/visibility-m");
-
FGViewer* vw = globals->get_current_view();
- double course, distance;
-
- SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
- SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0);
- view.CourseAndDistance(current, &course, &distance);
- if (distance > visibility_meters) {
+
+ if (SGGeodesy::distanceM(vw->getPosition(), pos) > visibility_meters) {
return;
}
}
double alt;
- if (globals->get_scenery()->get_elevation_m(SGGeod::fromGeodM(pos, 20000), alt, 0))
+ if (getGroundElevationM(SGGeod::fromGeodM(pos, 20000), alt, 0))
tgt_altitude_ft = alt * SG_METER_TO_FEET;
}
}
case 4: //Take off tower controller
if (trafficRef->getDepartureAirport()->getDynamics()) {
controller = trafficRef->getDepartureAirport()->getDynamics()->getTowerController();
- //if (trafficRef->getDepartureAirport()->getId() == "EHAM") {
- //string trns = trafficRef->getCallSign() + " at runway " + fp->getRunway() +
- // ". Ready for departure. " + trafficRef->getFlightType() + " to " +
- // trafficRef->getArrivalAirport()->getId();
- //fgSetString("/sim/messages/atc", trns.c_str());
- // if (controller == 0) {
- //cerr << "Error in assigning controller at " << trafficRef->getDepartureAirport()->getId() << endl;
- //}
- //}
} else {
cerr << "Error: Could not find Dynamics at airport : " << trafficRef->getDepartureAirport()->getId() << endl;
}
bool FGAIAircraft::aiTrafficVisible() {
- double userLatitude = fgGetDouble("/position/latitude-deg");
- double userLongitude = fgGetDouble("/position/longitude-deg");
- double course, distance;
-
- SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0);
- SGWayPoint user (userLongitude, userLatitude, 0);
-
- user.CourseAndDistance(current, &course, &distance);
-
- return ((distance * SG_METER_TO_NM) <= TRAFFICTOAIDISTTODIE);
+ SGGeod userPos(SGGeod::fromDeg(fgGetDouble("/position/longitude-deg"),
+ fgGetDouble("/position/latitude-deg")));
+
+ return (SGGeodesy::distanceNm(userPos, pos) <= TRAFFICTOAIDISTTODIE);
}