Merge branch 'master' of git://gitorious.org/fg/fgdata
This commit is contained in:
commit
99b289743e
28 changed files with 1454 additions and 475 deletions
|
@ -185,13 +185,19 @@ var load_data = func {
|
|||
}
|
||||
}
|
||||
|
||||
var launched = 0;
|
||||
|
||||
var init = func {
|
||||
print("Initializing Radar Data");
|
||||
io.read_properties(data_path, props.globals);
|
||||
load_data();
|
||||
if (! launched) {
|
||||
print("Initializing Radar Data");
|
||||
io.read_properties(data_path, props.globals);
|
||||
load_data();
|
||||
launched = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,21 +1,7 @@
|
|||
# Radar2 and RWR routines.
|
||||
# RWR routines.
|
||||
|
||||
# Alexis Bory (xiii)
|
||||
|
||||
# Every 0.05 seconde:
|
||||
# [1] Scans /AI/models for (aircrafts), (carriers), multiplayers. Creates a list of
|
||||
# these targets, whenever they are in radar overall range and are valid.
|
||||
# [2] RWR (Radar Warning Receiver) signals are then computed. RWR signal values
|
||||
# are writen under /instrumentation/radar2/targets for interoperabilty purposes.
|
||||
# [3] At each loop the targets list is scanned and each target bearing is checked
|
||||
# against the radar beam heading. If the target is within the radar beam, its
|
||||
# display properties are updated. Two different displays are possible:
|
||||
# B-scan like and PPI like.
|
||||
# The target distance is then scored so the radar system can autotrack the
|
||||
# nearest target.
|
||||
# Every 0.1 seconde:
|
||||
# [4] Computes HUD marker position for the nearest target.
|
||||
|
||||
var OurAlt = props.globals.getNode("position/altitude-ft");
|
||||
var OurHdg = props.globals.getNode("orientation/heading-deg");
|
||||
var EcmOn = props.globals.getNode("instrumentation/ecm/on-off", 1);
|
||||
|
@ -34,9 +20,14 @@ var u_ecm_signal_norm = 0;
|
|||
var u_radar_standby = 0;
|
||||
var u_ecm_type_num = 0;
|
||||
|
||||
var launched = 0;
|
||||
|
||||
init = func() {
|
||||
radardist.init();
|
||||
settimer(rwr_loop, 0.5);
|
||||
if (! launched) {
|
||||
radardist.init();
|
||||
settimer(rwr_loop, 0.5);
|
||||
launched = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Main loop ###############
|
||||
|
|
|
@ -7,6 +7,15 @@
|
|||
<pitch-deg>-3.0</pitch-deg>
|
||||
<z-m> -0.065 </z-m>
|
||||
</offsets>
|
||||
|
||||
<nasal>
|
||||
<load>
|
||||
var rplayer = cmdarg();
|
||||
rplayer.getNode("sim/model/door-positions/rightDoor/position-norm", 1).alias(rplayer.getNode("sim/multiplay/generic/float[0]"));
|
||||
rplayer.getNode("sim/model/door-positions/leftDoor/position-norm", 1).alias(rplayer.getNode("sim/multiplay/generic/float[1]"));
|
||||
rplayer.getNode("sim/model/door-positions/baggageDoor/position-norm", 1).alias(rplayer.getNode("sim/multiplay/generic/float[2]"));
|
||||
</load>
|
||||
</nasal>
|
||||
|
||||
<!-- Normal shader effect. Separate effects required for each normal map texture -->
|
||||
|
||||
|
|
|
@ -100,6 +100,9 @@ Started October 23 2001 by John Check, fgpanels@rockfish.net
|
|||
<multiplay>
|
||||
<chat_display>1</chat_display>
|
||||
<generic>
|
||||
<float n="0" alias="/sim/model/door-positions/rightDoor/position-norm"/>
|
||||
<float n="1" alias="/sim/model/door-positions/leftDoor/position-norm"/>
|
||||
<float n="2" alias="/sim/model/door-positions/baggageDoor/position-norm"/>
|
||||
<int type="int">0</int>
|
||||
<int type="int">0</int>
|
||||
<int type="int">0</int>
|
||||
|
|
64
Effects/cloud-static.eff
Normal file
64
Effects/cloud-static.eff
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PropertyList>
|
||||
<name>Effects/rain-layer</name>
|
||||
<parameters>
|
||||
<texture n ="0">
|
||||
</texture>
|
||||
</parameters>
|
||||
<technique n="10">
|
||||
<predicate>
|
||||
<and>
|
||||
<property>/sim/rendering/clouds3d-enable</property>
|
||||
<less-equal>
|
||||
<value type="float">1.0</value>
|
||||
<shader-language/>
|
||||
</less-equal>
|
||||
</and>
|
||||
</predicate>
|
||||
<pass n="0">
|
||||
<!-- This is apparently not used, so maybe we'll blow it way soon. -->
|
||||
<lighting>true</lighting>
|
||||
<material>
|
||||
<ambient type="vec4d">0.5 0.5 0.5 1.0</ambient>
|
||||
<diffuse type="vec4d">0.5 0.5 0.5 1.0</diffuse>
|
||||
<color-mode>off</color-mode>
|
||||
</material>
|
||||
<alpha-test>
|
||||
<comparison>greater</comparison>
|
||||
<reference type="float">0.01</reference>
|
||||
</alpha-test>
|
||||
<shade-model>smooth</shade-model>
|
||||
<blend>
|
||||
<source>src-alpha</source>
|
||||
<destination>one-minus-src-alpha</destination>
|
||||
</blend>
|
||||
<depth>
|
||||
<write-mask>false</write-mask>
|
||||
</depth>
|
||||
<render-bin>
|
||||
<bin-number>9</bin-number>
|
||||
<bin-name>DepthSortedBin</bin-name>
|
||||
</render-bin>
|
||||
<texture-unit>
|
||||
<unit>0</unit>
|
||||
<type><use>texture[0]/type</use></type>
|
||||
<image><use>texture[0]/image</use></image>
|
||||
<filter><use>texture[0]/filter</use></filter>
|
||||
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
|
||||
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
|
||||
<!--<wrap-s>clamp</wrap-s>
|
||||
<wrap-t>clamp</wrap-t>-->
|
||||
</texture-unit>
|
||||
<program>
|
||||
<vertex-shader>Shaders/cloud-static.vert</vertex-shader>
|
||||
<fragment-shader>Shaders/cloud-static.frag</fragment-shader>
|
||||
</program>
|
||||
<uniform>
|
||||
<name>baseTexture</name>
|
||||
<type>sampler-2d</type>
|
||||
<value type="int">0</value>
|
||||
</uniform>
|
||||
<vertex-program-two-side>true</vertex-program-two-side>
|
||||
</pass>
|
||||
</technique>
|
||||
</PropertyList>
|
|
@ -4,6 +4,9 @@
|
|||
<parameters>
|
||||
<texture n ="0">
|
||||
</texture>
|
||||
<range>
|
||||
<use>/sim/rendering/clouds3d-vis-range</use>
|
||||
</range>
|
||||
</parameters>
|
||||
<technique n="10">
|
||||
<predicate>
|
||||
|
@ -36,7 +39,7 @@
|
|||
<write-mask>false</write-mask>
|
||||
</depth>
|
||||
<render-bin>
|
||||
<bin-number>10</bin-number>
|
||||
<bin-number>9</bin-number>
|
||||
<bin-name>DepthSortedBin</bin-name>
|
||||
</render-bin>
|
||||
<texture-unit>
|
||||
|
@ -58,6 +61,12 @@
|
|||
<type>sampler-2d</type>
|
||||
<value type="int">0</value>
|
||||
</uniform>
|
||||
<uniform>
|
||||
<name>range</name>
|
||||
<type>float</type>
|
||||
<value><use>range</use></value>
|
||||
</uniform>
|
||||
|
||||
<vertex-program-two-side>true</vertex-program-two-side>
|
||||
</pass>
|
||||
</technique>
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
<target-framerate type="double" userarchive="y">25.0</target-framerate>
|
||||
<large-scale-persistence type="double" userarchive="y">1.0</large-scale-persistence>
|
||||
<small-scale-persistence type="double" userarchive="y">0.0</small-scale-persistence>
|
||||
<ground-haze-factor type="double" userarchive="y">1.0</ground-haze-factor>
|
||||
<max-vis-range-m type="double" userarchive="y">120000.0</max-vis-range-m>
|
||||
</config>
|
||||
<tmp>
|
||||
<tile-management type="string" userarchive="y">realistic weather</tile-management>
|
||||
|
|
|
@ -134,7 +134,6 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
|||
return 1;
|
||||
}
|
||||
menuEnable("autopilot", isAutopilotMenuEnabled() );
|
||||
menuEnable("multiplayer", multiplayer.is_active());
|
||||
menuEnable("joystick-info", size(props.globals.getNode("/input/joysticks").getChildren("js")));
|
||||
|
||||
# frame-per-second display
|
||||
|
|
|
@ -485,7 +485,7 @@ else if (type == "Stratocumulus bottom"){
|
|||
{
|
||||
cloudAssembly = local_weather.cloud.new(type, subtype);
|
||||
|
||||
mult = 1.0;
|
||||
|
||||
|
||||
# characterize the basic texture sheet
|
||||
cloudAssembly.texture_sheet = "/Models/Weather/cumulus_bottom_sheet1.rgb";
|
||||
|
@ -520,6 +520,46 @@ else if (type == "Stratocumulus bottom"){
|
|||
|
||||
}
|
||||
else if (type == "Cumulonimbus (cloudlet)"){
|
||||
|
||||
# new code
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1)
|
||||
{
|
||||
cloudAssembly = local_weather.cloud.new(type, subtype);
|
||||
|
||||
# characterize the basic texture sheet
|
||||
|
||||
|
||||
cloudAssembly.num_tex_x = 2;
|
||||
cloudAssembly.num_tex_y = 2;
|
||||
|
||||
if (rand() < 0.5)
|
||||
{cloudAssembly.texture_sheet = "/Models/Weather/cumulonimbus_sheet2.rgb";}
|
||||
else
|
||||
{cloudAssembly.texture_sheet = "/Models/Weather/cumulonimbus_sheet1.rgb";}
|
||||
|
||||
var mult = 1.0;
|
||||
if (subtype == "small") {mult = 0.7;}
|
||||
|
||||
#characterize the cloud
|
||||
cloudAssembly.bottom_shade = 0.6;
|
||||
cloudAssembly.n_sprites = 5;
|
||||
cloudAssembly.min_width = 1700.0 * mult;
|
||||
cloudAssembly.max_width = 2200.0 * mult;
|
||||
cloudAssembly.min_height = 1700.0 * mult;
|
||||
cloudAssembly.max_height = 2200.0 * mult;
|
||||
cloudAssembly.min_cloud_width = 3500.0 * mult;
|
||||
cloudAssembly.min_cloud_height = 3500.0 * mult;
|
||||
cloudAssembly.z_scale = 1.0;
|
||||
|
||||
#signal that new routines are used
|
||||
path = "new";
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
if (subtype == "small") {
|
||||
if (rn > 0.875) {path = "Models/Weather/cumulonimbus_sl1.xml";}
|
||||
else if (rn > 0.75) {path = "Models/Weather/cumulonimbus_sl2.xml";}
|
||||
|
@ -540,6 +580,7 @@ else if (type == "Cumulonimbus (cloudlet)"){
|
|||
else if (rn > 0.125) {path = "Models/Weather/cumulonimbus_sl7.xml";}
|
||||
else {path = "Models/Weather/cumulonimbus_sl8.xml";}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -885,24 +926,34 @@ else if (type == "Stratus") {
|
|||
{
|
||||
cloudAssembly = local_weather.cloud.new(type, subtype);
|
||||
|
||||
if (subtype == "small") {var mult = 0.8;}
|
||||
else {var mult = 1.0;}
|
||||
|
||||
# characterize the basic texture sheet
|
||||
cloudAssembly.texture_sheet = "/Models/Weather/stratus_sheet1.rgb";
|
||||
cloudAssembly.num_tex_x = 3;
|
||||
cloudAssembly.num_tex_y = 2;
|
||||
if (subtype == "small")
|
||||
{
|
||||
var mult = 0.8;
|
||||
cloudAssembly.texture_sheet = "/Models/Weather/cirrocumulus_sheet1.rgb";
|
||||
cloudAssembly.num_tex_x = 3;
|
||||
cloudAssembly.num_tex_y = 3;
|
||||
cloudAssembly.n_sprites = 10;
|
||||
cloudAssembly.z_scale = 0.6;
|
||||
}
|
||||
else
|
||||
{
|
||||
var mult = 1.0;
|
||||
cloudAssembly.texture_sheet = "/Models/Weather/stratus_sheet1.rgb";
|
||||
cloudAssembly.num_tex_x = 3;
|
||||
cloudAssembly.num_tex_y = 2;
|
||||
cloudAssembly.n_sprites = 10;
|
||||
cloudAssembly.z_scale = 0.4;
|
||||
}
|
||||
|
||||
#characterize the cloud
|
||||
cloudAssembly.bottom_shade = 0.4;
|
||||
cloudAssembly.n_sprites = 20;
|
||||
cloudAssembly.min_width = 1900.0 * mult;
|
||||
cloudAssembly.max_width = 2400.0 * mult;
|
||||
cloudAssembly.min_height = 1900.0 * mult;
|
||||
cloudAssembly.max_height = 2400.0 * mult;
|
||||
cloudAssembly.min_cloud_width = 5000.0 * mult;
|
||||
cloudAssembly.min_width = 2000.0 * mult;
|
||||
cloudAssembly.max_width = 2500.0 * mult;
|
||||
cloudAssembly.min_height = 2000.0 * mult;
|
||||
cloudAssembly.max_height = 2500.0 * mult;
|
||||
cloudAssembly.min_cloud_width = 5000.0;
|
||||
cloudAssembly.min_cloud_height = 1.1 * cloudAssembly.max_height;
|
||||
cloudAssembly.z_scale = 0.4;
|
||||
|
||||
|
||||
#signal that new routines are used
|
||||
path = "new";
|
||||
|
@ -957,11 +1008,11 @@ else if (type == "Stratus (thin)") {
|
|||
|
||||
#characterize the cloud
|
||||
cloudAssembly.bottom_shade = 0.8;
|
||||
cloudAssembly.min_width = 1500.0 * mult;
|
||||
cloudAssembly.max_width = 2000.0 * mult;
|
||||
cloudAssembly.min_height = 1500.0 * mult;
|
||||
cloudAssembly.max_height = 2000.0 * mult;
|
||||
cloudAssembly.min_cloud_width = 2500.0;
|
||||
cloudAssembly.min_width = 1900.0 * mult;
|
||||
cloudAssembly.max_width = 2400.0 * mult;
|
||||
cloudAssembly.min_height = 1900.0 * mult;
|
||||
cloudAssembly.max_height = 2400.0 * mult;
|
||||
cloudAssembly.min_cloud_width = 4200.0;
|
||||
cloudAssembly.min_cloud_height = 50.0;
|
||||
|
||||
|
||||
|
@ -1055,6 +1106,49 @@ else if (type == "Fog (thin)") {
|
|||
}
|
||||
}
|
||||
else if (type == "Fog (thick)") {
|
||||
|
||||
# new code
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag ==1)
|
||||
{
|
||||
cloudAssembly = local_weather.cloud.new(type, subtype);
|
||||
|
||||
if (subtype == "small")
|
||||
{
|
||||
var mult = 0.8;
|
||||
cloudAssembly.texture_sheet = "/Models/Weather/stratus_sheet1.rgb";
|
||||
cloudAssembly.num_tex_x = 3;
|
||||
cloudAssembly.num_tex_y = 2;
|
||||
cloudAssembly.n_sprites = 5;
|
||||
cloudAssembly.z_scale = 1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
var mult = 1.0;
|
||||
cloudAssembly.texture_sheet = "/Models/Weather/stratus_sheet1.rgb";
|
||||
cloudAssembly.num_tex_x = 3;
|
||||
cloudAssembly.num_tex_y = 2;
|
||||
cloudAssembly.n_sprites = 5;
|
||||
cloudAssembly.z_scale = 1.0;
|
||||
}
|
||||
|
||||
#characterize the cloud
|
||||
cloudAssembly.bottom_shade = 0.4;
|
||||
cloudAssembly.min_width = 2000.0 * mult;
|
||||
cloudAssembly.max_width = 2500.0 * mult;
|
||||
cloudAssembly.min_height = 2000.0 * mult;
|
||||
cloudAssembly.max_height = 2500.0 * mult;
|
||||
cloudAssembly.min_cloud_width = 5000.0;
|
||||
cloudAssembly.min_cloud_height = 1.1 * cloudAssembly.max_height;
|
||||
|
||||
|
||||
#signal that new routines are used
|
||||
path = "new";
|
||||
}
|
||||
|
||||
else # old code
|
||||
{
|
||||
|
||||
if (subtype == "small") {
|
||||
if (rn > 0.8) {path = "Models/Weather/stratus_thick1.xml";}
|
||||
else if (rn > 0.6) {path = "Models/Weather/stratus_thick2.xml";}
|
||||
|
@ -1068,6 +1162,7 @@ else if (type == "Fog (thick)") {
|
|||
else if (rn > 0.4) {path = "Models/Weather/stratus_thick3.xml";}
|
||||
else if (rn > 0.2) {path = "Models/Weather/stratus_thick4.xml";}
|
||||
else {path = "Models/Weather/stratus_thick5.xml";}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == "Test") {path="Models/Weather/single_cloud.xml";}
|
||||
|
|
|
@ -170,7 +170,7 @@ else
|
|||
|
||||
if (local_weather.hardcoded_clouds_flag == 1)
|
||||
{
|
||||
# we store that information ourselves, so this should be zero
|
||||
# we store that information ourselves, so this should be zero, but rain forces us to go for an offset
|
||||
setprop("/environment/clouds/layer[0]/elevation-ft",0.0);
|
||||
|
||||
# layer wrapping off
|
||||
|
@ -347,6 +347,7 @@ else
|
|||
|
||||
var setTemperature = func (T) {
|
||||
|
||||
|
||||
if (features.can_disable_environment == 1)
|
||||
{
|
||||
setprop("/environment/temperature-sea-level-degc",T);
|
||||
|
@ -503,6 +504,14 @@ if (features.can_disable_environment == 1)
|
|||
setprop("/environment/wind-from-heading-deg",dir);
|
||||
setprop("/environment/wind-speed-kt",speed);
|
||||
}
|
||||
|
||||
# this is needed to trigger the cloud drift to pick up the new wind setting
|
||||
if (local_weather.hardcoded_clouds_flag == 1)
|
||||
{
|
||||
setprop("/environment/clouds/layer[0]/elevation-ft",0.0);
|
||||
}
|
||||
|
||||
|
||||
else
|
||||
{
|
||||
# this is a workaround for systems which lack hard-coded support
|
||||
|
@ -767,7 +776,10 @@ var p = props.Node.new({ "layer" : 0,
|
|||
"min-sprite-height-m": c.min_height,
|
||||
"max-sprite-height-m": c.max_height,
|
||||
"num-sprites": c.n_sprites,
|
||||
"bottom-shade": c.bottom_shade,
|
||||
"min-bottom-lighting-factor": c.bottom_shade,
|
||||
"min-middle-lighting-factor": 0.9,
|
||||
"min-top-lighting-factor": 1.0,
|
||||
"min-shade-lighting-factor": c.bottom_shade,
|
||||
"texture": c.texture_sheet,
|
||||
"num-textures-x": c.num_tex_x,
|
||||
"num-textures-y": c.num_tex_y,
|
||||
|
@ -777,10 +789,10 @@ var p = props.Node.new({ "layer" : 0,
|
|||
"max-cloud-height-m": c.min_cloud_height,
|
||||
"z-scale": c.z_scale,
|
||||
"height-map-texture": 0,
|
||||
"alt-ft" : c.alt});
|
||||
"alt-ft" : c.alt });
|
||||
fgcommand("add-cloud", p);
|
||||
|
||||
# print("alt: ", c.alt);
|
||||
#print("alt: ", c.alt);
|
||||
|
||||
# add other management properties to the hash if dynamics is on
|
||||
|
||||
|
@ -799,6 +811,10 @@ append(weather_tile_management.cloudArray,c);
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
###########################################################
|
||||
# place a cloud layer from arrays, split across frames
|
||||
###########################################################
|
||||
|
@ -811,13 +827,22 @@ if ((i < 0) or (i==0))
|
|||
{
|
||||
if (local_weather.debug_output_flag == 1)
|
||||
{print("Cloud placement from array finished!"); }
|
||||
|
||||
# then place all clouds using the new rendering system
|
||||
if (local_weather.hardcoded_clouds_flag == 1)
|
||||
{
|
||||
var s = size(local_weather.cloudAssemblyArray);
|
||||
create_new_cloud_array(s,cloudAssemblyArray);
|
||||
}
|
||||
|
||||
setprop(lw~"tmp/thread-status", "idle");
|
||||
|
||||
# now set flag that tile has been completely processed
|
||||
var dir_index = props.globals.getNode(lw~"tiles/tmp/dir-index").getValue();
|
||||
|
||||
props.globals.getNode(lw~"tiles").getChild("tile",dir_index).getNode("generated-flag").setValue(2);
|
||||
|
||||
#props.globals.getNode(lw~"tiles").getChild("tile",dir_index).getNode("generated-flag").setValue(2);
|
||||
setprop(lw~"tiles/tile["~dir_index~"]/generated-flag",2);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -856,9 +881,42 @@ settimer( func {create_cloud_array(i - k, clouds_path, clouds_lat, clouds_lon, c
|
|||
};
|
||||
|
||||
|
||||
var create_new_cloud_array = func (i, cloudArray)
|
||||
{
|
||||
|
||||
|
||||
|
||||
#if (getprop(lw~"tmp/thread-status") != "placing") {return;}
|
||||
#if (getprop(lw~"tmp/convective-status") != "idle") {return;}
|
||||
|
||||
if ((i < 0) or (i==0))
|
||||
{
|
||||
if (local_weather.debug_output_flag == 1)
|
||||
{print("Processing add-cloud calls finished!"); }
|
||||
return;
|
||||
}
|
||||
|
||||
#print("Hello world! i is now: ",i);
|
||||
|
||||
var k_max = 20;
|
||||
var s = size(cloudArray);
|
||||
|
||||
if (s < k_max) {k_max = s;}
|
||||
|
||||
for (var k = 0; k < k_max; k = k+1)
|
||||
{
|
||||
local_weather.create_cloud_new(cloudArray[s-k-1]);
|
||||
#print(cloudArray[s-k-1].alt);
|
||||
}
|
||||
|
||||
setsize(cloudArray,s-k_max);
|
||||
|
||||
|
||||
|
||||
settimer( func {create_new_cloud_array(i - k, cloudArray) }, 0 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -410,8 +410,8 @@ else
|
|||
|
||||
if (debug_output_flag == 1)
|
||||
{
|
||||
print("Boundary layer thickness: ",base_layer_thickness);
|
||||
print("Boundary layer slowdown: ", f_slow);
|
||||
#print("Boundary layer thickness: ",base_layer_thickness);
|
||||
#print("Boundary layer slowdown: ", f_slow);
|
||||
}
|
||||
return f_slow;
|
||||
}
|
||||
|
@ -509,8 +509,8 @@ setprop(lwi~"station-number", i+1);
|
|||
var ialt = sum_alt/sum_norm;
|
||||
var vis = sum_vis/sum_norm;
|
||||
var p = sum_p/sum_norm;
|
||||
var D = sum_D/sum_norm;
|
||||
var T = sum_T/sum_norm;
|
||||
var D = sum_D/sum_norm + temperature_offset;
|
||||
var T = sum_T/sum_norm + temperature_offset;
|
||||
|
||||
|
||||
# get an inverse distance weighted average from all defined atmospheric condition points
|
||||
|
@ -586,6 +586,7 @@ var scatt_alt_high = sum_scatt_alt_high/sum_norm;
|
|||
|
||||
# altitude model for visibility - increase above the lowest inversion layer to simulate ground haze
|
||||
|
||||
vis = vis * ground_haze_factor;
|
||||
|
||||
var altitude = getprop("position/altitude-ft");
|
||||
current_mean_terrain_elevation = ialt;
|
||||
|
@ -593,6 +594,8 @@ current_mean_terrain_elevation = ialt;
|
|||
var alt1 = vis_alt1;
|
||||
var alt2 = alt1 + 1500.0;
|
||||
|
||||
setprop("/environment/ground-visibility-m",vis);
|
||||
setprop("/environment/ground-haze-thickness-m",alt2 * ft_to_m);
|
||||
|
||||
# compute the visibility gradients
|
||||
|
||||
|
@ -628,10 +631,10 @@ else if (altitude > ovcst_alt_high)
|
|||
vis = vis + inc1 * alt1 + inc2 * (alt2-alt1) + inc3 * (ovcst_alt_high - alt2) + inc4 * (altitude - ovcst_alt_high);
|
||||
}
|
||||
|
||||
# limit visibility (otherwise memory consumption is very bad...)
|
||||
# limit visibility (otherwise memory consumption may be very bad...)
|
||||
|
||||
if (vis > 120000.0)
|
||||
{vis = 120000.0;}
|
||||
if (vis > max_vis_range)
|
||||
{vis = max_vis_range;}
|
||||
|
||||
# determine scattering shader parameters if scattering shader is on
|
||||
|
||||
|
@ -641,6 +644,8 @@ if (scattering_shader_flag == 1)
|
|||
var mie = 0.003;
|
||||
var density = 0.3;
|
||||
|
||||
|
||||
|
||||
if (altitude < 30000.0)
|
||||
{
|
||||
rayleigh = 0.0004 - altitude/30000.0 * 0.0001;
|
||||
|
@ -660,37 +665,37 @@ if (scattering_shader_flag == 1)
|
|||
{rayleigh = 0.0001; mie = 0.002;}
|
||||
}
|
||||
# otherwise compute normal skydome shader parameters
|
||||
else
|
||||
|
||||
|
||||
|
||||
# compute the horizon shading
|
||||
|
||||
if (altitude < scatt_alt_low)
|
||||
{
|
||||
|
||||
# compute the horizon shading
|
||||
|
||||
if (altitude < scatt_alt_low)
|
||||
{
|
||||
var scatt = scatt_max;
|
||||
}
|
||||
else if (altitude < scatt_alt_high)
|
||||
{
|
||||
var scatt = scatt_max + (0.95 - scatt_max) * (altitude - scatt_alt_low)/(scatt_alt_high-scatt_alt_low);
|
||||
}
|
||||
else
|
||||
{var scatt = 0.95;}
|
||||
var scatt = scatt_max;
|
||||
}
|
||||
else if (altitude < scatt_alt_high)
|
||||
{
|
||||
var scatt = scatt_max + (0.95 - scatt_max) * (altitude - scatt_alt_low)/(scatt_alt_high-scatt_alt_low);
|
||||
}
|
||||
else
|
||||
{var scatt = 0.95;}
|
||||
|
||||
|
||||
# compute the overcast haze
|
||||
|
||||
if (altitude < ovcst_alt_low)
|
||||
{
|
||||
var ovcst = ovcst_max;
|
||||
}
|
||||
else if (altitude < ovcst_alt_high)
|
||||
{
|
||||
var ovcst = ovcst_max - ovcst_max * (altitude - ovcst_alt_low)/(ovcst_alt_high-ovcst_alt_low);
|
||||
}
|
||||
else
|
||||
{var ovcst = 0.0;}
|
||||
|
||||
if (altitude < ovcst_alt_low)
|
||||
{
|
||||
var ovcst = ovcst_max;
|
||||
}
|
||||
else if (altitude < ovcst_alt_high)
|
||||
{
|
||||
var ovcst = ovcst_max - ovcst_max * (altitude - ovcst_alt_low)/(ovcst_alt_high-ovcst_alt_low);
|
||||
}
|
||||
else
|
||||
{var ovcst = 0.0;}
|
||||
|
||||
|
||||
|
||||
|
||||
# limit relative changes of the visibility, will make for gradual transitions
|
||||
|
@ -717,11 +722,10 @@ if (scattering_shader_flag == 1)
|
|||
{
|
||||
local_weather.setSkydomeShader(rayleigh, mie, density);
|
||||
}
|
||||
else
|
||||
{
|
||||
local_weather.setScattering(scatt);
|
||||
local_weather.setOvercast(ovcst);
|
||||
}
|
||||
|
||||
local_weather.setScattering(scatt);
|
||||
local_weather.setOvercast(ovcst);
|
||||
|
||||
|
||||
# now check if an effect volume writes the property and set only if not
|
||||
|
||||
|
@ -766,18 +770,24 @@ if (p>0.0)
|
|||
|
||||
# now determine the local wind
|
||||
|
||||
#var tile_index = props.globals.getNode(lw~"tiles").getChild("tile",4).getNode("tile-index").getValue();
|
||||
|
||||
var tile_index = getprop(lw~"tiles/tile[4]/tile-index");
|
||||
|
||||
if (wind_model_flag ==1) # constant
|
||||
{
|
||||
var winddir = weather_dynamics.tile_wind_direction[0];
|
||||
var windspeed = weather_dynamics.tile_wind_speed[0];
|
||||
|
||||
wind.cloudlayer = [winddir,windspeed];
|
||||
|
||||
}
|
||||
else if (wind_model_flag ==2) # constant in tile
|
||||
{
|
||||
var winddir = weather_dynamics.tile_wind_direction[tile_index-1];
|
||||
var windspeed = weather_dynamics.tile_wind_speed[tile_index-1];
|
||||
|
||||
wind.cloudlayer = [winddir, windspeed];
|
||||
|
||||
}
|
||||
else if (wind_model_flag ==3) # aloft interpolated, constant in tiles
|
||||
{
|
||||
|
@ -785,6 +795,9 @@ else if (wind_model_flag ==3) # aloft interpolated, constant in tiles
|
|||
var res = wind_altitude_interpolation(altitude,w);
|
||||
var winddir = res[0];
|
||||
var windspeed = res[1];
|
||||
|
||||
wind.cloudlayer = wind_altitude_interpolation(0.0,w);
|
||||
|
||||
}
|
||||
else if (wind_model_flag == 5) # aloft waypoint interpolated
|
||||
{
|
||||
|
@ -792,9 +805,13 @@ else if (wind_model_flag == 5) # aloft waypoint interpolated
|
|||
|
||||
var winddir = res[0];
|
||||
var windspeed = res[1];
|
||||
|
||||
wind.cloudlayer = wind_interpolation(viewpos.lat(), viewpos.lon(), 0.0);
|
||||
}
|
||||
|
||||
|
||||
wind.surface = [wind.cloudlayer[0], wind.cloudlayer[1] * get_slowdown_fraction()];
|
||||
|
||||
# now do the boundary layer computations
|
||||
|
||||
var altitude_agl = getprop("/position/altitude-agl-ft");
|
||||
|
@ -843,6 +860,15 @@ else
|
|||
}
|
||||
|
||||
|
||||
var windspeed_ground = (1.0-f_min) * windspeed;
|
||||
|
||||
|
||||
# set the wind hash before gusts, it represents mean wind
|
||||
|
||||
wind.current = [winddir,windspeed_current];
|
||||
|
||||
|
||||
|
||||
# determine gusts and turbulence in the bounday layer
|
||||
|
||||
var gust_frequency = getprop(lw~"tmp/gust-frequency-hz");
|
||||
|
@ -897,6 +923,13 @@ setprop(lw~"current/wind-from-heading-deg",winddir);
|
|||
setprop(lw~"current/wind-speed-kt",windspeed_current);
|
||||
|
||||
|
||||
# hack to get access to the water shader
|
||||
|
||||
setprop("/environment/config/boundary/entry[0]/wind-from-heading-deg",winddir);
|
||||
setprop("/environment/config/boundary/entry[0]/wind-speed-kt",windspeed_ground);
|
||||
|
||||
# end hack
|
||||
|
||||
|
||||
if (getprop(lw~"interpolation-loop-flag") ==1) {settimer(interpolation_loop, interpolation_loop_time);}
|
||||
|
||||
|
@ -1472,14 +1505,18 @@ if (path == "new") # we have to switch to new cloud generating routines
|
|||
local_weather.cloudAssembly.lon = long;
|
||||
local_weather.cloudAssembly.alt = alt;
|
||||
|
||||
#print(lat," ",long, " ", alt);
|
||||
|
||||
if (dynamics_flag == 1)
|
||||
{
|
||||
local_weather.cloudAssembly.mean_alt = cloud_mean_altitude;
|
||||
local_weather.cloudAssembly.flt = cloud_fractional_lifetime;
|
||||
local_weather.cloudAssembly.evolution_timestamp = cloud_evolution_timestamp;
|
||||
local_weather.cloudAssembly.rel_alt = c.alt - c.mean_alt;
|
||||
local_weather.cloudAssembly.rel_alt = cloudAssembly.alt - cloud_mean_altitude;
|
||||
}
|
||||
compat_layer.create_cloud_new(local_weather.cloudAssembly);
|
||||
#compat_layer.create_cloud_new(local_weather.cloudAssembly);
|
||||
|
||||
append(cloudAssemblyArray,cloudAssembly);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -1736,7 +1773,7 @@ else
|
|||
var alpha = rand() * 180.0;
|
||||
edge = edge + edge_bias;
|
||||
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-offset_map["Congestus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
|
||||
var type = "Cu (volume)";
|
||||
var height = 400;
|
||||
|
@ -1747,12 +1784,12 @@ else
|
|||
|
||||
edge = edge + edge_bias;
|
||||
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-offset_map["Congestus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
|
||||
var btype = "Congestus bottom";
|
||||
var n_b = 6;
|
||||
|
||||
create_streak(btype,lat,lon, alt - 1100.0, 100.0,n_b,0.0,edge,0.3*x,1,0.0,0.0,0.3*y,alpha,1.0);
|
||||
create_streak(btype,lat,lon, alt -offset_map["Congestus"] -200.0, 100.0,n_b,0.0,edge,0.3*x,1,0.0,0.0,0.3*y,alpha,1.0);
|
||||
|
||||
}
|
||||
else if (size>1.1)
|
||||
|
@ -1768,9 +1805,9 @@ else
|
|||
|
||||
var alpha = rand() * 180.0;
|
||||
edge = edge + edge_bias;
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-offset_map["Cumulus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
|
||||
create_streak(btype,lat,lon, alt -600.0, 100.0,n_b,0.0,edge,0.3*x,1,0.0,0.0,0.3*y,alpha,1.0);
|
||||
create_streak(btype,lat,lon, alt -offset_map["Cumulus"] - 200.0, 100.0,n_b,0.0,edge,0.3*x,1,0.0,0.0,0.3*y,alpha,1.0);
|
||||
|
||||
}
|
||||
else if (size>0.8)
|
||||
|
@ -1784,13 +1821,13 @@ else
|
|||
|
||||
var alpha = rand() * 180.0;
|
||||
edge = edge + edge_bias;
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-offset_map["Cumulus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
|
||||
n = 2;
|
||||
x = 700.0;
|
||||
y = 200.0;
|
||||
edge = 1.0;
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-offset_map["Cumulus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
}
|
||||
|
||||
else if (size>0.4)
|
||||
|
@ -1804,7 +1841,7 @@ else
|
|||
|
||||
var alpha = rand() * 180.0;
|
||||
edge = edge + edge_bias;
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height)-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height)-offset_map["Cumulus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1817,7 +1854,7 @@ else
|
|||
|
||||
var alpha = rand() * 180.0;
|
||||
edge = edge + edge_bias;
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-600.0, height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
create_streak(type,lat,lon, alt+ 0.3* (height )-offset_map["Cumulus"], height,n,0.0,edge,x,1,0.0,0.0,y,alpha,1.0);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1833,7 +1870,7 @@ else
|
|||
var create_cumulonimbus_cloud = func(lat, lon, alt, size) {
|
||||
|
||||
if (hardcoded_clouds_flag == 1)
|
||||
{create_cloudbox("Cb_box", lat, lon, alt, 2500.0,2000.0, 1000.0,14, 0.2, 0.1, 3.4, 8, 0.9, 0.2, 8);}
|
||||
{create_cloudbox("Cb_box", lat, lon, alt, 2500.0,2000.0, 1000.0,14, 0.2, 0.1, 3.4, 8, 0.8, 0.1, 8);}
|
||||
else
|
||||
{create_cloudbox("Cb_box", lat, lon, alt, 2500.0,2000.0, 1000.0,14, 0.2, 0.1, 1.4, 4, 0.9, 0.2, 8);}
|
||||
|
||||
|
@ -1848,7 +1885,7 @@ else
|
|||
var create_cumulonimbus_cloud_rain = func(lat, lon, alt, size, rain) {
|
||||
|
||||
if (hardcoded_clouds_flag == 1)
|
||||
{create_cloudbox("Cb_box", lat, lon, alt, 2500.0,2000.0, 1000.0,14, 0.2, 0.1, 3.4, 8, 0.9, 0.2, 8);}
|
||||
{create_cloudbox("Cb_box", lat, lon, alt, 2500.0,2000.0, 1000.0,14, 0.2, 0.1, 3.4, 8, 0.8, 0.1, 8);}
|
||||
else
|
||||
{create_cloudbox("Cb_box", lat, lon, alt, 2500.0,2000.0, 1000.0,14, 0.2, 0.1, 1.4, 4, 0.9, 0.2, 8);}
|
||||
|
||||
|
@ -1939,18 +1976,21 @@ var detail_flag = detailed_clouds_flag;
|
|||
|
||||
var alpha = getprop(lw~"tmp/tile-orientation-deg") * math.pi/180.0; # the tile orientation
|
||||
|
||||
if (detailed_terrain_interaction_flag == 1)
|
||||
{
|
||||
var tile_index = getprop(lw~"tiles/tile-counter");
|
||||
var tile_index = getprop(lw~"tiles/tile-counter");
|
||||
var alt_base = alt_20_array[tile_index -1];
|
||||
|
||||
#if (detailed_terrain_interaction_flag == 1)
|
||||
# {
|
||||
#var tile_index = getprop(lw~"tiles/tile-counter");
|
||||
#var alt_min = alt_min_array[tile_index-1];
|
||||
#var alt_mean = alt_mean_array[tile_index -1];
|
||||
#var alt_median = alt_50_array[tile_index -1];
|
||||
#var alt_base = alt_20_array[tile-index -1];
|
||||
#var alt_base = alt_20_array[tile_index -1];
|
||||
#var alt_min = getprop(lw~"tmp/tile-alt-min-ft");
|
||||
#var alt_mean = getprop(lw~"tmp/tile-alt-mean-ft");
|
||||
#var alt_median = getprop(lw~"tmp/tile-alt-median-ft");
|
||||
#var alt_base = getprop(lw~"tmp/tile-alt-offset-ft");
|
||||
}
|
||||
# }
|
||||
|
||||
var sec_to_rad = 2.0 * math.pi/86400; # conversion factor for sinusoidal dependence on daytime
|
||||
|
||||
|
@ -2003,7 +2043,13 @@ while (i < nc) {
|
|||
if (contains(landcover_map,landcover)) {p = p + landcover_map[landcover];}
|
||||
else {print(p, " ", info[1].names[0]);}
|
||||
}}
|
||||
else {continue;}
|
||||
else {
|
||||
# to avoid gaps, we create default clouds
|
||||
|
||||
p = p + 0.1;
|
||||
var elevation = alt_base;
|
||||
# continue;
|
||||
}
|
||||
|
||||
|
||||
# apply some optional corrections, biases clouds towards higher elevations
|
||||
|
@ -2056,8 +2102,10 @@ while (i < nc) {
|
|||
}
|
||||
|
||||
|
||||
# now decide on the strength of the thermal
|
||||
strength = (1.5 * rand() + (2.0 * p * terrain_strength_factor)) * t_factor2; # the strength of thermal activity at the spot
|
||||
# now decide on the strength of the thermal at the spot and on cloud size
|
||||
|
||||
var rn = rand();
|
||||
strength = (1.5 * rn + (2.0 * p * terrain_strength_factor)) * t_factor2;
|
||||
if (strength > 1.0)
|
||||
{
|
||||
# we place a large cloud, and we generate lift
|
||||
|
@ -2065,7 +2113,15 @@ while (i < nc) {
|
|||
}
|
||||
else {path = select_cloud_model("Cumulus","small");}
|
||||
|
||||
|
||||
# the terrain effect cannot create Cb development, so we have to curb
|
||||
# the strength if it would not have been Cb otherwise
|
||||
|
||||
if (strength > 2.0)
|
||||
{
|
||||
if (((1.5 * rn + (2.0 * p)) * t_factor2) < 2.0)
|
||||
{strength = 1.7 + rand() * 0.2;}
|
||||
}
|
||||
|
||||
|
||||
cloud_mean_altitude = place_alt;
|
||||
cloud_fractional_lifetime = rand();
|
||||
|
@ -2168,6 +2224,7 @@ nc = t_factor1 * nc * math.cos(blat/180.0*math.pi);
|
|||
|
||||
var thermal_conditions = getprop(lw~"config/thermal-properties");
|
||||
|
||||
var alt_base = alt_20_array[tile_index -1];
|
||||
|
||||
while (i < nc) {
|
||||
|
||||
|
@ -2198,7 +2255,13 @@ while (i < nc) {
|
|||
if (contains(landcover_map,landcover)) {p = p + landcover_map[landcover];}
|
||||
else {print(p, " ", info[1].names[0]);}
|
||||
}}
|
||||
else {continue;}
|
||||
else {
|
||||
# to avoid gaps, we create default clouds
|
||||
|
||||
p = p + 0.1;
|
||||
var elevation = alt_base;
|
||||
# continue;
|
||||
}
|
||||
|
||||
|
||||
# apply some optional corrections, biases clouds towards higher elevations
|
||||
|
@ -2578,6 +2641,8 @@ var n = int(area/80000000.0 * 100 * density);
|
|||
var m = int(circ/63000.0 * 40 * rain_density);
|
||||
var path = "Models/Weather/blank.ac";
|
||||
|
||||
#print("density: ",n);
|
||||
|
||||
phi = phi * math.pi/180.0;
|
||||
|
||||
if (contains(cloud_vertical_size_map, type))
|
||||
|
@ -2599,7 +2664,10 @@ while(i<n)
|
|||
{
|
||||
if (rand() > 0.4) {
|
||||
path = select_cloud_model(type,"small");
|
||||
compat_layer.create_cloud(path, lat, lon, alt, 0.0);
|
||||
if (thread_flag == 1)
|
||||
{create_cloud_vec(path, lat, lon, alt, 0.0);}
|
||||
else
|
||||
{compat_layer.create_cloud(path, lat, lon, alt, 0.0);}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -2617,6 +2685,8 @@ i = 0;
|
|||
|
||||
if (rainflag ==1){
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {balt = balt + local_weather.offset_map[type]; }
|
||||
|
||||
while(i<m)
|
||||
{
|
||||
var alpha = rand() * 2.0 * math.pi;
|
||||
|
@ -3513,7 +3583,7 @@ if (getprop(lw~"config/generate-thermal-lift-flag") ==1) {generate_thermal_lift_
|
|||
else {generate_thermal_lift_flag = 0};
|
||||
|
||||
thread_flag = getprop(lw~"config/thread-flag");
|
||||
dynamics_flag = getprop(lw~"config/dynamics-flag");
|
||||
# dynamics_flag = getprop(lw~"config/dynamics-flag");
|
||||
presampling_flag = getprop(lw~"config/presampling-flag");
|
||||
detailed_clouds_flag = getprop(lw~"config/detailed-clouds-flag");
|
||||
dynamical_convection_flag = getprop(lw~"config/dynamical-convection-flag");
|
||||
|
@ -3781,6 +3851,16 @@ if (dynamical_convection_flag == 1)
|
|||
}
|
||||
}
|
||||
|
||||
if (detailed_terrain_interaction_flag == 1)
|
||||
{
|
||||
if (presampling_flag == 0)
|
||||
{
|
||||
print("Terrain effect needs terrain presampling to run! Aborting...");
|
||||
setprop("/sim/messages/pilot", "Local weather: terrain effect needs terrain presampling to run! Aborting...");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# if we can do so, we switch global weather and METAR parsing in environment off at this point
|
||||
|
||||
|
@ -3851,6 +3931,12 @@ if (metar_flag == 1) # the winds from current METAR are used
|
|||
var metar_base_wind_deg = getprop("environment/metar/base-wind-dir-deg");
|
||||
var metar_base_wind_speed = boundary_correction * getprop("environment/metar/base-wind-speed-kt");
|
||||
|
||||
# set the wind hash for the new scheme
|
||||
|
||||
wind.cloudlayer = [metar_base_wind_deg,metar_base_wind_speed];
|
||||
wind.surface = [metar_base_wind_deg,metar_base_wind_speed/boundary_correction];
|
||||
wind.current = wind.surface;
|
||||
|
||||
|
||||
if ((wind_model_flag == 1) or (wind_model_flag == 2))
|
||||
{
|
||||
|
@ -3880,6 +3966,8 @@ if (metar_flag == 1) # the winds from current METAR are used
|
|||
}
|
||||
else
|
||||
{
|
||||
setprop(lw~"tiles/tile[4]/tile-index",1);
|
||||
var boundary_correction = get_slowdown_fraction();
|
||||
|
||||
if (wind_model_flag == 5) # it needs to be interpolated
|
||||
{
|
||||
|
@ -3887,16 +3975,36 @@ else
|
|||
|
||||
append(weather_dynamics.tile_wind_direction,res[0]);
|
||||
append(weather_dynamics.tile_wind_speed,res[1]);
|
||||
|
||||
# set the wind hash for the new scheme
|
||||
|
||||
wind.surface = [res[0],res[1] * boundary_correction];
|
||||
wind.cloudlayer = res;
|
||||
wind.current = wind.surface;
|
||||
|
||||
|
||||
}
|
||||
else if (wind_model_flag == 3) # it comes from a different menu
|
||||
{
|
||||
append(weather_dynamics.tile_wind_direction, getprop(lw~"tmp/FL0-wind-from-heading-deg"));
|
||||
append(weather_dynamics.tile_wind_speed, getprop(lw~"tmp/FL0-windspeed-kt"));
|
||||
|
||||
# set the wind hash for the new scheme
|
||||
wind.cloudlayer = [getprop(lw~"tmp/FL0-wind-from-heading-deg"),getprop(lw~"tmp/FL0-windspeed-kt") ];
|
||||
wind.surface = [wind.cloudlayer[0],wind.cloudlayer[1] * boundary_correction];
|
||||
wind.current = wind.surface;
|
||||
|
||||
}
|
||||
else # it comes from the standard menu
|
||||
{
|
||||
append(weather_dynamics.tile_wind_direction, getprop(lw~"tmp/tile-orientation-deg"));
|
||||
append(weather_dynamics.tile_wind_speed, getprop(lw~"tmp/windspeed-kt"));
|
||||
|
||||
# set the wind hash for the new scheme
|
||||
wind.cloudlayer = [getprop(lw~"tmp/tile-orientation-deg"),getprop(lw~"tmp/windspeed-kt")];
|
||||
wind.surface = [wind.cloudlayer[0],wind.cloudlayer[1] * boundary_correction];
|
||||
wind.current = wind.surface;
|
||||
|
||||
}
|
||||
|
||||
# when the aloft wind menu is used, the lowest winds should be taken from there
|
||||
|
@ -3964,6 +4072,8 @@ else if (type == "Warmfront-3")
|
|||
{weather_tiles.set_warmfront3_tile();}
|
||||
else if (type == "Warmfront-4")
|
||||
{weather_tiles.set_warmfront4_tile();}
|
||||
else if (type == "Thunderstorms")
|
||||
{weather_tiles.set_thunderstorms_tile();}
|
||||
else if (type == "METAR")
|
||||
{weather_tiles.set_METAR_tile();}
|
||||
else if (type == "Altocumulus sky")
|
||||
|
@ -4018,11 +4128,12 @@ if (getprop(lw~"effect-loop-flag") == 0)
|
|||
|
||||
# start weather dynamics loops if needed
|
||||
|
||||
if (getprop(lw~"timing-loop-flag") == 0)
|
||||
{setprop(lw~"timing-loop-flag",1); local_weather.timing_loop();}
|
||||
|
||||
if (dynamics_flag ==1)
|
||||
{
|
||||
if (getprop(lw~"timing-loop-flag") == 0)
|
||||
{setprop(lw~"timing-loop-flag",1); weather_dynamics.timing_loop();}
|
||||
|
||||
|
||||
if (getprop(lw~"dynamics-loop-flag") == 0)
|
||||
{
|
||||
|
@ -4042,7 +4153,6 @@ if (dynamics_flag ==1)
|
|||
|
||||
# and start the buffer loop and housekeeping loop if needed
|
||||
|
||||
#if (getprop(lw~"config/buffer-flag") ==1)
|
||||
if (buffer_flag == 1)
|
||||
{
|
||||
if (getprop(lw~"buffer-loop-flag") == 0)
|
||||
|
@ -4128,8 +4238,8 @@ setprop(lw~"METAR/available-flag",1);
|
|||
|
||||
# set listeners
|
||||
|
||||
setlistener(lw~"tmp/thread-status", func {var s = size(clouds_path); compat_layer.create_cloud_array(s, clouds_path, clouds_lat, clouds_lon, clouds_alt, clouds_orientation); });
|
||||
setlistener(lw~"tmp/convective-status", func {var s = size(clouds_path); compat_layer.create_cloud_array(s, clouds_path, clouds_lat, clouds_lon, clouds_alt, clouds_orientation); });
|
||||
setlistener(lw~"tmp/thread-status", func {var s = size(clouds_path); compat_layer.create_cloud_array(s, clouds_path, clouds_lat, clouds_lon, clouds_alt, clouds_orientation); });
|
||||
setlistener(lw~"tmp/convective-status", func {var s = size(clouds_path); compat_layer.create_cloud_array(s, clouds_path, clouds_lat, clouds_lon, clouds_alt, clouds_orientation); });
|
||||
setlistener(lw~"tmp/effect-thread-status", func {var s = size(effects_geo); effect_placement_loop(s); });
|
||||
setlistener(lw~"tmp/presampling-status", func {manage_presampling(); });
|
||||
|
||||
|
@ -4145,6 +4255,10 @@ setlistener(lw~"config/fps-control-flag", func {fps_control_flag = getprop(lw~"c
|
|||
setlistener(lw~"config/target-framerate", func {target_framerate = getprop(lw~"config/target-framerate");});
|
||||
|
||||
setlistener(lw~"config/small-scale-persistence", func {weather_tiles.small_scale_persistence = getprop(lw~"config/small-scale-persistence");});
|
||||
setlistener(lw~"config/ground-haze-factor", func {ground_haze_factor = getprop(lw~"config/ground-haze-factor");});
|
||||
setlistener(lw~"config/max-vis-range-m", func {max_vis_range = getprop(lw~"config/max-vis-range-m");});
|
||||
|
||||
setlistener(lw~"config/temperature-offset-degc", func {temperature_offset = getprop(lw~"config/temperature-offset-degc");});
|
||||
|
||||
setlistener("/sim/rendering/scattering-shader", func {scattering_shader_flag = getprop("/sim/rendering/scattering-shader"); });
|
||||
}
|
||||
|
@ -4179,7 +4293,7 @@ presampling_flag = 0;
|
|||
|
||||
#var pos = geo.aircraft_position();
|
||||
|
||||
#debug.dump(geodinfo(lat, lon));
|
||||
debug.dump(geodinfo(lat, lon));
|
||||
|
||||
#create_cumulonimbus_cloud(lat, lon, 6000.0, 2.5);
|
||||
|
||||
|
@ -4190,7 +4304,7 @@ presampling_flag = 0;
|
|||
|
||||
#setprop("/environment/terrain/area[0]/output/valid", 0 );
|
||||
|
||||
elttest();
|
||||
# elttest();
|
||||
|
||||
}
|
||||
|
||||
|
@ -4471,12 +4585,16 @@ var ec = "/environment/config/";
|
|||
|
||||
# a hash map of the strength for convection associated with terrain types
|
||||
|
||||
var landcover_map = {BuiltUpCover: 0.35, Town: 0.35, Freeway:0.35, BarrenCover:0.3, HerbTundraCover: 0.25, GrassCover: 0.2, CropGrassCover: 0.2, EvergreenBroadCover: 0.2, EvergreenNeedleCover: 0.2, Sand: 0.25, Grass: 0.2, Ocean: 0.01, Marsh: 0.05, Lake: 0.01, ShrubCover: 0.15, Landmass: 0.2, CropWoodCover: 0.15, MixedForestCover: 0.15, DryCropPastureCover: 0.25, MixedCropPastureCover: 0.2, IrrCropPastureCover: 0.15, DeciduousBroadCover: 0.1, DeciduousNeedleCover: 0.1, Bog: 0.05, pa_taxiway : 0.35, pa_tiedown: 0.35, pc_taxiway: 0.35, pc_tiedown: 0.35, Glacier: 0.03, DryLake: 0.3, IntermittentStream: 0.2, DryCrop: 0.2, Lava: 0.3, GolfCourse: 0.2};
|
||||
var landcover_map = {BuiltUpCover: 0.35, Town: 0.35, Freeway:0.35, BarrenCover:0.3, HerbTundraCover: 0.25, GrassCover: 0.2, CropGrassCover: 0.2, EvergreenBroadCover: 0.2, EvergreenNeedleCover: 0.2, Sand: 0.25, Grass: 0.2, Ocean: 0.01, Marsh: 0.05, Lake: 0.01, ShrubCover: 0.15, Landmass: 0.2, CropWoodCover: 0.15, MixedForestCover: 0.15, DryCropPastureCover: 0.25, MixedCropPastureCover: 0.2, IrrCropPastureCover: 0.15, DeciduousBroadCover: 0.1, DeciduousNeedleCover: 0.1, Bog: 0.05, pa_taxiway : 0.35, pa_tiedown: 0.35, pc_taxiway: 0.35, pc_tiedown: 0.35, Glacier: 0.03, SnowCover: 0.04, DryLake: 0.3, IntermittentStream: 0.2, DryCrop: 0.2, Lava: 0.3, GolfCourse: 0.2, Rock: 0.3, Construction: 0.35};
|
||||
|
||||
# a hash map of average vertical cloud model sizes
|
||||
|
||||
var cloud_vertical_size_map = {Altocumulus: 700.0, Cumulus: 600.0, Congestus: 2000.0, Nimbus: 1000.0, Stratus: 800.0, Stratus_structured: 600.0, Stratus_thin: 400.0, Cirrocumulus: 200.0, Cb_box: 2000.0};
|
||||
|
||||
# a hash map of offsets for the new cloud rendering system
|
||||
|
||||
var offset_map = {Nimbus: 2800.0, Stratus: 2000.0, Stratus_thin: 2500.0, Cirrostratus: 4500.0, Stratus_structured: 1800.0, Stratus_alt: 600.0, Cumulus: 200.0, Congestus: 600.0 };
|
||||
|
||||
# the array of aloft wind interpolation altitudes
|
||||
|
||||
var wind_altitude_array = [0.0, 5000.0, 10000.0, 18000.0, 24000.0, 30000.0, 34000.0, 39000.0, 45000.0];
|
||||
|
@ -4522,6 +4640,9 @@ var n_effectVolumeArray = 0;
|
|||
var thermal = {};
|
||||
var wave = {};
|
||||
|
||||
# the wind hash stores the current winds
|
||||
|
||||
var wind = {surface: [0.0,0.0] , cloudlayer: [0.0,0.0], current: [0.0,0.0]};
|
||||
|
||||
|
||||
|
||||
|
@ -4573,6 +4694,11 @@ var hardcoded_clouds_flag = 1;
|
|||
var realistic_visibility_flag = 0;
|
||||
var scattering_shader_flag = 0;
|
||||
|
||||
var ground_haze_factor = 1.0;
|
||||
var max_vis_range = 120000.0;
|
||||
var temperature_offset = 0.0;
|
||||
|
||||
|
||||
# globals for framerate controlled cloud management
|
||||
|
||||
var fps_average = 0.0;
|
||||
|
@ -4628,6 +4754,8 @@ setprop(lw~"effect-volumes/number-active-turb",0);
|
|||
setprop(lw~"effect-volumes/number-active-lift",0);
|
||||
setprop(lw~"effect-volumes/number-active-sat",0);
|
||||
|
||||
# setprop(lw~"config/max-vis-range-m", 120000.0);
|
||||
setprop(lw~"config/temperature-offset-degc", 0.0);
|
||||
|
||||
# create properties for tile management
|
||||
|
||||
|
|
|
@ -27,7 +27,19 @@
|
|||
|
||||
var get_windfield = func (tile_index) {
|
||||
|
||||
var windfield = [];
|
||||
|
||||
if (hardcoded_clouds_flag == 1)
|
||||
{
|
||||
var wind_direction = local_weather.wind.current[0];
|
||||
var windspeed = local_weather.wind.current[1] * kt_to_ms;
|
||||
|
||||
var windfield_x = -windspeed * math.sin(wind_direction * math.pi/180.0);
|
||||
var windfield_y = -windspeed * math.cos(wind_direction * math.pi/180.0);
|
||||
|
||||
return [windfield_x,windfield_y];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -47,15 +59,17 @@ else if ((local_weather.wind_model_flag ==2) or (local_weather.wind_model_flag =
|
|||
var windfield_x = -windspeed * math.sin(wind_direction * math.pi/180.0);
|
||||
var windfield_y = -windspeed * math.cos(wind_direction * math.pi/180.0);
|
||||
|
||||
append(windfield,windfield_x);
|
||||
append(windfield,windfield_y);
|
||||
|
||||
return windfield;
|
||||
return [windfield_x,windfield_y];
|
||||
}
|
||||
|
||||
|
||||
var get_wind_direction = func (tile_index) {
|
||||
|
||||
if (hardcoded_clouds_flag == 1)
|
||||
{
|
||||
return local_weather.wind.current[0];
|
||||
}
|
||||
|
||||
if ((local_weather.wind_model_flag == 1) or (local_weather.wind_model_flag == 3))
|
||||
{
|
||||
return tile_wind_direction[0];
|
||||
|
@ -69,6 +83,11 @@ else if ((local_weather.wind_model_flag ==2) or (local_weather.wind_model_flag =
|
|||
|
||||
var get_wind_speed = func (tile_index) {
|
||||
|
||||
if (hardcoded_clouds_flag == 1)
|
||||
{
|
||||
return local_weather.wind.current[1];
|
||||
}
|
||||
|
||||
if ((local_weather.wind_model_flag == 1) or (local_weather.wind_model_flag == 3))
|
||||
{
|
||||
return tile_wind_speed[0];
|
||||
|
@ -94,6 +113,15 @@ if (local_weather.local_weather_running_flag == 0) {return;}
|
|||
dt_lw = getprop("/sim/time/delta-sec");
|
||||
time_lw = time_lw + dt_lw;
|
||||
|
||||
# this is a really ugly hack to get the sun angle information to the shaders
|
||||
# directly referencing /sim/time/sun-angle-rad as uniform doesn't
|
||||
# work since that is a tied property
|
||||
|
||||
var sun_angle = 1.57079632675 - getprop("/sim/time/sun-angle-rad");
|
||||
|
||||
var terminator_offset = sun_angle / 0.017451 * 110000.0 + 250000.0;
|
||||
setprop("/environment/terminator-relative-position-m",terminator_offset);
|
||||
|
||||
if (getprop(lw~"timing-loop-flag") ==1) {settimer(timing_loop, 0);}
|
||||
|
||||
}
|
||||
|
|
|
@ -43,8 +43,8 @@ var code = getprop(lw~"tiles/tile[4]/code");
|
|||
var i = 0;
|
||||
var d_min = 100000.0;
|
||||
var i_min = 0;
|
||||
var distance_to_load = getprop(lw~"config/distance-to-load-tile-m");
|
||||
var distance_to_remove = getprop(lw~"config/distance-to-remove-tile-m");
|
||||
# var distance_to_load = getprop(lw~"config/distance-to-load-tile-m");
|
||||
# var distance_to_remove = getprop(lw~"config/distance-to-remove-tile-m");
|
||||
var current_visibility = getprop(lw~"interpolation/visibility-m");
|
||||
var current_heading = getprop("orientation/heading-deg");
|
||||
var loading_flag = getprop(lw~"tmp/asymmetric-tile-loading-flag");
|
||||
|
@ -53,10 +53,18 @@ var this_frame_action_flag = 0; # use this flag to avoid overlapping tile operat
|
|||
setsize(active_tile_list,0);
|
||||
#append(active_tile_list,0); # tile zero formally containing static objects is always active
|
||||
|
||||
if (distance_to_load > 3.0 * current_visibility)
|
||||
{distance_to_load = 3.0 * current_visibility;}
|
||||
if (distance_to_load < 29000.0)
|
||||
{distance_to_load = 29000.0;}
|
||||
var distance_to_load = current_visibility;
|
||||
|
||||
if (distance_to_load > 65000.0) {distance_to_load = 65000.0;}
|
||||
if (distance_to_load < 29000.0) {distance_to_load = 29000.0;}
|
||||
|
||||
|
||||
#if (distance_to_load > 3.0 * current_visibility)
|
||||
# {distance_to_load = 3.0 * current_visibility;}
|
||||
#if (distance_to_load < 29000.0)
|
||||
# {distance_to_load = 29000.0;}
|
||||
|
||||
var distance_to_remove = distance_to_load + 500.0;
|
||||
|
||||
# check here if we have a new weather station if METAR is running
|
||||
|
||||
|
@ -473,6 +481,7 @@ if (getprop(lw~"tmp/tile-management") == "repeat tile")
|
|||
else if (code == "cold_sector") {weather_tiles.set_cold_sector_tile();}
|
||||
else if (code == "warm_sector") {weather_tiles.set_warm_sector_tile();}
|
||||
else if (code == "tropical_weather") {weather_tiles.set_tropical_weather_tile();}
|
||||
else if (code == "thunderstorms") {weather_tiles.set_thunderstorms_tile();}
|
||||
else if (code == "test") {weather_tiles.set_4_8_stratus_tile();}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -96,22 +96,29 @@ calc_geo(blat);
|
|||
|
||||
# first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, 20000.0, 14.0, 12.0, 29.78);
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, 30000.0, 14.0, 12.0, 29.78);
|
||||
|
||||
#strength = 0.5;
|
||||
alt_offset = 0.0;
|
||||
|
||||
#var strength = 0.5;
|
||||
#local_weather.create_cumosys(blat,blon, 3000.0, get_n(strength), 20000.0);
|
||||
|
||||
#create_2_8_altocumulus_streaks(blat, blon, 12000+alt_offset, alpha) ;
|
||||
#create_2_8_altocumulus_streaks(blat, blon, 12000+alt_offset, alpha) ;
|
||||
#create_6_8_stratus(blat, blon, 3000+alt_offset, alpha) ;
|
||||
#create_4_8_tstratus_patches(blat, blon, 5000+alt_offset, alpha) ;
|
||||
#create_4_8_sstratus_patches(blat, blon, 12000+alt_offset, alpha) ;
|
||||
#create_4_8_cirrostratus_patches(blat, blon, 20000+alt_offset, alpha) ;
|
||||
#create_4_8_sstratus_patches(blat, blon, 5000+alt_offset, alpha) ;
|
||||
#create_4_8_cirrostratus_patches(blat, blon, 5000+alt_offset, alpha) ;
|
||||
|
||||
#create_4_8_cirrocumulus_streaks(blat, blon, 10000.0 + alt_offset, alpha);
|
||||
create_4_8_alttstratus_streaks(blat, blon, 5000+alt_offset, alpha) ;
|
||||
#create_4_8_alttstratus_streaks(blat, blon, 5000+alt_offset, alpha) ;
|
||||
#create_2_8_cirrocumulus_patches(blat, blon, 13000+alt_offset, alpha) ;
|
||||
#create_8_8_nimbus_rain(blat, blon, 5000+alt_offset, alpha, 0.3) ;
|
||||
|
||||
#create_8_8_nimbus_rain(blat, blon, 3000+alt_offset, alpha, 0.3) ;
|
||||
#create_8_8_tstratus(blat, blon, 5000+alt_offset, alpha);
|
||||
#create_8_8_cirrostratus(blat, blon, 5000+alt_offset, alpha);
|
||||
create_thunderstorm_scenario (blat, blon, 3000.0, alpha);
|
||||
#create_big_thunderstorm (blat, blon, 3000.0, alpha);
|
||||
|
||||
#create_4_8_altocumulus_perlucidus(blat, blon, 5000+alt_offset, alpha) ;
|
||||
|
||||
|
@ -121,7 +128,7 @@ create_4_8_alttstratus_streaks(blat, blon, 5000+alt_offset, alpha) ;
|
|||
|
||||
|
||||
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, 45000.0, 10000.0, 45000.0, 0.0, 25000.0, 30000.0, 0.9, 10000.0, 11000.0);
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, 45000.0, 15000.0, 45000.0, 0.0, 15000.0, 17000.0, 0.8, 12000.0, 17000.0);
|
||||
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,3000.0);
|
||||
|
@ -160,12 +167,14 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 30000.0 + rand() * 15000.0;
|
||||
var vis = 25000.0 + rand() * 10000.0;
|
||||
var T = 20.0 + rand() * 10.0;
|
||||
var spread = 14.0 + 8.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1025.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -298,12 +307,14 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 25000.0 + rand() * 15000.0;
|
||||
var vis = 20000.0 + rand() * 10000.0;
|
||||
var T = 15.0 + rand() * 10.0;
|
||||
var spread = 10.0 + 4.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1019.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -445,12 +456,14 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 20000.0 + rand() * 12000.0;
|
||||
var vis = 15000.0 + rand() * 7000.0;
|
||||
var T = 12.0 + rand() * 10.0;
|
||||
var spread = 7.0 + 4.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1013.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -653,12 +666,14 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 12000.0 + rand() * 9000.0;
|
||||
var vis = 8000.0 + rand() * 8000.0;
|
||||
var T = 10.0 + rand() * 10.0;
|
||||
var spread = 6.0 + 2.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1007.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -802,7 +817,7 @@ var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
|||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
||||
if (getprop(lw~"tmp/presampling-flag") == 0)
|
||||
if (local_weather.presampling_flag == 0)
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
else
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
|
||||
|
@ -815,13 +830,13 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 9000.0 + rand() * 10000.0;
|
||||
var vis = 8000.0 + rand() * 5000.0;
|
||||
var T = 5.0 + rand() * 10.0;
|
||||
var spread = 5.0 + 2.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1001.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
@ -832,11 +847,15 @@ var strength = 0.0;
|
|||
|
||||
var rn = rand();
|
||||
|
||||
|
||||
|
||||
if (rand() < small_scale_persistence)
|
||||
{rn = rnd_store;}
|
||||
else
|
||||
{rnd_store = rn;}
|
||||
|
||||
rn = 0.1;
|
||||
|
||||
|
||||
if (rn > 0.8)
|
||||
{
|
||||
|
@ -849,7 +868,10 @@ if (rn > 0.8)
|
|||
y = 2.0 * (rand()-0.5) * 11000.0;
|
||||
var beta = rand() * 360.0;
|
||||
|
||||
local_weather.create_layer("Nimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 1, 1.0);
|
||||
var alt_eff = alt;
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_eff = alt_eff - 3000.0;}
|
||||
|
||||
local_weather.create_layer("Nimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt_eff+alt_offset, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 1, 1.0);
|
||||
local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 10000.0, 6000.0, beta, 0.0, alt + alt_offset, 5000.0, 0.3, -1, -1, -1,0,-1 );
|
||||
local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 9000.0, 5000.0, beta, 0.0, alt+alt_offset-300.0, 1500.0, 0.5, -1, -1, -1,0,-1 );
|
||||
|
||||
|
@ -857,7 +879,7 @@ if (rn > 0.8)
|
|||
y = 2.0 * (rand()-0.5) * 11000.0;
|
||||
var beta = rand() * 360.0;
|
||||
|
||||
local_weather.create_layer("Nimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, 500.0, 10000.0, 6000.0, beta, 1.0, 0.2, 1, 1.0);
|
||||
local_weather.create_layer("Nimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt_eff+alt_offset, 500.0, 10000.0, 6000.0, beta, 1.0, 0.2, 1, 1.0);
|
||||
local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 9000.0, 5000.0, beta, 0.0, alt + alt_offset, 5000.0, 0.3, -1, -1, -1,0 ,-1);
|
||||
local_weather.create_effect_volume(2, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 8000.0, 4000.0, beta, 0.0, alt+alt_offset-300.0, 1500.0, 0.5, -1, -1, -1,0,-1 );
|
||||
|
||||
|
@ -952,7 +974,7 @@ var lon = 0.0;
|
|||
var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (getprop(lw~"tmp/presampling-flag") == 0)
|
||||
if (local_weather.presampling_flag == 0)
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
else
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
|
||||
|
@ -971,6 +993,8 @@ var spread = 4.5 + 1.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 995.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -980,6 +1004,7 @@ local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_i
|
|||
var alt = spread * 400.0 + local_weather.cloud_vertical_size_map["Nimbus"] * 0.5 * m_to_ft;
|
||||
var strength = 0.0;
|
||||
|
||||
#var alt = 3000.0;
|
||||
|
||||
create_8_8_nimbus_rain(blat, blon, alt+alt_offset, alpha,0.4 + rand()*0.2);
|
||||
|
||||
|
@ -1036,12 +1061,14 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 45000.0 + rand() * 20000.0;
|
||||
var vis = 40000.0 + rand() * 15000.0;
|
||||
var T = 8.0 + rand() * 8.0;
|
||||
var spread = 7.0 + 3.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1005.0 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -1131,12 +1158,14 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 12000.0 + rand() * 10000.0;
|
||||
var vis = 8000.0 + rand() * 5000.0;
|
||||
var T = 16.0 + rand() * 10.0;
|
||||
var spread = 6.0 + 3.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1005.0 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# and set them at the tile center
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
@ -1273,6 +1302,8 @@ var spread = 8.0 + 2.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 970 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
@ -1374,6 +1405,82 @@ tile_finished();
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
####################################
|
||||
# Thunderstorms
|
||||
####################################
|
||||
|
||||
var set_thunderstorms_tile = func {
|
||||
|
||||
setprop(lw~"tiles/code","thunderstorms");
|
||||
|
||||
tile_start();
|
||||
|
||||
var x = 0.0;
|
||||
var y = 0.0;
|
||||
var lat = 0.0;
|
||||
var lon = 0.0;
|
||||
|
||||
|
||||
var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");
|
||||
|
||||
# get tile center coordinates
|
||||
|
||||
var blat = getprop(lw~"tiles/tmp/latitude-deg");
|
||||
var blon = getprop(lw~"tiles/tmp/longitude-deg");
|
||||
calc_geo(blat);
|
||||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 9000.0 + rand() * 10000.0;
|
||||
var T = 10.0 + rand() * 15.0;
|
||||
var spread = 8.0 + 2.0 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1000 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile center (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
# altitude for the lowest layer
|
||||
var alt = spread * 400.0;
|
||||
var strength = 0.0;
|
||||
|
||||
# bias Cumulus clouds towards larger sizes due to lots of water vapour
|
||||
local_weather.convective_size_bias = 0.3 + rand() * 0.3;
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 12000.0, alt+alt_offset, vis + 20000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.65, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
var rn = rand();
|
||||
|
||||
|
||||
if (rand() < small_scale_persistence)
|
||||
{rn = rnd_store;}
|
||||
else
|
||||
{rnd_store = rn;}
|
||||
|
||||
create_thunderstorm_scenario (blat, blon, alt + alt_offset, alpha);
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
append(weather_dynamics.tile_convective_strength,strength);
|
||||
|
||||
tile_finished();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
####################################
|
||||
# Coldfront
|
||||
####################################
|
||||
|
@ -1410,6 +1517,8 @@ var spread = 8.0 + 2.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 1005 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
# after the front
|
||||
|
@ -1525,7 +1634,7 @@ var lon = 0.0;
|
|||
var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (getprop(lw~"tmp/presampling-flag") == 0)
|
||||
if (local_weather.presampling_flag == 0)
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
else
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
|
||||
|
@ -1544,6 +1653,8 @@ var spread = 9.0 + 4.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 1005 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
# after the front
|
||||
|
@ -1587,7 +1698,10 @@ for (var i=0; i<6; i=i+1)
|
|||
var x = 2.0 * (rand()-0.5) * 15000;
|
||||
var y = 2.0 * (rand()-0.5) * 10000 + 10000;
|
||||
var beta = (rand() -0.5) * 180.0;
|
||||
local_weather.create_streak("Cirrostratus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 18000 + alt + alt_offset,300.0,4,2300.0,0.2,600.0,4,2300.0,0.2,600.0,alpha+beta,1.0);
|
||||
var alt_shift = 0.0;
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_shift = local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
local_weather.create_streak("Cirrostratus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 18000 + alt + alt_offset - alt_shift,300.0,4,2300.0,0.2,600.0,4,2300.0,0.2,600.0,alpha+beta,1.0);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1625,7 +1739,7 @@ var lon = 0.0;
|
|||
var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (getprop(lw~"tmp/presampling-flag") == 0)
|
||||
if (local_weather.presampling_flag == 0)
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
else
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
|
||||
|
@ -1644,6 +1758,8 @@ var spread = 8.0 + 2.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 1005 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
# after the front
|
||||
|
@ -1668,12 +1784,15 @@ var strength = 0.0;
|
|||
|
||||
# followed by random patches of Cirrostratus
|
||||
|
||||
var alt_shift = 0.0;
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_shift = local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
for (var i=0; i<3; i=i+1)
|
||||
{
|
||||
var x = 2.0 * (rand()-0.5) * 18000;
|
||||
var y = 2.0 * (rand()-0.5) * 5000 - 15000;
|
||||
var beta = (rand() -0.5) * 180.0;
|
||||
local_weather.create_streak("Cirrostratus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 15000 + alt + alt_offset,300.0,4,2300.0,0.2,600.0,4,2300.0,0.2,600.0,alpha+beta,1.0);
|
||||
local_weather.create_streak("Cirrostratus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 15000 + alt + alt_offset - alt_shift,300.0,4,2300.0,0.2,600.0,4,2300.0,0.2,600.0,alpha+beta,1.0);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1742,7 +1861,7 @@ var lon = 0.0;
|
|||
var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (getprop(lw~"tmp/presampling-flag") == 0)
|
||||
if (local_weather.presampling_flag == 0)
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
else
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
|
||||
|
@ -1761,6 +1880,8 @@ var spread = 7.0 + 2.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 1005 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
# after the front
|
||||
|
@ -1849,7 +1970,7 @@ var lon = 0.0;
|
|||
var alpha = getprop(lw~"tmp/tile-orientation-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (getprop(lw~"tmp/presampling-flag") == 0)
|
||||
if (local_weather.presampling_flag == 0)
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
else
|
||||
{var alt_offset = getprop(lw~"tmp/tile-alt-layered-ft");}
|
||||
|
@ -1868,6 +1989,8 @@ var spread = 5.0 + 2.0 * rand();
|
|||
var D = T - spread;
|
||||
var p = 1005 + rand() * 10.0; p = adjust_p(p);
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
|
||||
# first weather info for tile (lat, lon, visibility, temperature, dew point, pressure)
|
||||
|
||||
# after the front
|
||||
|
@ -1951,7 +2074,10 @@ var lon = 0.0;
|
|||
|
||||
var alpha = getprop("/environment/metar/base-wind-dir-deg");
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var metar_alt_offset = 700.0 + getprop("/environment/metar/station-elevation-ft");
|
||||
|
||||
# it seems more recent Flightgear versions have absolute altitude
|
||||
# var metar_alt_offset = 700.0 + getprop("/environment/metar/station-elevation-ft");
|
||||
var metar_alt_offset = 700.0;
|
||||
|
||||
# print("metar_alt_offset", metar_alt_offset);
|
||||
|
||||
|
@ -2263,11 +2389,13 @@ var set_METAR_weather_station = func {
|
|||
|
||||
if (is_visibility_max == 1)
|
||||
{
|
||||
if (p * inhg_to_hp < 1000.0) {vis = 10000.0 + 5000 * rand();}
|
||||
else if (p * inhg_to_hp < 1010.0) {vis = 15000.0 + 7000 * rand();}
|
||||
else if (p * inhg_to_hp < 1020.0) {vis = 22000.0 + 14000.0 * rand();}
|
||||
else {vis = 30000.0 + 15000.0 * rand();}
|
||||
}
|
||||
if (p * inhg_to_hp < 1000.0) {vis = 10000.0 + 5000 * rand();}
|
||||
else if (p * inhg_to_hp < 1010.0) {vis = 15000.0 + 7000 * rand();}
|
||||
else if (p * inhg_to_hp < 1020.0) {vis = 22000.0 + 14000.0 * rand();}
|
||||
else {vis = 30000.0 + 15000.0 * rand();}
|
||||
|
||||
if (realistic_visibility_flag == 1) {vis = vis * realistic_visibility_multiplyer;}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -2385,32 +2513,31 @@ var set_METAR_weather_station = func {
|
|||
# mid-level cloud setup calls
|
||||
####################################
|
||||
|
||||
var create_8_8_stratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
|
||||
local_weather.create_streak("Stratus",lat, lon, alt,500.0,32,1250.0,0.0,400.0,32,1250.0,0.0,400.0,alpha,1.0);
|
||||
|
||||
}
|
||||
|
||||
var create_8_8_tstratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 650.0;}
|
||||
|
||||
local_weather.create_streak("Stratus (thin)",lat, lon, alt,500.0,32,1250.0,0.0,400.0,32,1250.0,0.0,400.0,alpha,1.0);
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1)
|
||||
{
|
||||
alt = alt - local_weather.offset_map["Stratus_thin"];
|
||||
|
||||
local_weather.create_streak("Stratus (thin)",lat, lon, alt,500.0,40,1000.0,0.0,400.0,40,1000.0,0.0,400.0,alpha,1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
local_weather.create_streak("Stratus (thin)",lat, lon, alt,500.0,32,1250.0,0.0,400.0,32,1250.0,0.0,400.0,alpha,1.0);
|
||||
}
|
||||
}
|
||||
|
||||
var create_8_8_cirrostratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
local_weather.create_streak("Cirrostratus",lat,lon,alt,500.0,30,1250.0,0.0,400.0,30,1250.0,0.0,400.0,alpha,1.0);
|
||||
}
|
||||
|
||||
var create_8_8_nimbus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt,500.0,32,1250.0,0.0,200.0,32,1250.0,0.0,200.0,alpha,1.0);
|
||||
|
||||
|
@ -2419,9 +2546,11 @@ local_weather.create_streak("Nimbus",lat, lon, alt,500.0,32,1250.0,0.0,200.0,32,
|
|||
|
||||
var create_8_8_nimbus_var1 = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {var alt_eff = alt - local_weather.offset_map["Nimbus"]; }
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt,500.0,35,1111.0,0.0,200.0,35,1111.0,0.0,200.0,alpha,1.0);
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt_eff,500.0,35,1150.0,0.0,200.0,35,1150.0,0.0,200.0,alpha,1.0);
|
||||
|
||||
for (var i = 0; i < 3; i=i+1)
|
||||
{
|
||||
|
@ -2434,9 +2563,11 @@ for (var i = 0; i < 3; i=i+1)
|
|||
|
||||
var create_8_8_nimbus_var2 = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {var alt_eff = alt - local_weather.offset_map["Nimbus"]; }
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt,500.0,35,1111.0,0.0,200.0,35,1111.0,0.0,200.0,alpha,1.0);
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt_eff,500.0,35,1150.0,0.0,200.0,35,1150.0,0.0,200.0,alpha,1.0);
|
||||
|
||||
for (var i=0; i<8; i=i+1)
|
||||
{
|
||||
|
@ -2452,10 +2583,12 @@ for (var i=0; i<8; i=i+1)
|
|||
|
||||
var create_8_8_nimbus_var3 = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {var alt_eff = alt - local_weather.offset_map["Nimbus"]; }
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt,500.0,35,1111.0,0.0,200.0,35,1111.0,0.0,200.0,alpha,1.0);
|
||||
local_weather.create_streak("Nimbus",lat, lon, alt_eff,500.0,35,1150.0,0.0,200.0,35,1150.0,0.0,200.0,alpha,1.0);
|
||||
|
||||
for (var i=0; i<6; i=i+1)
|
||||
{
|
||||
|
@ -2465,21 +2598,17 @@ for (var i=0; i<6; i=i+1)
|
|||
local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt+1600.0,300.0,6,1200.0,0.2,700.0,6,1200.0,0.2,700.0,alpha+beta,1.0);
|
||||
}
|
||||
|
||||
# reduced visibility in layer
|
||||
#local_weather.create_effect_volume(3, lat, lon, 20000.0, 20000.0, alpha, alt-1500.0, alt+900.0, 2000.0, -1 , -1, -1, -1,0 ,-1);
|
||||
# cloud shade
|
||||
#local_weather.create_effect_volume(3, lat, lon, 20000.0, 20000.0, alpha, 0.0, alt, -1, -1 , -1, -1, -1,0 ,0.8);
|
||||
|
||||
}
|
||||
|
||||
var create_8_8_nimbus_rain = func (lat, lon, alt, alpha, rain) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 3000.0;}
|
||||
|
||||
|
||||
if (local_weather.detailed_clouds_flag == 0)
|
||||
{local_weather.create_streak("Nimbus",lat, lon, alt,500.0,32,1250.0,0.0,200.0,32,1250.0,0.0,200.0,alpha,1.0);}
|
||||
else
|
||||
{
|
||||
#print(local_weather.offset_map["Nimbus"]);
|
||||
var rn = rand();
|
||||
if (rn > 0.66) {create_8_8_nimbus_var1(lat, lon, alt, alpha);}
|
||||
else if (rn > 0.33) {create_8_8_nimbus_var2(lat, lon, alt, alpha);}
|
||||
|
@ -2499,12 +2628,19 @@ else
|
|||
|
||||
}
|
||||
|
||||
var create_8_8_stratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus"];}
|
||||
|
||||
local_weather.create_streak("Stratus",lat, lon, alt,500.0,32,1250.0,0.0,400.0,32,1250.0,0.0,400.0,alpha,1.0);
|
||||
}
|
||||
|
||||
|
||||
var create_8_8_stratus_rain = func (lat, lon, alt, alpha, rain) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
|
||||
local_weather.create_streak("Stratus",lat, lon, alt,500.0,32,1250.0,0.0,400.0,32,1250.0,0.0,400.0,alpha,1.0);
|
||||
create_8_8_stratus(lat, lon, alt, alpha);
|
||||
|
||||
|
||||
if (rain > 0.1)
|
||||
{
|
||||
|
@ -2520,9 +2656,22 @@ else
|
|||
|
||||
var create_6_8_stratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1)
|
||||
{
|
||||
alt = alt - local_weather.offset_map["Stratus"];
|
||||
|
||||
for (var i = 0; i < 20; i = i + 1)
|
||||
{
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var x = 2.0 * (rand()-0.5) * 18000;
|
||||
var y = 2.0 * (rand()-0.5) * 18000;
|
||||
|
||||
local_weather.create_streak("Stratus",lat, lon, alt,500.0,20,0.0,0.2,20000.0,20,0.0,0.2,20000.0,alpha,1.0);
|
||||
local_weather.create_streak("Stratus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt,500.0,5,2300.0,0.2,500.0,5,2300.0,0.2,500.0,alpha,1.0);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{local_weather.create_streak("Stratus",lat, lon, alt,500.0,20,0.0,0.2,20000.0,20,0.0,0.2,20000.0,alpha,1.0);}
|
||||
}
|
||||
|
||||
|
||||
|
@ -2532,7 +2681,9 @@ var create_6_8_nimbus_rain = func (lat, lon, alt, alpha, rain) {
|
|||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 3000.0;}
|
||||
var alt_cloud = alt;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_cloud = alt_cloud - 3000.0;}
|
||||
|
||||
for (var i = 0; i < 3; i = i + 1)
|
||||
{
|
||||
|
@ -2540,7 +2691,7 @@ for (var i = 0; i < 3; i = i + 1)
|
|||
var y = 2.0 * (rand()-0.5) * 12000.0;
|
||||
var beta = rand() * 360.0;
|
||||
|
||||
local_weather.create_layer("Nimbus", lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 1, 1.0);
|
||||
local_weather.create_layer("Nimbus", lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt_cloud, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 1, 1.0);
|
||||
|
||||
if (rain > 0.1)
|
||||
{
|
||||
|
@ -2562,7 +2713,9 @@ var create_6_8_stratus_rain = func (lat, lon, alt, alpha, rain) {
|
|||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
var alt_cloud = alt;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_cloud = alt_cloud - local_weather.offset_map["Stratus"];}
|
||||
|
||||
for (var i = 0; i < 3; i = i + 1)
|
||||
{
|
||||
|
@ -2570,7 +2723,7 @@ for (var i = 0; i < 3; i = i + 1)
|
|||
var y = 2.0 * (rand()-0.5) * 12000.0;
|
||||
var beta = rand() * 360.0;
|
||||
|
||||
local_weather.create_layer("Stratus", lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 0, 0.0);
|
||||
local_weather.create_layer("Stratus", lat+get_lat(x,y,phi), lon+get_lon(x,y,phi), alt_cloud, 500.0, 12000.0, 7000.0, beta, 1.0, 0.2, 0, 0.0);
|
||||
|
||||
if (rain > 0.1)
|
||||
{
|
||||
|
@ -2589,21 +2742,21 @@ for (var i = 0; i < 3; i = i + 1)
|
|||
|
||||
var create_6_8_stratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus"];}
|
||||
|
||||
local_weather.create_undulatus("Stratus",lat, lon, alt,300.0,10,4000.0,0.1,400.0,50,800.0,0.1,100.0, 1000.0, alpha,1.0);
|
||||
}
|
||||
|
||||
var create_6_8_tstratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 650.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_thin"];}
|
||||
|
||||
local_weather.create_undulatus("Stratus (thin)",lat, lon, alt,300.0,10,4000.0,0.1,400.0,50,800.0,0.1,100.0, 1000.0, alpha,1.0);
|
||||
}
|
||||
|
||||
var create_6_8_cirrostratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
local_weather.create_streak("Cirrostratus",lat,lon,alt,500.0,24,1500.0,0.0,900.0,24,1500.0,0.0,900.0,alpha,1.0);
|
||||
}
|
||||
|
@ -2633,7 +2786,7 @@ else
|
|||
|
||||
var create_4_8_stratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var x = 2.0 * (rand()-0.5) * 15000;
|
||||
|
@ -2662,7 +2815,7 @@ var create_4_8_stratus_patches = func (lat, lon, alt, alpha) {
|
|||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus"];}
|
||||
|
||||
for (var i=0; i<16; i=i+1)
|
||||
{
|
||||
|
@ -2679,7 +2832,7 @@ var create_4_8_tstratus_patches = func (lat, lon, alt, alpha) {
|
|||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 650.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_thin"];}
|
||||
|
||||
for (var i=0; i<22; i=i+1)
|
||||
{
|
||||
|
@ -2701,7 +2854,7 @@ var create_4_8_sstratus_patches = func (lat, lon, alt, alpha) {
|
|||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_structured"];}
|
||||
|
||||
for (var i=0; i<22; i=i+1)
|
||||
{
|
||||
|
@ -2719,7 +2872,7 @@ for (var i=0; i<22; i=i+1)
|
|||
|
||||
var create_4_8_cirrostratus_patches = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2736,7 +2889,7 @@ for (var i=0; i<6; i=i+1)
|
|||
|
||||
var create_4_8_cirrostratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
local_weather.create_undulatus("Cirrostratus",lat, lon, alt,300.0,5,8000.0,0.1,400.0,40,1000.0,0.1,100.0, 1500.0, alpha,1.0);
|
||||
}
|
||||
|
@ -2744,7 +2897,7 @@ local_weather.create_undulatus("Cirrostratus",lat, lon, alt,300.0,5,8000.0,0.1,4
|
|||
|
||||
var create_4_8_stratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var x = 2.0 * (rand()-0.5) * 5000;
|
||||
|
@ -2760,7 +2913,7 @@ local_weather.create_streak("Stratus",lat+get_lat(x,y-4000,phi), lon+get_lon(x,y
|
|||
|
||||
var create_4_8_tstratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 650.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_thin"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var x = 2.0 * (rand()-0.5) * 5000;
|
||||
|
@ -2776,7 +2929,7 @@ local_weather.create_streak("Stratus (thin)",lat+get_lat(x,y-4000,phi), lon+get_
|
|||
|
||||
var create_4_8_sstratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_structured"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var x = 2.0 * (rand()-0.5) * 5000;
|
||||
|
@ -2858,7 +3011,7 @@ for (var i=0; i<20; i=i+1)
|
|||
|
||||
var create_4_8_alttstratus_streaks = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 300.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_alt"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2878,7 +3031,7 @@ for (var i=0; i<10; i=i+1)
|
|||
|
||||
var create_4_8_alttstratus_patches = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 300.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_alt"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2909,7 +3062,7 @@ else
|
|||
|
||||
var create_2_8_stratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1500.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2926,7 +3079,7 @@ for (var i=0; i<8; i=i+1)
|
|||
|
||||
var create_2_8_tstratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 650.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_thin"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2944,7 +3097,7 @@ for (var i=0; i<8; i=i+1)
|
|||
|
||||
var create_2_8_sstratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_structured"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2967,7 +3120,7 @@ for (var i=0; i<8; i=i+1)
|
|||
|
||||
var create_2_8_sstratus_streak = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_structured"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -2981,7 +3134,7 @@ local_weather.create_streak("Stratus (structured)",lat+get_lat(x,y,phi), lon+get
|
|||
|
||||
var create_2_8_cirrostratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -3027,7 +3180,7 @@ local_weather.create_streak("Cirrus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi),
|
|||
|
||||
var create_2_8_alttstratus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 300.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Stratus_alt"];}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
|
||||
|
@ -3113,7 +3266,7 @@ local_weather.create_streak("Cirrus",lat+get_lat(x,y,phi), lon+get_lon(x,y,phi),
|
|||
|
||||
var create_1_8_cirrostratus_undulatus = func (lat, lon, alt, alpha) {
|
||||
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - 1800.0;}
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt = alt - local_weather.offset_map["Cirrostratus"];}
|
||||
|
||||
local_weather.create_undulatus("Cirrostratus",lat, lon, alt,300.0,1,8000.0,0.0,400.0,40,1000.0,0.1,100.0, 1500.0, alpha,1.0);
|
||||
}
|
||||
|
@ -3265,9 +3418,12 @@ var create_small_thunderstorm = func(lat, lon, alt, alpha) {
|
|||
|
||||
var scale = 0.7 + rand() * 0.3;
|
||||
|
||||
local_weather.create_layer("Stratus", lat, lon, alt, 1000.0, 4000.0 * scale, 4000.0 * scale, 0.0, 1.0, 0.3, 1, 1.0);
|
||||
var alt_eff = alt;
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_eff = alt - local_weather.offset_map["Stratus"] - 2000.0; }
|
||||
|
||||
local_weather.create_layer("Cumulonimbus (cloudlet)", lat, lon, alt+2000, 15000.0, 3000.0 * scale, 3000.0 * scale, 0.0, 2.0, 0.0, 0, 0.0);
|
||||
local_weather.create_layer("Stratus", lat, lon, alt_eff, 1000.0, 4000.0 * scale, 4000.0 * scale, 0.0, 1.0, 0.3, 1, 1.0);
|
||||
|
||||
local_weather.create_layer("Cumulonimbus (cloudlet)", lat, lon, alt_eff+3000.0, 12000.0, 3000.0 * scale, 3000.0 * scale, 0.0, 2.0, 0.0, 0, 0.0);
|
||||
|
||||
# set the exclusion region for the Cumulus layer
|
||||
append(elat, lat); append(elon, lon); append(erad, 4000.0 * scale * 1.2);
|
||||
|
@ -3282,15 +3438,20 @@ var create_medium_thunderstorm = func(lat, lon, alt, alpha) {
|
|||
|
||||
var scale = 0.7 + rand() * 0.3;
|
||||
|
||||
local_weather.create_layer("Nimbus", lat, lon, alt, 500.0, 6000.0 * scale, 6000.0 * scale, 0.0, 1.0, 0.3, 1, 1.5);
|
||||
var alt_eff = alt;
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_eff = alt - local_weather.offset_map["Nimbus"] - 2000.0; }
|
||||
|
||||
#local_weather.create_layer("Stratus", lat, lon, alt+1500, 1000.0, 5500.0 * scale, 5500.0 * scale, 0.0, 1.0, 0.3, 0, 0.0);
|
||||
local_weather.create_hollow_layer("Stratus", lat, lon, alt+1500, 1000.0, 5500.0 * scale, 5500.0 * scale, 0.0, 1.0, 0.3, 0.5);
|
||||
local_weather.create_layer("Nimbus", lat, lon, alt_eff, 500.0, 6000.0 * scale, 6000.0 * scale, 0.0, 1.0, 0.3, 1, 1.5);
|
||||
|
||||
local_weather.create_layer("Fog (thick)", lat, lon, alt+4000, 6000.0, 3400.0 * scale, 3400.0 * scale, 0.0, 1.5, 0.3, 0, 0.0);
|
||||
#local_weather.create_layer("Stratus", lat, lon, alt_eff+1500, 1000.0, 5500.0 * scale, 5500.0 * scale, 0.0, 1.0, 0.3, 0, 0.0);
|
||||
|
||||
|
||||
local_weather.create_layer("Cumulonimbus (cloudlet)", lat, lon, alt+10000, 10000.0, 3600.0 * scale, 3600.0 * scale, 0.0, 1.2, 0.0, 0, 0.0);
|
||||
local_weather.create_hollow_layer("Stratus", lat, lon, alt_eff+1500, 1000.0, 5500.0 * scale, 5500.0 * scale, 0.0, 1.0, 0.3, 0.5);
|
||||
|
||||
local_weather.create_layer("Fog (thick)", lat, lon, alt_eff+4000, 6000.0, 3400.0 * scale, 3400.0 * scale, 0.0, 1.5, 0.3, 0, 0.0);
|
||||
|
||||
|
||||
local_weather.create_layer("Cumulonimbus (cloudlet)", lat, lon, alt_eff+10000, 10000.0, 3600.0 * scale, 3600.0 * scale, 0.0, 1.2, 0.0, 0, 0.0);
|
||||
|
||||
# set the exclusion region for the Cumulus layer
|
||||
append(elat, lat); append(elon, lon); append(erad, 6000.0 * scale * 1.2);
|
||||
|
@ -3307,23 +3468,26 @@ var phi = alpha * math.pi/180.0;
|
|||
|
||||
var scale = 0.8;
|
||||
|
||||
local_weather.create_layer("Nimbus", lat, lon, alt, 500.0, 7500.0 * scale, 7500.0 * scale, 0.0, 1.0, 0.25, 1, 1.5);
|
||||
var alt_eff = alt;
|
||||
if (local_weather.hardcoded_clouds_flag == 1) {alt_eff = alt - local_weather.offset_map["Nimbus"]; }
|
||||
|
||||
local_weather.create_layer("Nimbus", lat, lon, alt_eff, 500.0, 7500.0 * scale, 7500.0 * scale, 0.0, 1.0, 0.25, 1, 1.5);
|
||||
|
||||
#local_weather.create_layer("Stratus", lat, lon, alt+1500, 1000.0, 7200.0 * scale, 7200.0 * scale, 0.0, 1.0, 0.3, 0, 0.0);
|
||||
local_weather.create_hollow_layer("Stratus", lat, lon, alt+1500, 1000.0, 7200.0 * scale, 7200.0 * scale, 0.0, 1.0, 0.3, 0.7);
|
||||
local_weather.create_hollow_layer("Stratus", lat, lon, alt_eff+1500, 1000.0, 7200.0 * scale, 7200.0 * scale, 0.0, 1.0, 0.3, 0.7);
|
||||
|
||||
local_weather.create_layer("Fog (thick)", lat, lon, alt+5000, 3000.0, 5500.0 * scale, 5500.0 * scale, 0.0, 0.7, 0.3, 0, 0.0);
|
||||
local_weather.create_layer("Fog (thick)", lat, lon, alt_eff+5000, 3000.0, 5500.0 * scale, 5500.0 * scale, 0.0, 0.7, 0.3, 0, 0.0);
|
||||
|
||||
|
||||
local_weather.create_layer("Fog (thick)", lat+get_lat(0,-1000,phi), lon+get_lon(0,-1000,phi), alt+12000, 4000.0, 6300.0 * scale, 6300.0 * scale, 0.0, 0.7, 0.3, 0, 0.0);
|
||||
local_weather.create_layer("Fog (thick)", lat+get_lat(0,-1000,phi), lon+get_lon(0,-1000,phi), alt_eff+12000, 4000.0, 6300.0 * scale, 6300.0 * scale, 0.0, 0.7, 0.3, 0, 0.0);
|
||||
|
||||
#local_weather.create_layer("Stratus", lat+get_lat(0,-2000,phi), lon+get_lon(0,-2000,phi), alt+17000, 1000.0, 7500.0 * scale, 7500.0 * scale, 0.0, 1.0, 0.3, 0, 0.0);
|
||||
local_weather.create_hollow_layer("Stratus", lat+get_lat(0,-2000,phi), lon+get_lon(0,-2000,phi), alt+17000, 1000.0, 7500.0 * scale, 7500.0 * scale, 0.0, 1.0, 0.3, 0.5);
|
||||
local_weather.create_hollow_layer("Stratus", lat+get_lat(0,-2000,phi), lon+get_lon(0,-2000,phi), alt_eff+17000, 1000.0, 7500.0 * scale, 7500.0 * scale, 0.0, 1.0, 0.3, 0.5);
|
||||
|
||||
#local_weather.create_layer("Stratus", lat+get_lat(0,-3000,phi), lon+get_lon(0,-3000,phi), alt+20000, 1000.0, 9500.0 * scale, 9500.0 * scale, 0.0, 1.0, 0.3, 0, 0.0);
|
||||
local_weather.create_hollow_layer("Stratus", lat+get_lat(0,-3000,phi), lon+get_lon(0,-3000,phi), alt+20000, 1000.0, 9500.0 * scale, 9500.0 * scale, 0.0, 1.0, 0.3, 0.5);
|
||||
#local_weather.create_layer("Stratus", lat+get_lat(0,-3000,phi), lon+get_lon(0,-3000,phi), alt_eff+20000, 1000.0, 9500.0 * scale, 9500.0 * scale, 0.0, 1.0, 0.3, 0, 0.0);
|
||||
local_weather.create_hollow_layer("Stratus", lat+get_lat(0,-3000,phi), lon+get_lon(0,-3000,phi), alt_eff+20000, 1000.0, 9500.0 * scale, 9500.0 * scale, 0.0, 1.0, 0.3, 0.5);
|
||||
|
||||
local_weather.create_layer("Stratus (thin)", lat+get_lat(0,-4000,phi), lon+get_lon(0,-4000,phi), alt+24000, 1000.0, 11500.0 * scale, 11500.0 * scale, 0.0, 2.0, 0.3, 0, 0.0);
|
||||
local_weather.create_layer("Stratus (thin)", lat+get_lat(0,-4000,phi), lon+get_lon(0,-4000,phi), alt_eff+24000, 1000.0, 11500.0 * scale, 11500.0 * scale, 0.0, 2.0, 0.0, 0, 0.0);
|
||||
|
||||
# set the exclusion region for the Cumulus layer
|
||||
append(elat, lat); append(elon, lon); append(erad, 7500.0 * scale * 1.2);
|
||||
|
@ -3420,6 +3584,8 @@ var lon_to_m = 0.0; # needs to be calculated dynamically
|
|||
var m_to_lon = 0.0; # we do this on startup
|
||||
var lw = "/local-weather/";
|
||||
|
||||
var realistic_visibility_multiplyer = 1.5;
|
||||
|
||||
var small_scale_persistence = getprop(lw~"config/small-scale-persistence");
|
||||
var rnd_store = rand();
|
||||
|
||||
|
|
|
@ -8,14 +8,11 @@
|
|||
#
|
||||
# 3) Allow chat messages to be written by the user.
|
||||
|
||||
|
||||
var is_active = func getprop("/sim/multiplay/txport") or getprop("/sim/multiplay/rxport");
|
||||
|
||||
|
||||
var lastmsg = {};
|
||||
var ignore = {};
|
||||
var msg_loop_id = 0;
|
||||
var msg_timeout = 0;
|
||||
var log_file = nil;
|
||||
|
||||
var check_messages = func(loop_id) {
|
||||
if (loop_id != msg_loop_id) return;
|
||||
|
@ -73,35 +70,6 @@ var chat_listener = func(n)
|
|||
}
|
||||
}
|
||||
|
||||
settimer(func {
|
||||
if (is_active()) {
|
||||
if (getprop("/sim/multiplay/write-message-log")) {
|
||||
var ac = getprop("/sim/aircraft");
|
||||
var cs = getprop("/sim/multiplay/callsign");
|
||||
var apt = airportinfo().id;
|
||||
var t = props.globals.getNode("/sim/time/real").getValues();
|
||||
var file = string.normpath(getprop("/sim/fg-home") ~ "/mp-message.log");
|
||||
|
||||
var f = io.open(file, "a");
|
||||
io.write(f, sprintf("\n===== %s %04d/%02d/%02d\t%s\t%s\t%s\n",
|
||||
["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][t.weekday],
|
||||
t.year, t.month, t.day, apt, ac, cs));
|
||||
|
||||
setlistener("/sim/signals/exit", func io.write(f, "=====\n") and io.close(f));
|
||||
setlistener("/sim/messages/mp-plane", func(n) {
|
||||
io.write(f, sprintf("%02d:%02d %s\n",
|
||||
getprop("/sim/time/real/hour"),
|
||||
getprop("/sim/time/real/minute"),
|
||||
n.getValue()));
|
||||
io.flush(f);
|
||||
});
|
||||
}
|
||||
check_messages(msg_loop_id += 1);
|
||||
}
|
||||
|
||||
# Call-back to ensure we see our own messages.
|
||||
setlistener("/sim/multiplay/chat", chat_listener);
|
||||
}, 1);
|
||||
|
||||
|
||||
# Message composition function, activated using the - key.
|
||||
|
@ -469,7 +437,40 @@ var model = {
|
|||
},
|
||||
};
|
||||
|
||||
_setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||
|
||||
_setlistener("sim/signals/nasal-dir-initialized", func model.init());
|
||||
model.init();
|
||||
|
||||
setlistener("/sim/multiplay/online", func(n) {
|
||||
if (n.getBoolValue()) {
|
||||
if (getprop("/sim/multiplay/write-message-log")) {
|
||||
var ac = getprop("/sim/aircraft");
|
||||
var cs = getprop("/sim/multiplay/callsign");
|
||||
var apt = airportinfo().id;
|
||||
var t = props.globals.getNode("/sim/time/real").getValues();
|
||||
if (log_file == nil) {
|
||||
var file = string.normpath(getprop("/sim/fg-home") ~ "/mp-message.log");
|
||||
|
||||
log_file = io.open(file, "a");
|
||||
io.write(log_file, sprintf("\n===== %s %04d/%02d/%02d\t%s\t%s\t%s\n",
|
||||
["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][t.weekday],
|
||||
t.year, t.month, t.day, apt, ac, cs));
|
||||
|
||||
setlistener("/sim/signals/exit", func io.write(log_file, "=====\n") and io.close(log_file));
|
||||
setlistener("/sim/messages/mp-plane", func(n) {
|
||||
io.write(log_file, sprintf("%02d:%02d %s\n",
|
||||
getprop("/sim/time/real/hour"),
|
||||
getprop("/sim/time/real/minute"),
|
||||
n.getValue()));
|
||||
io.flush(log_file);
|
||||
});
|
||||
}
|
||||
}
|
||||
check_messages(msg_loop_id += 1);
|
||||
}
|
||||
}, 1, 0);
|
||||
|
||||
# Call-back to ensure we see our own messages.
|
||||
setlistener("/sim/multiplay/chat", chat_listener);
|
||||
});
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
# 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 }
|
||||
|
||||
|
@ -44,7 +47,44 @@ 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);
|
||||
|
@ -72,48 +112,14 @@ var initialize = func {
|
|||
|
||||
# ################## listeners ####################
|
||||
#
|
||||
setlistener("/environment/sea/surface/wind-speed-kt", func (n) {
|
||||
var wind = 0;
|
||||
var amp = 0;
|
||||
var angle = 0;
|
||||
var dangle = 0;
|
||||
var freq = 0;
|
||||
var factor = 0;
|
||||
var sharp = 0;
|
||||
|
||||
wind = n.getValue();
|
||||
|
||||
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);
|
||||
|
||||
|
||||
},
|
||||
1,
|
||||
0);# end listener
|
||||
# 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 ...");
|
||||
print("weather util initialized ...");
|
||||
loop();
|
||||
|
||||
}# end init
|
||||
|
||||
var loop = func {
|
||||
|
@ -132,6 +138,9 @@ var loop = func {
|
|||
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);
|
||||
|
|
10
Shaders/cloud-static.frag
Normal file
10
Shaders/cloud-static.frag
Normal file
|
@ -0,0 +1,10 @@
|
|||
uniform sampler2D baseTexture;
|
||||
varying float fogFactor;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 base = texture2D( baseTexture, gl_TexCoord[0].st);
|
||||
vec4 finalColor = base * gl_Color;
|
||||
gl_FragColor.rgb = mix(gl_Fog.color.rgb, finalColor.rgb, fogFactor );
|
||||
gl_FragColor.a = mix(0.0, finalColor.a, fogFactor);
|
||||
}
|
55
Shaders/cloud-static.vert
Normal file
55
Shaders/cloud-static.vert
Normal file
|
@ -0,0 +1,55 @@
|
|||
// -*-C++-*-
|
||||
#version 120
|
||||
|
||||
varying float fogFactor;
|
||||
|
||||
|
||||
float shade = 0.8;
|
||||
float cloud_height = 1000.0;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
|
||||
//gl_TexCoord[0] = gl_MultiTexCoord0 + vec4(textureIndexX, textureIndexY, 0.0, 0.0);
|
||||
vec4 ep = gl_ModelViewMatrixInverse * vec4(0.0,0.0,0.0,1.0);
|
||||
vec4 l = gl_ModelViewMatrixInverse * vec4(0.0,0.0,1.0,1.0);
|
||||
vec3 u = normalize(ep.xyz - l.xyz);
|
||||
|
||||
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
gl_Position.x = gl_Vertex.x;
|
||||
gl_Position.y += gl_Vertex.y;
|
||||
gl_Position.z += gl_Vertex.z;
|
||||
gl_Position.xyz += gl_Color.xyz;
|
||||
|
||||
|
||||
|
||||
// Determine a lighting normal based on the vertex position from the
|
||||
// center of the cloud, so that sprite on the opposite side of the cloud to the sun are darker.
|
||||
float n = dot(normalize(-gl_LightSource[0].position.xyz),
|
||||
normalize(mat3x3(gl_ModelViewMatrix) * (- gl_Position.xyz)));;
|
||||
|
||||
// Determine the position - used for fog and shading calculations
|
||||
vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Position);
|
||||
float fogCoord = abs(ecPosition.z);
|
||||
float fract = smoothstep(0.0, cloud_height, gl_Position.z + cloud_height);
|
||||
|
||||
|
||||
gl_Position = gl_ModelViewProjectionMatrix * gl_Position;
|
||||
|
||||
// Determine the shading of the sprite based on its vertical position and position relative to the sun.
|
||||
n = min(smoothstep(-0.5, 0.0, n), fract);
|
||||
// Determine the shading based on a mixture from the backlight to the front
|
||||
vec4 backlight = gl_LightSource[0].diffuse * shade;
|
||||
|
||||
gl_FrontColor = mix(backlight, gl_LightSource[0].diffuse, n);
|
||||
gl_FrontColor += gl_FrontLightModelProduct.sceneColor;
|
||||
|
||||
// As we get within 100m of the sprite, it is faded out. Equally at large distances it also fades out.
|
||||
gl_FrontColor.a = min(smoothstep(100.0, 250.0, fogCoord), 1.0 - smoothstep(70000.0, 75000.0, fogCoord));
|
||||
gl_BackColor = gl_FrontColor;
|
||||
|
||||
// Fog doesn't affect rain as much as other objects.
|
||||
fogFactor = exp( -gl_Fog.density * fogCoord * 0.4);
|
||||
fogFactor = clamp(fogFactor, 0.0, 1.0);
|
||||
}
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
varying float fogFactor;
|
||||
|
||||
uniform float range; // From /sim/rendering/clouds3d-vis-range
|
||||
|
||||
float shade = 0.8;
|
||||
float cloud_height = 1000.0;
|
||||
|
||||
|
@ -45,7 +47,7 @@ void main(void)
|
|||
gl_FrontColor += gl_FrontLightModelProduct.sceneColor;
|
||||
|
||||
// As we get within 100m of the sprite, it is faded out. Equally at large distances it also fades out.
|
||||
gl_FrontColor.a = min(smoothstep(100.0, 250.0, fogCoord), 1.0 - smoothstep(40000.0, 45000.0, fogCoord));
|
||||
gl_FrontColor.a = min(smoothstep(100.0, 250.0, fogCoord), 1.0 - smoothstep(range*0.9, range, fogCoord));
|
||||
gl_BackColor = gl_FrontColor;
|
||||
|
||||
// Fog doesn't affect rain as much as other objects.
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
<text>
|
||||
<halign>center</halign>
|
||||
<label>Blackout</label>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -73,7 +73,7 @@
|
|||
<row>0</row>
|
||||
<col>0</col>
|
||||
<label>Onset</label>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -86,7 +86,7 @@
|
|||
<format>%2.1f</format>
|
||||
<live>true</live>
|
||||
<property>/sim/rendering/redout/parameters/blackout-onset-g</property>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -100,7 +100,7 @@
|
|||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</slider>
|
||||
|
@ -109,7 +109,7 @@
|
|||
<row>1</row>
|
||||
<col>0</col>
|
||||
<label>Complete</label>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -122,7 +122,7 @@
|
|||
<format>%2.1f</format>
|
||||
<live>true</live>
|
||||
<property>/sim/rendering/redout/parameters/blackout-complete-g</property>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -136,7 +136,7 @@
|
|||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</slider>
|
||||
|
@ -147,7 +147,7 @@
|
|||
<text>
|
||||
<halign>center</halign>
|
||||
<label>Redout</label>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -158,7 +158,7 @@
|
|||
<row>0</row>
|
||||
<col>0</col>
|
||||
<label>Onset</label>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -171,7 +171,7 @@
|
|||
<format>%2.1f</format>
|
||||
<live>true</live>
|
||||
<property>/sim/rendering/redout/parameters/redout-onset-g</property>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -179,13 +179,13 @@
|
|||
<slider>
|
||||
<row>0</row>
|
||||
<col>2</col>
|
||||
<min>-1.0</min>
|
||||
<max>-15.0</max>
|
||||
<min>-15.0</min>
|
||||
<max>-1.0</max>
|
||||
<property>/sim/rendering/redout/parameters/redout-onset-g</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</slider>
|
||||
|
@ -194,7 +194,7 @@
|
|||
<row>1</row>
|
||||
<col>0</col>
|
||||
<label>Complete</label>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -206,7 +206,7 @@
|
|||
<format>%2.1f</format>
|
||||
<live>true</live>
|
||||
<property>/sim/rendering/redout/parameters/redout-complete-g</property>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
@ -214,13 +214,13 @@
|
|||
<slider>
|
||||
<row>1</row>
|
||||
<col>2</col>
|
||||
<min>-1.0</min>
|
||||
<max>-15.0</max>
|
||||
<min>-15.0</min>
|
||||
<max>-1.0</max>
|
||||
<property>/sim/rendering/redout/parameters/redout-complete-g</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<enable>
|
||||
<enable>
|
||||
<property>/sim/rendering/redout/enabled</property>
|
||||
</enable>
|
||||
</slider>
|
||||
|
|
|
@ -56,6 +56,52 @@
|
|||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<text>
|
||||
<label>Lat/Lon Format</label>
|
||||
<halign>center</halign>
|
||||
</text>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<radio>
|
||||
<halign>left</halign>
|
||||
<property>/sim/gui/dialogs/hud/lon-lat-format-0</property>
|
||||
<value>0</value>
|
||||
<live>true</live>
|
||||
<label>Decimal degrees</label>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>set_radio(0);</script>
|
||||
</binding>
|
||||
</radio>
|
||||
<radio>
|
||||
<halign>left</halign>
|
||||
<property>/sim/gui/dialogs/hud/lon-lat-format-1</property>
|
||||
<value>1</value>
|
||||
<label>Degrees, minutes</label>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>set_radio(1);</script>
|
||||
</binding>
|
||||
</radio>
|
||||
<radio>
|
||||
<halign>left</halign>
|
||||
<property>/sim/gui/dialogs/hud/lon-lat-format-2</property>
|
||||
<value>2</value>
|
||||
<live>true</live>
|
||||
<label>Degrees, minutes, seconds</label>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>set_radio(2);</script>
|
||||
</binding>
|
||||
</radio>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<text>
|
||||
|
@ -192,8 +238,20 @@
|
|||
</button>
|
||||
|
||||
<nasal>
|
||||
<open>
|
||||
<open><![CDATA[
|
||||
gui.enable_widgets(cmdarg(), "devel-stuff", getprop("/sim/gui/devel-widgets"));
|
||||
var radios = cmdarg().getChildren("group")[1].getChildren("radio");
|
||||
var set_radio = func(n) {
|
||||
for (var i = 0; i < size(radios); i +=1) {
|
||||
var prop = radios[i].getChild("property").getValue();
|
||||
setprop(prop, (n == radios[i].getChild("value").getValue()));
|
||||
}
|
||||
|
||||
setprop("/sim/lon-lat-format", n);
|
||||
}
|
||||
|
||||
set_radio(getprop("/sim/lon-lat-format"));
|
||||
]]>
|
||||
</open>
|
||||
</nasal>
|
||||
</PropertyList>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<!-- Weather tiles -->
|
||||
|
||||
<name>local_weather_tiles</name>
|
||||
<width>310</width>
|
||||
<width>470</width>
|
||||
<height>385</height>
|
||||
<modal>false</modal>
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
|||
<value>Coldfront</value>
|
||||
<value>Warmfront</value>
|
||||
<value>Tropical</value>
|
||||
<value>Thunderstorms</value>
|
||||
<value>Test tile</value>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
|
@ -49,6 +50,24 @@
|
|||
</enable>-->
|
||||
</combo>
|
||||
|
||||
|
||||
<text>
|
||||
<x>300</x>
|
||||
<y>330</y>
|
||||
<label>alt. offset (ft)</label>
|
||||
</text>
|
||||
|
||||
|
||||
|
||||
<input>
|
||||
<x>390</x>
|
||||
<y>330</y>
|
||||
<width>50</width>
|
||||
<height>25</height>
|
||||
<property>/local-weather/tmp/tile-alt-offset-ft</property>
|
||||
</input>
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>295</y>
|
||||
|
@ -77,34 +96,19 @@
|
|||
<property>/local-weather/tmp/windspeed-kt</property>
|
||||
</input>
|
||||
|
||||
<text>
|
||||
<x>155</x>
|
||||
<y>295</y>
|
||||
<label>alt. offset (ft)</label>
|
||||
</text>
|
||||
|
||||
|
||||
|
||||
<input>
|
||||
<x>240</x>
|
||||
<y>295</y>
|
||||
<width>50</width>
|
||||
<height>25</height>
|
||||
<property>/local-weather/tmp/tile-alt-offset-ft</property>
|
||||
</input>
|
||||
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>265</y>
|
||||
<x>157</x>
|
||||
<y>295</y>
|
||||
<label>gust freq.</label>
|
||||
</text>
|
||||
|
||||
|
||||
|
||||
<slider>
|
||||
<x>65</x>
|
||||
<y>265</y>
|
||||
<x>225</x>
|
||||
<y>295</y>
|
||||
<width>50</width>
|
||||
<height>20</height>
|
||||
<min>0.0</min>
|
||||
|
@ -118,15 +122,15 @@
|
|||
|
||||
|
||||
<text>
|
||||
<x>112</x>
|
||||
<y>265</y>
|
||||
<x>275</x>
|
||||
<y>295</y>
|
||||
<label>strength</label>
|
||||
</text>
|
||||
|
||||
|
||||
<slider>
|
||||
<x>167</x>
|
||||
<y>265</y>
|
||||
<x>333</x>
|
||||
<y>295</y>
|
||||
<width>50</width>
|
||||
<height>20</height>
|
||||
<min>0.0</min>
|
||||
|
@ -138,15 +142,15 @@
|
|||
</slider>
|
||||
|
||||
<text>
|
||||
<x>215</x>
|
||||
<y>265</y>
|
||||
<x>380</x>
|
||||
<y>295</y>
|
||||
<label>dir.</label>
|
||||
</text>
|
||||
|
||||
|
||||
<slider>
|
||||
<x>240</x>
|
||||
<y>265</y>
|
||||
<x>410</x>
|
||||
<y>295</y>
|
||||
<width>50</width>
|
||||
<height>20</height>
|
||||
<min>0.0</min>
|
||||
|
@ -162,14 +166,14 @@
|
|||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>235</y>
|
||||
<y>265</y>
|
||||
<label>wind model</label>
|
||||
</text>
|
||||
|
||||
|
||||
<combo>
|
||||
<x>150</x>
|
||||
<y>235</y>
|
||||
<y>265</y>
|
||||
<width>140</width>
|
||||
<height>25</height>
|
||||
<live>true</live>
|
||||
|
@ -185,15 +189,32 @@
|
|||
</combo>
|
||||
|
||||
|
||||
<text>
|
||||
<x>300</x>
|
||||
<y>265</y>
|
||||
<label>T offset (C)</label>
|
||||
</text>
|
||||
|
||||
|
||||
|
||||
<input>
|
||||
<x>390</x>
|
||||
<y>265</y>
|
||||
<width>50</width>
|
||||
<height>25</height>
|
||||
<property>/local-weather/config/temperature-offset-degc</property>
|
||||
</input>
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>205</y>
|
||||
<y>235</y>
|
||||
<label>tile selection mode</label>
|
||||
</text>
|
||||
|
||||
<combo>
|
||||
<x>150</x>
|
||||
<y>205</y>
|
||||
<y>235</y>
|
||||
<width>140</width>
|
||||
<height>25</height>
|
||||
<live>true</live>
|
||||
|
@ -207,33 +228,10 @@
|
|||
</binding>
|
||||
</combo>
|
||||
|
||||
<checkbox>
|
||||
<x>10</x>
|
||||
<y>175</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>terrain presampling</label>
|
||||
<property>/local-weather/config/presampling-flag</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<x>150</x>
|
||||
<y>175</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>generate thermals</label>
|
||||
<property>/local-weather/config/generate-thermal-lift-flag</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<x>10</x>
|
||||
<y>150</y>
|
||||
<y>205</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>debug output</label>
|
||||
|
@ -243,7 +241,7 @@
|
|||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<!--<checkbox>
|
||||
<x>150</x>
|
||||
<y>150</y>
|
||||
<width>15</width>
|
||||
|
@ -253,9 +251,9 @@
|
|||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
</checkbox>-->
|
||||
|
||||
<checkbox>
|
||||
<!--<checkbox>
|
||||
<x>10</x>
|
||||
<y>125</y>
|
||||
<width>15</width>
|
||||
|
@ -265,9 +263,9 @@
|
|||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
</checkbox>-->
|
||||
|
||||
<checkbox>
|
||||
<!--<checkbox>
|
||||
<x>150</x>
|
||||
<y>125</y>
|
||||
<width>15</width>
|
||||
|
@ -277,11 +275,11 @@
|
|||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
</checkbox>-->
|
||||
|
||||
<checkbox>
|
||||
<x>10</x>
|
||||
<y>100</y>
|
||||
<x>150</x>
|
||||
<y>205</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>terrain effects</label>
|
||||
|
@ -292,8 +290,8 @@
|
|||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<x>150</x>
|
||||
<y>100</y>
|
||||
<x>290</x>
|
||||
<y>205</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>realistic visibility</label>
|
||||
|
@ -303,21 +301,46 @@
|
|||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<text>
|
||||
<checkbox>
|
||||
<x>10</x>
|
||||
<y>75</y>
|
||||
<y>180</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>generate thermals</label>
|
||||
<property>/local-weather/config/generate-thermal-lift-flag</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<x>150</x>
|
||||
<y>180</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>terrain presampling</label>
|
||||
<property>/local-weather/config/presampling-flag</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>150</y>
|
||||
<label>Thermal properties:</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<x>10</x>
|
||||
<y>50</y>
|
||||
<x>160</x>
|
||||
<y>150</y>
|
||||
<label>rough day</label>
|
||||
</text>
|
||||
|
||||
<slider>
|
||||
<x>80</x>
|
||||
<y>50</y>
|
||||
<x>230</x>
|
||||
<y>150</y>
|
||||
<width>90</width>
|
||||
<height>20</height>
|
||||
<min>0.3</min>
|
||||
|
@ -329,11 +352,147 @@
|
|||
</slider>
|
||||
|
||||
<text>
|
||||
<x>180</x>
|
||||
<y>50</y>
|
||||
<x>330</x>
|
||||
<y>150</y>
|
||||
<label>low convection</label>
|
||||
</text>
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>125</y>
|
||||
<label>Ground haze:</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<x>160</x>
|
||||
<y>125</y>
|
||||
<label>thick</label>
|
||||
</text>
|
||||
|
||||
<slider>
|
||||
<x>230</x>
|
||||
<y>125</y>
|
||||
<width>90</width>
|
||||
<height>20</height>
|
||||
<min>0.1</min>
|
||||
<max>1.0</max>
|
||||
<property>/local-weather/config/ground-haze-factor</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</slider>
|
||||
|
||||
<text>
|
||||
<x>330</x>
|
||||
<y>125</y>
|
||||
<label>thin</label>
|
||||
</text>
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>100</y>
|
||||
<label>Max. visibility:</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<x>160</x>
|
||||
<y>100</y>
|
||||
<label>30 km</label>
|
||||
</text>
|
||||
|
||||
<slider>
|
||||
<x>230</x>
|
||||
<y>100</y>
|
||||
<width>90</width>
|
||||
<height>20</height>
|
||||
<min>30000.0</min>
|
||||
<max>140000.0</max>
|
||||
<property>/local-weather/config/max-vis-range-m</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</slider>
|
||||
|
||||
<text>
|
||||
<x>330</x>
|
||||
<y>100</y>
|
||||
<label>140 km</label>
|
||||
</text>
|
||||
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>75</y>
|
||||
<label>Weather pattern scales</label>
|
||||
</text>
|
||||
|
||||
|
||||
<text>
|
||||
<x>15</x>
|
||||
<y>45</y>
|
||||
<label>small</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<x>78</x>
|
||||
<y>60</y>
|
||||
<label>airmass</label>
|
||||
</text>
|
||||
|
||||
<slider>
|
||||
<x>60</x>
|
||||
<y>45</y>
|
||||
<width>100</width>
|
||||
<height>20</height>
|
||||
<min>0.5</min>
|
||||
<max>2.0</max>
|
||||
<property>/local-weather/config/large-scale-persistence</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</slider>
|
||||
|
||||
<text>
|
||||
<x>165</x>
|
||||
<y>45</y>
|
||||
<label>large</label>
|
||||
</text>
|
||||
|
||||
|
||||
<text>
|
||||
<x>205</x>
|
||||
<y>45</y>
|
||||
<label>small</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<x>257</x>
|
||||
<y>60</y>
|
||||
<label>cloud patterns</label>
|
||||
</text>
|
||||
|
||||
<slider>
|
||||
<x>250</x>
|
||||
<y>45</y>
|
||||
<width>100</width>
|
||||
<height>20</height>
|
||||
<min>0.0</min>
|
||||
<max>1.0</max>
|
||||
<property>/local-weather/config/small-scale-persistence</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</slider>
|
||||
|
||||
<text>
|
||||
<x>355</x>
|
||||
<y>45</y>
|
||||
<label>large</label>
|
||||
</text>
|
||||
|
||||
|
||||
<group>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
|
|
|
@ -32,15 +32,16 @@
|
|||
<open>
|
||||
var dlg = props.globals.getNode("/sim/gui/dialogs/location-on-ground", 1);
|
||||
var apt = dlg.getNode("airport", 1);
|
||||
apt.setValue("");
|
||||
apt.setValue(getprop("/sim/presets/airport-id"));
|
||||
var rwy = dlg.getNode("runway", 1);
|
||||
rwy.setValue("");
|
||||
var parkpos = dlg.getNode("parkpos", 1);
|
||||
parkpos.setValue("");
|
||||
|
||||
var mode = {
|
||||
runway: dlg.getNode("use_runway", 1),
|
||||
parkpos: dlg.getNode("use_parkpos", 1)
|
||||
runway: dlg.getNode("use_runway", 1),
|
||||
bestrunway: dlg.getNode("use_best_runway", 1),
|
||||
parkpos: dlg.getNode("use_parkpos", 1)
|
||||
};
|
||||
|
||||
var set_radio = func(m) {
|
||||
|
@ -78,6 +79,8 @@
|
|||
|
||||
gui.dialog_update("location-on-ground");
|
||||
}
|
||||
|
||||
updateRunways();
|
||||
</open>
|
||||
</nasal>
|
||||
|
||||
|
@ -106,6 +109,33 @@
|
|||
|
||||
<radio>
|
||||
<row>1</row><col>0</col>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_best_runway</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>set_radio("bestrunway")</script>
|
||||
</binding>
|
||||
</radio>
|
||||
|
||||
<text>
|
||||
<row>1</row><col>1</col>
|
||||
<halign>right</halign>
|
||||
<label>Best runway</label>
|
||||
<enable>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_best_runway</property>
|
||||
</enable>
|
||||
</text>
|
||||
<text>
|
||||
<row>1</row><col>2</col>
|
||||
<halign>right</halign>
|
||||
<label>(based on wind)</label>
|
||||
<enable>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_best_runway</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
||||
<radio>
|
||||
<row>2</row><col>0</col>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_runway</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
|
@ -115,14 +145,17 @@
|
|||
</radio>
|
||||
|
||||
<text>
|
||||
<row>1</row><col>1</col>
|
||||
<row>2</row><col>1</col>
|
||||
<halign>right</halign>
|
||||
<label>Runway:</label>
|
||||
<enable>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_runway</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
||||
<combo>
|
||||
<combo>
|
||||
<name>runway</name>
|
||||
<row>1</row><col>2</col>
|
||||
<row>2</row><col>2</col>
|
||||
<pref-width>85</pref-width>
|
||||
<enable>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_runway</property>
|
||||
|
@ -137,7 +170,7 @@
|
|||
</combo>
|
||||
|
||||
<radio>
|
||||
<row>2</row><col>0</col>
|
||||
<row>3</row><col>0</col>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_parkpos</property>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
|
@ -147,13 +180,16 @@
|
|||
</radio>
|
||||
|
||||
<text>
|
||||
<row>2</row><col>1</col>
|
||||
<row>3</row><col>1</col>
|
||||
<halign>right</halign>
|
||||
<label>Parking:</label>
|
||||
<enable>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_parkpos</property>
|
||||
</enable>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<row>2</row><col>2</col>
|
||||
<row>3</row><col>2</col>
|
||||
<enable>
|
||||
<property>/sim/gui/dialogs/location-on-ground/use_parkpos</property>
|
||||
</enable>
|
||||
|
@ -179,7 +215,10 @@
|
|||
<command>nasal</command>
|
||||
<script>
|
||||
setprop("/sim/presets/airport-id", apt.getValue());
|
||||
if (mode["runway"].getBoolValue()) {
|
||||
if (mode["bestrunway"].getBoolValue()) {
|
||||
setprop("/sim/presets/runway", "");
|
||||
setprop("/sim/presets/parkpos", "");
|
||||
} else if (mode["runway"].getBoolValue()) {
|
||||
setprop("/sim/presets/runway", rwy.getValue());
|
||||
setprop("/sim/presets/parkpos", "");
|
||||
} else {
|
||||
|
|
|
@ -4,10 +4,23 @@
|
|||
<PropertyList>
|
||||
<name>multiplayer</name>
|
||||
<layout>vbox</layout>
|
||||
<resizable>true</resizable>
|
||||
<resizable>false</resizable>
|
||||
|
||||
<nasal>
|
||||
<open>
|
||||
if ((getprop("/sim/multiplay/selected-server") == nil) or
|
||||
(getprop("/sim/multiplay/selected-server") == "" ) ){
|
||||
var tx = getprop("/sim/multiplay/txhost");
|
||||
var dlg = cmdarg();
|
||||
var servers = cmdarg().getChildren("group")[1].getChildren("combo")[0].getChildren("value");
|
||||
foreach (var s; servers) {
|
||||
var server = s.getValue();
|
||||
var host = split(" ", server)[0];
|
||||
if (host == tx) {
|
||||
setprop("/sim/multiplay/selected-server", server);
|
||||
}
|
||||
}
|
||||
}
|
||||
</open>
|
||||
|
||||
<close>
|
||||
|
@ -29,10 +42,8 @@
|
|||
<pref-width>16</pref-width>
|
||||
<pref-height>16</pref-height>
|
||||
<legend></legend>
|
||||
<default>1</default>
|
||||
<keynum>27</keynum>
|
||||
<border>2</border>
|
||||
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
|
@ -50,8 +61,14 @@
|
|||
</text>
|
||||
<input>
|
||||
<row>0</row><col>1</col>
|
||||
<halign>left</halign>
|
||||
<property>/sim/multiplay/callsign</property>
|
||||
</input>
|
||||
<text>
|
||||
<row>0</row><col>2</col>
|
||||
<halign>left</halign>
|
||||
<label>(requires reconnect)</label>
|
||||
</text>
|
||||
<text>
|
||||
<row>1</row><col>0</col>
|
||||
<halign>right</halign>
|
||||
|
@ -60,33 +77,41 @@
|
|||
<combo>
|
||||
<name>host</name>
|
||||
<row>1</row><col>1</col>
|
||||
<pref-width>120</pref-width>
|
||||
<property>/sim/multiplay/txhost</property>
|
||||
<editable>true</editable>
|
||||
<properties>/sim/multiplay/servers</properties>
|
||||
<colspan>2</colspan>
|
||||
<pref-width>350</pref-width>
|
||||
<property>/sim/multiplay/selected-server</property>
|
||||
<editable>false</editable>
|
||||
<value>mpserver01.flightgear.org (Frankfurt, Germany)</value>
|
||||
<value>mpserver02.flightgear.org (Kansas, USA)</value>
|
||||
<value>mpserver03.flightgear.org (Germany)</value>
|
||||
<value>mpserver04.flightgear.org (United Kingdom)</value>
|
||||
<value>mpserver05.flightgear.org (Chicago, USA)</value>
|
||||
<value>mpserver07.flightgear.org (Wisconsin, USA)</value>
|
||||
<value>mpserver08.flightgear.org (Frankfurt am Main, Germany)</value>
|
||||
<value>mpserver09.flightgear.org (Koln, Germany)</value>
|
||||
<value>mpserver10.flightgear.org (Montpellier, France)</value>
|
||||
<value>mpserver11.flightgear.org (Vilnius, Lithuania)</value>
|
||||
<value>mpserver12.flightgear.org (Amsterdam, Netherlands)</value>
|
||||
<value>mpserver13.flightgear.org (Grenoble, France)</value>
|
||||
</combo>
|
||||
<input>
|
||||
<row>1</row><col>2</col>
|
||||
<property>/sim/multiplay/txport</property>
|
||||
</input>
|
||||
|
||||
<!-- status area -->
|
||||
<text>
|
||||
<visible>
|
||||
<not><property>/sim/multiplay/online</property></not>
|
||||
</visible>
|
||||
<row>2</row>
|
||||
<row>3</row>
|
||||
<col>1</col>
|
||||
<label>Not connected</label>
|
||||
<halign>left</halign>
|
||||
<label>Not connected</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<visible>
|
||||
<property>/sim/multiplay/online</property>
|
||||
</visible>
|
||||
<row>2</row>
|
||||
<row>3</row>
|
||||
<col>1</col>
|
||||
|
||||
<halign>left</halign>
|
||||
<label>MMMMMMMMMMMMMMMMM</label>
|
||||
<format>Connected to %s</format>
|
||||
<property>/sim/multiplay/txhost</property>
|
||||
|
@ -94,23 +119,80 @@
|
|||
</text>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<default-padding>10</default-padding>
|
||||
<empty><stretch>true</stretch></empty>
|
||||
|
||||
<button>
|
||||
<legend>Apply</legend>
|
||||
<default>true</default>
|
||||
<legend>Connect</legend>
|
||||
<equal>true</equal>
|
||||
<enable>
|
||||
<not>
|
||||
<property>/sim/multiplay/online</property>
|
||||
</not>
|
||||
</enable>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
var server = getprop("/sim/multiplay/selected-server");
|
||||
# Get the server name by splitting on the space between
|
||||
# the hostname and the comment.
|
||||
server = split(" ", server)[0];
|
||||
setprop("/sim/multiplay/txhost", server);
|
||||
|
||||
# Standard port is 5000
|
||||
setprop("/sim/multiplay/txport", 5000);
|
||||
setprop("/sim/multiplay/rxport", 5000);
|
||||
</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>reinit</command>
|
||||
<subsystem>mp</subsystem>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<legend>Disconnect</legend>
|
||||
<equal>true</equal>
|
||||
<enable>
|
||||
<property>/sim/multiplay/online</property>
|
||||
</enable>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
setprop("/sim/multiplay/txhost", "");
|
||||
</script>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>reinit</command>
|
||||
<subsystem>mp</subsystem>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<row>1</row><col>2</col>
|
||||
<legend>Server Status</legend>
|
||||
<binding>
|
||||
<command>open-browser</command>
|
||||
<path>http://mpmap01.flightgear.org/mpstatus/</path>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
<legend>Close</legend>
|
||||
<default>true</default>
|
||||
<equal>true</equal>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<empty><stretch>true</stretch></empty>
|
||||
</group>
|
||||
|
||||
</PropertyList>
|
||||
</PropertyList>
|
||||
|
|
|
@ -622,16 +622,16 @@
|
|||
setprop("/sim/rendering/shaders/landmass",qualityLevel);
|
||||
setprop("/sim/rendering/shaders/urban",qualityLevel);
|
||||
setprop("/sim/rendering/shaders/water",qualityLevel);
|
||||
if (qualityLevel >= 3.0){
|
||||
qualityLevel = 3.0;
|
||||
}
|
||||
setprop("/sim/rendering/shaders/model",qualityLevel);
|
||||
if (qualityLevel >= 1.0){
|
||||
qualityLevel = 1.0;
|
||||
}
|
||||
else {
|
||||
qualityLevel = 0.0;
|
||||
}
|
||||
setprop("/sim/rendering/shaders/contrails",qualityLevel);
|
||||
setprop("/sim/rendering/shaders/crop",qualityLevel);
|
||||
setprop("/sim/rendering/shaders/generic",qualityLevel);
|
||||
setprop("/sim/rendering/shaders/model",qualityLevel);
|
||||
setprop("/sim/rendering/shaders/transition",qualityLevel);
|
||||
});
|
||||
</open>
|
||||
|
|
|
@ -54,6 +54,12 @@
|
|||
<command>dialog-apply</command>
|
||||
<object-name>terrasync-enabled</object-name>
|
||||
</binding>
|
||||
<enable>
|
||||
<not-equals>
|
||||
<property>/sim/terrasync/scenery-dir</property>
|
||||
<value></value>
|
||||
</not-equals>
|
||||
</enable>
|
||||
</checkbox>
|
||||
|
||||
<text>
|
||||
|
@ -61,40 +67,31 @@
|
|||
<row>3</row><col>1</col>
|
||||
<label>Target directory:</label>
|
||||
</text>
|
||||
<input>
|
||||
<combo>
|
||||
<name>scenery-dir</name>
|
||||
<halign>left</halign>
|
||||
<row>3</row>
|
||||
<col>2</col><colspan>2</colspan>
|
||||
<pref-width>400</pref-width>
|
||||
<live>true</live>
|
||||
<property>/sim/terrasync/scenery-dir</property>
|
||||
<enable><false/></enable>
|
||||
</input>
|
||||
|
||||
<button>
|
||||
<legend>Change</legend>
|
||||
<equal>true</equal>
|
||||
<border>2</border>
|
||||
<row>3</row>
|
||||
<col>4</col>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>controller.open()</script>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
<object-name>scenery-dir</object-name>
|
||||
</binding>
|
||||
</button>
|
||||
</combo>
|
||||
|
||||
<text>
|
||||
<name>warning_text</name>
|
||||
<row>4</row>
|
||||
<col>2</col><colspan>3</colspan>
|
||||
<col>0</col><colspan>4</colspan>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<red>1.0</red>
|
||||
<green>0.4</green>
|
||||
<blue>0.4</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
<halign>left</halign>
|
||||
<label>Remember to add target directory to your 'fg-scenery' path list.</label>
|
||||
<halign>center</halign>
|
||||
<label/>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
|
@ -431,20 +428,33 @@
|
|||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<empty><stretch>true</stretch></empty>
|
||||
</group>
|
||||
|
||||
<nasal>
|
||||
<open><![CDATA[
|
||||
var controller = gui.DirSelector.new(
|
||||
func(result) { setprop("/sim/terrasync/scenery-dir", result.getValue()); },
|
||||
"Select Target Directory for Downloads", "Ok", getprop("/sim/terrasync/scenery-dir"));
|
||||
var fg_scenery = props.globals.getNode("sim").getChildren("fg-scenery");
|
||||
var fg_data = props.globals.getNode("sim").getChild("fg-root").getValue();
|
||||
var combo = cmdarg().getChildren("group")[1].getChildren("combo")[0];
|
||||
var valid = 0;
|
||||
|
||||
for (var i = 0; i < size(fg_scenery); i = i + 1) {
|
||||
var s = fg_scenery[i].getValue();
|
||||
if ((s != fg_data ~ "/Scenery") and (s != fg_data ~ "\\Scenery")) {
|
||||
# Do not allow Terrasync to run in the default directory.
|
||||
combo.getNode("value[" ~ i ~ "]", 1).setValue(fg_scenery[i].getValue());
|
||||
valid = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Add error text if the user only has fg-data/Scenery available and disable controls.
|
||||
if (! valid) {
|
||||
var warning = cmdarg().getChildren("group")[1].getChildren("text")[1];
|
||||
var txt = "You must configure a separate FG_SCENERY directory for automatic scenery download";
|
||||
warning.getNode("label").setValue(txt);
|
||||
}
|
||||
]]></open>
|
||||
|
||||
<close><![CDATA[
|
||||
controller.close();
|
||||
]]></close>
|
||||
</nasal>
|
||||
|
||||
</PropertyList>
|
||||
|
|
|
@ -1755,6 +1755,12 @@
|
|||
<command>dialog-update</command>
|
||||
<object-name>metar</object-name>
|
||||
</binding>
|
||||
<!-- Hack: disable local-weather when the users selects a predefined scenario
|
||||
Fix for #567 -->
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>if (getprop("/nasal/local_weather/loaded",0)) local_weather.clear_all()</script>
|
||||
</binding>
|
||||
</combo>
|
||||
|
||||
<checkbox>
|
||||
|
|
|
@ -36,15 +36,6 @@
|
|||
</item>
|
||||
|
||||
<!-- <item>
|
||||
<label>Set Lat/Lon Format</label>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
var f = getprop(var d = "/sim/lon-lat-format") + 1;
|
||||
setprop(d, f < 0 ? 0 : f > 2 ? 0 : f);
|
||||
</script>
|
||||
</binding>
|
||||
</item>
|
||||
<label>High-Res Snapshot</label>
|
||||
<enabled>false</enabled>
|
||||
<binding>
|
||||
|
@ -127,16 +118,6 @@
|
|||
</item>
|
||||
|
||||
<item>
|
||||
<!-- <item>
|
||||
<label>Set Lat/Lon Format</label>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
var f = getprop(var d = "/sim/lon-lat-format") + 1;
|
||||
setprop(d, f < 0 ? 0 : f > 2 ? 0 : f);
|
||||
</script>
|
||||
</binding>
|
||||
</item> -->
|
||||
<label>View Options</label>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
|
|
Loading…
Reference in a new issue