dewpoint_degc(5),
pressure_sea_level_inhg(29.92),
pressure_inhg(29.92),
+ turbulence_magnitude_norm(0),
+ turbulence_rate_hz(1),
wind_from_heading_deg(0),
wind_speed_kt(0),
wind_from_north_fps(0),
wind_from_east_fps(0),
- wind_from_down_fps(0),
- turbulence_norm(0)
+ wind_from_down_fps(0)
{
_setup_tables();
_recalc_density();
elevation_ft = env.elevation_ft;
visibility_m = env.visibility_m;
temperature_sea_level_degc = env.temperature_sea_level_degc;
+ temperature_degc = env.temperature_degc;
dewpoint_sea_level_degc = env.dewpoint_sea_level_degc;
+ dewpoint_degc = env.dewpoint_degc;
pressure_sea_level_inhg = env.pressure_sea_level_inhg;
wind_from_heading_deg = env.wind_from_heading_deg;
wind_speed_kt = env.wind_speed_kt;
wind_from_north_fps = env.wind_from_north_fps;
wind_from_east_fps = env.wind_from_east_fps;
wind_from_down_fps = env.wind_from_down_fps;
- turbulence_norm = env.turbulence_norm;
+ turbulence_magnitude_norm = env.turbulence_magnitude_norm;
+ turbulence_rate_hz = env.turbulence_rate_hz;
}
static inline bool
maybe_copy_value (FGEnvironment * env, const SGPropertyNode * node,
const char * name, void (FGEnvironment::*setter)(double))
{
- const SGPropertyNode * child = node->getChild(name);
+ const SGPropertyNode * child = node->getNode(name);
// fragile: depends on not being typed
// as a number
- if (child != 0 && child->getStringValue()[0] != '\0') {
+ if (child != 0 && child->hasValue() &&
+ child->getStringValue()[0] != '\0') {
(env->*setter)(child->getDoubleValue());
return true;
} else {
maybe_copy_value(this, node, "elevation-ft",
&FGEnvironment::set_elevation_ft);
- maybe_copy_value(this, node, "turbulence-norm",
- &FGEnvironment::set_turbulence_norm);
+ maybe_copy_value(this, node, "turbulence/magnitude-norm",
+ &FGEnvironment::set_turbulence_magnitude_norm);
+
+ maybe_copy_value(this, node, "turbulence/rate-hz",
+ &FGEnvironment::set_turbulence_rate_hz);
}
}
double
-FGEnvironment::get_turbulence_norm () const
+FGEnvironment::get_turbulence_magnitude_norm () const
{
- return turbulence_norm;
+ return turbulence_magnitude_norm;
+}
+
+double
+FGEnvironment::get_turbulence_rate_hz () const
+{
+ return turbulence_rate_hz;
}
double
}
void
-FGEnvironment::set_turbulence_norm (double t)
+FGEnvironment::set_turbulence_magnitude_norm (double t)
{
- turbulence_norm = t;
+ turbulence_magnitude_norm = t;
+}
+
+void
+FGEnvironment::set_turbulence_rate_hz (double r)
+{
+ turbulence_rate_hz = r;
}
void
wind_from_heading_deg = 90 - wind_from_heading_deg;
else
wind_from_heading_deg = 270 - wind_from_heading_deg;
+
+#if 0
+ // FIXME: Windspeed can become negative with these formulas.
+ // which can cause problems for animations that rely
+ // on the windspeed property.
if (angle_rad == 0)
wind_speed_kt = fabs(wind_from_east_fps
* SG_METER_TO_NM * SG_FEET_TO_METER * 3600);
else
wind_speed_kt = (wind_from_north_fps / sin(angle_rad))
* SG_METER_TO_NM * SG_FEET_TO_METER * 3600;
+#else
+ wind_speed_kt = sqrt(wind_from_north_fps * wind_from_north_fps +
+ wind_from_east_fps * wind_from_east_fps)
+ * SG_METER_TO_NM * SG_FEET_TO_METER * 3600;
+#endif
}
void
env2->get_temperature_sea_level_degc(),
fraction));
- result->set_dewpoint_sea_level_degc
+ result->set_dewpoint_degc
(do_interp(env1->get_dewpoint_sea_level_degc(),
env2->get_dewpoint_sea_level_degc(),
fraction));
env2->get_elevation_ft(),
fraction));
- result->set_turbulence_norm
- (do_interp(env1->get_turbulence_norm(),
- env2->get_turbulence_norm(),
+ result->set_turbulence_magnitude_norm
+ (do_interp(env1->get_turbulence_magnitude_norm(),
+ env2->get_turbulence_magnitude_norm(),
+ fraction));
+
+ result->set_turbulence_rate_hz
+ (do_interp(env1->get_turbulence_rate_hz(),
+ env2->get_turbulence_rate_hz(),
fraction));
}