#include <simgear/math/sg_random.h>
#include <Aircraft/aircraft.hxx>
-#include <Navaids/ilslist.hxx>
-#include <Navaids/mkrbeacons.hxx>
#include <Navaids/navlist.hxx>
-#include <Time/FGEventMgr.hxx>
#include "dme.hxx"
// Assume that the nominal range (usually
// 50nm) applies at a 5,000 ft difference.
// Just a wild guess!
- double factor = ((aircraftElev*SG_METER_TO_FEET) - stationElev) / 5000.0;
+ double factor = (aircraftElev - stationElev)*SG_METER_TO_FEET / 5000.0;
double range = fabs(nominalRange * factor);
// Clamp the range to keep it sane; for
navcom2_freq(fgGetNode("/radios/nav[1]/frequencies/selected-mhz", true)),
need_update(true),
freq(0.0),
+ bias(0.0),
dist(0.0),
prev_dist(0.0),
spd(0.0),
SGTimeStamp current_time;
station = Point3D( x, y, z );
dist = aircraft.distance3D( station ) * SG_METER_TO_NM;
+ dist -= bias;
+ if ( dist < 0.0 ) {
+ dist = 0.0;
+ }
+
current_time.stamp();
long dMs = (current_time - last_time) / 1000;
// Update every second
freq = navcom2_freq->getDoubleValue();
need_update = true;
}
+ } else if ( switch_pos == 2 && has_power() ) {
+ // no-op
} else {
freq = 0;
inrange = false;
}
- FGILS ils;
- FGNav *nav;
-
- if ( current_ilslist->query( lon, lat, elev, freq, &ils ) ) {
- if (ils.get_has_dme()) {
- valid = true;
- lon = ils.get_loclon();
- lat = ils.get_loclat();
- elev = ils.get_gselev();
- range = FG_ILS_DEFAULT_RANGE;
- effective_range = kludgeRange(elev, elev, range);
- x = ils.get_dme_x();
- y = ils.get_dme_y();
- z = ils.get_dme_z();
- }
- } else if ( (nav = current_navlist->findByFreq(freq, lon, lat, elev)) != NULL ) {
- if (nav->get_has_dme()) {
- valid = true;
- lon = nav->get_lon();
- lat = nav->get_lat();
- elev = nav->get_elev();
- range = nav->get_range();
- effective_range = kludgeRange(elev, elev, range);
- x = nav->get_x();
- y = nav->get_y();
- z = nav->get_z();
- }
+ FGNavRecord *dme
+ = globals->get_dmelist()->findByFreq( freq, lon, lat, elev );
+
+ if ( dme != NULL ) {
+ valid = true;
+ lon = dme->get_lon();
+ lat = dme->get_lat();
+ elev = dme->get_elev_ft();
+ bias = dme->get_multiuse();
+ range = FG_LOC_DEFAULT_RANGE;
+ effective_range = kludgeRange(elev, elev, range);
+ x = dme->get_x();
+ y = dme->get_y();
+ z = dme->get_z();
} else {
valid = false;
dist = 0;