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 @@ <!-- DIFFUSE --> </material> <shade-model>smooth</shade-model> + <!-- unused ? <wind-speed> - <!--<use>/environment/Vinson/rel-wind-speed-kts</use>--> + <!- -<use>/environment/Vinson/rel-wind-speed-kts</use>- -> <use>/environment/config/boundary/entry[0]/wind-speed-kt</use> </wind-speed> + --> <offset>0.0</offset> <amplitude-factor>0.08</amplitude-factor> <windE> @@ -161,13 +163,13 @@ <use>material/color-mode-uniform</use> </value> </uniform> - <uniform> + <!-- uniform> unused? <name>WindSpeed</name> <type>float</type> <value> <use>wind-speed</use> </value> - </uniform> + </uniform--> <uniform> <name>Offset</name> <type>float</type> 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 @@ <windN> <use>/environment/sea/surface/wind-from-north-fps</use> </windN> - <wind-from> + <!--wind-from> unused? <use>/environment/config/boundary/entry[0]/wind-from-heading-deg</use> - </wind-from> + </wind-from--> <WaveFreq> <use>/environment/wave/freq</use> </WaveFreq> @@ -398,13 +398,13 @@ <use>windN</use> </value> </uniform> - <uniform> + <!-- uniform> unused? <name>WindFrom</name> <type>float</type> <value> <use>wind-from</use> </value> - </uniform> + </uniform--> <uniform> <name>WaveFreq</name> <type>float</type> @@ -765,13 +765,13 @@ <use>windN</use> </value> </uniform> - <uniform> + <!--uniform> unused? <name>WindFrom</name> <type>float</type> <value> <use>wind-from</use> </value> - </uniform> + </uniform--> <uniform> <name>WaveFreq</name> <type>float</type> 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 @@ </area> </terrain> + <sea> + <config> + <wind-filter-time type="double">60.0</wind-filter-time> + </config> + </sea> + + <!-- definitions for the scattering skydome shader --> + <ground-visibility-m type="double" userarchive="n">16000.0</ground-visibility-m> + <ground-haze-thickness-m type="double" userarchive="n">2000.0</ground-haze-thickness-m> + <terminator-relative-position-m type="double" userarchive="n">1000000.0</terminator-relative-position-m> + <mean-terrain-elevation-m type="double" userarchive="n">0.0</mean-terrain-elevation-m> + </PropertyList> 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 @@ <filter-time>1</filter-time> </filter> + <!-- replace weather-utility.nas --> + <!-- + #this utility is a workaround for the fact that a shader uses listeners which cannot + # be used with a tied property + --> + <filter> + <name>EnvironmentInterpolator:wave:wind-from-east-fps</name> + <input>/environment/config/boundary/entry[0]/wind-from-east-fps</input> + <output>/environment/sea/surface/wind-from-east-fps</output> + <type>exponential</type> + <filter-time>/environment/sea/config/wind-filter-time</filter-time> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:wind-from-north-fps</name> + <input>/environment/config/boundary/entry[0]/wind-from-north-fps</input> + <output>/environment/sea/surface/wind-from-north-fps</output> + <type>exponential</type> + <filter-time>/environment/sea/config/wind-filter-time</filter-time> + </filter> + + <!--filter> unused? + <name>EnvironmentInterpolator:wave:wind-from-heading-deg</name> + <input>/environment/config/boundary/entry[0]/wind-from-heading-deg</input> + <output>/environment/sea/surface/wind-from-deg</output> + <type>gain</type> + <gain>1</gain> + </filter--> + + <!--filter> unused? + <name>EnvironmentInterpolator:wave:wind-speed-kt</name> + <input>/environment/config/boundary/entry[0]/wind-speed-kt</input> + <output>/environment/sea/surface/wind-speed-kt</output> + <type>gain</type> + <gain>1</gain> + </filter--> + + <logic> + <name>EnvironmentInterpolator:wave:enabled</name> + <input>/environment/config/enabled</input> + <output>/environment/sea/config/enabled</output> + </logic> + + <filter> + <name>EnvironmentInterpolator:model:heading</name> + <input>/orientation/heading-deg</input> + <output>/orientation/model/heading-deg</output> + <type>gain</type> + <gain>1</gain> + </filter> + + <filter> + <name>EnvironmentInterpolator:model:pitch</name> + <input>/orientation/pitch-deg</input> + <output>/orientation/model/pitch-deg</output> + <type>gain</type> + <gain>1</gain> + </filter> + + <filter> + <name>EnvironmentInterpolator:model:roll</name> + <type>gain</type> + <gain>1</gain> + <input>/orientation/roll-deg</input> + <output>/orientation/model/roll-deg</output> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:amp</name> + <type>gain</type> + <gain>1</gain> + <input> + <expression> + <sum> + <value>1.0</value> + <product> + <value>0.02</value> + <property>/environment/config/boundary/entry[0]/wind-speed-kt</property> + </product> + </sum> + </expression> + </input> + <output>/environment/wave/amp</output> + <min>1.0</min> + <max>2.0</max> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:angle</name> + <type>gain</type> + <gain>1</gain> + <input> + <expression> + <sum> + <value>35.0</value> + <product> + <value>0.2</value> + <property>/environment/config/boundary/entry[0]/wind-speed-kt</property> + </product> + </sum> + </expression> + </input> + <output>/environment/wave/angle</output> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:dangle</name> + <type>gain</type> + <gain>1</gain> + <input> + <expression> + <difference> + <value>20.0</value> + <product> + <value>0.4</value> + <property>/environment/config/boundary/entry[0]/wind-speed-kt</property> + </product> + </difference> + </expression> + </input> + <output>/environment/wave/dangle</output> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:freq</name> + <type>gain</type> + <gain>1</gain> + <input> + <expression> + <sum> + <value>0.01</value> + <product> + <value>0.0008</value> + <property>/environment/config/boundary/entry[0]/wind-speed-kt</property> + </product> + </sum> + </expression> + </input> + <output>/environment/wave/freq</output> + <min>0.01</min> + <max>0.015</max> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:factor</name> + <type>gain</type> + <gain>1</gain> + <input> + <expression> + <difference> + <value>0.0004</value> + <product> + <value>0.00001</value> + <property>/environment/config/boundary/entry[0]/wind-speed-kt</property> + </product> + </difference> + </expression> + </input> + <output>/environment/wave/factor</output> + <min>0.0001</min> + <max>0.0004</max> + </filter> + + <filter> + <name>EnvironmentInterpolator:wave:sharp</name> + <type>gain</type> + <gain>1</gain> + <input> + <expression> + <sum> + <value>1.0</value> + <product> + <value>0.02</value> + <property>/environment/config/boundary/entry[0]/wind-speed-kt</property> + </product> + </sum> + </expression> + </input> + <output>/environment/wave/sharp</output> + <min>1.0</min> + <max>2.0</max> + </filter> + </PropertyList> 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 @@ +<?xml version="1.0" ?> +<!-- + This file is part of FlightGear, the free flight simulator + http://www.flightgear.org/ + + Copyright (C) 2012 Torsten Dreyer, Torsten (at) t3r _dot_ de + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. +--> +<!-- + Compute local weather related properties +--> +<PropertyList> + + <!-- (pi/2 - /sim/time/sun-angle-rad) / 0.017451 * 110000.0 --> + <filter> + <name>LocalWeather:terminator-relative-position</name> + <input> + <expression> + <difference> + <value>1.57079632675</value> + <property>/sim/time/sun-angle-rad</property> + </difference> + </expression> + </input> + <output>/environment/terminator-relative-position-m</output> + <type>gain</type> + <gain>6303363.70409</gain> + </filter> + +</PropertyList> 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 @@ <input>/environment/metar/clouds/layer[0]/alpha</input> <output>/environment/clouds/layer[0]/alpha</output> </filter> +<!-- replace weather-utility.nas + # Put the snow line slightly below the station's elevation, + # so the station is completely covered with snow +--> + <filter> + <name>MetarController:snow-level</name> + <type>gain</type> + <gain>1.0</gain> + <input> + <condition> + <property>/environment/metar/valid</property> + <property>/environment/metar/snow-cover</property> + </condition> + <expression> + <sum> + <product> + <property>/environment/metar/station-elevation-ft</property> + <value>0.3048</value> + </product> + <value>-50.0</value> + </sum> + </expression> + </input> + <input>3200</input> + <output>/environment/snow-level-m</output> + <max>3200</max> + </filter> </PropertyList> 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 <name>Environment Interpolation Rule</name> <path>Environment/interpolator.xml</path> </property-rule> + <property-rule> + <name>Local Weather Rules </name> + <path>Environment/local-weather-rules.xml</path> + </property-rule> </systems> <instrumentation> <path>Aircraft/Generic/generic-instrumentation.xml</path>