bigstorm-3d.ac 100.0) {var distance = math.sqrt(sdistance);} else {var distance = 0.0;} if ((distance < 3000) and (distance > 2000.0) and (altitude<38000)) { if (flag==1) # store the original settings when entering cloud { store(); flag=2; # set flag to prevent further action } if (transition_flag==1) { transition(); } else { setprop("environment/metar/rain-norm",getprop("tmp/metar/rain-norm")); setprop("environment/metar/snow-norm",getprop("tmp/metar/snow-norm")); var econfig_aloftNode = props.globals.getNode("environment/config/aloft", 1); var entries_aloft = econfig_aloftNode.getChildren("entry"); foreach (var e; entries_aloft) { var v = e.getNode("visibility-m"); v.setValue(1000); } var econfig_boundaryNode = props.globals.getNode("environment/config/boundary", 1); var entries_boundary = econfig_boundaryNode.getChildren("entry"); foreach (var e; entries_boundary) { var v = e.getNode("visibility-m"); v.setValue(1000); } fgcommand("reinit", props.Node.new({subsystem:"environment"})); } } else if ((distance < 2000) and (distance > 0.0) and (altitude<38000)) { setprop("environment/clouds/layer[0]/elevation-ft",20000); if (altitude < 10000) { setprop("environment/metar/rain-norm",0.8); setprop("environment/metar/snow-norm",0); } else if ((altitude < 20000) and (altitude > 10000)) { setprop("environment/metar/rain-norm",0); setprop("environment/metar/snow-norm",0.8); } else { setprop("environment/metar/rain-norm",0); setprop("environment/metar/snow-norm",0); } if (altitude<5000) { var econfig_aloftNode = props.globals.getNode("environment/config/aloft", 1); var entries_aloft = econfig_aloftNode.getChildren("entry"); foreach (var e; entries_aloft) { var v = e.getNode("visibility-m"); v.setValue(1000); } var econfig_boundaryNode = props.globals.getNode("environment/config/boundary", 1); var entries_boundary = econfig_boundaryNode.getChildren("entry"); foreach (var e; entries_boundary) { var v = e.getNode("visibility-m"); v.setValue(1000); } fgcommand("reinit", props.Node.new({subsystem:"environment"})); } else { var econfig_aloftNode = props.globals.getNode("environment/config/aloft", 1); var entries_aloft = econfig_aloftNode.getChildren("entry"); foreach (var e; entries_aloft) { var v = e.getNode("visibility-m"); v.setValue(100); } var econfig_boundaryNode = props.globals.getNode("environment/config/boundary", 1); var entries_boundary = econfig_boundaryNode.getChildren("entry"); foreach (var e; entries_boundary) { var v = e.getNode("visibility-m"); v.setValue(1000); } fgcommand("reinit", props.Node.new({subsystem:"environment"})); } } else # we're not in the cloud { if ((flag==2) and (transition_flag==2)) # and we just left the cloud { # restore cloud layer altitude before initializing transition setprop("environment/clouds/layer[0]/elevation-ft",getprop("tmp/clouds/layer[0]/elevation-ft")); transition(); } else if (flag==2) # we have left the cloud, restore the original settings { reset(); flag = 1; } } settimer(thunderstorm_loop, 1); } var thunderstorm_turning_loop = func { var clat = getprop("position/latitude-deg"); var clong = getprop("position/longitude-deg"); var slat = getprop("ai/models/thunderstorm[0]/position/latitude-deg"); var slong = getprop("ai/models/thunderstorm[0]/position/longitude-deg"); var angle = math.mod(math.atan2(math.sin(slong-clong) * math.cos(slat), math.cos(clat) * math.sin(slat)- math.sin(clat) * math.cos(slat) * math.cos(slong-clong)), 2 * math.pi) * R2D; setprop("ai/models/thunderstorm[0]/orientation/rotation-deg",90-angle-heading); settimer(thunderstorm_turning_loop, 0.05); } var count_nodes = func { var econfig_aloftNode = props.globals.getNode("environment/config/aloft", 1); var entries_aloft = econfig_aloftNode.getChildren("entry"); foreach (var e; entries_aloft) { naloft=naloft+1; } var econfig_boundaryNode = props.globals.getNode("environment/config/boundary", 1); var entries_boundary = econfig_boundaryNode.getChildren("entry"); foreach (var e; entries_boundary) { nboundary=nboundary+1; } setsize(aloft_vis,naloft); setsize(boundary_vis,nboundary); } print("Starting thunderstorm routines..."); var flag = 1; var transition_flag = 1; var transition_counter = 0; var aloft_vis=[]; var naloft=0; var boundary_vis=[]; var nboundary=0; var heading = getprop("ai/models/thunderstorm[0]/orientation/true-heading-deg"); setprop("ai/models/thunderstorm[0]/in-cloud",'false'); settimer(count_nodes,1); settimer(thunderstorm_loop,1.5); # start loop settimer(thunderstorm_turning_loop,1.5); # start alignment transformation print("Done."); ]]> rotate orientation/rotation-deg 1.0 0 0 1 select lightning /environment/lightning/flash false select rain main cloud layer background cloud layer foreground cloud layer in-cloud