diff --git a/Nasal/weather_scenario.nas b/Nasal/weather_scenario.nas index 8d15255b1..94f7a56d4 100644 --- a/Nasal/weather_scenario.nas +++ b/Nasal/weather_scenario.nas @@ -1,6 +1,17 @@ -# Set the global weather according to the defined -# scenario in /environment/weather-scenario # +# find a weather scenario by it's <name> element +# returns /environment/weather-scenarios/scenario[name=$name] +# +find_weather_scenario = func(name) { + var wsn = props.globals.getNode( "/environment/weather-scenarios" ); + if( wsn == nil ) return nil; + var scenarios = + foreach (var scenario; wsn.getChildren("scenario") ) + if( scenario.getNode("name").getValue() == name ) + return scenario; + return nil; +} + var initialize_weather_scenario = func { getprop( "/environment/params/metar-updates-environment", 0 ) == 0 and return; getprop( "/environment/realwx/enabled", 0 ) and return; @@ -21,7 +32,32 @@ var initialize_weather_scenario = func { }; _setlistener("/sim/signals/nasal-dir-initialized", func { + initialize_weather_scenario(); - delete(globals, "weather_scenario"); + + setlistener("/environment/weather-scenario", func(n) { + var scenario = find_weather_scenario( n.getValue() ); + if( scenario == nil ) return; + var scenarioName = scenario.getNode("name",1).getValue(); + if( scenarioName == "Disabled" ) { + setprop( "/environment/params/metar-updates-environment", 0 ); + setprop( "/environment/realwx/enabled", 0 ); + setprop( "/environment/config/enabled", 0 ); + } else if( scenarioName == "Live data" ) { + setprop( "/environment/params/metar-updates-environment", 1 ); + setprop( "/environment/realwx/enabled", 1 ); + setprop( "/environment/config/enabled", 1 ); + } else if( scenarioName == "Manual input" ) { + setprop( "/environment/params/metar-updates-environment", 1 ); + setprop( "/environment/realwx/enabled", 0 ); + setprop( "/environment/config/enabled", 1 ); + } else { + setprop( "/environment/params/metar-updates-environment", 1 ); + setprop( "/environment/realwx/enabled", 0 ); + setprop( "/environment/config/enabled", 1 ); + var metar = scenario.getNode("metar",1).getValue(); + setprop( "environment/metar/data", metar ); + } + }); });