diff --git a/Effects/flutter.eff b/Effects/flutter.eff
index d4ca7b0cb..238f1b41f 100644
--- a/Effects/flutter.eff
+++ b/Effects/flutter.eff
@@ -9,10 +9,12 @@
smooth
+
+ /environment/Vinson/rel-wind-speed-kts- ->
+ -->
0.0
0.08
@@ -161,13 +163,13 @@
-
+
Offset
float
diff --git a/Effects/water.eff b/Effects/water.eff
index 607027dd2..096033faf 100644
--- a/Effects/water.eff
+++ b/Effects/water.eff
@@ -86,9 +86,9 @@
-
+
@@ -398,13 +398,13 @@
-
+
WaveFreq
float
@@ -765,13 +765,13 @@
-
+
WaveFreq
float
diff --git a/Environment/environment.xml b/Environment/environment.xml
index 4d1466ba4..a65419ee9 100644
--- a/Environment/environment.xml
+++ b/Environment/environment.xml
@@ -328,4 +328,16 @@
+
+
+ 60.0
+
+
+
+
+ 16000.0
+ 2000.0
+ 1000000.0
+ 0.0
+
diff --git a/Environment/interpolator.xml b/Environment/interpolator.xml
index d38bfb1bc..af1503b70 100644
--- a/Environment/interpolator.xml
+++ b/Environment/interpolator.xml
@@ -196,4 +196,187 @@
1
+
+
+
+ EnvironmentInterpolator:wave:wind-from-east-fps
+ /environment/config/boundary/entry[0]/wind-from-east-fps
+
+ exponential
+ /environment/sea/config/wind-filter-time
+
+
+
+ EnvironmentInterpolator:wave:wind-from-north-fps
+ /environment/config/boundary/entry[0]/wind-from-north-fps
+
+ exponential
+ /environment/sea/config/wind-filter-time
+
+
+
+
+
+
+
+ EnvironmentInterpolator:wave:enabled
+ /environment/config/enabled
+
+
+
+
+ EnvironmentInterpolator:model:heading
+ /orientation/heading-deg
+
+ gain
+ 1
+
+
+
+ EnvironmentInterpolator:model:pitch
+ /orientation/pitch-deg
+
+ gain
+ 1
+
+
+
+ EnvironmentInterpolator:model:roll
+ gain
+ 1
+ /orientation/roll-deg
+
+
+
+
+ EnvironmentInterpolator:wave:amp
+ gain
+ 1
+
+
+
+ 1.0
+
+ 0.02
+ /environment/config/boundary/entry[0]/wind-speed-kt
+
+
+
+
+
+ 1.0
+ 2.0
+
+
+
+ EnvironmentInterpolator:wave:angle
+ gain
+ 1
+
+
+
+ 35.0
+
+ 0.2
+ /environment/config/boundary/entry[0]/wind-speed-kt
+
+
+
+
+
+
+
+
+ EnvironmentInterpolator:wave:dangle
+ gain
+ 1
+
+
+
+ 20.0
+
+ 0.4
+ /environment/config/boundary/entry[0]/wind-speed-kt
+
+
+
+
+
+
+
+
+ EnvironmentInterpolator:wave:freq
+ gain
+ 1
+
+
+
+ 0.01
+
+ 0.0008
+ /environment/config/boundary/entry[0]/wind-speed-kt
+
+
+
+
+
+ 0.01
+ 0.015
+
+
+
+ EnvironmentInterpolator:wave:factor
+ gain
+ 1
+
+
+
+ 0.0004
+
+ 0.00001
+ /environment/config/boundary/entry[0]/wind-speed-kt
+
+
+
+
+
+ 0.0001
+ 0.0004
+
+
+
+ EnvironmentInterpolator:wave:sharp
+ gain
+ 1
+
+
+
+ 1.0
+
+ 0.02
+ /environment/config/boundary/entry[0]/wind-speed-kt
+
+
+
+
+
+ 1.0
+ 2.0
+
+
diff --git a/Environment/local-weather-rules.xml b/Environment/local-weather-rules.xml
new file mode 100644
index 000000000..36cf72347
--- /dev/null
+++ b/Environment/local-weather-rules.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ LocalWeather:terminator-relative-position
+
+
+
+ 1.57079632675
+ /sim/time/sun-angle-rad
+
+
+
+
+ gain
+ 6303363.70409
+
+
+
diff --git a/Environment/metarinterpolator.xml b/Environment/metarinterpolator.xml
index f6837c703..5fc5e18b4 100644
--- a/Environment/metarinterpolator.xml
+++ b/Environment/metarinterpolator.xml
@@ -407,4 +407,31 @@
/environment/metar/clouds/layer[0]/alpha
+
+
+ MetarController:snow-level
+ gain
+ 1.0
+
+
+ /environment/metar/valid
+ /environment/metar/snow-cover
+
+
+
+
+ /environment/metar/station-elevation-ft
+ 0.3048
+
+ -50.0
+
+
+
+ 3200
+
+ 3200
+
diff --git a/Nasal/gui.nas b/Nasal/gui.nas
index 1d52fa82f..ce648a89e 100644
--- a/Nasal/gui.nas
+++ b/Nasal/gui.nas
@@ -1220,8 +1220,8 @@ var basic_keys = {
{ name: "_", desc: "compose chat message" },
{ name: "F3", desc: "capture screen" },
{ name: "F10", desc: "toggle menubar" },
- { name: "Shift-F1", desc: "load flight" },
- { name: "Shift-F2", desc: "save flight" },
+ #{ name: "Shift-F1", desc: "load flight" },
+ #{ name: "Shift-F2", desc: "save flight" },
{ name: "Shift-F10", desc: "cycle through GUI styles" },
],
};
diff --git a/Nasal/weather-utility.nas b/Nasal/weather-utility.nas
deleted file mode 100644
index 6c93051b4..000000000
--- a/Nasal/weather-utility.nas
+++ /dev/null
@@ -1,190 +0,0 @@
-##########
-#this utility is a workaround for the fact that a shader uses listeners which cannot
-# be used with a tied property
-#
-
-# TODO: Make this optional (when shaders disabled etc), or move computation
-# away from Nasal.
-
-#does what it says on the tin
-var clamp = func(v, min, max) { v < min ? min : v > max ? max : v }
-
-#set global variables
-var Amp = 1.0;
-var Angle = 35.0;
-var DAngle = 20.0;
-var Freq = 0.01;
-var Factor = 0.0004;
-var Sharp = 1.0;
-
-#add control properies for waves
-var wave_amp_Node = props.globals.getNode("/environment/wave/amp" , 1);
-wave_amp_Node.setDoubleValue(Amp);
-
-var wave_freq_Node = props.globals.getNode("/environment/wave/freq" , 1);
-wave_freq_Node.setDoubleValue(Freq);
-
-var wave_sharp_Node = props.globals.getNode("/environment/wave/sharp" , 1);
-wave_sharp_Node.setDoubleValue(Sharp);
-
-var wave_angle_Node = props.globals.getNode("/environment/wave/angle" , 1);
-wave_angle_Node.setDoubleValue(Angle);
-
-var wave_factor_Node = props.globals.getNode("/environment/wave/factor" , 1);
-wave_factor_Node.setDoubleValue(Factor);
-
-var wave_factor_Node = props.globals.getNode("/environment/wave/dangle" , 1);
-wave_factor_Node.setDoubleValue(DAngle);
-
-props.globals.initNode("/environment/sea/surface/wind-speed-kt", 0, "DOUBLE");
-props.globals.initNode("/environment/sea/surface/wind-from-east-fps", 0, "DOUBLE");
-props.globals.initNode("/environment/sea/surface/wind-from-north-fps", 0, "DOUBLE");
-props.globals.initNode("/environment/sea/surface/wind-from-deg", 0, "DOUBLE");
-props.globals.initNode("/environment/sea/surface/config/enabled", 0, "DOUBLE");
-#object rotation values
-props.globals.initNode("/orientation/model/heading-deg", 0, "DOUBLE");
-props.globals.initNode("/orientation/model/pitch-deg", 0, "DOUBLE");
-props.globals.initNode("/orientation/model/roll-deg", 0, "DOUBLE");
-
-
-var update_waves = func (wind) {
- var wind = 0;
- var amp = 0;
- var angle = 0;
- var dangle = 0;
- var freq = 0;
- var factor = 0;
- var sharp = 0;
-
- amp = Amp + 0.02 * wind;
- amp = clamp(amp, 1.0, 2.0);
-
- setprop("/environment/wave/amp", amp);
-
- angle = Angle + 0.2 * wind;
- setprop("/environment/wave/angle", angle);
-
- dangle = DAngle - 0.4 * wind;
- setprop("/environment/wave/dangle", dangle);
-
- freq = Freq + 0.0008 * wind;
- freq = clamp(freq, 0.01, 0.015);
- setprop("/environment/wave/freq", freq);
-
- factor = Factor - 0.00001 * wind;
- factor = clamp(factor, 0.0001, 0.0004);
- setprop("/environment/wave/factor", factor);
-
- sharp = Sharp + 0.02 * wind;
- sharp = clamp(sharp, 1.0, 2.0);
- setprop("/environment/wave/sharp", sharp);
-};
-
-var is_initialized = 0;
-var initialize = func {
- if (is_initialized)
- return; # only install listeners once
- is_initialized = 1;
-
- var wind_from_east_Node = props.globals.getNode("/environment/config/boundary/entry[0]/wind-from-east-fps", 1);
- wind_from_east_Node.setDoubleValue(0);
-
- var wind_from_north_Node = props.globals.getNode("/environment/config/boundary/entry[0]/wind-from-north-fps", 1);
- wind_from_north_Node.setDoubleValue(0);
-
- var wind_from_Node = props.globals.getNode("/environment/config/boundary/entry[0]/wind-from-heading-deg", 1);
- wind_from_Node.setDoubleValue(0);
-
- var wind_speed_Node = props.globals.getNode("/environment/config/boundary/entry[0]/wind-speed-kt", 1);
- wind_speed_Node.setDoubleValue(0);
-
- var wind_status_Node = props.globals.getNode("/environment/config/enabled", 1);
- wind_status_Node.setBoolValue(1);
-
- var ground_vis_Node = props.globals.getNode("/environment/ground-visibility-m", 1);
- ground_vis_Node.setDoubleValue(500);
-
- var ground_thick_Node = props.globals.getNode("/environment/ground-haze-thickness-m" , 1);
- ground_thick_Node.setDoubleValue(300);
-
- var ground_term_Node = props.globals.getNode("/environment/terminator-relative-position-m" , 1);
- ground_term_Node.setDoubleValue(60000);
-
-# ################## listeners ####################
-#
-# installing a listener to /environment/sea/surface/wind-speed-kt does not make sense,
-# since it's currently being written in _every_ update loop anyway).
-# setlistener("/environment/sea/surface/wind-speed-kt", func(n) {update_waves(n.getValue())},
-# 1,
-# 0);# end listener
-
- print("weather util initialized ...");
- loop();
-}# end init
-
-var loop = func {
- var value = getprop("/environment/config/boundary/entry[0]/wind-from-east-fps");
- setprop("/environment/sea/surface/wind-from-east-fps", value);
-# print("wind-from-east-fps ", getprop("/environment/sea/surface/wind-from-east-fps"));
-
- value = getprop("/environment/config/boundary/entry[0]/wind-from-north-fps");
- setprop("/environment/sea/surface/wind-from-north-fps", value);
-# print("wind-from-north-fps ", getprop("/environment/sea/surface/wind-from-north-fps"));
-
- value = getprop("/environment/config/boundary/entry[0]/wind-from-heading-deg");
- setprop("/environment/sea/surface/wind-from-deg", value);
-# print("wind-from-deg ", getprop("/environment/sea/surface/wind-from-deg"));
-
- value = getprop("/environment/config/boundary/entry[0]/wind-speed-kt");
- setprop("/environment/sea/surface/wind-speed-kt", value);
-# print("wind-speed-kt ", getprop("/environment/sea/surface/wind-speed-kt"));
- # Direct call to update wave settings (much more effective than using a listener,
- # since it's written in every loop anyway.
- update_waves(value);
-
- value = getprop("/environment/config/enabled");
- setprop("/environment/sea/config/enabled", value);
-# print("wind-speed-kt ", getprop("/environment/config/enabled"));
-
-# orientation fix
-#orientation
- value = getprop("/orientation/heading-deg") or 0.0;
- setprop("/orientation/model/heading-deg", value);
- value = getprop("/orientation/pitch-deg") or 0.0;
- setprop("/orientation/model/pitch-deg", value);
- value = getprop("/orientation/roll-deg") or 0.0;
- setprop("/orientation/model/roll-deg", value);
-
- settimer(loop,0);
-
-}
-
-# Fire it up
-
-setlistener("sim/signals/fdm-initialized", initialize);
-
-# end
-
-###
-# Adjust snow line to match METAR
-#
-
-var snowLineDefault = 3200;
-
-_setlistener("/environment/metar/valid", func {
- var snowCover = getprop("/environment/metar/snow-cover");
- var snowLine = getprop("/environment/snow-level-m");
-
- # Put the snow line slightly below the station's elevation,
- # so the station is completely covered with snow
- var stationElev = getprop("/environment/metar/station-elevation-ft") * globals.FT2M - 50;
-
- if (snowCover == 1){
- if (stationElev > snowLineDefault) { snowLine = snowLineDefault; }
- if ((stationElev <= snowLineDefault) and (snowLine > stationElev)) { snowLine = stationElev; }
- }
- setprop("/environment/snow-level-m",snowLine);
-});
-
-#
-###
\ No newline at end of file
diff --git a/preferences.xml b/preferences.xml
index 785b5005a..7ae4a3bff 100644
--- a/preferences.xml
+++ b/preferences.xml
@@ -382,6 +382,10 @@ Started September 2000 by David Megginson, david@megginson.com
Environment Interpolation Rule
Environment/interpolator.xml
+
+ Local Weather Rules
+ Environment/local-weather-rules.xml
+
Aircraft/Generic/generic-instrumentation.xml