// 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)) {
double aircraft_alt = fgGetDouble("/position/altitude-ft");
char s[128];
int i;
- bool rebuild_clouds = false;
for (i = 0, layer = layers.begin(); layer != layers_end; ++layer, i++) {
double currentval;
snprintf(s, 128, cl, i);
strncat(s, "/coverage", 128);
const char* coverage = (*layer)->getStringValue("coverage", "clear");
- if (strncmp(fgGetString(s), coverage, 128) != 0) {
+ if (strncmp(fgGetString(s), coverage, 128) != 0)
fgSetString(s, coverage);
- rebuild_clouds = true;
- }
snprintf(s, 128, cl, i);
strncat(s, "/elevation-ft", 128);
}
}
}
-
- if (rebuild_clouds) {
- // Force an update of the 3D clouds
- fgSetDouble("/environment/rebuild-layers", 1.0);
- }
+
} else {
// We haven't already loaded a METAR, so apply it immediately.
dir_from = fgGetDouble("/environment/metar/base-wind-range-from");