Merge branch 'master' of gitorious.org:fg/fgdata
This commit is contained in:
commit
052ae33034
31 changed files with 8896 additions and 139 deletions
232
Aircraft/Instruments-3d/TR1133/Dialogs/radios.xml
Normal file
232
Aircraft/Instruments-3d/TR1133/Dialogs/radios.xml
Normal file
|
@ -0,0 +1,232 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<name>radios</name>
|
||||
<width>550</width>
|
||||
<modal>false</modal>
|
||||
<layout>vbox</layout>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<empty>
|
||||
<stretch>1</stretch>
|
||||
</empty>
|
||||
|
||||
<text>
|
||||
<label>Radio Frequencies</label>
|
||||
</text>
|
||||
|
||||
<empty>
|
||||
<stretch>1</stretch>
|
||||
</empty>
|
||||
|
||||
<button>
|
||||
<pref-width>16</pref-width>
|
||||
<pref-height>16</pref-height>
|
||||
<legend></legend>
|
||||
<keynum>27</keynum>
|
||||
<border>2</border>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<text>
|
||||
<label>Selected</label>
|
||||
</text>
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<text>
|
||||
<label>Channel</label>
|
||||
</text>
|
||||
<text>
|
||||
<label>Frequency</label>
|
||||
</text>
|
||||
</group>
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<text>
|
||||
<!--<label>xxxxxxx</label>-->
|
||||
<label>Channel</label>
|
||||
<live>true</live>
|
||||
<!--<format>%.2f</format>-->
|
||||
<property>systems/comm/SCR-522C/frequencies/channel</property>
|
||||
</text>
|
||||
<text>
|
||||
<!--<label>xxxxxxx</label>-->
|
||||
<label>MHz</label>
|
||||
<live>true</live>
|
||||
<format>%.2f</format>
|
||||
<property>/instrumentation/comm[0]/frequencies/selected-mhz</property>
|
||||
</text>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<text>
|
||||
<label>Channel Assignment</label>
|
||||
</text>
|
||||
</group>
|
||||
|
||||
<group>
|
||||
<layout>table</layout>
|
||||
|
||||
<!-- headers -->
|
||||
|
||||
<!--<text>
|
||||
<row>0</row>
|
||||
<col>4</col>
|
||||
<label>Standby</label>
|
||||
</text>-->
|
||||
|
||||
|
||||
<!-- Dummy label to stretch table, as layout manager doesn't handle labels well -->
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>6</col>
|
||||
<label></label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>0</col>
|
||||
<halign>right</halign>
|
||||
<label>A</label>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<name>channel A</name>
|
||||
<row>1</row>
|
||||
<col>1</col>
|
||||
<width>75</width>
|
||||
<height>25</height>
|
||||
<label>MHz</label>
|
||||
<property>/instrumentation/comm/channels/A-mhz</property>
|
||||
</input>
|
||||
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>3</col>
|
||||
<halign>right</halign>
|
||||
<label>B</label>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<name>channel B</name>
|
||||
<row>1</row>
|
||||
<col>4</col>
|
||||
<width>75</width>
|
||||
<height>25</height>
|
||||
<label>MHz</label>
|
||||
<property>/instrumentation/comm/channels/B-mhz</property>
|
||||
</input>
|
||||
|
||||
<text>
|
||||
<row>2</row>
|
||||
<col>0</col>
|
||||
<halign>right</halign>
|
||||
<label>C</label>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<name>channel C</name>
|
||||
<row>2</row>
|
||||
<col>1</col>
|
||||
<width>75</width>
|
||||
<height>25</height>
|
||||
<label>MHz</label>
|
||||
<property>/instrumentation/comm/channels/C-mhz</property>
|
||||
</input>
|
||||
|
||||
<text>
|
||||
<row>2</row>
|
||||
<col>3</col>
|
||||
<halign>right</halign>
|
||||
<label>D</label>
|
||||
</text>
|
||||
|
||||
<input>
|
||||
<name>channel D</name>
|
||||
<row>2</row>
|
||||
<col>4</col>
|
||||
<width>75</width>
|
||||
<height>25</height>
|
||||
<label>MHz</label>
|
||||
<property>/instrumentation/comm/channels/D-mhz</property>
|
||||
</input>
|
||||
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<button>
|
||||
<legend>ATC Services in range</legend>
|
||||
<binding>
|
||||
<command>ATC-freq-search</command>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<default-padding>6</default-padding>
|
||||
<empty>
|
||||
<stretch>true</stretch>
|
||||
</empty>
|
||||
|
||||
<button>
|
||||
<legend>OK</legend>
|
||||
<default>true</default>
|
||||
<equal>true</equal>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<legend>Apply</legend>
|
||||
<equal>true</equal>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<legend>Reset</legend>
|
||||
<equal>true</equal>
|
||||
<binding>
|
||||
<command>dialog-update</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<legend>Cancel</legend>
|
||||
<equal>true</equal>
|
||||
<key>Esc</key>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<empty>
|
||||
<stretch>true</stretch>
|
||||
</empty>
|
||||
</group>
|
||||
|
||||
|
||||
</PropertyList>
|
114
Aircraft/Instruments-3d/TR1133/Nasal/TR1133.nas
Normal file
114
Aircraft/Instruments-3d/TR1133/Nasal/TR1133.nas
Normal file
|
@ -0,0 +1,114 @@
|
|||
#####################################################################################
|
||||
# This script provides the gui to set up the TR1133 radio #
|
||||
# #
|
||||
# Author Vivian Meazza June 2011 #
|
||||
#####################################################################################
|
||||
|
||||
# ================================ Initalize ======================================
|
||||
# Make sure all needed properties are present and accounted
|
||||
# for, and that they have sane default values.
|
||||
|
||||
var channelA_node = props.globals.initNode("instrumentation/comm/channels/A-mhz", 0, "DOUBLE");
|
||||
var channelB_node = props.globals.initNode("instrumentation/comm/channels/B-mhz", 0, "DOUBLE");
|
||||
var channelC_node = props.globals.initNode("instrumentation/comm/channels/C-mhz", 0, "DOUBLE");
|
||||
var channelD_node = props.globals.initNode("instrumentation/comm/channels/D-mhz", 0, "DOUBLE");
|
||||
|
||||
var channel_selected_node = props.globals.initNode("systems/comm/SCR-522C/frequencies/channel-selected", 0, "INT");
|
||||
var tr_node = props.globals.initNode("systems/comm/SCR-522C/tr", 1, "INT");
|
||||
props.globals.initNode("systems/comm/SCR-522C/frequencies/channel", "", "STRING");
|
||||
props.globals.initNode("systems/comm/SCR-522C/channel-dimmer", 0, "BOOL");
|
||||
props.globals.initNode("systems/comm/SCR-522C/tr-lock", 1, "BOOL");
|
||||
|
||||
var comm_selected_node = props.globals.getNode("instrumentation/comm/frequencies/selected-mhz", 1);
|
||||
var comm_standby_node = props.globals.getNode("instrumentation/comm/frequencies/standby-mhz", 1);
|
||||
var comm1_selected_node = props.globals.getNode("instrumentation/comm[1]/frequencies/selected-mhz", 1);
|
||||
var comm1_standby_node = props.globals.getNode("instrumentation/comm[1]/frequencies/standby-mhz", 1);
|
||||
|
||||
var radio_dlg = gui.Dialog.new("dialog","Aircraft/Instruments-3d/TR1133/Dialogs/radios.xml");
|
||||
|
||||
var channel = ["OFF","A","B","C","D"];
|
||||
#getprop("systems/comm/SCR-522C/frequencies/channel", 1);
|
||||
setprop("systems/comm/SCR-522C/frequencies/channel", channel[channel_selected_node.getValue()]);
|
||||
|
||||
var TR1133_init = func(){
|
||||
|
||||
print ("initializing TR1133 ...");
|
||||
|
||||
var channelA_init = comm_selected_node.getValue();
|
||||
var channelB_init = comm_standby_node.getValue();
|
||||
var channelC_init = comm1_selected_node.getValue();
|
||||
var channelD_init = comm1_standby_node.getValue();
|
||||
|
||||
channelA_node.setValue(channelA_init);
|
||||
channelB_node.setValue(channelB_init);
|
||||
channelC_node.setValue(channelC_init);
|
||||
channelD_node.setValue(channelD_init);
|
||||
|
||||
comm_selected_node.setValue(0);
|
||||
comm_standby_node.setValue(0);
|
||||
comm1_selected_node.setValue(0);
|
||||
comm1_standby_node.setValue(0);
|
||||
|
||||
# Disable the menu item "Equipment > radio" so we use our own gui: " > Radio".
|
||||
print("Disabling Menu: Equipment -> Radios GUI use Spitfire -> Radio");
|
||||
gui.menuEnable("radio",0);
|
||||
|
||||
|
||||
# =============================== listeners ===============================
|
||||
#
|
||||
|
||||
setlistener("systems/comm/SCR-522C/frequencies/channel-selected", func(n) {
|
||||
var channel_no = n.getValue();
|
||||
|
||||
if (channel_no == nil) channel_no = 0;
|
||||
|
||||
# print("channel", channel_no, " ", channel[channel_no]);
|
||||
setprop("systems/comm/SCR-522C/frequencies/channel", channel[channel_no]);
|
||||
},
|
||||
1,
|
||||
0); #end listener
|
||||
|
||||
setlistener("systems/comm/SCR-522C/tr", func(t) {
|
||||
var tr = t.getValue();
|
||||
# print("tr ",tr);
|
||||
|
||||
if (tr == nil) tr = 1;
|
||||
|
||||
if (tr == 0)
|
||||
setprop("instrumentation/comm/ptt", 1);
|
||||
else
|
||||
setprop("instrumentation/comm/ptt", 0);
|
||||
|
||||
|
||||
},
|
||||
1,
|
||||
0); # end listener
|
||||
|
||||
print("... done");
|
||||
|
||||
}#end func initialize
|
||||
|
||||
setlistener("sim/signals/fdm-initialized", TR1133_init);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
Aircraft/Instruments-3d/TR1133/SCR-522C.rgb
Normal file
BIN
Aircraft/Instruments-3d/TR1133/SCR-522C.rgb
Normal file
Binary file not shown.
6732
Aircraft/Instruments-3d/TR1133/TR1133.ac
Normal file
6732
Aircraft/Instruments-3d/TR1133/TR1133.ac
Normal file
File diff suppressed because it is too large
Load diff
588
Aircraft/Instruments-3d/TR1133/TR1133.xml
Normal file
588
Aircraft/Instruments-3d/TR1133/TR1133.xml
Normal file
|
@ -0,0 +1,588 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- The TR1133 was the progenitor of the SCR-522C. This is a mild rework of the
|
||||
generic SCR-522C -->
|
||||
|
||||
<PropertyList>
|
||||
|
||||
<path>TR1133.ac</path>
|
||||
|
||||
<animation>
|
||||
<type>range</type>
|
||||
<min-m>0</min-m>
|
||||
<max-m>25</max-m>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522C-OFF</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/comm[0]/frequencies/selected-mhz</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-OFF</object-name>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>-0.005</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>2</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>3</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>4</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<center>
|
||||
<x-m>-0.00</x-m>
|
||||
<y-m>0.0</y-m>
|
||||
<z-m>-0.0</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<z>1</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>SCR-522C-T-base</object-name>
|
||||
<object-name>SCR-522C-T-sw-handle</object-name>
|
||||
<object-name>SCR-522C-T-stem</object-name>
|
||||
<property>/systems/comm/SCR-522C/tr</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>15</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>2</ind>
|
||||
<dep>-15</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<center>
|
||||
<x-m>-0.03644</x-m>
|
||||
<y-m>-0.0080818</y-m>
|
||||
<z-m> 0.0495798</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522C-A</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/comm[0]/frequencies/selected-mhz</property>
|
||||
<property>/instrumentation/comm/channels/A-mhz</property>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-A</object-name>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1</ind>
|
||||
<dep>-0.005</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>2</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>3</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>4</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<center>
|
||||
<x-m>-0.00</x-m>
|
||||
<y-m>0.0</y-m>
|
||||
<z-m>-0.0</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<z>1</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522C-B</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>2</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/comm[0]/frequencies/selected-mhz</property>
|
||||
<property>/instrumentation/comm/channels/B-mhz</property>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-B</object-name>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>2</ind>
|
||||
<dep>-0.005</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>3</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>4</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<center>
|
||||
<x-m>-0.00</x-m>
|
||||
<y-m>0.0</y-m>
|
||||
<z-m>-0.0</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<z>1</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522C-C</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>3</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/comm[0]/frequencies/selected-mhz</property>
|
||||
<property>/instrumentation/comm/channels/C-mhz</property>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-C</object-name>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>-0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1</ind>
|
||||
<dep>-0.0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>2</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>3</ind>
|
||||
<dep>-0.005</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>4</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<center>
|
||||
<x-m>-0.00</x-m>
|
||||
<y-m>0.0</y-m>
|
||||
<z-m>-0.0</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<z>1</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522C-D</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>4</value>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/instrumentation/comm[0]/frequencies/selected-mhz</property>
|
||||
<property>/instrumentation/comm/channels/D-mhz</property>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-D</object-name>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>-0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1</ind>
|
||||
<dep>-0.0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>2</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>3</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>4</ind>
|
||||
<dep>-0.005</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<center>
|
||||
<x-m>-0.00</x-m>
|
||||
<y-m>0.0</y-m>
|
||||
<z-m>-0.0</z-m>
|
||||
</center>
|
||||
<axis>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<z>1</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>SCR-522C-lamp-A</object-name>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>1</value>
|
||||
</equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>SCR-522C-lamp-B</object-name>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>2</value>
|
||||
</equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>SCR-522C-lamp-C</object-name>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>3</value>
|
||||
</equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>SCR-522C-lamp-D</object-name>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>4</value>
|
||||
</equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>false</visible>
|
||||
<object-name>Pick0</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/tr</property>
|
||||
<value>0</value>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/tr</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>false</visible>
|
||||
<object-name>Pick1</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/tr</property>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>false</visible>
|
||||
<object-name>Pick2</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<condition>
|
||||
<not>
|
||||
<property>/systems/comm/SCR-522C/tr-lock</property>
|
||||
</not>
|
||||
</condition>
|
||||
<command>property-assign</command>
|
||||
<property>/systems/comm/SCR-522C/tr</property>
|
||||
<value>2</value>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>SCR-522C-lamp-T</object-name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>/systems/comm/SCR-522C/tr</property>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
<greater-than>
|
||||
<property>/systems/comm/SCR-522C/frequencies/channel-selected</property>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
<not>
|
||||
<property>/instrumentation/comm[0]/ptt</property>
|
||||
</not>
|
||||
<not>
|
||||
<property>/instrumentation/comm[1]/ptt</property>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522C-light-cont-1</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/systems/comm/SCR-522C/channel-dimmer</property>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-light-cont-1</object-name>
|
||||
<property>/systems/comm/SCR-522C/channel-dimmer</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>0.0085</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1.0</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522C-light-cont-2</object-name>
|
||||
<property>/systems/comm/SCR-522C/channel-dimmer</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>0.0085</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1.0</ind>
|
||||
<dep>0</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<visible>true</visible>
|
||||
<object-name>SCR-522-T-Lock</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>property-toggle</command>
|
||||
<property>/systems/comm/SCR-522C/tr-lock</property>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>SCR-522-T-Lock</object-name>
|
||||
<property>/systems/comm/SCR-522C/tr-lock</property>
|
||||
<interpolation>
|
||||
<entry>
|
||||
<ind>0</ind>
|
||||
<dep>0.0</dep>
|
||||
</entry>
|
||||
<entry>
|
||||
<ind>1.0</ind>
|
||||
<dep>0.0085</dep>
|
||||
</entry>
|
||||
</interpolation>
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
|
||||
<animation>
|
||||
<type>material</type>
|
||||
<object-name>SCR-522C-top</object-name>
|
||||
<object-name>SCR-522C-box</object-name>
|
||||
<object-name>SCR-522C-A</object-name>
|
||||
<object-name>SCR-522C-B</object-name>
|
||||
<object-name>SCR-522C-C</object-name>
|
||||
<object-name>SCR-522C-D</object-name>
|
||||
<object-name>SCR-522C-T-base</object-name>
|
||||
<object-name>SCR-522C-T-sw-handle</object-name>
|
||||
<object-name>SCR-522C-T-stem</object-name>
|
||||
<object-name>SCR-522C-light-cont-2</object-name>
|
||||
<object-name>SCR-522C-light-cont-1</object-name>
|
||||
<object-name>SCR-522C-OFF</object-name>
|
||||
<object-name>SCR-522-T-Lock</object-name>
|
||||
<!--<object-name>right-outer-bracket</object-name>
|
||||
<object-name>left-inner-bracket</object-name>
|
||||
<object-name>left-outer-bracket</object-name>-->
|
||||
<condition>
|
||||
<greater-than>
|
||||
<property>/controls/lighting/panel-norm</property>
|
||||
<value>0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
<emission>
|
||||
<factor-prop>/controls/lighting/panel-norm</factor-prop>
|
||||
<red>0.75</red>
|
||||
<green>0.25</green>
|
||||
<blue>0.25</blue>
|
||||
</emission>
|
||||
</animation>
|
||||
|
||||
|
||||
</PropertyList>
|
|
@ -400,6 +400,7 @@ The flags printed after the node type have the following meaning:
|
|||
W -> trace write operations
|
||||
A -> archive bit set
|
||||
U -> user archive bit set
|
||||
P -> preserved bit set (value is preserved on sim-reset)
|
||||
T -> property is "tied"
|
||||
|
||||
Ln -> number of listeners attached to this node
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
<material>
|
||||
<color-mode-uniform>1</color-mode-uniform> <!-- DIFFUSE -->
|
||||
</material>
|
||||
<condition><use>/sim/rendering/shader-effects</use></condition>
|
||||
<condition><use>/sim/rendering/shader-effects</use></condition>
|
||||
<factor>1</factor>
|
||||
</parameters>
|
||||
<technique n="10">
|
||||
<predicate>
|
||||
|
@ -104,6 +105,11 @@
|
|||
<type>float</type>
|
||||
<value><use>condition</use></value>
|
||||
</uniform>
|
||||
<uniform>
|
||||
<name>lightmap_factor</name>
|
||||
<type>float</type>
|
||||
<value><use>factor</use></value>
|
||||
</uniform>
|
||||
</pass>
|
||||
</technique>
|
||||
<technique n="11">
|
||||
|
|
|
@ -134,8 +134,9 @@ var attributes = func(p, verbose = 1) {
|
|||
var W = p.getAttribute("trace-write") ? "W" : "";
|
||||
var A = p.getAttribute("archive") ? "A" : "";
|
||||
var U = p.getAttribute("userarchive") ? "U" : "";
|
||||
var P = p.getAttribute("preserve") ? "P" : "";
|
||||
var T = p.getAttribute("tied") ? "T" : "";
|
||||
var attr = r ~ w ~ R ~ W ~ A ~ U ~ T;
|
||||
var attr = r ~ w ~ R ~ W ~ A ~ U ~ P ~ T;
|
||||
var type = "(" ~ p.getType();
|
||||
if (size(attr))
|
||||
type ~= ", " ~ attr;
|
||||
|
|
|
@ -1265,6 +1265,17 @@ _setlistener("/sim/signals/screenshot", func {
|
|||
}
|
||||
});
|
||||
|
||||
var terrasync_stalled = 0;
|
||||
_setlistener("/sim/terrasync/stalled", func {
|
||||
var stalled = getprop("/sim/terrasync/stalled");
|
||||
if (stalled and !terrasync_stalled)
|
||||
{
|
||||
var button = { button: { legend: "Ok", default: 1, binding: { command: "dialog-close" }}};
|
||||
popupTip("Scenery download stalled. Too many errors reported. See log output.", 600, button);
|
||||
}
|
||||
terrasync_stalled = stalled;
|
||||
});
|
||||
|
||||
var do_welcome = 1;
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
var haveTutorials = size(props.globals.getNode("/sim/tutorials", 1).getChildren("tutorial"));
|
||||
|
|
|
@ -67,8 +67,19 @@
|
|||
# The compatibility layer is currently work in progress and will be extended as new Nasal
|
||||
# APIs are being added to FlightGear.
|
||||
|
||||
var weather_dynamics = nil;
|
||||
var weather_tile_management = nil;
|
||||
var compat_layer = nil;
|
||||
var weather_tiles = nil;
|
||||
|
||||
|
||||
_setlistener("/nasal/local_weather/loaded", func {
|
||||
|
||||
compat_layer = local_weather;
|
||||
weather_dynamics = local_weather;
|
||||
weather_tile_management = local_weather;
|
||||
weather_tiles = local_weather;
|
||||
|
||||
_setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||
|
||||
var result = "yes";
|
||||
|
||||
|
@ -81,10 +92,16 @@ else
|
|||
print("* can set light saturation: "~result);
|
||||
|
||||
|
||||
if (props.globals.getNode("/rendering/scene/scattering", 0) == nil)
|
||||
{result = "no"; features.can_set_scattering = 0;}
|
||||
else
|
||||
{result = "yes"; features.can_set_scattering = 1;}
|
||||
print("* can set horizon scattering: "~result);
|
||||
|
||||
if (props.globals.getNode("/environment/terrain", 0) == nil)
|
||||
{result = "no"; features.terrain_presampling = 0;}
|
||||
else
|
||||
{result = "yes"; features.terrain_presampling = 1;}
|
||||
{result = "yes"; features.terrain_presampling = 1;setprop("/environment/terrain/area[0]/enabled",1);}
|
||||
print("* hard coded terrain presampling: "~result);
|
||||
|
||||
if ((props.globals.getNode("/environment/terrain/area[0]/enabled",1).getBoolValue() == 1) and (features.terrain_presampling ==1))
|
||||
|
@ -100,10 +117,6 @@ else
|
|||
{result = "yes"; features.can_disable_environment = 1;}
|
||||
print("* can disable global weather: "~result);
|
||||
|
||||
#if (features.terrain_presampling_active == 1)
|
||||
# {
|
||||
# setlistener("/environment/terrain/area[0]/output/valid", func {local_weather.manage_hardcoded_presampling(); });
|
||||
# }
|
||||
|
||||
print("Compatibility layer: tests done.");
|
||||
});
|
||||
|
@ -328,6 +341,32 @@ if (features.can_set_light == 1)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
####################################
|
||||
# set horizon scattering
|
||||
####################################
|
||||
|
||||
var setScattering = func (s) {
|
||||
|
||||
if (features.can_set_scattering == 1)
|
||||
{
|
||||
setprop("/rendering/scene/scattering",s);
|
||||
}
|
||||
}
|
||||
|
||||
####################################
|
||||
# set overcast haze
|
||||
####################################
|
||||
|
||||
var setOvercast = func (o) {
|
||||
|
||||
if (features.can_set_scattering == 1)
|
||||
{
|
||||
setprop("/rendering/scene/overcast",o);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
###########################################################
|
||||
# set wind to given direction and speed
|
||||
###########################################################
|
|
@ -56,6 +56,7 @@
|
|||
# set_texture_mix to determine the texture mix between smooth and rough cloud appearance
|
||||
# create_effect_volume to create an effect volume
|
||||
# set_weather_station to specify a weather station for interpolation
|
||||
# set_atmosphere_ipoint to specify an interpolation point for visibility, haze and shading in the atmosphere
|
||||
# set_wind_ipoint to set an aloft wind interpolation point
|
||||
# set_wind_ipoint_metar to set a wind interpolation point from available ground METAR info where aloft is modelled
|
||||
# showDialog to pop up a dialog window
|
||||
|
@ -74,6 +75,7 @@
|
|||
# object purpose
|
||||
|
||||
# weatherStation to store info about weather conditions
|
||||
# atmopshereIpoint to store info about haze and light propagation in the atmosphere
|
||||
# windIpoint to store an interpolation point of the windfield
|
||||
# effectVolume to store effect volume info and provide methods to move and time-evolve effect volumes
|
||||
# thermalLift to store thermal info and provide methods to move and time-evolve a thermal
|
||||
|
@ -109,6 +111,9 @@ return (x*x + y*y);
|
|||
|
||||
var effect_volume_loop = func (index, n_active) {
|
||||
|
||||
|
||||
if (local_weather_running_flag == 0) {return;}
|
||||
|
||||
var n = 25;
|
||||
|
||||
|
||||
|
@ -415,14 +420,11 @@ return f_slow;
|
|||
|
||||
var interpolation_loop = func {
|
||||
|
||||
if (local_weather_running_flag == 0) {return;}
|
||||
|
||||
var viewpos = geo.aircraft_position();
|
||||
|
||||
var sum_alt = 0.0;
|
||||
var sum_vis = 0.0;
|
||||
var sum_T = 0.0;
|
||||
var sum_p = 0.0;
|
||||
var sum_D = 0.0;
|
||||
var sum_norm = 0.0;
|
||||
|
||||
|
||||
var vis_before = getprop(lwi~"visibility-m");
|
||||
|
||||
|
@ -453,6 +455,12 @@ else
|
|||
|
||||
# get an inverse distance weighted average from all defined weather stations
|
||||
|
||||
var sum_alt = 0.0;
|
||||
var sum_vis = 0.0;
|
||||
var sum_T = 0.0;
|
||||
var sum_p = 0.0;
|
||||
var sum_D = 0.0;
|
||||
var sum_norm = 0.0;
|
||||
|
||||
var n_stations = size(weatherStationArray);
|
||||
|
||||
|
@ -502,40 +510,145 @@ var D = sum_D/sum_norm;
|
|||
var T = sum_T/sum_norm;
|
||||
|
||||
|
||||
# get an inverse distance weighted average from all defined atmospheric condition points
|
||||
|
||||
sum_norm = 0.0;
|
||||
var sum_vis_aloft = 0.0;
|
||||
var sum_vis_alt1 = 0.0;
|
||||
var sum_vis_ovcst = 0.0;
|
||||
var sum_ovcst = 0.0;
|
||||
var sum_ovcst_alt_low = 0.0;
|
||||
var sum_ovcst_alt_high = 0.0;
|
||||
var sum_scatt = 0.0;
|
||||
var sum_scatt_alt_low = 0.0;
|
||||
var sum_scatt_alt_high = 0.0;
|
||||
|
||||
var n_iPoints = size(atmosphereIpointArray);
|
||||
|
||||
for (var i = 0; i < n_iPoints; i=i+1) {
|
||||
|
||||
a = atmosphereIpointArray[i];
|
||||
|
||||
|
||||
var apos = geo.Coord.new();
|
||||
apos.set_latlon(a.lat,a.lon,0.0);
|
||||
|
||||
var d = viewpos.distance_to(apos);
|
||||
if (d <100.0) {d = 100.0;} # to prevent singularity at zero
|
||||
|
||||
sum_norm = sum_norm + 1./d * a.weight;
|
||||
sum_vis_aloft = sum_vis_aloft + (a.vis_aloft/d) * a.weight;
|
||||
sum_vis_alt1 = sum_vis_alt1 + (a.vis_alt1/d) * a.weight;
|
||||
sum_vis_ovcst = sum_vis_ovcst + (a.vis_ovcst/d) * a.weight;
|
||||
sum_ovcst = sum_ovcst + (a.ovcst/d) * a.weight;
|
||||
sum_ovcst_alt_low = sum_ovcst_alt_low + (a.ovcst_alt_low/d) * a.weight;
|
||||
sum_ovcst_alt_high = sum_ovcst_alt_high + (a.ovcst_alt_high/d) * a.weight;
|
||||
sum_scatt = sum_scatt + (a.scatt/d) * a.weight;
|
||||
sum_scatt_alt_low = sum_scatt_alt_low + (a.scatt_alt_low/d) * a.weight;
|
||||
sum_scatt_alt_high = sum_scatt_alt_high + (a.scatt_alt_high/d) * a.weight;
|
||||
|
||||
# gradually fade in the interpolation weight of newly added stations to
|
||||
# avoid sudden jumps
|
||||
|
||||
if (a.weight < 1.0) {a.weight = a.weight + 0.02;}
|
||||
|
||||
# automatically delete stations out of range
|
||||
# take care not to unload if weird values appear for a moment
|
||||
# never unload if only one station left
|
||||
if ((d > distance_to_unload) and (d < (distance_to_unload + 20000.0)) and (n_iPoints > 1))
|
||||
{
|
||||
if (debug_output_flag == 1)
|
||||
{print("Distance to atmosphere interpolation point ", d, " m, unloading ...", i);}
|
||||
atmosphereIpointArray = weather_tile_management.delete_from_vector(atmosphereIpointArray,i);
|
||||
i = i-1; n_iPoints = n_iPoints -1;
|
||||
}
|
||||
}
|
||||
|
||||
setprop(lwi~"atmosphere-ipoint-number", i+1);
|
||||
|
||||
|
||||
|
||||
var vis_aloft = sum_vis_aloft/sum_norm;
|
||||
var vis_alt1 = sum_vis_alt1/sum_norm;
|
||||
var vis_ovcst = sum_vis_ovcst/sum_norm;
|
||||
var ovcst_max = sum_ovcst/sum_norm;
|
||||
var ovcst_alt_low = sum_ovcst_alt_low/sum_norm;
|
||||
var ovcst_alt_high = sum_ovcst_alt_high/sum_norm;
|
||||
var scatt_max = sum_scatt/sum_norm;
|
||||
var scatt_alt_low = sum_scatt_alt_low/sum_norm;
|
||||
var scatt_alt_high = sum_scatt_alt_high/sum_norm;
|
||||
|
||||
|
||||
|
||||
|
||||
# altitude model for visibility - increase above the lowest inversion layer to simulate ground haze
|
||||
|
||||
|
||||
var altitude = getprop("position/altitude-ft");
|
||||
|
||||
var current_tile_index = getprop(lw~"tiles/tile[4]/tile-index");
|
||||
|
||||
#if (presampling_flag == 1)
|
||||
# {var current_mean_terrain_elevation = alt_20_array[current_tile_index -1];}
|
||||
#else
|
||||
# {var current_mean_terrain_elevation = getprop(lw~"tmp/tile-alt-offset-ft");}
|
||||
|
||||
current_mean_terrain_elevation = ialt;
|
||||
|
||||
var alt1 = weather_dynamics.tile_convective_altitude[current_tile_index -1];
|
||||
var alt1 = vis_alt1;
|
||||
var alt2 = alt1 + 1500.0;
|
||||
|
||||
|
||||
var inc1 = 0.1;
|
||||
var inc2 = 5.0;
|
||||
var inc3 = 0.5;
|
||||
#var inc1 = 0.15;
|
||||
#var inc2 = 5.0;
|
||||
#var inc3 = 0.7;
|
||||
|
||||
var alt_above_mean = altitude - current_mean_terrain_elevation;
|
||||
# compute the visibility gradients
|
||||
|
||||
var inc1 = 0.1 * (vis_aloft - vis)/(vis_alt1 - ialt);
|
||||
var inc2 = 0.9 * (vis_aloft - vis)/1500.0;
|
||||
var inc3 = (vis_ovcst - vis_aloft)/(ovcst_alt_high - vis_alt1+1500);
|
||||
var inc4 = 0.5;
|
||||
|
||||
# compute the visibility
|
||||
|
||||
if (altitude < alt1)
|
||||
{vis = vis + inc1 * altitude;}
|
||||
else if (altitude < alt2)
|
||||
{
|
||||
vis = vis + inc1 * alt1 + inc2 * (altitude - alt1);
|
||||
}
|
||||
else if (altitude < ovcst_alt_high)
|
||||
{
|
||||
vis = vis + inc1 * alt1 + inc2 * (alt2-alt1) + inc3 * (altitude - alt2);
|
||||
}
|
||||
else if (altitude > ovcst_alt_high)
|
||||
{
|
||||
vis = vis + inc1 * alt1 + inc2 * (alt2-alt1) + inc3 * (ovcst_alt_high - alt2) + inc4 * (altitude - ovcst_alt_high);
|
||||
}
|
||||
|
||||
# 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;}
|
||||
|
||||
|
||||
# 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 (alt_above_mean < alt1)
|
||||
{vis = vis + inc1 * alt_above_mean;}
|
||||
else if (alt_above_mean < alt2)
|
||||
{vis = vis + inc1 * alt1 + inc2 * (alt_above_mean - alt1);}
|
||||
else if (alt_above_mean > alt2)
|
||||
{vis = vis + inc1 * alt1 + inc2 * (alt2-alt1) + inc3 * (alt_above_mean - alt2);}
|
||||
|
||||
|
||||
# limit relative changes of the visibility, will make for gradual transitions
|
||||
|
||||
|
||||
if (vis/vis_before > vlimit)
|
||||
{vis = vlimit * vis_before;}
|
||||
else if (vis/vis_before < (2.0-vlimit))
|
||||
|
@ -543,6 +656,7 @@ else if (vis/vis_before < (2.0-vlimit))
|
|||
|
||||
|
||||
|
||||
|
||||
# write all properties into the weather interpolation record in the property tree
|
||||
|
||||
setprop(lwi~"mean-terrain-altitude-ft",ialt);
|
||||
|
@ -552,9 +666,11 @@ setprop(lwi~"dewpoint-degc",D);
|
|||
if (p > 10.0) {setprop(lwi~"pressure-sea-level-inhg",p);}
|
||||
setprop(lwi~"turbulence",0.0);
|
||||
|
||||
compat_layer.setScattering(scatt);
|
||||
compat_layer.setOvercast(ovcst);
|
||||
|
||||
# now check if an effect volume writes the property and set only if not
|
||||
|
||||
#flag = props.globals.getNode("local-weather/effect-volumes/number-active-vis").getValue();
|
||||
flag = getprop("local-weather/effect-volumes/number-active-vis");
|
||||
|
||||
if ((flag ==0) and (vis > 0.0) and (getprop(lw~"lift-loop-flag") == 0))
|
||||
|
@ -564,39 +680,32 @@ if ((flag ==0) and (vis > 0.0) and (getprop(lw~"lift-loop-flag") == 0))
|
|||
compat_layer.setVisibility(vis);
|
||||
}
|
||||
|
||||
#flag = props.globals.getNode("local-weather/effect-volumes/number-active-turb").getValue();
|
||||
flag = getprop("local-weather/effect-volumes/number-active-turb");
|
||||
|
||||
if ((flag ==0))
|
||||
{
|
||||
#cNode.getNode("turbulence").setValue(0.0);
|
||||
setprop(lw~"current/turbulence",0.0);
|
||||
compat_layer.setTurbulence(0.0);
|
||||
}
|
||||
|
||||
|
||||
#flag = props.globals.getNode("local-weather/effect-volumes/number-active-lift").getValue();
|
||||
flag = getprop("local-weather/effect-volumes/number-active-lift");
|
||||
|
||||
if (flag ==0)
|
||||
{
|
||||
#cNode.getNode("thermal-lift").setValue(0.0);
|
||||
setprop(lw~"current/thermal-lift",0.0);
|
||||
}
|
||||
|
||||
# no need to check for these, as they are not modelled in effect volumes
|
||||
|
||||
#cNode.getNode("temperature-degc",1).setValue(T);
|
||||
setprop(lw~"current/temperature-degc",T);
|
||||
compat_layer.setTemperature(T);
|
||||
|
||||
#cNode.getNode("dewpoint-degc",1).setValue(D);
|
||||
setprop(lw~"current/dewpoint-degc", D);
|
||||
compat_layer.setDewpoint(D);
|
||||
|
||||
if (p>0.0)
|
||||
{
|
||||
#cNode.getNode("pressure-sea-level-inhg",1).setValue(p);
|
||||
setprop(lw~"current/pressure-sea-level-inhg",p);
|
||||
compat_layer.setPressure(p);
|
||||
}
|
||||
|
@ -794,6 +903,8 @@ if (getprop(lw~"lift-loop-flag") == 0)
|
|||
|
||||
var thermal_lift_loop = func {
|
||||
|
||||
if (local_weather_running_flag == 0) {return;}
|
||||
|
||||
var apos = geo.aircraft_position();
|
||||
|
||||
var tlat = thermal.lat;
|
||||
|
@ -915,6 +1026,8 @@ if (getprop(lw~"wave-loop-flag") == 0)
|
|||
|
||||
var wave_lift_loop = func {
|
||||
|
||||
if (local_weather_running_flag == 0) {return;}
|
||||
|
||||
var lat = getprop("position/latitude-deg");
|
||||
var lon = getprop("position/longitude-deg");
|
||||
var alt = getprop("position/altitude-ft");
|
||||
|
@ -1719,13 +1832,6 @@ foreach (var m; modelNode)
|
|||
}
|
||||
|
||||
|
||||
|
||||
# clear effect volumes
|
||||
|
||||
#props.globals.getNode("local-weather/effect-volumes", 1).removeChildren("effect-volume");
|
||||
|
||||
|
||||
|
||||
# reset pressure continuity
|
||||
|
||||
weather_tiles.last_pressure = 0.0;
|
||||
|
@ -1745,12 +1851,13 @@ setprop(lw~"convective-loop-flag",0);
|
|||
|
||||
weather_dynamics.convective_loop_kill_flag = 1; # long-running loop needs a different scheme to end
|
||||
|
||||
# also remove rain snow and saturation effects
|
||||
# also remove rain, snow, haze and light effects
|
||||
|
||||
compat_layer.setRain(0.0);
|
||||
compat_layer.setSnow(0.0);
|
||||
compat_layer.setLight(1.0);
|
||||
|
||||
|
||||
# set placement indices to zero
|
||||
|
||||
setprop(lw~"clouds/placement-index",0);
|
||||
|
@ -1783,11 +1890,14 @@ settimer ( func {
|
|||
setsize(weather_dynamics.tile_convective_strength,0);
|
||||
setsize(weatherStationArray,0);
|
||||
setsize(windIpointArray,0);
|
||||
setsize(atmosphereIpointArray,0);
|
||||
setprop(lw~"clouds/buffer-count",0);
|
||||
setprop(lw~"clouds/cloud-scenery-count",0);
|
||||
weather_tile_management.n_cloudSceneryArray = 0;
|
||||
#props.globals.getNode("local-weather/interpolation", 1).removeChildren("wind");
|
||||
compat_layer.setScattering(0.8);
|
||||
compat_layer.setOvercast(0.0);
|
||||
setprop(lwi~"ipoint-number",0);
|
||||
setprop(lwi~"atmosphere-ipoint-number", 0);
|
||||
},1.1);
|
||||
|
||||
setprop(lw~"tmp/presampling-status", "idle");
|
||||
|
@ -1928,6 +2038,8 @@ else
|
|||
|
||||
var cumulus_loop = func (blat, blon, balt, nc, size) {
|
||||
|
||||
if (local_weather_running_flag == 0) {return;}
|
||||
|
||||
var n = int(25/cumulus_efficiency_factor);
|
||||
|
||||
if (nc < 0)
|
||||
|
@ -1939,7 +2051,6 @@ if (nc < 0)
|
|||
return;
|
||||
}
|
||||
|
||||
#print("nc is now: ",nc);
|
||||
create_cumulus(blat, blon, balt, n, size);
|
||||
|
||||
settimer( func {cumulus_loop(blat, blon, balt, nc-n, size) },0);
|
||||
|
@ -1963,6 +2074,13 @@ 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 alt_min = getprop(lw~"tmp/tile-alt-min-ft");
|
||||
var alt_mean = getprop(lw~"tmp/tile-alt-mean-ft");
|
||||
var alt_var = alt_mean - alt_min;
|
||||
}
|
||||
|
||||
var sec_to_rad = 2.0 * math.pi/86400; # conversion factor for sinusoidal dependence on daytime
|
||||
|
||||
calc_geo(blat);
|
||||
|
@ -2016,9 +2134,26 @@ while (i < nc) {
|
|||
}}
|
||||
else {continue;}
|
||||
|
||||
|
||||
# apply some optional corrections, biases clouds towards higher elevations
|
||||
|
||||
var terrain_altitude_factor = 1.0;
|
||||
|
||||
if (detailed_terrain_interaction_flag == 1)
|
||||
{
|
||||
var elevation_enhancement = (elevation - alt_mean) / 1000.0;
|
||||
|
||||
if (elevation_enhancement > 0.7) {elevation_enhancement = 0.7;}
|
||||
if (elevation_enhancement < -0.7) {elevation_enhancement = -0.7;}
|
||||
|
||||
terrain_altitude_factor = 1.0 + elevation_enhancement;
|
||||
|
||||
}
|
||||
|
||||
|
||||
# then decide if the thermal energy at the spot generates an updraft and a cloud
|
||||
|
||||
if (rand() < (p * cumulus_efficiency_factor)) # we decide to place a cloud at this spot
|
||||
if (rand() < (p * cumulus_efficiency_factor * terrain_altitude_factor)) # we decide to place a cloud at this spot
|
||||
{
|
||||
strength = (1.5 * rand() + (2.0 * p)) * t_factor2; # the strength of thermal activity at the spot
|
||||
if (strength > 1.0)
|
||||
|
@ -2807,6 +2942,7 @@ if (compat_layer.features.terrain_presampling_active == 1)
|
|||
|
||||
var terrain_presampling_loop = func (blat, blon, nc, size, alpha) {
|
||||
|
||||
if ((local_weather_running_flag == 0) and (local_weather_startup_flag == 0)) {return;}
|
||||
|
||||
var n = 25;
|
||||
|
||||
|
@ -2951,6 +3087,7 @@ if (debug_output_flag == 1)
|
|||
setprop(lw~"tmp/tile-alt-offset-ft",alt_20);
|
||||
setprop(lw~"tmp/tile-alt-median-ft",alt_med);
|
||||
setprop(lw~"tmp/tile-alt-min-ft",alt_min);
|
||||
setprop(lw~"tmp/tile-alt-mean-ft",alt_mean);
|
||||
setprop(lw~"tmp/tile-alt-layered-ft",0.5 * (alt_min + alt_20));
|
||||
|
||||
append(alt_50_array, alt_med);
|
||||
|
@ -2965,6 +3102,8 @@ append(alt_20_array, alt_20);
|
|||
|
||||
var wave_detection_loop = func (blat, blon, nx, alpha) {
|
||||
|
||||
if (local_weather_running_flag == 0) {return;}
|
||||
|
||||
var phi = alpha * math.pi/180.0;
|
||||
var elevation = 0.0;
|
||||
var ny = 20;
|
||||
|
@ -3208,6 +3347,27 @@ append(weatherStationArray,s);
|
|||
}
|
||||
|
||||
|
||||
###########################################################
|
||||
# set an atmosphere condition point for interpolation
|
||||
###########################################################
|
||||
|
||||
var set_atmosphere_ipoint = func (lat, lon, vis_aloft, vis_alt1, vis_ovcst, ovcst,ovcst_alt_low, ovcst_alt_high, scatt, scatt_alt_low, scatt_alt_high) {
|
||||
|
||||
var a = atmosphereIpoint.new (lat, lon, vis_aloft, vis_alt1, vis_ovcst, ovcst, ovcst_alt_low, ovcst_alt_high, scatt, scatt_alt_low, scatt_alt_high);
|
||||
a.index = getprop(lw~"tiles/tile-counter");
|
||||
a.weight = 0.02;
|
||||
|
||||
# set a timestamp if needed
|
||||
|
||||
if (dynamics_flag == 1)
|
||||
{
|
||||
a.timestamp = weather_dynamics.time_lw;
|
||||
}
|
||||
append(atmosphereIpointArray,a);
|
||||
|
||||
}
|
||||
|
||||
|
||||
###########################################################
|
||||
# set a wind interpolation point
|
||||
###########################################################
|
||||
|
@ -3516,12 +3676,15 @@ var set_tile = func {
|
|||
|
||||
# check if another instance of local weather is running already
|
||||
|
||||
|
||||
if (local_weather_running_flag == 1)
|
||||
{
|
||||
setprop("/sim/messages/pilot", "Local weather: Local weather is already running, use Clear/End before restarting. Aborting...");
|
||||
return;
|
||||
}
|
||||
|
||||
local_weather_startup_flag = 1;
|
||||
|
||||
|
||||
var type = getprop("/local-weather/tmp/tile-type");
|
||||
|
||||
|
@ -3577,6 +3740,11 @@ if ((presampling_flag == 1) and (getprop(lw~"tmp/presampling-status") == "idle")
|
|||
}
|
||||
|
||||
|
||||
# indicate that we're up and running
|
||||
|
||||
local_weather_startup_flag = 0;
|
||||
local_weather_running_flag = 1;
|
||||
|
||||
# see if we use METAR for weather setup
|
||||
|
||||
if ((getprop("/environment/metar/valid") == 1) and (getprop(lw~"tmp/tile-management") == "METAR"))
|
||||
|
@ -3819,9 +3987,7 @@ if (getprop(lw~"config/buffer-flag") ==1)
|
|||
}
|
||||
}
|
||||
|
||||
# and indicate that we're up and running
|
||||
|
||||
local_weather_running_flag = 1;
|
||||
|
||||
# weather_tile_management.watchdog_loop();
|
||||
|
||||
|
@ -3929,13 +4095,16 @@ var test = func {
|
|||
var lat = getprop("position/latitude-deg");
|
||||
var lon = getprop("position/longitude-deg");
|
||||
|
||||
var pos = geo.aircraft_position();
|
||||
#var pos = geo.aircraft_position();
|
||||
|
||||
debug.dump(geodinfo(lat, lon));
|
||||
|
||||
setprop("/environment/terrain/area[0]/input/latitude-deg", lat );
|
||||
setprop("/environment/terrain/area[0]/input/longitude-deg", lon );
|
||||
# geo.put_model("Models/Astro/Earth.ac",lat, lon);
|
||||
|
||||
setprop("/environment/terrain/area[0]/output/valid", 0 );
|
||||
#setprop("/environment/terrain/area[0]/input/latitude-deg", lat );
|
||||
#setprop("/environment/terrain/area[0]/input/longitude-deg", lon );
|
||||
|
||||
#setprop("/environment/terrain/area[0]/output/valid", 0 );
|
||||
|
||||
}
|
||||
|
||||
|
@ -3957,6 +4126,7 @@ var weatherStation = {
|
|||
s.T = T;
|
||||
s.D = D;
|
||||
s.p = p;
|
||||
s.scattering = 0.8;
|
||||
return s;
|
||||
},
|
||||
move: func {
|
||||
|
@ -3969,6 +4139,32 @@ var weatherStation = {
|
|||
};
|
||||
|
||||
|
||||
var atmosphereIpoint = {
|
||||
new: func (lat, lon, vis_aloft, vis_alt1, vis_ovcst, ovcst, ovcst_alt_low, ovcst_alt_high, scatt, scatt_alt_low, scatt_alt_high){
|
||||
var a = { parents: [atmosphereIpoint] };
|
||||
a.lat = lat;
|
||||
a.lon = lon;
|
||||
a.vis_aloft = vis_aloft;
|
||||
a.vis_alt1 = vis_alt1;
|
||||
a.vis_ovcst = vis_ovcst;
|
||||
a.ovcst = ovcst;
|
||||
a.ovcst_alt_low = ovcst_alt_low;
|
||||
a.ovcst_alt_high = ovcst_alt_high;
|
||||
a.scatt = scatt;
|
||||
a.scatt_alt_low = scatt_alt_low;
|
||||
a.scatt_alt_high = scatt_alt_high;
|
||||
return a;
|
||||
},
|
||||
move: func {
|
||||
var windfield = weather_dynamics.get_windfield(me.index);
|
||||
var dt = weather_dynamics.time_lw - me.timestamp;
|
||||
me.lat = me.lat + windfield[1] * dt * local_weather.m_to_lat;
|
||||
me.lon = me.lon + windfield[0] * dt * local_weather.m_to_lon;
|
||||
me.timestamp = weather_dynamics.time_lw;
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
var windIpoint = {
|
||||
new: func (lat, lon, d0, v0, d1, v1, d2, v2, d3, v3, d4, v4, d5, v5, d6, v6, d7, v7, d8, v8) {
|
||||
var w = { parents: [windIpoint] };
|
||||
|
@ -4175,7 +4371,7 @@ 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.1, 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.01, DryLake: 0.3, IntermittentStream: 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.1, 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.01, DryLake: 0.3, IntermittentStream: 0.2, DryCrop: 0.2, Lava: 0.3};
|
||||
|
||||
# a hash map of average vertical cloud model sizes
|
||||
|
||||
|
@ -4218,10 +4414,11 @@ var thermal = {};
|
|||
var wave = {};
|
||||
|
||||
|
||||
# arrays of currently existing weather stations and wind interpolation points
|
||||
# arrays of currently existing weather stations, wind interpolation and atmospheric condition points
|
||||
|
||||
var weatherStationArray = [];
|
||||
var windIpointArray = [];
|
||||
var atmosphereIpointArray = [];
|
||||
|
||||
|
||||
# a flag for the wind model (so we don't have to do string comparisons all the time)
|
||||
|
@ -4256,7 +4453,9 @@ var dynamical_convection_flag = 1;
|
|||
var debug_output_flag = 1;
|
||||
var metar_flag = 0;
|
||||
var local_weather_running_flag = 0;
|
||||
var fps_control_flag = 1;
|
||||
var local_weather_startup_flag = 0;
|
||||
var fps_control_flag = 0;
|
||||
var detailed_terrain_interaction_flag = 1;
|
||||
|
||||
# globals for framerate controlled cloud management
|
||||
|
||||
|
@ -4414,10 +4613,18 @@ setprop(lw~"tiles/tile-counter",0);
|
|||
|
||||
setprop(lwi~"ipoint-number",0);
|
||||
|
||||
var updateMenu = func {
|
||||
var isEnabled = getprop("/nasal/local_weather/enabled");
|
||||
gui.menuEnable("local_weather", isEnabled);
|
||||
gui.menuEnable("local_weather_tiles", isEnabled);
|
||||
}
|
||||
|
||||
_setlistener("/nasal/local_weather/enabled", updateMenu);
|
||||
|
||||
# wait for Nasal to be available and do what is in startup()
|
||||
|
||||
_setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||
_setlistener("/nasal/local_weather/loaded", func {
|
||||
updateMenu();
|
||||
startup();
|
||||
});
|
||||
|
|
@ -63,6 +63,8 @@ return windfield;
|
|||
|
||||
var timing_loop = func {
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
dt_lw = getprop("/sim/time/delta-sec");
|
||||
time_lw = time_lw + dt_lw;
|
||||
|
||||
|
@ -79,6 +81,7 @@ if (getprop(lw~"timing-loop-flag") ==1) {settimer(timing_loop, 0);}
|
|||
|
||||
var quadtree_loop = func {
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
var vangle = 0.55 * getprop("/sim/current-view/field-of-view");
|
||||
var viewdir = getprop("/sim/current-view/goal-heading-offset-deg");
|
||||
|
@ -161,6 +164,8 @@ if (getprop(lw~"dynamics-loop-flag") ==1) {settimer(quadtree_loop, 0);}
|
|||
|
||||
var weather_dynamics_loop = func (index, cindex) {
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
var n = 20;
|
||||
var nc = 1;
|
||||
|
||||
|
@ -241,11 +246,16 @@ if (j >= csize) {cindex = 0;}
|
|||
|
||||
|
||||
|
||||
foreach (s; local_weather.weatherStationArray)
|
||||
foreach (var s; local_weather.weatherStationArray)
|
||||
{
|
||||
s.move();
|
||||
}
|
||||
|
||||
foreach (var a; local_weather.atmosphereIpointArray)
|
||||
{
|
||||
a.move();
|
||||
}
|
||||
|
||||
if (getprop(lw~"dynamics-loop-flag") ==1) {settimer( func {weather_dynamics_loop(index, cindex); },0);}
|
||||
|
||||
}
|
||||
|
@ -257,6 +267,8 @@ if (getprop(lw~"dynamics-loop-flag") ==1) {settimer( func {weather_dynamics_loop
|
|||
|
||||
var convective_loop = func {
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
# a 30 second loop needs a different strategy to end, otherwise there is trouble if it is restarted while still running
|
||||
|
||||
if (convective_loop_kill_flag == 1)
|
|
@ -34,6 +34,9 @@
|
|||
|
||||
var tile_management_loop = func {
|
||||
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
var tNode = props.globals.getNode(lw~"tiles", 1).getChildren("tile");
|
||||
var viewpos = geo.aircraft_position(); # using viewpos here triggers massive tile ops for tower view...
|
||||
var code = getprop(lw~"tiles/tile[4]/code");
|
||||
|
@ -1093,6 +1096,8 @@ setprop(lw~"tiles/tile[8]/orientation-deg",alpha);
|
|||
|
||||
var buffer_loop = func (index) {
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
var n = 5;
|
||||
var n_max = size(cloudBufferArray);
|
||||
var s = size(active_tile_list);
|
||||
|
@ -1225,6 +1230,8 @@ if (getprop(lw~"buffer-loop-flag") ==1) {settimer( func {buffer_loop(i)}, 0);}
|
|||
|
||||
var housekeeping_loop = func (index) {
|
||||
|
||||
if (local_weather.local_weather_running_flag == 0) {return;}
|
||||
|
||||
var n = 5;
|
||||
var n_max = size(cloudSceneryArray);
|
||||
n_cloudSceneryArray = n_max;
|
|
@ -108,9 +108,9 @@ local_weather.set_weather_station(blat, blon, alt_offset, 20000.0, 14.0, 12.0, 2
|
|||
|
||||
# create_2_8_cirrocumulus(blat, blon, 6000.0, 0.0);
|
||||
|
||||
create_detailed_small_stratocumulus_bank(blat, blon,3000.0+alt_offset,0.0);
|
||||
# create_detailed_small_stratocumulus_bank(blat, blon,3000.0+alt_offset,0.0);
|
||||
|
||||
#create_4_8_altocumulus_perlucidus(blat, blon, 10000.0, 0.0);
|
||||
create_4_8_altocumulus_perlucidus(blat, blon, 10000.0, 0.0);
|
||||
|
||||
#local_weather.create_effect_volume(3, blat, blon, 20000.0, 7000.0, alpha, 0.0, 80000.0, -1, -1, -1, -1, 15.0, -3,-1);
|
||||
|
||||
|
@ -118,6 +118,9 @@ create_1_8_contrails(blat, blon, 30000.0, 0.0);
|
|||
|
||||
# store convective altitude and strength
|
||||
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, 45000.0, 10000.0, 45000.0, 0.2, 25000.0, 30000.0, 0.7, 10000.0, 11000.0);
|
||||
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,3000.0);
|
||||
append(weather_dynamics.tile_convective_strength,0.0);
|
||||
|
||||
|
@ -164,6 +167,7 @@ var p = 1025.0 + rand() * 6.0; p = adjust_p(p);
|
|||
local_weather.set_weather_station(blat, blon, alt_offset, vis, T, D, p * hp_to_inhg);
|
||||
|
||||
|
||||
|
||||
var alt = spread * 1000;
|
||||
var strength = 0.0;
|
||||
|
||||
|
@ -192,7 +196,9 @@ if (rn > 0.8)
|
|||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
local_weather.generate_thermal_lift_flag = 2;
|
||||
}
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, 25000.0, 30000.0, 0.9, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
else if (rn > 0.6)
|
||||
{
|
||||
|
@ -204,6 +210,9 @@ else if (rn > 0.6)
|
|||
create_2_8_cirrocumulus(blat, blon, alt + alt_offset + 5000.0, alpha);
|
||||
|
||||
create_2_8_cirrus(blat, blon, alt + alt_offset + 35000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.1, alt+alt_offset +30000.0, alt+alt_offset + 35000.0, 0.9, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
else if (rn > 0.4)
|
||||
{
|
||||
|
@ -213,6 +222,10 @@ else if (rn > 0.4)
|
|||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
|
||||
create_4_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 32000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.15, alt+alt_offset +28000.0, alt+alt_offset + 32000.0, 0.9, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.2)
|
||||
{
|
||||
|
@ -222,6 +235,9 @@ else if (rn > 0.2)
|
|||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
|
||||
create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 32000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.15, alt+alt_offset +28000.0, alt+alt_offset + 32000.0, 0.9, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
else if (rn > 0.0)
|
||||
{
|
||||
|
@ -234,6 +250,9 @@ else if (rn > 0.0)
|
|||
|
||||
|
||||
create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 28000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +28000.0, alt+alt_offset + 33000.0, 0.9, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -320,6 +339,9 @@ if (rn > 0.8)
|
|||
compat_layer.create_cloud(path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset +25000.0 + rand() * 5000.0,alpha);
|
||||
}
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +28000.0, alt+alt_offset + 30000.0, 0.8, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.6)
|
||||
{
|
||||
|
@ -329,6 +351,9 @@ else if (rn > 0.6)
|
|||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
|
||||
create_2_8_cirrostratus(blat, blon, alt+alt_offset+25000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.2, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
|
||||
else if (rn > 0.4)
|
||||
|
@ -345,6 +370,10 @@ else if (rn > 0.4)
|
|||
var path = local_weather.select_cloud_model("Cirrocumulus", "large");
|
||||
compat_layer.create_cloud(path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset +24000,alpha);
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 24000.0, 0.8, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.2)
|
||||
{
|
||||
|
@ -354,6 +383,9 @@ else if (rn > 0.2)
|
|||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
|
||||
create_4_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 25000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.15, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
else if (rn > 0.0)
|
||||
{
|
||||
|
@ -365,6 +397,9 @@ else if (rn > 0.0)
|
|||
create_1_8_altocumulus_scattered(blat, blon, alt+alt_offset+10000.0, alpha);
|
||||
|
||||
create_1_8_cirrostratus_undulatus(blat, blon, alt + alt_offset + 25000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
}
|
||||
|
||||
# store convective altitude and strength
|
||||
|
@ -437,6 +472,10 @@ if (rn > 0.875)
|
|||
y = 2.0 * (rand()-0.5) * 5000;
|
||||
local_weather.create_streak("Altocumulus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 12000.0+alt+alt_offset,1500.0,30,1000.0,0.2,1200.0,30,1000.0,0.2,1200.0,alpha ,1.0);
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 1500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.750)
|
||||
{
|
||||
|
@ -451,6 +490,9 @@ else if (rn > 0.750)
|
|||
y = 2.0 * (rand()-0.5) * 10000;
|
||||
local_weather.create_streak("Altocumulus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 12000.0+alt+alt_offset,1500.0,22,750.0,0.2,1000.0,8,750.0,0.2,1000.0,alpha ,1.1);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.625)
|
||||
{
|
||||
|
@ -463,6 +505,9 @@ else if (rn > 0.625)
|
|||
y = 2.0 * (rand()-0.5) * 3000;
|
||||
local_weather.create_streak("Cirrus",blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 22000.0+alt+alt_offset,1500.0,3,9000.0,0.0, 800.0, 1,8000.0,0.0,800,0,alpha ,1.0);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 22000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.5)
|
||||
{
|
||||
|
@ -478,6 +523,10 @@ else if (rn > 0.5)
|
|||
|
||||
create_cloud_bank("Cumulonimbus", blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, 1600.0, 800.0, 3000.0, 9, alpha);
|
||||
}
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.375)
|
||||
{
|
||||
|
@ -490,6 +539,9 @@ else if (rn > 0.375)
|
|||
|
||||
local_weather.create_streak("Stratus (structured)",blat, blon, alt+6000.0+alt_offset+size_offset,1000.0,18,0.0,0.3,20000.0,18,0.0,0.3,20000.0,0.0,1.0);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.2, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.250)
|
||||
{
|
||||
|
@ -510,6 +562,9 @@ else if (rn > 0.250)
|
|||
var path = local_weather.select_cloud_model("Cirrocumulus", "large");
|
||||
compat_layer.create_cloud(path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset +20000+ alt_variation,alpha+ beta);
|
||||
}
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.125)
|
||||
{
|
||||
|
@ -520,6 +575,9 @@ else if (rn > 0.125)
|
|||
|
||||
create_4_8_cirrocumulus_streaks(blat, blon, alt + 6000.0 + alt_offset, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.05, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.0)
|
||||
{
|
||||
|
@ -528,6 +586,10 @@ else if (rn > 0.0)
|
|||
create_4_8_altocumulus_perlucidus(blat, blon, alt + 10000.0 + alt_offset, alpha);
|
||||
|
||||
create_2_8_cirrus(blat, blon, alt + 30000.0 + alt_offset, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.25, alt+alt_offset +26000.0, alt+alt_offset + 30000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -605,6 +667,10 @@ if (rn > 0.857)
|
|||
create_detailed_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
|
||||
|
||||
create_4_8_alttstratus_streaks(blat, blon, alt+alt_offset+4000.0,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn > 0.714)
|
||||
{
|
||||
|
@ -616,6 +682,9 @@ else if (rn > 0.714)
|
|||
create_6_8_tstratus_undulatus(blat, blon, alt+alt_offset+4000.0,alpha);
|
||||
|
||||
create_2_8_alttstratus(blat, blon, alt+alt_offset+7000.0,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.571)
|
||||
{
|
||||
|
@ -625,6 +694,9 @@ else if (rn > 0.571)
|
|||
create_detailed_small_stratocumulus_bank(blat, blon, alt+alt_offset,alpha);
|
||||
|
||||
create_4_8_alttstratus_patches(blat, blon, alt+alt_offset+4000.0,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.7, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.428)
|
||||
{
|
||||
|
@ -634,6 +706,8 @@ else if (rn > 0.428)
|
|||
create_4_8_sstratus_patches(blat, blon, alt+alt_offset,alpha);
|
||||
|
||||
create_2_8_alttstratus(blat, blon, alt+alt_offset+7000.0,alpha);
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.25, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.7, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.285)
|
||||
{
|
||||
|
@ -645,6 +719,9 @@ else if (rn > 0.285)
|
|||
create_4_8_tstratus_patches(blat, blon, alt+alt_offset,alpha);
|
||||
|
||||
create_4_8_cirrocumulus_undulatus(blat, blon, alt+alt_offset + 12000.0,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.15, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.142)
|
||||
{
|
||||
|
@ -656,6 +733,9 @@ else if (rn > 0.142)
|
|||
create_4_8_tstratus_patches(blat, blon, alt+alt_offset,alpha);
|
||||
|
||||
create_2_8_cirrostratus(blat, blon, alt+alt_offset + 25000.0,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.3, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -665,6 +745,9 @@ else
|
|||
create_4_8_sstratus_patches(blat, blon, alt+alt_offset,alpha);
|
||||
|
||||
create_2_8_cirrostratus(blat, blon, alt+alt_offset + 25000.0,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 15000.0, 0.2, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -710,9 +793,9 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 8000.0 + rand() * 8000.0;
|
||||
var vis = 7000.0 + rand() * 7000.0;
|
||||
var T = 5.0 + rand() * 10.0;
|
||||
var spread = 1.0 + 2.0 * rand();
|
||||
var spread = 1.5 + 2.5 * rand();
|
||||
var D = T - spread;
|
||||
var p = 1001.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
|
@ -757,6 +840,9 @@ if (rn > 0.75)
|
|||
|
||||
create_4_8_sstratus_undulatus(blat, blon, alt+alt_offset +3000.0, alpha);
|
||||
create_2_8_tstratus(blat, blon, alt+alt_offset +6000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 17000.0, alt+alt_offset, vis + 22000.0, 0.2, alt+alt_offset +15000.0, alt+alt_offset + 20000.0, 0.7, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn >0.5)
|
||||
{
|
||||
|
@ -769,6 +855,10 @@ else if (rn >0.5)
|
|||
local_weather.create_effect_volume(3, blat, blon, 18000.0, 18000.0, 0.0, 0.0, 1800.0, 8000.0, -1, -1, -1, -1, 0,-1);
|
||||
local_weather.create_effect_volume(3, blat, blon, 14000.0, 14000.0, 0.0, 0.0, 1500.0, 6000.0, 0.1, -1, -1, -1,0,-1 );
|
||||
create_2_8_sstratus(blat, blon, alt+alt_offset+3000,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 17000.0, alt+alt_offset, vis + 25000.0, 0.3, alt+alt_offset +15000.0, alt+alt_offset + 20000.0, 0.6, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
else if (rn >0.25)
|
||||
{
|
||||
|
@ -780,6 +870,9 @@ else if (rn >0.25)
|
|||
create_4_8_stratus_patches(blat, blon, alt+alt_offset+3000,alpha);
|
||||
create_4_8_sstratus_undulatus(blat, blon, alt+alt_offset+6000,alpha);
|
||||
create_2_8_tstratus(blat, blon, alt+alt_offset+8000,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 17000.0, alt+alt_offset, vis + 25000.0, 0.35, alt+alt_offset +10000.0, alt+alt_offset + 20000.0, 0.65, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn >0.0)
|
||||
{
|
||||
|
@ -789,6 +882,9 @@ else if (rn >0.0)
|
|||
alt = alt + local_weather.cloud_vertical_size_map["Stratus"] * 0.5 * m_to_ft;
|
||||
create_6_8_stratus(blat, blon, alt+alt_offset,alpha);
|
||||
create_2_8_sstratus(blat, blon, alt+alt_offset+6000,alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 15000.0, alt+alt_offset, vis + 24000.0, 0.2, alt+alt_offset +15000.0, alt+alt_offset + 22000.0, 0.6, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
|
||||
# store convective altitude and strength
|
||||
|
@ -834,7 +930,7 @@ calc_geo(blat);
|
|||
|
||||
var vis = 5000.0 + rand() * 5000.0;
|
||||
var T = 3.0 + rand() * 7.0;
|
||||
var spread = 1.0 + 1.0 * rand();
|
||||
var spread = 1.5 + 1.5 * rand();
|
||||
var D = T - spread;
|
||||
var p = 995.0 + rand() * 6.0; p = adjust_p(p);
|
||||
|
||||
|
@ -868,6 +964,9 @@ else
|
|||
if (rn > 0.5){create_4_8_stratus_patches(blat, blon, alt+alt_offset+3000.0, alpha);}
|
||||
else {create_4_8_stratus(blat, blon, alt+alt_offset+3000.0, alpha);}
|
||||
|
||||
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 20000.0, alt+alt_offset, vis + 25000.0, 0.0, alt+alt_offset +15000.0, alt+alt_offset + 22000.0, 0.6, alt+alt_offset, alt+alt_offset + 3000.0);
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
|
@ -932,6 +1031,9 @@ if (rn > 0.5)
|
|||
# cloud scenario 1: strong Cumulus development
|
||||
strength = 0.8 + rand() * 0.2;
|
||||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 8000.0, alt+alt_offset, vis + 18000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
|
||||
else if (rn > 0.0)
|
||||
|
@ -953,6 +1055,9 @@ else if (rn > 0.0)
|
|||
compat_layer.create_cloud(path, blat + get_lat(x,y,phi), blon+get_lon(x,y,phi), alt + alt_offset +20000+ alt_variation,alpha+ beta);
|
||||
}
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 8000.0, alt+alt_offset, vis + 18000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
|
||||
#local_weather.create_effect_volume(3, blat, blon, 20000.0, 7000.0, alpha, 0.0, 80000.0, -1, -1, -1, -1, 15.0, -3,-1);
|
||||
|
@ -994,7 +1099,7 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 10000.0 + rand() * 8000.0;
|
||||
var vis = 12000.0 + rand() * 10000.0;
|
||||
var T = 16.0 + rand() * 10.0;
|
||||
var spread = 2.0 + 2.0 * rand();
|
||||
var D = T - spread;
|
||||
|
@ -1020,6 +1125,9 @@ if (rn > 0.8)
|
|||
strength = 0.3 + rand() * 0.2;
|
||||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
create_4_8_cirrostratus_patches(blat, blon, alt+alt_offset+25000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 1000.0, alt+alt_offset, vis + 3000.0, 0.3, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.6)
|
||||
{
|
||||
|
@ -1031,6 +1139,9 @@ else if (rn > 0.6)
|
|||
|
||||
create_2_8_sstratus_streak(blat, blon, alt+alt_offset + size_offset + 2000.0, alpha);
|
||||
create_2_8_sstratus_streak(blat, blon, alt+alt_offset + size_offset + 4000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 1000.0, alt+alt_offset, vis + 3000.0, 0.2, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.4)
|
||||
{
|
||||
|
@ -1042,6 +1153,8 @@ else if (rn > 0.4)
|
|||
|
||||
create_4_8_cirrocumulus_bank(blat, blon, alt+alt_offset + size_offset + 7000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 1000.0, alt+alt_offset, vis + 3000.0, 0.35, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.75, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
else if (rn > 0.2)
|
||||
{
|
||||
|
@ -1052,6 +1165,9 @@ else if (rn > 0.2)
|
|||
var size_offset = 0.5 * m_to_ft * local_weather.cloud_vertical_size_map["Cirrocumulus"];
|
||||
|
||||
create_4_8_cirrocumulus_undulatus(blat, blon, alt+alt_offset + size_offset + 6000.0, alpha);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 1000.0, alt+alt_offset, vis + 3000.0, 0.2, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.72, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
|
||||
else if (rn > 0.0)
|
||||
|
@ -1065,6 +1181,9 @@ else if (rn > 0.0)
|
|||
|
||||
local_weather.create_streak("Stratus (structured)",blat, blon, alt+4000.0+alt_offset+size_offset,1000.0,14,0.0,0.3,20000.0,14,0.0,0.3,20000.0,0.0,1.0);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 2000.0, alt+alt_offset, vis + 4000.0, 0.15, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.73, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
}
|
||||
|
||||
# store convective altitude and strength
|
||||
|
@ -1112,7 +1231,7 @@ calc_geo(blat);
|
|||
|
||||
# get probabilistic values for the weather parameters
|
||||
|
||||
var vis = 10000.0 + rand() * 10000.0;
|
||||
var vis = 9000.0 + rand() * 10000.0;
|
||||
var T = 20.0 + rand() * 15.0;
|
||||
var spread = 3.0 + 2.0 * rand();
|
||||
var D = T - spread;
|
||||
|
@ -1137,6 +1256,9 @@ if (rn > (t_factor * t_factor * t_factor * t_factor)) # call a normal convective
|
|||
{
|
||||
strength = 1.0 + rand() * 0.2;
|
||||
local_weather.create_cumosys(blat,blon, alt + alt_offset, get_n(strength), 20000.0);
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 15000.0, alt+alt_offset, vis + 20000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.7, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
}
|
||||
|
||||
else
|
||||
|
@ -1172,6 +1294,9 @@ if (rn > 0.2)
|
|||
else
|
||||
{create_small_thunderstorm(blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, alpha);}
|
||||
}
|
||||
|
||||
# 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);
|
||||
}
|
||||
else if (rn > 0.0)
|
||||
{
|
||||
|
@ -1181,6 +1306,9 @@ else if (rn > 0.0)
|
|||
y = 2.0 * (rand()-0.5) * 12000;
|
||||
|
||||
create_big_thunderstorm(blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset, alpha);
|
||||
|
||||
# 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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1324,6 +1452,9 @@ local_weather.create_effect_volume(3, blat+get_lat(x,y,phi), blon+get_lon(x,y,ph
|
|||
x=0.0; y = 5000.0;
|
||||
local_weather.create_effect_volume(3, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 20000.0, 8000.0, alpha, 0.0, alt+alt_offset, 10000.0, 0.1, -1, -1, -1,0,-1 );
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 20000.0, 0.0, alt+alt_offset +20000.0, alt+alt_offset + 25000.0, 0.6, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
|
@ -1421,6 +1552,9 @@ for (var i=0; i<6; i=i+1)
|
|||
|
||||
}
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 8000.0, alt+alt_offset, vis + 10000.0, rand() * 0.1, alt+alt_offset +18000.0, alt+alt_offset + 22000.0, 0.8, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
|
@ -1534,6 +1668,10 @@ var y = 8000.0;
|
|||
|
||||
local_weather.create_streak("Stratus",blat +get_lat(x,y,phi), blon+get_lon(x,y,phi), alt+alt_offset +5000.0,1000.0,30,0.0,0.2,20000.0,10,0.0,0.2,12000.0,alpha,1.0);
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 6000.0, alt+alt_offset, vis + 8000.0, 0.15 + rand() * 0.15, alt+alt_offset +17000.0, alt+alt_offset + 21000.0, 0.7, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
|
@ -1637,6 +1775,10 @@ x=0.0; y = 10000.0;
|
|||
local_weather.create_effect_volume(3, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 20000.0, 10000.0, alpha, 0.0, alt+alt_offset, vis * 0.5, 0.3, -1, -1, -1,0,-1 );
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 6000.0, alt+alt_offset, vis + 8000.0, 0.05 + rand() * 0.05, alt+alt_offset +16000.0, alt+alt_offset + 20000.0, 0.6, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
|
@ -1736,6 +1878,9 @@ x=0.0; y = -5000.0;
|
|||
local_weather.create_effect_volume(3, blat+get_lat(x,y,phi), blon+get_lon(x,y,phi), 20000.0, 15000.0, alpha, 0.0, alt+alt_offset, vis * 0.5, 0.3, -1, -1, -1,0 ,-1);
|
||||
|
||||
|
||||
# and specify the atmosphere
|
||||
local_weather.set_atmosphere_ipoint(blat, blon, vis + 10000.0, alt+alt_offset, vis + 12000.0, 0.1, alt+alt_offset +16000.0, alt+alt_offset + 20000.0, 0.5, alt+alt_offset, alt+alt_offset + 2500.0);
|
||||
|
||||
# store convective altitude and strength
|
||||
|
||||
append(weather_dynamics.tile_convective_altitude,alt);
|
||||
|
@ -2205,6 +2350,68 @@ var set_METAR_weather_station = func {
|
|||
local_weather.set_weather_station(station_lat, station_lon, metar_alt_offset, vis, T, D, p);
|
||||
|
||||
|
||||
# get cloud layer info for lighting
|
||||
|
||||
var coverage1 = 8 - 2 * getprop("/environment/metar/clouds/layer[0]/coverage-type");
|
||||
var layer_alt1 = getprop("/environment/metar/clouds/layer[0]/elevation-ft");
|
||||
|
||||
var coverage2 = 8 - 2 * getprop("/environment/metar/clouds/layer[1]/coverage-type");
|
||||
var layer_alt2 = getprop("/environment/metar/clouds/layer[1]/elevation-ft");
|
||||
|
||||
var coverage3 = 8 - 2 * getprop("/environment/metar/clouds/layer[2]/coverage-type");
|
||||
var layer_alt3 = getprop("/environment/metar/clouds/layer[2]/elevation-ft");
|
||||
|
||||
var coverage4 = 8 - 2 * getprop("/environment/metar/clouds/layer[3]/coverage-type");
|
||||
var layer_alt4 = getprop("/environment/metar/clouds/layer[3]/elevation-ft");
|
||||
|
||||
|
||||
# determine the altitude of the main shading layer
|
||||
|
||||
# default assumption - the lowest layer shades
|
||||
var alt_shade = layer_alt1; var coverage_shade = coverage1; var coverage_mult = 1.0;
|
||||
|
||||
# if a higher layer is more opaque, it determines the shading unless it is a thin layer
|
||||
if ((coverage2 >= coverage1) and (layer_alt2 < 14000.0))
|
||||
{alt_shade = layer_alt2; coverage_shade = coverage2; coverage_mult = 0.9;}
|
||||
|
||||
if ((coverage3 >= coverage1) and (coverage3 >= coverage2) and (layer_alt3 < 14000.0))
|
||||
{alt_shade = layer_alt3; coverage_shade = coverage3; coverage_mult = 0.8;}
|
||||
|
||||
# determine the amount of shading
|
||||
|
||||
# default assumption: no clouds
|
||||
var shade = 1.0;
|
||||
|
||||
if (coverage_shade < 1) # clear sky, we need to specify an altitude for the model
|
||||
{shade = 0.9; alt_shade = 9000.0;}
|
||||
else if (coverage_shade < 3)
|
||||
{shade = 0.8;}
|
||||
else if (coverage_shade < 5)
|
||||
{shade = 0.7;}
|
||||
else if (coverage_shade < 8)
|
||||
{shade = 0.6;}
|
||||
else if (coverage_shade == 8)
|
||||
{shade = 0.55;}
|
||||
|
||||
shade = shade * coverage_mult;
|
||||
|
||||
# see if we have any high-altitude clouds
|
||||
|
||||
var ovcst = 0.0; var ovcst_alt = 20000.0;
|
||||
|
||||
if (layer_alt1 > 20000.0)
|
||||
{ovcst_alt = layer_alt1; ovcst = ovcst + rand() * 0.1;}
|
||||
if (layer_alt2 > 20000.0)
|
||||
{ovcst_alt = layer_alt2; ovcst = ovcst + rand() * 0.1;}
|
||||
if (layer_alt3 > 20000.0)
|
||||
{ovcst_alt = layer_alt3; ovcst = ovcst + rand() * 0.1;}
|
||||
if (layer_alt4 > 20000.0)
|
||||
{ovcst_alt = layer_alt4; ovcst = ovcst + rand() * 0.1;}
|
||||
|
||||
|
||||
# and specify the atmosphere - currently default only
|
||||
local_weather.set_atmosphere_ipoint(station_lat, station_lon, vis + 10000.0, metar_alt_offset + alt_shade, vis + 20000.0, ovcst, ovcst_alt+metar_alt_offset - 5000.0, ovcst_alt+metar_alt_offset, shade, layer_alt1+metar_alt_offset, alt_shade+metar_alt_offset + 2500.0);
|
||||
|
||||
# if we use aloft interpolated winds with METAR, also set a new wind interpolation point
|
||||
|
||||
if ((local_weather.wind_model_flag == 5) and (getprop(lw~"tiles/tile-counter") !=1))
|
||||
|
@ -2346,12 +2553,12 @@ else
|
|||
if (rain > 0.1)
|
||||
{
|
||||
local_weather.create_effect_volume(3, lat, lon, 20000.0, 20000.0, alpha, 0.0, alt+900.0, 500.0 + (1.0 - 0.5 * rain) * 5500.0, 0.5 * rain , -1, -1, -1,0 ,0.95);
|
||||
local_weather.create_effect_volume(3, lat , lon, 16000.0, 16000.0, alpha, 0.0, alt - 300.0, 500.0 + (1.0-rain) * 5500.0, rain, -1, -1, -1,0 ,0.8);
|
||||
local_weather.create_effect_volume(3, lat , lon, 16000.0, 16000.0, alpha, 0.0, alt - 300.0, 500.0 + (1.0-rain) * 5500.0, rain, -1, -1, -1,0 ,0.9);
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
local_weather.create_effect_volume(3, lat, lon, 20000.0, 20000.0, alpha, 0.0, alt, -1, rain , -1, -1, -1,0 ,0.8);
|
||||
local_weather.create_effect_volume(3, lat, lon, 20000.0, 20000.0, alpha, 0.0, alt, -1, rain , -1, -1, -1,0 ,0.9);
|
||||
}
|
||||
|
||||
}
|
|
@ -100,7 +100,8 @@ var stepView = func(step, force = 0) {
|
|||
n = size(views) - 1;
|
||||
elsif (n >= size(views))
|
||||
n = 0;
|
||||
if (force or (var e = views[n].getNode("enabled")) == nil or e.getBoolValue())
|
||||
if (force or (var e = (views[n].getNode("enabled"))) == nil or
|
||||
(e.getBoolValue() and (views[n].getNode("name")!=nil)))
|
||||
break;
|
||||
}
|
||||
setprop("/sim/current-view/view-number", n);
|
||||
|
|
|
@ -36,8 +36,12 @@ void main(void)
|
|||
|
||||
// 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)));;
|
||||
|
||||
// fix flickering of 3d clouds on some macs
|
||||
// http://code.google.com/p/flightgear-bugs/issues/detail?id=123
|
||||
// float n = dot(normalize(-gl_LightSource[0].position.xyz),
|
||||
// normalize(mat3x3(gl_ModelViewMatrix) * (- gl_Position.xyz)));;
|
||||
float n = dot(normalize(-gl_LightSource[0].position.xyz), vec3(0.0,0.0,-1.0));
|
||||
|
||||
// Determine the position - used for fog and shading calculations
|
||||
vec3 ecPosition = vec3(gl_ModelViewMatrix * gl_Position);
|
||||
|
|
|
@ -9,10 +9,11 @@ varying vec4 diffuse_term;
|
|||
varying vec3 normal;
|
||||
varying float fogCoord;
|
||||
|
||||
// The conditional, to enable lightmapping
|
||||
uniform float condition;
|
||||
|
||||
uniform sampler2D texture;
|
||||
|
||||
// lightmap options
|
||||
uniform float condition;
|
||||
uniform float lightmap_factor;
|
||||
uniform sampler2D lightmap_texture;
|
||||
|
||||
float luminance(vec3 color)
|
||||
|
@ -52,10 +53,13 @@ void main()
|
|||
color = clamp(color, 0.0, 1.0);
|
||||
texel = texture2D(texture, gl_TexCoord[0].st);
|
||||
fragColor = color * texel + specular;
|
||||
|
||||
// The lightmap function
|
||||
if ( condition >= 1 ) {
|
||||
vec3 lightmapTexel = texture2D(lightmap_texture, gl_TexCoord[0].st).rgb;
|
||||
vec3 lightmapTexel = texture2D(lightmap_texture, gl_TexCoord[0].st).rgb * lightmap_factor;
|
||||
fragColor.rgb = max(fragColor.rgb, lightmapTexel * gl_FrontMaterial.diffuse.rgb * texel.rgb);
|
||||
}
|
||||
|
||||
fogFactor = exp(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord);
|
||||
gl_FragColor = mix(gl_Fog.color, fragColor, fogFactor);
|
||||
}
|
BIN
Textures/Terrain.winter/golfcourse1.png
Normal file
BIN
Textures/Terrain.winter/golfcourse1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 134 KiB |
BIN
Textures/Terrain.winter/naturalcrop1.png
Normal file
BIN
Textures/Terrain.winter/naturalcrop1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
Textures/Terrain/golfcourse1.png
Normal file
BIN
Textures/Terrain/golfcourse1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 124 KiB |
BIN
Textures/Terrain/naturalcrop1.png
Normal file
BIN
Textures/Terrain/naturalcrop1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 106 KiB |
|
@ -250,6 +250,9 @@
|
|||
<proxy-desc>Specify which proxy server (and port) to use. The username and password are optional and should be MD5 encoded already. This option is only useful when used in conjunction with the real-weather-fetch option.</proxy-desc>
|
||||
<telnet-desc>Enable telnet server on the specified port</telnet-desc>
|
||||
<jpg-httpd-desc>Enable screen shot http server on the specified port</jpg-httpd-desc>
|
||||
<disable-terrasync-desc>Disable automatic scenery downloads/updates</disable-terrasync-desc>
|
||||
<enable-terrasync-desc>Enable automatic scenery downloads/updates</enable-terrasync-desc>
|
||||
<terrasync-dir-desc>Set target directory for scenery downloads</terrasync-dir-desc>
|
||||
|
||||
<!-- MultiPlayer options -->
|
||||
<multiplayer-options>MultiPlayer Options</multiplayer-options>
|
||||
|
|
|
@ -6,10 +6,22 @@
|
|||
|
||||
<name>local_weather_config</name>
|
||||
<width>400</width>
|
||||
<height>400</height>
|
||||
<height>440</height>
|
||||
<modal>false</modal>
|
||||
|
||||
|
||||
<checkbox>
|
||||
<x>5</x>
|
||||
<y>400</y>
|
||||
<width>15</width>
|
||||
<height>15</height>
|
||||
<label>Enable local weather module</label>
|
||||
<property>/nasal/local_weather/enabled</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<text>
|
||||
<x>5</x>
|
||||
<y>370</y>
|
||||
|
|
425
gui/dialogs/terrasync.xml
Normal file
425
gui/dialogs/terrasync.xml
Normal file
|
@ -0,0 +1,425 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
<name>terrasync</name>
|
||||
<layout>vbox</layout>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<empty><stretch>1</stretch></empty>
|
||||
|
||||
<text>
|
||||
<label>Automatic Scenery Download</label>
|
||||
</text>
|
||||
|
||||
<empty><stretch>1</stretch></empty>
|
||||
|
||||
<button>
|
||||
<pref-width>16</pref-width>
|
||||
<pref-height>16</pref-height>
|
||||
<legend></legend>
|
||||
<keynum>27</keynum>
|
||||
<border>2</border>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<text>
|
||||
<color>
|
||||
<red>1.0</red>
|
||||
<green>0.4</green>
|
||||
<blue>0.4</blue>
|
||||
</color>
|
||||
<halign>center</halign>
|
||||
<label>Monitor your bandwidth or use a flat-rate when using automatic download.</label>
|
||||
</text>
|
||||
|
||||
<group>
|
||||
<layout>table</layout>
|
||||
<halign>left</halign>
|
||||
<equal>false</equal>
|
||||
|
||||
<checkbox>
|
||||
<name>terrasync-enabled</name>
|
||||
<halign>left</halign>
|
||||
<row>1</row><col>1</col><colspan>3</colspan>
|
||||
<property>/sim/terrasync/enabled</property>
|
||||
<label>Enable automatic scenery download/update</label>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
<object-name>terrasync-enabled</object-name>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<text>
|
||||
<halign>right</halign>
|
||||
<row>3</row><col>1</col>
|
||||
<label>Target directory:</label>
|
||||
</text>
|
||||
<input>
|
||||
<name>scenery-dir</name>
|
||||
<halign>left</halign>
|
||||
<row>3</row>
|
||||
<col>2</col><colspan>2</colspan>
|
||||
<pref-width>400</pref-width>
|
||||
<property>/sim/terrasync/scenery-dir</property>
|
||||
<enable>
|
||||
<property>/sim/terrasync/enabled</property>
|
||||
</enable>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
<object-name>scenery-dir</object-name>
|
||||
</binding>
|
||||
</input>
|
||||
|
||||
<text>
|
||||
<row>4</row>
|
||||
<col>2</col><colspan>3</colspan>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
<halign>left</halign>
|
||||
<label>Remember to add target directory to your 'fg-scenery' path list.</label>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>right</halign>
|
||||
<row>5</row><col>1</col>
|
||||
<label>Remote scenery server:</label>
|
||||
</text>
|
||||
<input>
|
||||
<name>svn-server</name>
|
||||
<halign>left</halign>
|
||||
<row>5</row>
|
||||
<col>2</col><colspan>2</colspan>
|
||||
<pref-width>400</pref-width>
|
||||
<property>/sim/terrasync/svn-server</property>
|
||||
<enable>
|
||||
<!-- display only, editing disabled for now, since there is no reason
|
||||
to change/switch between servers for now -->
|
||||
<false/>
|
||||
<!--property>/sim/terrasync/enabled</property-->
|
||||
</enable>
|
||||
<!--binding>
|
||||
<command>dialog-apply</command>
|
||||
<object-name>svn-server</object-name>
|
||||
</binding-->
|
||||
</input>
|
||||
|
||||
<checkbox>
|
||||
<name>scenery-refresh</name>
|
||||
<halign>left</halign>
|
||||
<row>6</row><col>1</col><colspan>2</colspan>
|
||||
<property>/sim/terrasync/refresh-display</property>
|
||||
<enable>
|
||||
<property>/sim/terrasync/enabled</property>
|
||||
</enable>
|
||||
<label>Automatic display refresh (EXPERIMENTAL!)</label>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
<object-name>scenery-refresh</object-name>
|
||||
</binding>
|
||||
</checkbox>
|
||||
<button>
|
||||
<legend>Manual Refresh</legend>
|
||||
<border>2</border>
|
||||
<row>6</row><col>3</col>
|
||||
<binding>
|
||||
<command>reinit</command>
|
||||
<subsystem>tile-manager</subsystem>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<!--
|
||||
<checkbox>
|
||||
<name>internal-svn</name>
|
||||
<halign>left</halign>
|
||||
<row>7</row><col>1</col><colspan>3</colspan>
|
||||
<property>/sim/terrasync/use-built-in-svn</property>
|
||||
<label>Download using built-in SVN client</label>
|
||||
<live>true</live>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
<object-name>internal-svn</object-name>
|
||||
</binding>
|
||||
<enable>
|
||||
<and>
|
||||
<property>/sim/terrasync/built-in-svn-available</property>
|
||||
<property>/sim/terrasync/enabled</property>
|
||||
</and>
|
||||
</enable>
|
||||
</checkbox>
|
||||
-->
|
||||
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>table</layout>
|
||||
<halign>left</halign>
|
||||
<equal>false</equal>
|
||||
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>1</col>
|
||||
<halign>left</halign>
|
||||
<pref-width>90</pref-width>
|
||||
<label>Status:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>0</row>
|
||||
<col>2</col>
|
||||
<label>Active:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>3</col>
|
||||
<pref-width>90</pref-width>
|
||||
<halign>left</halign>
|
||||
<stretch>true</stretch>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/active</property>
|
||||
<live>true</live>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>0</row>
|
||||
<col>4</col>
|
||||
<label>Errors:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>0</row>
|
||||
<col>5</col>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/error-count</property>
|
||||
<live>true</live>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>1</row>
|
||||
<col>2</col>
|
||||
<label>Sync in progress:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>3</col>
|
||||
<halign>left</halign>
|
||||
<stretch>true</stretch>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/busy</property>
|
||||
<live>true</live>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>2</row>
|
||||
<col>2</col>
|
||||
<label>Stalled:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>2</row>
|
||||
<col>3</col>
|
||||
<halign>left</halign>
|
||||
<stretch>true</stretch>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/stalled</property>
|
||||
<live>true</live>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>3</row>
|
||||
<col>2</col>
|
||||
<label>Built-in SVN available:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>3</row>
|
||||
<col>3</col>
|
||||
<halign>left</halign>
|
||||
<stretch>true</stretch>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/built-in-svn-available</property>
|
||||
<live>true</live>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>1</row>
|
||||
<col>4</col>
|
||||
<label>Processed elements:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>1</row>
|
||||
<col>5</col>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/update-count</property>
|
||||
<live>true</live>
|
||||
<stretch>true</stretch>
|
||||
<halign>fill</halign>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<halign>left</halign>
|
||||
<row>2</row>
|
||||
<col>4</col>
|
||||
<label>Processed scenery tiles:</label>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
<text>
|
||||
<row>2</row>
|
||||
<col>5</col>
|
||||
<format>%s</format>
|
||||
<property>/sim/terrasync/tile-count</property>
|
||||
<live>true</live>
|
||||
<stretch>true</stretch>
|
||||
<halign>fill</halign>
|
||||
<color>
|
||||
<red>0.7</red>
|
||||
<green>0.7</green>
|
||||
<blue>0.7</blue>
|
||||
<alpha>1</alpha>
|
||||
</color>
|
||||
</text>
|
||||
</group>
|
||||
|
||||
<hrule/>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<default-padding>10</default-padding>
|
||||
<empty><stretch>true</stretch></empty>
|
||||
|
||||
<button>
|
||||
<legend>OK</legend>
|
||||
<border>2</border>
|
||||
<equal>true</equal>
|
||||
<binding>
|
||||
<command>reinit</command>
|
||||
<subsystem>terrasync</subsystem>
|
||||
</binding>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<legend>Apply</legend>
|
||||
<equal>true</equal>
|
||||
<border>2</border>
|
||||
<binding>
|
||||
<command>reinit</command>
|
||||
<subsystem>terrasync</subsystem>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<legend>Cancel</legend>
|
||||
<border>2</border>
|
||||
<equal>true</equal>
|
||||
<key>Esc</key>
|
||||
<binding>
|
||||
<command>dialog-close</command>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<empty><stretch>true</stretch></empty>
|
||||
</group>
|
||||
|
||||
</PropertyList>
|
|
@ -173,7 +173,6 @@
|
|||
<button>
|
||||
<legend>Clock Time</legend>
|
||||
<equal>true</equal>
|
||||
<key>0</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>real</timeofday>
|
||||
|
@ -183,7 +182,6 @@
|
|||
<button>
|
||||
<legend>Dawn</legend>
|
||||
<equal>true</equal>
|
||||
<key>1</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>dawn</timeofday>
|
||||
|
@ -193,7 +191,6 @@
|
|||
<button>
|
||||
<legend>Morning</legend>
|
||||
<equal>true</equal>
|
||||
<key>2</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>morning</timeofday>
|
||||
|
@ -203,7 +200,6 @@
|
|||
<button>
|
||||
<legend>Noon</legend>
|
||||
<equal>true</equal>
|
||||
<key>3</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>noon</timeofday>
|
||||
|
@ -213,7 +209,6 @@
|
|||
<button>
|
||||
<legend>Afternoon</legend>
|
||||
<equal>true</equal>
|
||||
<key>4</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>afternoon</timeofday>
|
||||
|
@ -223,7 +218,6 @@
|
|||
<button>
|
||||
<legend>Dusk</legend>
|
||||
<equal>true</equal>
|
||||
<key>5</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>dusk</timeofday>
|
||||
|
@ -233,7 +227,6 @@
|
|||
<button>
|
||||
<legend>Evening</legend>
|
||||
<equal>true</equal>
|
||||
<key>6</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>evening</timeofday>
|
||||
|
@ -243,7 +236,6 @@
|
|||
<button>
|
||||
<legend>Night</legend>
|
||||
<equal>true</equal>
|
||||
<key>7</key>
|
||||
<binding>
|
||||
<command>timeofday</command>
|
||||
<timeofday>midnight</timeofday>
|
||||
|
|
|
@ -44,30 +44,31 @@
|
|||
foreach (var v; view.views) {
|
||||
var index = v.getIndex();
|
||||
var enabled = v.initNode("enabled", 1, "BOOL");
|
||||
|
||||
if (index >= 200) {
|
||||
if (mode != 2) {
|
||||
mode = 2;
|
||||
group.getChild("hrule", 1, 1);
|
||||
var t = group.getChild("text", 1, 1);
|
||||
t.getNode("label", 1).setValue("Other Views");
|
||||
}
|
||||
|
||||
} elsif (index >= 100) {
|
||||
aircraft.data.add(enabled);
|
||||
if (mode != 1) {
|
||||
mode = 1;
|
||||
group.getChild("hrule", 0, 1);
|
||||
var t = group.getChild("text", 0, 1);
|
||||
t.getNode("label", 1).setValue("\"" ~ ac ~ "\" Specific Views");
|
||||
}
|
||||
}
|
||||
|
||||
var target = group.getChild("checkbox", index, 1);
|
||||
props.copy(group.getNode("checkbox-template"), target);
|
||||
var name = v.getNode("name");
|
||||
target.getNode("label").setValue(name != nil ? name.getValue() : ("** unnamed view " ~ index ~ " **"));
|
||||
target.getNode("property").setValue(enabled.getPath());
|
||||
if (name != nil) {
|
||||
if (index >= 200) {
|
||||
if (mode != 2) {
|
||||
mode = 2;
|
||||
group.getChild("hrule", 1, 1);
|
||||
var t = group.getChild("text", 1, 1);
|
||||
t.getNode("label", 1).setValue("Other Views");
|
||||
}
|
||||
|
||||
} elsif (index >= 100) {
|
||||
aircraft.data.add(enabled);
|
||||
if (mode != 1) {
|
||||
mode = 1;
|
||||
group.getChild("hrule", 0, 1);
|
||||
var t = group.getChild("text", 0, 1);
|
||||
t.getNode("label", 1).setValue("\"" ~ ac ~ "\" Specific Views");
|
||||
}
|
||||
}
|
||||
|
||||
var target = group.getChild("checkbox", index, 1);
|
||||
props.copy(group.getNode("checkbox-template"), target);
|
||||
target.getNode("label").setValue(name != nil ? name.getValue() : ("** unnamed view " ~ index ~ " **"));
|
||||
target.getNode("property").setValue(enabled.getPath());
|
||||
}
|
||||
}
|
||||
</open>
|
||||
</nasal>
|
||||
|
|
|
@ -1752,7 +1752,6 @@
|
|||
</textbox>
|
||||
<button>
|
||||
<legend>Apply</legend>
|
||||
<key>Esc</key>
|
||||
<pref-width>50</pref-width>
|
||||
<pref-height>50</pref-height>
|
||||
<border>2</border>
|
||||
|
|
|
@ -329,7 +329,8 @@
|
|||
|
||||
<item>
|
||||
<label>Local Weather</label>
|
||||
<name>local_weather</name>
|
||||
<name>local_weather_tiles</name>
|
||||
<enabled>false</enabled>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
<dialog-name>local_weather_tiles</dialog-name>
|
||||
|
@ -361,6 +362,14 @@
|
|||
</binding>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<label>Scenery Download</label>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
<dialog-name>terrasync</dialog-name>
|
||||
</binding>
|
||||
</item>
|
||||
|
||||
</menu>
|
||||
|
||||
<menu>
|
||||
|
@ -595,14 +604,6 @@
|
|||
</binding>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<label>Reload Scenery</label>
|
||||
<binding>
|
||||
<command>reinit</command>
|
||||
<subsystem>tile-manager</subsystem>
|
||||
</binding>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<label>Nasal Console</label>
|
||||
<binding>
|
||||
|
@ -631,7 +632,10 @@
|
|||
<label>Display Tutorial Marker</label>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>tutorial.dialog()</script>
|
||||
<script>
|
||||
setprop("/nasal/tutorial/enabled",1); # load module on demand
|
||||
tutorial.dialog();
|
||||
</script>
|
||||
</binding>
|
||||
</item>
|
||||
|
||||
|
@ -687,6 +691,7 @@
|
|||
<item>
|
||||
<label>Local Weather (Test)</label>
|
||||
<name>local_weather</name>
|
||||
<enabled>false</enabled>
|
||||
<binding>
|
||||
<command>dialog-show</command>
|
||||
<dialog-name>local_weather</dialog-name>
|
||||
|
|
135
materials.xml
135
materials.xml
|
@ -1177,7 +1177,6 @@ Shared parameters for various materials.
|
|||
<name>GrassCover</name>
|
||||
<name>BareTundraCover</name>
|
||||
<name>MixedTundraCover</name>
|
||||
<name>GolfCourse</name>
|
||||
<name>Cemetery</name>
|
||||
<effect>Effects/landmass</effect>
|
||||
<texture>Terrain/tundra.png</texture>
|
||||
|
@ -1439,7 +1438,6 @@ Shared parameters for various materials.
|
|||
<effect>Effects/crop</effect>
|
||||
<name>DryCropPastureCover</name>
|
||||
<name>DryCrop</name>
|
||||
<name>NaturalCrop</name>
|
||||
<texture>Terrain/drycrop1.png</texture>
|
||||
<texture>Terrain/drycrop2.png</texture>
|
||||
<texture>Terrain/drycrop3.png</texture>
|
||||
|
@ -1496,6 +1494,33 @@ Shared parameters for various materials.
|
|||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>sim/startup/season</property>
|
||||
<value>summer</value>
|
||||
</equals>
|
||||
</condition>
|
||||
<name>NaturalCrop</name>
|
||||
<texture>Terrain/naturalcrop1.png</texture>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
<solid>1</solid>
|
||||
<friction-factor>0.9</friction-factor>
|
||||
<rolling-friction>0.1</rolling-friction>
|
||||
<bumpiness>0.6</bumpiness>
|
||||
<load-resistance>1e30</load-resistance>
|
||||
<light-coverage>2000000.0</light-coverage>
|
||||
<wood-coverage>500000.0</wood-coverage>
|
||||
<wood-size>20000.0</wood-size>
|
||||
<tree-density>5000.0</tree-density>
|
||||
<tree-texture>Textures/Trees/mixed-summer.png</tree-texture>
|
||||
<tree-varieties>8</tree-varieties>
|
||||
<tree-range-m alias="/params/forest/tree-range-m"/>
|
||||
<tree-height-m>20.0</tree-height-m>
|
||||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
|
@ -1539,6 +1564,44 @@ Shared parameters for various materials.
|
|||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>sim/startup/season</property>
|
||||
<value>summer</value>
|
||||
</equals>
|
||||
</condition>
|
||||
<name>GolfCourse</name>
|
||||
<texture>Terrain/golfcourse1.png</texture>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
<light-coverage>2000000.0</light-coverage>
|
||||
<diffuse>
|
||||
<r>0.93</r>
|
||||
<g>0.95</g>
|
||||
<b>0.93</b>
|
||||
<a>1.0</a>
|
||||
</diffuse>
|
||||
<specular>
|
||||
<r>0.1</r>
|
||||
<g>0.12</g>
|
||||
<b>0.1</b>
|
||||
<a>1.0</a>
|
||||
</specular>
|
||||
<shininess>1.2</shininess>
|
||||
<solid>1</solid>
|
||||
<friction-factor>0.7</friction-factor>
|
||||
<rolling-friction>0.1</rolling-friction>
|
||||
<bumpiness>0.3</bumpiness>
|
||||
<load-resistance>1e30</load-resistance>
|
||||
<wood-coverage>500000.0</wood-coverage>
|
||||
<tree-texture>Textures/Trees/mixed-summer.png</tree-texture>
|
||||
<tree-varieties>8</tree-varieties>
|
||||
<tree-range-m alias="/params/forest/tree-range-m"/>
|
||||
<tree-height-m>20.0</tree-height-m>
|
||||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
|
@ -2297,7 +2360,6 @@ Shared parameters for various materials.
|
|||
</condition>
|
||||
<name>DryCropPastureCover</name>
|
||||
<name>DryCrop</name>
|
||||
<name>NaturalCrop</name>
|
||||
<texture>Terrain.winter/drycrop1.png</texture>
|
||||
<texture>Terrain.winter/drycrop2.png</texture>
|
||||
<texture>Terrain.winter/drycrop3.png</texture>
|
||||
|
@ -2354,6 +2416,33 @@ Shared parameters for various materials.
|
|||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>sim/startup/season</property>
|
||||
<value>winter</value>
|
||||
</equals>
|
||||
</condition>
|
||||
<name>NaturalCrop</name>
|
||||
<texture>Terrain.winter/naturalcrop1.png</texture>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
<solid>1</solid>
|
||||
<friction-factor>0.9</friction-factor>
|
||||
<rolling-friction>0.1</rolling-friction>
|
||||
<bumpiness>0.6</bumpiness>
|
||||
<load-resistance>1e30</load-resistance>
|
||||
<light-coverage>2000000.0</light-coverage>
|
||||
<wood-coverage>150000.0</wood-coverage>
|
||||
<wood-size>10000.0</wood-size>
|
||||
<tree-density>5000.0</tree-density>
|
||||
<tree-texture>Textures/Trees/mixed-winter.png</tree-texture>
|
||||
<tree-varieties>8</tree-varieties>
|
||||
<tree-range-m alias="/params/forest/tree-range-m"/>
|
||||
<tree-height-m>20.0</tree-height-m>
|
||||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
|
@ -2398,6 +2487,46 @@ Shared parameters for various materials.
|
|||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
<property>sim/startup/season</property>
|
||||
<value>winter</value>
|
||||
</equals>
|
||||
</condition>
|
||||
<name>GolfCourse</name>
|
||||
<texture>Terrain.winter/golfcourse.png</texture>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
<light-coverage>2000000.0</light-coverage>
|
||||
<diffuse>
|
||||
<r>0.93</r>
|
||||
<g>0.95</g>
|
||||
<b>0.93</b>
|
||||
<a>1.0</a>
|
||||
</diffuse>
|
||||
<specular>
|
||||
<r>0.1</r>
|
||||
<g>0.12</g>
|
||||
<b>0.1</b>
|
||||
<a>1.0</a>
|
||||
</specular>
|
||||
<shininess>1.2</shininess>
|
||||
<solid>1</solid>
|
||||
<friction-factor>0.7</friction-factor>
|
||||
<rolling-friction>0.1</rolling-friction>
|
||||
<bumpiness>0.3</bumpiness>
|
||||
<load-resistance>1e30</load-resistance>
|
||||
<wood-coverage>150000.0</wood-coverage>
|
||||
<wood-size>10000.0</wood-size>
|
||||
<tree-density>5000.0</tree-density>
|
||||
<tree-texture>Textures/Trees/mixed-winter.png</tree-texture>
|
||||
<tree-varieties>8</tree-varieties>
|
||||
<tree-range-m alias="/params/forest/tree-range-m"/>
|
||||
<tree-height-m>20.0</tree-height-m>
|
||||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material>
|
||||
<condition>
|
||||
<equals>
|
||||
|
|
15
options.xml
15
options.xml
|
@ -978,6 +978,21 @@
|
|||
<description>strings/jpg-httpd-desc</description>
|
||||
</option>
|
||||
|
||||
<option>
|
||||
<name>disable-terrasync</name>
|
||||
<description>strings/disable-terrasync-desc</description>
|
||||
</option>
|
||||
|
||||
<option>
|
||||
<name>enable-terrasync</name>
|
||||
<description>strings/enable-terrasync-desc</description>
|
||||
</option>
|
||||
|
||||
<option>
|
||||
<name>terrasync-dir</name>
|
||||
<description>strings/terrasync-dir-desc</description>
|
||||
</option>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
|
|
@ -39,29 +39,29 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
<intl include="Translations/locale.xml"/>
|
||||
<aircraft>c172p</aircraft>
|
||||
<virtual-cockpit type="bool">false</virtual-cockpit>
|
||||
<presets>
|
||||
<presets preserve="y">
|
||||
<airport-id>KSFO</airport-id>
|
||||
<runway></runway>
|
||||
<trim type="bool">true</trim>
|
||||
</presets>
|
||||
<startup>
|
||||
<xsize type="int">800</xsize>
|
||||
<ysize type="int">600</ysize>
|
||||
<xsize type="int" preserve="y">800</xsize>
|
||||
<ysize type="int" preserve="y">600</ysize>
|
||||
<splash-screen type="bool">true</splash-screen>
|
||||
<splash-progress type="bool">true</splash-progress>
|
||||
<splash-title>
|
||||
<!-- -->
|
||||
</splash-title>
|
||||
<intro-music type="bool">false</intro-music>
|
||||
<game-mode type="bool">false</game-mode>
|
||||
<fullscreen type="bool">false</fullscreen>
|
||||
<game-mode type="bool" preserve="y">false</game-mode>
|
||||
<fullscreen type="bool" preserve="y">false</fullscreen>
|
||||
<units>feet</units>
|
||||
<save-on-exit type="bool"
|
||||
userarchive="y">true</save-on-exit>
|
||||
<browser-app write="n">firefox -new-tab "%u"</browser-app>
|
||||
<!-- help viewer; only used under Unix -->
|
||||
<terminal-ansi-colors type="bool">true</terminal-ansi-colors>
|
||||
<season type="string">summer</season>
|
||||
<season type="string" preserve="y">summer</season>
|
||||
</startup>
|
||||
<rendering>
|
||||
<debug type="bool">false</debug>
|
||||
|
@ -655,7 +655,7 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
</autovisibility>
|
||||
</menubar>
|
||||
|
||||
<gui>
|
||||
<gui preserve="y">
|
||||
<current-style type="int"
|
||||
userarchive="y">1</current-style>
|
||||
<style n="0"
|
||||
|
@ -722,7 +722,7 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
</ai>
|
||||
|
||||
<multiplay>
|
||||
<chat type="string">Hello</chat>
|
||||
<chat type="string" preserve="y">Hello</chat>
|
||||
<transmission-freq-hz type="string">118500000</transmission-freq-hz>
|
||||
<chat-display type="bool"
|
||||
userarchive="y">true</chat-display>
|
||||
|
@ -732,7 +732,7 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
</multiplay>
|
||||
|
||||
<user>
|
||||
<callsign type="string">Golf Foxtrot Sierra</callsign>
|
||||
<callsign type="string" preserve="y">Golf Foxtrot Sierra</callsign>
|
||||
</user>
|
||||
|
||||
<timing-statistics>
|
||||
|
@ -754,9 +754,16 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
<debug type="bool" archive="y">false</debug>
|
||||
</jetways>
|
||||
|
||||
<terrasync preserve="y">
|
||||
<enabled type="bool" userarchive="y">false</enabled>
|
||||
<use-built-in-svn type="bool" userarchive="y">true</use-built-in-svn>
|
||||
<refresh-display type="bool" userarchive="y">false</refresh-display>
|
||||
<use-svn type="bool" userarchive="y">true</use-svn>
|
||||
<svn-server userarchive="y">http://terrascenery.googlecode.com/svn/trunk/data/Scenery</svn-server>
|
||||
<rsync-server userarchive="y">scenery.flightgear.org::Scenery</rsync-server>
|
||||
<scenery-dir userarchive="y"></scenery-dir>
|
||||
</terrasync>
|
||||
</sim>
|
||||
|
||||
|
||||
<!-- mouse mode -->
|
||||
<devices>
|
||||
<status>
|
||||
|
@ -1233,6 +1240,9 @@ Started September 2000 by David Megginson, david@megginson.com
|
|||
<atc-chatter>
|
||||
<enabled type="bool" userarchive="n">false</enabled>
|
||||
</atc-chatter>
|
||||
<local_weather>
|
||||
<enabled type="bool" userarchive="y">false</enabled>
|
||||
</local_weather>
|
||||
</nasal>
|
||||
|
||||
</PropertyList>
|
||||
|
|
Loading…
Add table
Reference in a new issue