#include <simgear/structure/exception.hxx>
#include <string>
-#include <math.h>
-#include <time.h>
-
-#ifdef _MSC_VER
-# include <float.h>
-# define finite _finite
-#elif defined(__sun) || defined(sgi)
-# include <ieeefp.h>
-#endif
+#include <cmath>
+#include <ctime>
+// defined in AIShip.cxx
+extern double fgIsFinite(double x);
#include "AIAircraft.hxx"
#include "performancedata.hxx"
// AI manager. In this particular case, the AIAircraft is used to shadow the user's aircraft's behavior in the AI world.
// Since we perhaps don't want a radar entry of our own aircraft, the following conditional should probably be adequate
// enough
- if (manager)
+ if (manager){
UpdateRadar(manager);
- checkVisibility();
+ invisible = !manager->isVisible(pos);
+ }
}
-void FGAIAircraft::checkVisibility()
-{
- double visibility_meters = fgGetDouble("/environment/visibility-m");
- invisible = (SGGeodesy::distanceM(globals->get_view_position(), pos) > visibility_meters);
-}
-
-
void FGAIAircraft::AccelTo(double speed) {
tgt_speed = speed;
void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat)
{
if (flightplan.empty()) {
- SG_LOG(SG_AI, SG_WARN, "setFlightPlan: empty flight plan");
+ // this is the case for Nasal-scripted aircraft
+ return;
}
FGAIFlightPlan* fp = new FGAIFlightPlan(flightplan);
}
-void FGAIAircraft::SetFlightPlan(FGAIFlightPlan *f) {
+void FGAIAircraft::SetFlightPlan(FGAIFlightPlan *f)
+{
delete fp;
fp = f;
}
SG_NORMALIZE_RANGE(calc_bearing, 0.0, 360.0);
}
- if (finite(calc_bearing)) {
+ if (fgIsFinite(calc_bearing)) {
double hdg_error = calc_bearing - tgt_heading;
if (fabs(hdg_error) > 0.01) {
TurnTo( calc_bearing );