]> git.mxchange.org Git - flightgear.git/blobdiff - src/Environment/environment_ctrl.cxx
Merge branch 'releng/1.9.1' into maint
[flightgear.git] / src / Environment / environment_ctrl.cxx
index bbc3887641cf64d72ececdc36bdd67339ce4a343..5d4494b051da8a7030c5f5b6e94f9d7599382ee9 100644 (file)
@@ -436,15 +436,19 @@ FGMetarEnvironmentCtrl::update_env_config ()
         // factor by the maximum wind change.
         double x = fabs(current[0] - metar[0]);
         double y = fabs(current[1] - metar[1]);
-        double dx = x / (x + y);
-        double dy = 1 - dx;
 
-        double maxdx = dx * MaxWindChangeKtsSec;
-        double maxdy = dy * MaxWindChangeKtsSec;
+        // only interpolate if we have a difference
+        if (x + y > 0) {
+            double dx = x / (x + y);
+            double dy = 1 - dx;
 
-        // Interpolate each component separately.
-        current[0] = interpolate_val(current[0], metar[0], maxdx);
-        current[1] = interpolate_val(current[1], metar[1], maxdy);
+            double maxdx = dx * MaxWindChangeKtsSec;
+            double maxdy = dy * MaxWindChangeKtsSec;
+
+            // Interpolate each component separately.
+            current[0] = interpolate_val(current[0], metar[0], maxdx);
+            current[1] = interpolate_val(current[1], metar[1], maxdy);
+        }
 
         // Now convert back to polar coordinates.
         if ((current[0] == 0.0) && (current[1] == 0.0)) {
@@ -579,7 +583,7 @@ FGMetarEnvironmentCtrl::update_env_config ()
         dewpoint = fgGetDouble("/environment/metar/dewpoint-degc");
 
         // Set the cloud layers by copying over the METAR versions.
-        SGPropertyNode * clouds = fgGetNode("/environment/metar/clouds");
+        SGPropertyNode * clouds = fgGetNode("/environment/metar/clouds", true);
 
         vector<SGPropertyNode_ptr> layers = clouds->getChildren("layer");
         vector<SGPropertyNode_ptr>::const_iterator layer;
@@ -606,6 +610,9 @@ FGMetarEnvironmentCtrl::update_env_config ()
             strncat(s, "/span-m", 128);
             fgSetDouble(s, 40000.0);
         }
+
+        // Force an update of the 3D clouds
+        fgSetDouble("/environment/rebuild-layers", 1.0);
     }
 
     fgSetupWind(dir_from, dir_to, speed, gust);