]> git.mxchange.org Git - flightgear.git/blobdiff - src/Environment/environment.cxx
Investigating some wierd behavior where the threaded metar fetcher would
[flightgear.git] / src / Environment / environment.cxx
index 3441795804053f4b46b9316d9f661567e1e65ee2..47e4d061f58959d27868c5e4c0fadd92454c8888 100644 (file)
@@ -121,12 +121,13 @@ FGEnvironment::FGEnvironment()
     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();
@@ -148,24 +149,28 @@ FGEnvironment::copy (const FGEnvironment &env)
     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 {
@@ -203,8 +208,11 @@ FGEnvironment::read (const SGPropertyNode * node)
     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);
 }
 
 
@@ -287,9 +295,15 @@ FGEnvironment::get_wind_from_down_fps () const
 }
 
 double
-FGEnvironment::get_turbulence_norm () const
+FGEnvironment::get_turbulence_magnitude_norm () const
+{
+  return turbulence_magnitude_norm;
+}
+
+double
+FGEnvironment::get_turbulence_rate_hz () const
 {
-  return turbulence_norm;
+  return turbulence_rate_hz;
 }
 
 double
@@ -392,9 +406,15 @@ FGEnvironment::set_wind_from_down_fps (double d)
 }
 
 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
@@ -561,7 +581,7 @@ interpolate (const FGEnvironment * env1, const FGEnvironment * env2,
                    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));
@@ -586,9 +606,14 @@ interpolate (const FGEnvironment * env1, const FGEnvironment * env2,
                    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));
 }