Fix some winds-aloft bugs

This commit is contained in:
Tobias Dammers 2021-10-13 10:43:21 +02:00
parent 36b7303dd9
commit c9b25e4b27

View File

@ -396,19 +396,24 @@ var aloftTimer = nil;
var aloftPoints = [];
var setAloftWinds = func (aloftPoint) {
# printf("setAloftWinds()");
# debug.dump(aloftPoint);
forindex (var i; aloftPoint.layers) {
var node = props.globals.getNode("/environment/config/aloft/entry[" ~ i ~ "]");
node.getChild('elevation-ft').setValue(aloftPoint.layers[i].alt);
node.getChild('wind-from-heading-deg').setValue(aloftPoint.layers[i].dir);
node.getChild('wind-speed-kt').setValue(aloftPoint.layers[i].spd);
node.getChild('temperature-degc').setValue(aloftPoint.layers[i].temp);
# node.getChild('temperature-degc').setValue(aloftPoint.layers[i].temp);
logprint(
1,
sprintf("ALOFT #%i %5i': %03i/%i",
i,
node.getChild('elevation-ft').getValue(),
node.getChild('wind-from-heading-deg').getValue(),
node.getChild('wind-speed-kt').getValue()));
}
};
var interpolate = func (f, a, b) {
return a + f * (b - a);
return a + math.min(1.0, math.max(-1.0, f)) * (b - a);
};
var interpolateDegrees = func (f, a, b) {
@ -445,6 +450,11 @@ var interpolateAloftPoints = func (f, a, b) {
var updateAloft = func () {
# printf("updateAloft()");
if (getprop("/environment/params/metar-updates-winds-aloft")) {
logprint(3, "Weather configuration invalid for SimBrief weather updater, stopping");
stopAloftUpdater();
return;
}
var pos = geo.aircraft_position();
foreach (var p; aloftPoints) {
p.dist = pos.distance_to(p.coord);
@ -465,6 +475,7 @@ var updateAloft = func () {
};
var startAloftUpdater = func () {
setprop("/environment/params/metar-updates-winds-aloft", 0);
if (aloftTimer == nil) {
aloftTimer = maketimer(10, updateAloft);
aloftTimer.simulatedTime = 1;
@ -483,13 +494,7 @@ var stopAloftUpdater = func () {
var importWindsAloft = func (ofp) {
# # disable default winds and set winds-aloft mode
# setprop("/local-weather/config/wind-model", "aloft waypoints");
# setprop("/environment/params/metar-updates-winds-aloft", 0);
# if (defined('local_weather')) {
# # clear out the advanced weather winds-aloft interpolation points
# setsize(local_weather.windIpointArray, 0);
# }
setprop("/environment/params/metar-updates-winds-aloft", 0);
# now go through the flightplan waypoints and create a wind interpolation point for each of them.
var ofpNavlog = ofp.getNode('navlog');
@ -497,7 +502,6 @@ var importWindsAloft = func (ofp) {
foreach (var ofpFix; ofpFixes) {
var lat = ofpFix.getNode('pos_lat').getValue();
var lon = ofpFix.getNode('pos_long').getValue();
var args = [lat, lon];
var layers = [];
var uneven = 0;
foreach (var ofpWindLayer; ofpFix.getNode('wind_data').getChildren('level')) {
@ -505,10 +509,6 @@ var importWindsAloft = func (ofp) {
var spd = ofpWindLayer.getNode('wind_spd').getValue();
var alt = ofpWindLayer.getNode('altitude').getValue();
var temp = ofpWindLayer.getNode('oat').getValue();
if (alt != 14000) {
# advanced weather ignores this one for some reason
append(args, dir, spd);
}
# pick up every other layer: simbrief reports 10 layers starting
# at sea level, but we can only use 5, and we don't need sea level
# (as that comes from METAR)
@ -517,9 +517,6 @@ var importWindsAloft = func (ofp) {
}
uneven = !uneven;
}
# if (defined('local_weather')) {
# call(local_weather.set_wind_ipoint, args);
# }
var aloftPos = geo.Coord.new();
aloftPos.set_latlon(lat, lon);