1
0
Fork 0

Merge branch 'master' of git://gitorious.org/fg/fgdata

Conflicts:
	AI/Aircraft/A-10/Models/A-10.xml
	preferences.xml
This commit is contained in:
Alexis Bory 2010-10-10 00:38:53 +02:00
commit 1de747b211
32 changed files with 4010 additions and 2068 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View file

@ -362,7 +362,7 @@ var TO_DEG = 180/math.pi;
var walkers = {};
var closerXY = func (pos, p1, p2) {
l1 = [p1[0] - pos[0], p1[1] - pos[1]];
l2 = [p2[0] - pos[0], p2[1] - pos[1]];
var l1 = [p1[0] - pos[0], p1[1] - pos[1]];
var l2 = [p2[0] - pos[0], p2[1] - pos[1]];
return (l1[0]*l1[0] + l1[1]*l1[1]) - (l2[0]*l2[0] + l2[1]*l2[1]);
}

View file

@ -279,7 +279,10 @@ properties' values.
<animation>
<type>select</type>
<object-name>vs-minus</object-name>
<object-name>vs-digits-minus</object-name>
<object-name>vs-digit2-minus</object-name>
<object-name>vs-digit3-minus</object-name>
<object-name>vs-digit4-minus</object-name>
<object-name>vs-digit5-minus</object-name>
<condition>
<and>
<equals>
@ -287,15 +290,18 @@ properties' values.
<value type="bool">true</value>
</equals>
<greater-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</greater-than>
</and>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>vs-digits</object-name>
<object-name>vs-digit2</object-name>
<object-name>vs-digit3</object-name>
<object-name>vs-digit4</object-name>
<object-name>vs-digit5</object-name>
<condition>
<and>
<equals>
@ -303,8 +309,8 @@ properties' values.
<value type="bool">true</value>
</equals>
<less-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</less-than>
</and>
</condition>
@ -312,11 +318,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit5</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<less-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</less-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -331,11 +336,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit4</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<less-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</less-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -350,11 +354,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit3</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<less-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</less-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -369,11 +372,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit2</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<less-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</less-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -388,11 +390,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit5-minus</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<greater-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</greater-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -407,11 +408,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit4-minus</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<greater-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</greater-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -426,11 +426,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit3-minus</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<greater-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</greater-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -445,11 +444,10 @@ properties' values.
<animation>
<type>textranslate</type>
<object-name>vs-digit2-minus</object-name>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<condition>
<greater-than>
<value>0</value>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
<value>0</value>
</greater-than>
</condition>
<property>/autopilot/KAP140/settings/target-pressure-rate</property>
@ -911,5 +909,5 @@ properties' values.
</binding>
</action>
</animation>
</PropertyList>

View file

@ -0,0 +1,316 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Reflections + Bumpmapping + specular
PARAMETERS: There are two forms of cube map texture:- vertical cross and 6 images.
Either can be used - alternative forms are shown in <parameters> and in <texture-unit>
The reflection is set proportional to the shininess of the material. Thus by
varying the material shininess value over or between objects the amount of
refection can be controlled. The overall amount of reflection may be
adjusted by the use of <refl_correction> -1.0 (fully transparent)- 1.0 (fully opaque).
The overall values of the noisiness, coloured fringing or fresnel effect may be adjusted
by the use of <noisiness>, <rainbowiness> and <fresneliness>.
If your result is too dark/too light the overall ambient light value can be adjusted
by the use of <ambient_correction>. This correction also takes out some of the blueness
added as default to compensate for the lack of reflection.
To use a reflection map set <reflect_map> to 1,and the path to the map texture in
<texture n="8">
A default, null, bumpspec is specified as texture unit 4. To provide a custom bumpspec map,
define <texture n="4"> in the derived effect file
USE: To use the default reflection effect (controlled by material shininess values) use
<effect>
<inherits-from>Effects/reflect-bump-spec</inherits-from>
<object-name>Fuselage</object-name>
</effect>
To use your own reflection effect, use
<effect>
<inherits-from>Aircraft/Lightning/Models/Effects/lightningreflect</inherits-from>
<object-name>Fuselage</object-name>
</effect>
in your model file.
To use your own effect place your efffect file containing something like this:
<name>Effects/lightningreflect</name>
<inherits-from>Effects/reflect-bump-spec</inherits-from>
and the the modified tags in the path as above
EXAMPLES: You can find examples of both usages in the Hunter and Lightning models.
-->
<PropertyList>
<name>Effects/reflect-bump-spec</name>
<inherits-from>Effects/model-default</inherits-from>
<parameters>
<texture n="4">
<image>Aircraft/Generic/Effects/null_bumpspec.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="5">
<type>cubemap</type>
<!-- use this form for a cube cross -->
<!--<image>Aircraft/Generic/Effects/CubeCrosses/blue_sky_big.jpg</image>-->
<!-- use this form for a 6 image cube map -->
<images>
<positive-x>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_px.png</positive-x>
<negative-x>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_nx.png</negative-x>
<positive-y>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_py.png</positive-y>
<negative-y>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_ny.png</negative-y>
<positive-z>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_pz.png</positive-z>
<negative-z>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_nz.png</negative-z>
</images>
</texture>
<texture n="6">
<image>Aircraft/Generic/Effects/Rainbow.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="7">
<image>Aircraft/Generic/Effects/FresnelLookUp.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="8">
<image>Aircraft/737-300/Models/Effects/733LH.ReflectionMap3.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<rendering-hint>transparent</rendering-hint>
<shade-model>smooth</shade-model>
<rainbowiness type="float">0.01</rainbowiness>
<fresneliness>0.1</fresneliness>
<noisiness>0.25</noisiness>
<refl_correction>0.0</refl_correction>
<ambient_correction>0.05</ambient_correction>
<reflect_map>0</reflect_map>
</parameters>
<generate>
<tangent type="int">6</tangent>
<binormal type="int">7</binormal>
</generate>
<technique n="9">
<predicate>
<and>
<property>/sim/rendering/shader-effects</property>
<or>
<less-equal>
<value type="float">2.0</value>
<glversion/>
</less-equal>
<and>
<extension-supported>GL_ARB_shader_objects</extension-supported>
<extension-supported>GL_ARB_shading_language_100</extension-supported>
<extension-supported>GL_ARB_vertex_shader</extension-supported>
<extension-supported>GL_ARB_fragment_shader</extension-supported>
</and>
</or>
</and>
</predicate>
<pass>
<lighting>true</lighting>
<material>
<active><use>material/active</use></active>
<ambient><use>material/ambient</use></ambient>
<diffuse><use>material/diffuse</use></diffuse>
<specular><use>material/specular</use></specular>
<emissive><use>material/emissive</use></emissive>
<shininess><use>material/shininess</use></shininess>
<color-mode><use>material/color-mode</use></color-mode>
</material>
<blend>
<active><use>blend/active</use></active>
<source><use>blend/source</use></source>
<destination><use>blend/destination</use></destination>
</blend>
<shade-model><use>shade-model</use></shade-model>
<cull-face><use>cull-face</use></cull-face>
<rendering-hint><use>rendering-hint</use></rendering-hint>
<texture-unit>
<unit>0</unit>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
<internal-format><use>texture[0]/internal-format</use></internal-format>
</texture-unit>
<texture-unit>
<unit>4</unit>
<image><use>texture[4]/image</use></image>
<filter><use>texture[4]/filter</use></filter>
<wrap-s><use>texture[4]/wrap-s</use></wrap-s>
<wrap-t><use>texture[4]/wrap-t</use></wrap-t>
<internal-format><use>texture[4]/internal-format</use></internal-format>
</texture-unit>
<texture-unit>
<unit>5</unit>
<type><use>texture[5]/type</use></type>
<!-- use this form for a cube cross -->
<!--<image><use>texture[5]/image</use></image>-->
<!-- use this form for a 6 image cube map -->
<images><use>texture[5]/images</use></images>
</texture-unit>
<texture-unit>
<unit>6</unit>
<type><use>texture[6]/type</use></type>
<image><use>texture[6]/image</use></image>
<filter><use>texture[6]/filter</use></filter>
<wrap-s><use>texture[6]/wrap-s</use></wrap-s>
<wrap-t><use>texture[6]/wrap-t</use></wrap-t>
</texture-unit>
<texture-unit>
<unit>7</unit>
<type><use>texture[7]/type</use></type>
<image><use>texture[7]/image</use></image>
<filter><use>texture[7]/filter</use></filter>
<wrap-s><use>texture[7]/wrap-s</use></wrap-s>
<wrap-t><use>texture[7]/wrap-t</use></wrap-t>
</texture-unit>
<texture-unit>
<unit>8</unit>
<image><use>texture[8]/image</use></image>
<filter><use>texture[8]/filter</use></filter>
<wrap-s><use>texture[8]/wrap-s</use></wrap-s>
<wrap-t><use>texture[8]/wrap-t</use></wrap-t>
<internal-format><use>texture[0]/internal-format</use></internal-format>
</texture-unit>
<texture-unit>
<unit>9</unit>
<type>noise</type>
</texture-unit>
<program>
<vertex-shader>Shaders/reflect-bump-spec.vert</vertex-shader>
<fragment-shader>Shaders/reflect-bump-spec.frag</fragment-shader>
<attribute>
<name>tangent</name>
<index>6</index>
</attribute>
<attribute>
<name>binormal</name>
<index>7</index>
</attribute>
</program>
<uniform>
<name>BaseTex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>NormalTex</name>
<type>sampler-2d</type>
<value type="int">4</value>
</uniform>
<uniform>
<name>Environment</name>
<type>sampler-cube</type>
<value type="int">5</value>
</uniform>
<uniform>
<name>Rainbow</name>
<type>sampler-2d</type>
<value type="int">6</value>
</uniform>
<uniform>
<name>Fresnel</name>
<type>sampler-2d</type>
<value type="int">7</value>
</uniform>
<uniform>
<name>Map</name>
<type>sampler-2d</type>
<value type="int">8</value>
</uniform>
<uniform>
<name>Noise</name>
<type>sampler-3d</type>
<value type="int">9</value>
</uniform>
<!-- set the amount of fringing colour 0.0 - 1.0 -->
<uniform>
<name>rainbowiness</name>
<type>float</type>
<value><use>rainbowiness</use></value>
</uniform>
<!-- set the amount of fresnel effect colour 0.0 - 1.0 -->
<uniform>
<name>fresneliness</name>
<type>float</type>
<value><use>fresneliness</use></value>
</uniform>
<!-- set the amount of noisiness 0.0 - 1.0 -->
<uniform>
<name>noisiness</name>
<type>float</type>
<value><use>noisiness</use></value>
</uniform>
<!-- The reflection is set proportional to the shininess of the material.
The amount of reflection may be adjusted by the use of this correction
-1.0 (fully transparent)- 1.0 (fully opaque) -->
<uniform>
<name>refl_correction</name>
<type>float</type>
<value><use>refl_correction</use></value>
</uniform>
<!-- set the amount of ambient light correction 0.0 - 1.0 -->
<uniform>
<name>ambient_correction</name>
<type>float</type>
<value><use>ambient_correction</use></value>
</uniform>
<!-- use a reflection map-->
<uniform>
<name>reflect_map</name>
<type>float</type>
<value><use>reflect_map</use></value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -2,6 +2,150 @@
<PropertyList>
<name>Effects/water</name>
<inherits-from>Effects/terrain-default</inherits-from>
<parameters>
<texture n="0">
<image>Textures/Water/water-reflection.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="1">
<image>Textures/Water/water-refraction.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="2">
<image>Textures/Water/water-normalmap.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="3">
<image>Textures/Water/water-dudv.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<saturation>
<use>/rendering/scene/saturation</use>
</saturation>
</parameters>
<technique n="8">
<predicate>
<and>
<property>/sim/rendering/water-shader</property>
<property>/sim/rendering/shader-effects</property>
<less-equal>
<value type="float">2.0</value>
<float-property>/sim/rendering/quality-level</float-property>
</less-equal>
<or>
<less-equal>
<value type="float">2.0</value>
<glversion/>
</less-equal>
<and>
<extension-supported>GL_ARB_shader_objects</extension-supported>
<extension-supported>GL_ARB_shading_language_100</extension-supported>
<extension-supported>GL_ARB_vertex_shader</extension-supported>
<extension-supported>GL_ARB_fragment_shader</extension-supported>
</and>
</or>
</and>
</predicate>
<pass>
<lighting>true</lighting>
<material>
<ambient><use>material/ambient</use></ambient>
<diffuse><use>material/diffuse</use></diffuse>
<specular><use>material/specular</use></specular>
<color-mode>ambient-and-diffuse</color-mode>
</material>
<blend><use>transparent</use></blend>
<alpha-test><use>transparent</use></alpha-test>
<shade-model>smooth</shade-model>
<cull-face>back</cull-face>
<render-bin>
<bin-number><use>render-bin/bin-number</use></bin-number>
<bin-name><use>render-bin/bin-name</use></bin-name>
</render-bin>
<texture-unit>
<unit>0</unit>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
<internal-format>
<use>texture[0]/internal-format</use>
</internal-format>
</texture-unit>
<texture-unit>
<unit>1</unit>
<image><use>texture[1]/image</use></image>
<filter><use>texture[1]/filter</use></filter>
<wrap-s><use>texture[1]/wrap-s</use></wrap-s>
<wrap-t><use>texture[1]/wrap-t</use></wrap-t>
<internal-format>
<use>texture[1]/internal-format</use>
</internal-format>
</texture-unit>
<texture-unit>
<unit>2</unit>
<image><use>texture[2]/image</use></image>
<filter><use>texture[2]/filter</use></filter>
<wrap-s><use>texture[2]/wrap-s</use></wrap-s>
<wrap-t><use>texture[2]/wrap-t</use></wrap-t>
<internal-format>
<use>texture[2]/internal-format</use>
</internal-format>
</texture-unit>
<texture-unit>
<unit>3</unit>
<image><use>texture[3]/image</use></image>
<filter><use>texture[3]/filter</use></filter>
<wrap-s><use>texture[3]/wrap-s</use></wrap-s>
<wrap-t><use>texture[3]/wrap-t</use></wrap-t>
<internal-format>
<use>texture[3]/internal-format</use>
</internal-format>
</texture-unit>
<program>
<vertex-shader>Shaders/water.vert</vertex-shader>
<fragment-shader>Shaders/water.frag</fragment-shader>
</program>
<uniform>
<name>water_reflection</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>water_refraction</name>
<type>sampler-2d</type>
<value type="int">1</value>
</uniform>
<uniform>
<name>water_normalmap</name>
<type>sampler-2d</type>
<value type="int">2</value>
</uniform>
<uniform>
<name>water_dudvmap</name>
<type>sampler-2d</type>
<value type="int">3</value>
</uniform>
<uniform>
<name>saturation</name>
<type>float</type>
<value>0.4</value>
<!--<value><use>saturation</use></value>-->
</uniform>
</pass>
</technique>
<technique n="9">
<predicate>
<and>
@ -42,8 +186,8 @@
<type>noise</type>
</texture-unit>
<program>
<vertex-shader>Shaders/water.vert</vertex-shader>
<fragment-shader>Shaders/water.frag</fragment-shader>
<vertex-shader>Shaders/water-orig.vert</vertex-shader>
<fragment-shader>Shaders/water-orig.frag</fragment-shader>
</program>
<uniform>
<name>texture</name>

View file

@ -28,7 +28,7 @@
-->
<name>MetarController:pressure-sea-level-inhg</name>
<type>noise-spike</type>
<max-rate-of-change>0.0003</max-rate-of-change>
<max-rate-of-change>0.006</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>

View file

@ -89,16 +89,6 @@
</binding>
</key>
<key n="99">
<name>c</name>
<desc>Clouds</desc>
<exit/>
<binding>
<command>dialog-show</command>
<dialog-name>clouds</dialog-name>
</binding>
</key>
<key n="102">
<name>f</name>
<desc>Fuel and Payload</desc>
@ -241,7 +231,6 @@
<command>nasal</command>
<script>
setprop("/environment/weather-scenario", "Fair weather");
setprop("/environment/rebuild-layers", getprop("/environment/rebuild-layers") + 1);
</script>
</binding>
</key>
@ -253,7 +242,6 @@
<command>nasal</command>
<script>
setprop("/environment/weather-scenario", "METAR");
setprop("/environment/rebuild-layers", getprop("/environment/rebuild-layers") + 1);
</script>
</binding>
</key>
@ -265,7 +253,6 @@
<command>nasal</command>
<script>
setprop("/environment/weather-scenario", "none");
setprop("/environment/rebuild-layers", getprop("/environment/rebuild-layers") + 1);
</script>
</binding>
</key>
@ -277,7 +264,6 @@
<command>nasal</command>
<script>
setprop("/environment/weather-scenario", "Thunderstorm");
setprop("/environment/rebuild-layers", getprop("/environment/rebuild-layers") + 1);
</script>
</binding>
</key>

View file

@ -45,24 +45,25 @@ BroadcastChannel.new = func (mpp_path, process,
accept_predicate = nil,
on_disconnect = nil,
enable_send=1) {
obj = { parents : [BroadcastChannel],
mpp_path : mpp_path,
send_node : enable_send ? props.globals.getNode(mpp_path, 1)
: nil,
process_msg : process,
send_to_self : send_to_self,
accept_predicate : (accept_predicate != nil) ? accept_predicate :
func (p) { return 1; },
on_disconnect : (on_disconnect != nil) ? on_disconnect :
func (p) { return; },
# Internal state.
send_buf : [],
peers : {},
loopid : 0,
PERIOD : 1.3,
last_time : 0.0, # For join handling.
last_send : 0.0, # For the send queue
SEND_TIME : 0.5 };
var obj = { parents : [BroadcastChannel],
mpp_path : mpp_path,
send_node : enable_send ? props.globals.getNode(mpp_path, 1)
: nil,
process_msg : process,
send_to_self : send_to_self,
accept_predicate :
(accept_predicate != nil) ? accept_predicate
: func (p) { return 1; },
on_disconnect : (on_disconnect != nil) ? on_disconnect
: func (p) { return; },
# Internal state.
send_buf : [],
peers : {},
loopid : 0,
PERIOD : 1.3,
last_time : 0.0, # For join handling.
last_send : 0.0, # For the send queue
SEND_TIME : 0.5 };
if (enable_send and (obj.send_node == nil)) {
printlog("warn",
"BroadcastChannel invalid send node.");
@ -232,10 +233,10 @@ Binary.decodeCoord = func (str) {
# The same object is seldom used for both sending and receiving.
var MessageChannel = {};
MessageChannel.new = func (n = nil, process = nil) {
obj = { parents : [MessageChannel],
node : n,
process_msg : process,
old : "" };
var obj = { parents : [MessageChannel],
node : n,
process_msg : process,
old : "" };
return obj;
}
MessageChannel.update = func {

View file

@ -125,8 +125,10 @@ var handle_key = func(key)
{
input = substr(input, 0, size(input) - 1);
gui.popupTip(input, 1000000);
return 1;
}
# Always handle key so excessive backspacing doesn't toggle the heading autopilot
return 1;
}
elsif (key == 27)
{

View file

@ -1,6 +1,6 @@
var set_runway_from_metar_wind = func {
if (!getprop("/environment/params/real-world-weather-fetch"))
return printlog("info", "metar-rwy: no live weather");
if (!getprop("/environment/metar/valid"))
return printlog("info", "metar-rwy: no valid metar");
if (!getprop("/sim/startup/options/airport"))
return printlog("info", "metar-rwy: no airport requested");
if (getprop("/sim/startup/options/runway"))

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,123 @@
// -*- mode: C; -*-
// Licence: GPL v2
// Author: Vivian Meazza.
#version 120
varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 VTangent;
varying vec3 VBinormal;
varying vec3 Normal;
varying vec4 constantColor;
varying vec3 vViewVec;
varying vec3 reflVec;
varying vec4 Diffuse;
varying vec3 lightDir, halfVector;
varying float alpha, fogCoord;
uniform samplerCube Environment;
uniform sampler2D Rainbow;
uniform sampler2D BaseTex;
uniform sampler2D Fresnel;
uniform sampler2D Map;
uniform sampler2D NormalTex;
uniform sampler3D Noise;
uniform float refl_correction;
uniform float rainbowiness;
uniform float fresneliness;
uniform float noisiness;
uniform float ambient_correction;
uniform float reflect_map;
void main (void)
{
vec3 halfV;
float NdotL, NdotHV;
vec4 color = constantColor;
vec4 specular = vec4(0.0);
vec4 ns = texture2D(NormalTex, gl_TexCoord[0].st);
vec3 n = ns.rgb * 2.0 - 1.0;
n = normalize(n.x * VTangent + n.y * VBinormal + n.z * VNormal);
NdotL = max(0.0, dot(n, lightDir));
// calculate the specular light
if (NdotL > 0.0) {
color += Diffuse * NdotL;
halfV = normalize(halfVector);
NdotHV = max(dot(n, halfV), 0.0);
if (gl_FrontMaterial.shininess > 0.0)
specular.rgb = (gl_FrontMaterial.specular.rgb * ns.a
* gl_LightSource[0].specular.rgb
* pow(NdotHV, gl_FrontMaterial.shininess));
}
color.a = alpha;
color = clamp(color, 0.0, 1.0);
vec4 texel = texture2D(BaseTex, gl_TexCoord[0].st);
vec4 texelcolor = color * texel + specular;
// calculate the fog factor
float fogCoord = ecPosition.z;
const float LOG2 = 1.442695;
float fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
fogFactor = clamp(fogFactor, 0.0, 1.0);
if(gl_Fog.density == 1.0)
fogFactor=1.0;
vec3 normal = normalize(VNormal);
vec3 viewVec = normalize(vViewVec);
// Map a rainbowish color
float v = dot(viewVec, normal);
vec4 rainbow = texture2D(Rainbow, vec2(v, 0.0));
// Map a fresnel effect
vec4 fresnel = texture2D(Fresnel, vec2(v, 0.0));
// map the refection of the environment
vec4 reflection = textureCube(Environment, reflVec);
// set the user shininess offse
float transparency_offset = clamp(refl_correction, -1.0, 1.0);
float reflFactor = 0.0;
if(reflect_map > 0){
// map the shininess of the object with user input
vec4 map = texture2D(Map, gl_TexCoord[0].st);
//float pam = (map.a * -2) + 1; //reverse map
reflFactor = map.a + transparency_offset;
} else {
// set the reflectivity proportional to shininess with user
// input
reflFactor = (gl_FrontMaterial.shininess / 128) + transparency_offset;
}
reflFactor = clamp(reflFactor, 0.0, 1.0);
// set ambient adjustment to remove bluiness with user input
float ambient_offset = clamp(ambient_correction, -1.0, 1.0);
vec4 ambient_Correction = vec4(gl_LightSource[0].ambient.rg, gl_LightSource[0].ambient.b * 0.6, 0.5) * ambient_offset ;
ambient_Correction = clamp(ambient_Correction, -1.0, 1.0);
// map noise vectore
vec4 noisevec = texture3D(Noise, rawpos.xyz);
// add fringing fresnel and rainbow effects and modulate by reflection
vec4 reflcolor = mix(reflection, rainbow, rainbowiness * v);
vec4 reflfrescolor = mix(reflcolor, fresnel, fresneliness * v);
vec4 noisecolor = mix(reflfrescolor, noisevec, noisiness);
vec4 raincolor = vec4(noisecolor.rgb * reflFactor, 1.0);
vec4 mixedcolor = mix(texel, raincolor, reflFactor);
// the final reflection
vec4 reflColor = color * mixedcolor + specular + ambient_Correction ;
reflColor = clamp(reflColor, 0.0, 1.0);
gl_FragColor = mix(gl_Fog.color, reflColor, fogFactor);
}

View file

@ -0,0 +1,69 @@
// -*- mode: C; -*-
// Licence: GPL v2
// Author: Vivian Meazza.
varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 VTangent;
varying vec3 VBinormal;
varying vec3 Normal;
varying vec4 constantColor;
varying vec3 vViewVec;
varying vec3 reflVec;
varying vec4 Diffuse;
varying vec3 normal, lightDir, halfVector;
varying float alpha, fogCoord;
uniform mat4 osg_ViewMatrixInverse;
attribute vec3 tangent;
attribute vec3 binormal;
void main(void)
{
rawpos = gl_Vertex;
ecPosition = gl_ModelViewMatrix * gl_Vertex;
vec3 ecPosition3 = vec3(gl_ModelViewMatrix * gl_Vertex) / ecPosition.w;
vec3 t = normalize(cross(gl_Normal, vec3(1.0,0.0,0.0)));
vec3 b = normalize(cross(gl_Normal,t));
vec3 n = normalize(gl_Normal);
VNormal = normalize(gl_NormalMatrix * gl_Normal);
VTangent = normalize(gl_NormalMatrix * tangent);
VBinormal = normalize(gl_NormalMatrix * binormal);
Normal = normalize(gl_Normal);
lightDir = normalize(vec3(gl_LightSource[0].position));
halfVector = normalize(gl_LightSource[0].halfVector.xyz);
Diffuse = gl_Color * gl_LightSource[0].diffuse;
//Diffuse= gl_Color.rgb * max(0.0, dot(normalize(VNormal), gl_LightSource[0].position.xyz));
// Super hack: if diffuse material alpha is less than 1, assume a
// transparency animation is at work
if (gl_FrontMaterial.diffuse.a < 1.0)
alpha = gl_FrontMaterial.diffuse.a;
else
alpha = gl_Color.a;
fogCoord = abs(ecPosition3.z);
// Vertex in eye coordinates
vec3 vertVec = ecPosition.xyz;
vViewVec.x = dot(t, vertVec);
vViewVec.y = dot(b, vertVec);
vViewVec.z = dot(n, vertVec);
// calculate the reflection vector
vec4 reflect_eye = vec4(reflect(vertVec, VNormal), 0.0);
reflVec = normalize(gl_ModelViewMatrixInverse * reflect_eye).xyz;
gl_FrontColor = gl_Color;
constantColor = gl_FrontMaterial.emission
+ gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);
gl_Position = ftransform();
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
}

View file

@ -1,6 +1,6 @@
// -*- mode: C; -*-
// Licence: GPL v2
// Author: Frederic Bouvier.
// Author: Frederic Bouvier.
// Adapted from the paper by F. Policarpo et al. : Real-time Relief Mapping on Arbitrary Polygonal Surfaces
#version 120
@ -34,7 +34,7 @@ float ray_intersect(sampler2D reliefMap, vec2 dp, vec2 ds)
for(int i = 0; i < linear_search_steps - 1; ++i)
{
depth += size;
float t = texture2D(reliefMap, dp + ds * depth).a;
float t = step(0.95, texture2D(reliefMap, dp + ds * depth).a);
if(best_depth > 0.996)
if(depth >= t)
best_depth = depth;
@ -46,7 +46,7 @@ float ray_intersect(sampler2D reliefMap, vec2 dp, vec2 ds)
for(int i = 0; i < binary_search_steps; ++i)
{
size *= 0.5;
float t = texture2D(reliefMap, dp + ds * depth).a;
float t = step(0.95, texture2D(reliefMap, dp + ds * depth).a);
if(depth >= t)
{
best_depth = depth;
@ -129,7 +129,7 @@ void main (void)
finalColor = mix(finalColor, clamp(n+nvL[2]*4.1+vec4(0.1, 0.1, nvL[2]*2.2, 1.0), 0.7, 1.0),
step(0.8,Nz)*(1.0-emis)*smoothstep(snowlevel+300.0, snowlevel+360.0, (rawpos.z)+nvL[1]*3000.0));
finalColor *= ambient_light;
if (gl_Fog.density == 1.0)
fogFactor=1.0;

86
Shaders/water-orig.frag Normal file
View file

@ -0,0 +1,86 @@
#version 120
varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 Normal;
varying vec3 lightVec;
uniform sampler3D NoiseTex;
uniform float osg_SimulationTime;
//const float scale = 1.0;
void main (void)
{
vec4 noisevecS = texture3D(NoiseTex, (rawpos.xyz)*0.0126);
vec4 nvLS = texture3D(NoiseTex, (rawpos.xyz)*-0.0003323417);
vec4 noisevec = texture3D(NoiseTex, (rawpos.xyz)*0.00423+vec3(0.0,0.0,osg_SimulationTime*0.035217));
vec4 nvL = texture3D(NoiseTex, (rawpos.xyz)*0.001223417+(0.0,0.0,osg_SimulationTime*-0.0212));
float fogFactor;
if (gl_Fog.density == 1.0)
{
fogFactor=1.0;
}
else
{
float fogCoord = ecPosition.z;
const float LOG2 = 1.442695;
fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
fogFactor = clamp(fogFactor, 0.0, 1.0);
}
float a=1.0;
float n=0.00;
n += nvLS[0]*a;
a/=2.0;
n += nvLS[1]*a;
a/=2.0;
n += nvLS[2]*a;
a/=2.0;
n += nvLS[3]*a;
a=4.0;
float na=n;
na += nvL[0]*1.1;
a*=1.2;
na += nvL[1]*a;
a*=1.2;
na += nvL[2]*a;
a*=1.2;
na += nvL[3]*a;
a=2.0;
na += noisevec[0]*a*0.2;
a*=1.2;
na += noisevec[1]*a;
a*=1.2;
na += noisevec[2]*a;
a*=1.2;
na += noisevec[3]*a;
vec4 c1;
c1 = asin(vec4(smoothstep(0.0, 2.2, n), smoothstep(-0.1, 2.10, n), smoothstep(-0.2, 2.0, n), 1.0));
vec3 Eye = normalize(-ecPosition.xyz);
vec3 Reflected = normalize(reflect(-normalize(lightVec), normalize(VNormal+vec3(0.0,0.0,na*0.10-0.24))));
vec3 bump = normalize(VNormal+vec3(0.0, 0.0, na)-0.9);
vec3 bumped = max(normalize(refract(lightVec, normalize(bump), 0.16)), 0.0);
vec4 ambientColor = gl_LightSource[0].ambient;
vec4 light = ambientColor;
c1 *= light;
float bumpFact = (bumped.r+bumped.g+bumped.b);
float ReflectedEye = max(dot(Reflected, Eye), 0.0);
float eyeFact = pow(ReflectedEye, 20.0);
c1 += 0.3 * gl_LightSource[0].diffuse * (1.0-eyeFact) * bumpFact*bumpFact;
c1 += 0.4 * gl_LightSource[0].diffuse * eyeFact * 3*bumpFact;
eyeFact = pow(eyeFact, 20.0);
c1 += gl_LightSource[0].specular * eyeFact * 4*bumpFact;
vec4 finalColor = c1;
gl_FragColor = mix(gl_Fog.color, finalColor, fogFactor);
}

15
Shaders/water-orig.vert Normal file
View file

@ -0,0 +1,15 @@
varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 Normal;
varying vec3 lightVec;
void main(void)
{
rawpos = gl_Vertex;
ecPosition = gl_ModelViewMatrix * gl_Vertex;
VNormal = normalize(gl_NormalMatrix * gl_Normal);
Normal = normalize(gl_Normal);
lightVec = normalize(gl_LightSource[0].position.xyz/* - ecPosition*/);
gl_Position = ftransform();
}

View file

@ -1,86 +1,80 @@
#version 120
uniform sampler2D water_normalmap;
uniform sampler2D water_reflection;
uniform sampler2D water_dudvmap;
uniform float saturation;
varying vec4 rawpos;
varying vec4 waterTex1; //moving texcoords
varying vec4 waterTex2; //moving texcoords
varying vec4 waterTex4; //viewts
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 Normal;
varying vec3 lightVec;
varying vec3 viewerdir;
varying vec3 lightdir;
varying vec3 normal;
uniform sampler3D NoiseTex;
uniform float osg_SimulationTime;
//const float scale = 1.0;
void main (void)
void main(void)
{
vec4 noisevecS = texture3D(NoiseTex, (rawpos.xyz)*0.0126);
vec4 nvLS = texture3D(NoiseTex, (rawpos.xyz)*-0.0003323417);
const vec4 sca = vec4(0.005, 0.005, 0.005, 0.005);
const vec4 sca2 = vec4(0.02, 0.02, 0.02, 0.02);
const vec4 tscale = vec4(0.25, 0.25, 0.25, 0.25);
vec4 noisevec = texture3D(NoiseTex, (rawpos.xyz)*0.00423+vec3(0.0,0.0,osg_SimulationTime*0.035217));
vec4 nvL = texture3D(NoiseTex, (rawpos.xyz)*0.001223417+(0.0,0.0,osg_SimulationTime*-0.0212));
// compute direction to viewer
vec3 E = normalize(viewerdir);
float fogFactor;
if (gl_Fog.density == 1.0)
{
fogFactor=1.0;
}
else
{
float fogCoord = ecPosition.z;
const float LOG2 = 1.442695;
fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
fogFactor = clamp(fogFactor, 0.0, 1.0);
}
// compute direction to light source
vec3 L = normalize(lightdir);
float a=1.0;
float n=0.00;
n += nvLS[0]*a;
a/=2.0;
n += nvLS[1]*a;
a/=2.0;
n += nvLS[2]*a;
a/=2.0;
n += nvLS[3]*a;
// half vector
vec3 H = normalize(L + E);
const float water_shininess = 240.0;
a=4.0;
float na=n;
na += nvL[0]*1.1;
a*=1.2;
na += nvL[1]*a;
a*=1.2;
na += nvL[2]*a;
a*=1.2;
na += nvL[3]*a;
a=2.0;
na += noisevec[0]*a*0.2;
a*=1.2;
na += noisevec[1]*a;
a*=1.2;
na += noisevec[2]*a;
a*=1.2;
na += noisevec[3]*a;
vec4 viewt = normalize(waterTex4);
vec4 c1;
c1 = asin(vec4(smoothstep(0.0, 2.2, n), smoothstep(-0.1, 2.10, n), smoothstep(-0.2, 2.0, n), 1.0));
vec4 disdis = texture2D(water_dudvmap, vec2(waterTex2 * tscale)) * 2.0 - 1.0;
vec4 dist = texture2D(water_dudvmap, vec2(waterTex1 + disdis*sca2)) * 2.0 - 1.0;
vec4 fdist = normalize(dist);
fdist *= sca;
vec3 Eye = normalize(-ecPosition.xyz);
vec3 Reflected = normalize(reflect(-normalize(lightVec), normalize(VNormal+vec3(0.0,0.0,na*0.10-0.24))));
//normalmap
vec4 nmap0 = texture2D(water_normalmap, vec2(waterTex1+ disdis*sca2)) * 2.0 - 1.0;
vec4 nmap2 = texture2D(water_normalmap, vec2(waterTex2 * tscale)) * 2.0 - 1.0;
vec4 vNorm = normalize(nmap0 + nmap2);
vec3 bump = normalize(VNormal+vec3(0.0, 0.0, na)-0.9);
vec3 bumped = max(normalize(refract(lightVec, normalize(bump), 0.16)), 0.0);
//load reflection
vec4 tmp = vec4(lightdir, 0.0);
vec4 refTex = texture2D(water_reflection, vec2(tmp));
vec4 refl = normalize(refTex);
vec4 ambientColor = gl_LightSource[0].ambient;
vec4 light = ambientColor;
c1 *= light;
vec3 N0 = vec3(texture2D(water_normalmap, vec2(waterTex1+ disdis*sca2)) * 2.0 - 1.0);
vec3 N1 = vec3(texture2D(water_normalmap, vec2(waterTex2 * tscale)) * 2.0 - 1.0);
vec3 N = normalize(normal+N0+N1);
float bumpFact = (bumped.r+bumped.g+bumped.b);
float ReflectedEye = max(dot(Reflected, Eye), 0.0);
float eyeFact = pow(ReflectedEye, 20.0);
c1 += 0.3 * gl_LightSource[0].diffuse * (1.0-eyeFact) * bumpFact*bumpFact;
c1 += 0.4 * gl_LightSource[0].diffuse * eyeFact * 3*bumpFact;
eyeFact = pow(eyeFact, 20.0);
c1 += gl_LightSource[0].specular * eyeFact * 4*bumpFact;
vec3 specular_color = vec3(gl_LightSource[0].diffuse)
* pow(max(0.0, dot(N, H)), water_shininess) * 6.0;
vec4 finalColor = c1;
gl_FragColor = mix(gl_Fog.color, finalColor, fogFactor);
vec4 specular = vec4(specular_color,0.5);
//calculate fresnel
vec4 invfres = vec4( dot(vNorm, viewt) );
vec4 fres = vec4(1.0) + invfres;
refl *= fres;
specular = specular * saturation;
vec4 finalColor = refl + specular;
float fogFactor;
float fogCoord = ecPosition.z;
const float LOG2 = 1.442695;
fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
vec4 ambient_light = gl_LightSource[0].diffuse;
finalColor *= ambient_light;
if(gl_Fog.density == 1.0)
fogFactor=1.0;
gl_FragColor = mix(gl_Fog.color,finalColor, fogFactor);
}

View file

@ -1,15 +1,29 @@
varying vec4 rawpos;
varying vec4 waterTex1;
varying vec4 waterTex2;
varying vec4 waterTex4;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 Normal;
varying vec3 lightVec;
uniform float osg_SimulationTime;
varying vec3 viewerdir;
varying vec3 lightdir;
varying vec3 normal;
void main(void)
{
rawpos = gl_Vertex;
ecPosition = gl_ModelViewMatrix * gl_Vertex;
VNormal = normalize(gl_NormalMatrix * gl_Normal);
Normal = normalize(gl_Normal);
lightVec = normalize(gl_LightSource[0].position.xyz/* - ecPosition*/);
gl_Position = ftransform();
}
vec3 N = normalize(gl_Normal);
normal = N;
ecPosition = gl_ModelViewMatrix * gl_Vertex;
viewerdir = vec3(gl_ModelViewMatrixInverse[3]) - vec3(gl_Vertex);
lightdir = normalize(vec3(gl_ModelViewMatrixInverse * gl_LightSource[0].position));
waterTex4 = vec4( ecPosition.xzy, 0.0 );
vec4 t1 = vec4(0.0, osg_SimulationTime*0.005217, 0.0,0.0);
vec4 t2 = vec4(0.0, osg_SimulationTime*-0.0012, 0.0,0.0);
waterTex1 = gl_MultiTexCoord0 + t1;
waterTex2 = gl_MultiTexCoord0 + t2;
gl_Position = ftransform();
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

221
gui/dialogs/AIcarrier.xml Normal file
View file

@ -0,0 +1,221 @@
<?xml version="1.0"?>
<PropertyList>
<name>AIcarrier</name>
<modal>false</modal>
<layout>vbox</layout>
<!-- AI Carrier options -->
<text>
<halign>left</halign>
<label>AI Carrier</label>
<color>
<red>0.9</red>
<green>0.9</green>
<blue>0.9</blue>
<alpha>1</alpha>
</color>
</text>
<group>
<layout>hbox</layout>
<empty>
<pref-width>10</pref-width>
</empty>
<group>
<layout>vbox</layout>
<radio>
<halign>left</halign>
<label>Turn to launch course</label>
<property>/ai/models/carrier/controls/turn-to-launch-hdg</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/carrier/controls/turn-to-launch-hdg");
foreach (var c; props.globals.getNode("/ai/models").getChildren("carrier")){
c.getNode("controls/turn-to-launch-hdg").setBoolValue(v);
c.getNode("controls/turn-to-recovery-hdg").setBoolValue(0);
c.getNode("controls/turn-to-base-course").setBoolValue(0);
}
</script>
</binding>
</radio>
<radio>
<halign>left</halign>
<label>Turn to recovery course</label>
<property>/ai/models/carrier/controls/turn-to-recovery-hdg</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/carrier/controls/turn-to-recovery-hdg");
foreach (var c; props.globals.getNode("/ai/models").getChildren("carrier")){
c.getNode("controls/turn-to-recovery-hdg").setBoolValue(v);
c.getNode("controls/turn-to-launch-hdg").setBoolValue(0);
c.getNode("controls/turn-to-base-course").setBoolValue(0);
}
</script>
</binding>
</radio>
<radio>
<halign>left</halign>
<label>Turn to base course</label>
<property>/ai/models/carrier/controls/turn-to-base-course</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/carrier/controls/turn-to-base-course");
foreach (var c; props.globals.getNode("/ai/models").getChildren("carrier")){
c.getNode("controls/turn-to-base-course").setBoolValue(v);
c.getNode("controls/turn-to-recovery-hdg").setBoolValue(0);
c.getNode("controls/turn-to-launch-hdg").setBoolValue(0);
}
</script>
</binding>
</radio>
<checkbox>
<halign>left</halign>
<label>Operate Deck Elevators</label>
<property>/ai/models/carrier/controls/elevators</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/carrier/controls/elevators");
foreach (var c; props.globals.getNode("/ai/models").getChildren("carrier"))
c.getNode("controls/elevators").setBoolValue(v);
</script>
</binding>
</checkbox>
<checkbox>
<halign>left</halign>
<label>Enable LSO Communications</label>
<property>/sim/current-view/lso-commentary</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<checkbox>
<halign>left</halign>
<label>Enable Deck Park</label>
<property>/sim/current-view/deck-park</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
<checkbox>
<halign>left</halign>
<label>Deck Lights</label>
<property>/ai/models/carrier/controls/lighting/deck-lights</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/carrier/controls/lighting/deck-lights");
foreach (var c; props.globals.getNode("/ai/models").getChildren("carrier"))
c.getNode("controls/lighting/deck-lights",1).setBoolValue(v);
</script>
</binding>
</checkbox>
<text>
<halign>left</halign>
<label>Discrete Flightdeck Floodlights (Red)</label>
</text>
<slider>
<halign>left</halign>
<width>75</width>
<height>25</height>
<property>/ai/models/carrier/controls/lighting/flood-lights-red-norm</property>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/carrier/controls/lighting/flood-lights-red-norm");
foreach (var c; props.globals.getNode("/ai/models").getChildren("carrier"))
c.getNode("controls/lighting/flood-lights-red-norm",1).setDoubleValue(v);
</script>
</binding>
</slider>
</group>
<empty>
<stretch>true</stretch>
</empty>
</group>
<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>

74
gui/dialogs/ai.xml Normal file
View file

@ -0,0 +1,74 @@
<?xml version="1.0"?>
<!-- General ATC/AI options -->
<PropertyList>
<name>ai</name>
<modal>false</modal>
<layout>vbox</layout>
<button>
<legend>-</legend>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
<halign>right</halign>
<border>2</border>
<binding>
<command>dialog-close</command>
</binding>
</button>
<text>
<!-- <label>ATC/AI Options</label> -->
<label>AI Options</label>
</text>
<hrule/>
<group>
<layout>hbox</layout>
<empty>
<pref-width>10</pref-width>
</empty>
<group>
<layout>vbox</layout>
<!-- <checkbox>
<halign>left</halign>
<label>Enable ATC</label>
<property>/sim/atc/enabled</property>
</checkbox> -->
<checkbox>
<halign>left</halign>
<label>Enable AI traffic</label>
<property>/sim/ai-traffic/enabled</property>
</checkbox>
<group>
<layout>hbox</layout>
<text>
<halign>left</halign>
<label>AI traffic density:</label>
</text>
<combo>
<halign>left</halign>
<property>/sim/ai-traffic/level</property>
<value>1</value>
<value>2</value>
<value>3</value>
</combo>
</group>
</group>
<empty>
<stretch>true</stretch>
</empty>
</group>
</PropertyList>

View file

@ -42,13 +42,23 @@
</binding>
</checkbox>
<item>
<checkbox>
<halign>left</halign>
<label>Show 2D Panel</label>
<property>/sim/panel/visibility</property>
<binding>
<command>dialog-apply</command>
</binding>
</item>
</checkbox>
<checkbox>
<halign>left</halign>
<label>Autohide Menubar</label>
<property>/sim/menubar/autovisibility/enabled</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
</group>
<hrule/>

237
gui/dialogs/formation.xml Normal file
View file

@ -0,0 +1,237 @@
<?xml version="1.0"?>
<PropertyList>
<name>formation</name>
<modal>false</modal>
<layout>vbox</layout>
<!-- AI Wingman options -->
<text>
<halign>left</halign>
<label>Wingman Controls</label>
<color>
<red>0.5</red>
<green>0.5</green>
<blue>0.5</blue>
<alpha>1</alpha>
</color>
</text>
<group>
<layout>hbox</layout>
<empty>
<pref-width>10</pref-width>
</empty>
<group>
<layout>vbox</layout>
<radio>
<halign>left</halign>
<label>Formate</label>
<property>/sim/ai/models/wingman/controls/formate-to-ac</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/sim/ai/models/wingman/controls/formate-to-ac");
setprop("/sim/ai/models/wingman/controls/break",0);
setprop("/sim/ai/models/wingman/controls/join",0);
foreach (var c; props.globals.getNode("/ai/models").getChildren("wingman")){
c.getNode("controls/formate-to-ac").setBoolValue(v);
c.getNode("controls/break").setBoolValue(0);
c.getNode("controls/join").setBoolValue(0);
}
</script>
</binding>
</radio>
<radio>
<halign>left</halign>
<label>Break Formation</label>
<property>/sim/ai/models/wingman/controls/break</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/sim/ai/models/wingman/controls/break");
setprop("/sim/ai/models/wingman/controls/formate-to-ac",0);
setprop("/sim/ai/models/wingman/controls/join",0);
foreach (var c; props.globals.getNode("/ai/models").getChildren("wingman")){
c.getNode("controls/break").setBoolValue(v);
c.getNode("controls/formate-to-ac").setBoolValue(0);
c.getNode("controls/join").setBoolValue(0);
}
</script>
</binding>
</radio>
<radio>
<halign>left</halign>
<label>Join</label>
<property>/sim/ai/models/wingman/controls/join</property>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/sim/ai/models/wingman/controls/join");
setprop("/sim/ai/models/wingman/controls/formate-to-ac",0);
setprop("/sim/ai/models/wingman/controls/break",0);
foreach (var c; props.globals.getNode("/ai/models").getChildren("wingman")){
c.getNode("controls/join").setBoolValue(v);
c.getNode("controls/break").setBoolValue(0);
c.getNode("controls/formate-to-ac").setBoolValue(0);
}
</script>
</binding>
</radio>
</group>
<group>
<layout>vbox</layout>
<text>
<halign>left</halign>
<label>Break Heading Degrees Relative</label>
</text>
<text>
<label>Left/Right</label>
</text>
<group>
<layout>hbox</layout>
<text>
<halign>left</halign>
<label>-180</label>
</text>
<slider>
<width>75</width>
<height>25</height>
<min>-180</min>
<max>180</max>
<property>/ai/models/wingman/controls/break-deg-rel</property>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
var v = getprop("/ai/models/wingman/controls/break-deg-rel");
foreach (var c; props.globals.getNode("/ai/models").getChildren("wingman")){
print("FFF ", v, " ", c.getNode("name").getValue());
c.getNode("controls/break-deg-rel",1).setDoubleValue(v);
}
</script>
</binding>
</slider>
<text>
<halign>left</halign>
<label>180</label>
</text>
</group>
<text>
<label>-100.00</label>
<format>%-0.1f deg</format>
<live>true</live>
<property>/ai/models/wingman/controls/break-deg-rel</property>
</text>
</group>
</group>
<group>
<layout>hbox</layout>
<text>
<halign>left</halign>
<label>Target Heading Degrees True</label>
</text>
<text>
<halign>left</halign>
<label>-100.00</label>
<format>%-0.1f deg</format>
<live>true</live>
<property>/ai/models/wingman/controls/tgt-heading-deg</property>
</text>
</group>
<empty>
<stretch>true</stretch>
</empty>
<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>

View file

@ -4,7 +4,7 @@
<name>radios</name>
<width>600</width>
<height>330</height>
<height>370</height>
<modal>false</modal>
<text>
@ -505,5 +505,15 @@
</button>
</group>
<group>
<x>400</x>
<y>60</y>
<button>
<legend>ATC Services in range</legend>
<binding>
<command>ATC-freq-search</command>
</binding>
</button>
</group>
</PropertyList>

View file

@ -2,8 +2,7 @@
<PropertyList>
<!-- Control the weather -->
<name>osg-display-settings</name>
<name>stereoscopic-view-options</name>
<modal>false</modal>
<resizable>false</resizable>
<layout>vbox</layout>
@ -18,7 +17,7 @@
</empty>
<text>
<label>OSG Display Settings (experimental)</label>
<label>Stereoscopic View Options</label>
</text>
<empty>
@ -71,7 +70,7 @@
<empty><stretch>true</stretch></empty>
<slider>
<min>0</min>
<max>1.0</max>
<max>10.0</max>
<property>/sim/rendering/osg-displaysettings/screen-distance</property>
<binding>
<command>dialog-apply</command>
@ -106,77 +105,4 @@
</text>
</group>
<group>
<layout>hbox</layout>
<default-padding>1</default-padding>
<text><label>Double Buffer</label></text>
<empty><stretch>true</stretch></empty>
<checkbox>
<live>true</live>
<property>/sim/rendering/osg-displaysettings/double-buffer</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
</group>
<group>
<layout>hbox</layout>
<default-padding>1</default-padding>
<text><label>Depth Buffer</label></text>
<empty><stretch>true</stretch></empty>
<checkbox>
<live>true</live>
<property>/sim/rendering/osg-displaysettings/depth-buffer</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
</group>
<group>
<layout>hbox</layout>
<default-padding>1</default-padding>
<text><label>RGB</label></text>
<empty><stretch>true</stretch></empty>
<checkbox>
<live>true</live>
<property>/sim/rendering/osg-displaysettings/rgb</property>
<binding>
<command>dialog-apply</command>
</binding>
</checkbox>
</group>
<group>
<layout>hbox</layout>
<default-padding>1</default-padding>
<text><label>Screen Width</label></text>
<empty><stretch>true</stretch></empty>
<input>
<width>100</width>
<height>25</height>
<live>true</live>
<property>/sim/rendering/osg-displaysettings/screen-width</property>
<binding>
<command>dialog-apply</command>
</binding>
</input>
</group>
<group>
<layout>hbox</layout>
<default-padding>1</default-padding>
<text><label>Screen Height</label></text>
<empty><stretch>true</stretch></empty>
<input>
<width>100</width>
<height>25</height>
<live>true</live>
<property>/sim/rendering/osg-displaysettings/screen-height</property>
<binding>
<command>dialog-apply</command>
</binding>
</input>
</group>
</PropertyList>

View file

@ -6,7 +6,7 @@
<layout>vbox</layout>
<text>
<label>Configure Active Views</label>
<label>Choose Active Views</label>
</text>
<hrule/>

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,11 @@
<?xml version="1.0"?>
<PropertyList>
<menu>
<label>File</label>
<!--
<item>
<label>Load</label>
<label>Load Flight (Shift-F1)</label>
<binding>
<command>nasal</command>
<script>gui.load_flight()</script>
@ -12,33 +13,51 @@
</item>
<item>
<label>Save</label>
<label>Save Flight (Shift-F2)</label>
<binding>
<command>nasal</command>
<script>gui.save_flight()</script>
</binding>
</item>
<item>
<label>Reset</label>
<label>Scenario</label>
<binding>
<command>dialog-show</command>
<dialog-name>scenario</dialog-name>
</binding>
</item>
-->
<item>
<label>Reset (Shift-Esc)</label>
<binding>
<command>reset</command>
</binding>
</item>
<item>
<!-- <item>
<label>Set Lat/Lon Format</label>
<binding>
<command>nasal</command>
<script>
var f = getprop(var d = "/sim/lon-lat-format") + 1;
setprop(d, f &lt; 0 ? 0 : f > 2 ? 0 : f);
</script>
</binding>
</item>
<label>High-Res Snapshot</label>
<enabled>false</enabled>
<binding>
<command>hires-screen-capture</command>
</binding>
</item>
-->
<item>
<label>Snapshot</label>
<label>Screenshot (F3)</label>
<binding>
<command>nasal</command>
<script>
gui.popdown();
var success = fgcommand("screen-capture");
var path = getprop("/sim/paths/screenshot-last");
if (success)
@ -48,14 +67,27 @@
</script>
</binding>
</item>
<!--
<item>
<label>Last snapshot</label>
<binding>
<command>nasal</command>
<script>
var path = getprop("/sim/paths/screenshot-last");
if (path != nil) gui.popupTip(...) else gui.popupTip("no screenshots yet in this session")
gui.popupTip("Screenshot written to '" ~ path ~ "'");
</script>
</binding>
</item>
<item>
<label>Print Screen</label>
<label>Print Screen (F3)</label>
<binding>
<command>old-print-dialog</command>
</binding>
</item>
-->
<item>
<label>Sound Configuration</label>
<binding>
@ -65,23 +97,7 @@
</item>
<item>
<label>Browse Internal Properties</label>
<binding>
<command>nasal</command>
<script>gui.property_browser()</script>
</binding>
</item>
<item>
<label>Logging</label>
<binding>
<command>dialog-show</command>
<dialog-name>logging</dialog-name>
</binding>
</item>
<item>
<label>Quit</label>
<label>Quit (Esc)</label>
<binding>
<command>dialog-show</command>
<dialog-name>exit</dialog-name>
@ -109,6 +125,16 @@
</item>
<item>
<!-- <item>
<label>Set Lat/Lon Format</label>
<binding>
<command>nasal</command>
<script>
var f = getprop(var d = "/sim/lon-lat-format") + 1;
setprop(d, f &lt; 0 ? 0 : f > 2 ? 0 : f);
</script>
</binding>
</item> -->
<label>View Options</label>
<binding>
<command>dialog-show</command>
@ -124,6 +150,14 @@
</binding>
</item>
<item>
<label>Adjust LOD Ranges</label>
<binding>
<command>dialog-show</command>
<dialog-name>static-lod</dialog-name>
</binding>
</item>
<item>
<label>Adjust View Position</label>
<binding>
@ -141,7 +175,19 @@
</item>
<item>
<label>Instant Replay</label>
<label>Toggle Glide Slope Tunnel</label>
<binding>
<command>nasal</command>
<script>
var p = "/sim/rendering/glide-slope-tunnel";
setprop(p, var i = !getprop(p));
gui.popupTip("Glide slope tunnel " ~ (i ? "enabled" : "disabled"));
</script>
</binding>
</item>
<item>
<label>Instant Replay (Ctrl-R)</label>
<binding>
<command>dialog-show</command>
<dialog-name>replay</dialog-name>
@ -149,18 +195,10 @@
</item>
<item>
<label>Adjust LOD Ranges</label>
<label>Stereoscopic View Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>static-lod</dialog-name>
</binding>
</item>
<item>
<label>OSG Display Settings</label>
<binding>
<command>dialog-show</command>
<dialog-name>osg-display-settings</dialog-name>
<dialog-name>stereoscopic-view-options</dialog-name>
</binding>
</item>
</menu>
@ -193,7 +231,7 @@
</item>
<item>
<label>Random Attitude</label>
<label>Random Attitude</label>H
<binding>
<command>property-assign</command>
<property>/sim/presets/trim</property>
@ -234,7 +272,7 @@
<name>autopilot</name>
<item>
<label>Autopilot Settings</label>
<label>Autopilot Settings (F11)</label>
<binding>
<command>dialog-show</command>
<dialog-name>autopilot</dialog-name>
@ -249,45 +287,42 @@
</binding>
</item>
<item>
<item>
<label>Previous Waypoint</label>
<binding>
<command>nasal</command>
<script>setprop("/autopilot/route-manager/input", "@previous")</script>
</binding>
</item>
<item>
<item>
<label>Next Waypoint</label>
<binding>
<command>nasal</command>
<script>setprop("/autopilot/route-manager/input", "@next")</script>
</binding>
</item>
<item>
<label>Set Lat/Lon Format</label>
<binding>
<command>nasal</command>
<script>
var f = getprop(var d = "/sim/lon-lat-format") + 1;
setprop(d, f &lt; 0 ? 0 : f > 2 ? 0 : f);
</script>
</binding>
</item>
<item>
<label>Map</label>
<binding>
<command>dialog-show</command>
<dialog-name>map</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Environment</label>
<!--<item>
<label>Weather Scenario</label>
<binding>
<command>dialog-show</command>
<dialog-name>weather_scenario</dialog-name>
</binding>
</item>
<item>
<label>Weather Conditions</label>
<binding>
<command>dialog-show</command>
<dialog-name>weather</dialog-name>
</binding>
</item>-->
<item>
<label>Global Weather</label>
<binding>
@ -296,23 +331,31 @@
</binding>
</item>
<item>
<label>Local Weather</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather</dialog-name>
</binding>
</item>
<item>
<label>Local Weather Tiles</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather_tiles</dialog-name>
</binding>
</item>
<item>
<item>
<label>Local Weather</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather</dialog-name>
</binding>
</item>
<item>
<label>Local Weather Tiles</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather_tiles</dialog-name>
</binding>
</item>
<item>
<label>Local Weather Config</label>
<binding>
<command>dialog-show</command>
<dialog-name>local_weather_config</dialog-name>
</binding>
</item>
<item>
<label>Time Settings</label>
<binding>
<command>dialog-show</command>
@ -333,6 +376,22 @@
<menu>
<label>Equipment</label>
<item>
<label>Map</label>
<binding>
<command>dialog-show</command>
<dialog-name>map</dialog-name>
</binding>
</item>
<item>
<label>Stopwatch</label>
<binding>
<command>dialog-show</command>
<dialog-name>stopwatch-dialog</dialog-name>
</binding>
</item>
<item>
<label>Fuel and Payload</label>
<name>fuel-and-payload</name>
@ -343,7 +402,7 @@
</item>
<item>
<label>Radio Settings</label>
<label>Radio Settings (F12)</label>
<binding>
<command>dialog-show</command>
<dialog-name>radios</dialog-name>
@ -366,12 +425,10 @@
</binding>
</item>
<item>
<label>Stopwatch</label>
<binding>
<command>dialog-show</command>
<dialog-name>stopwatch-dialog</dialog-name>
</binding>
<label> --- Failures ---</label>
</item>
<item>
@ -401,24 +458,32 @@
<menu>
<label>ATC/AI</label>
<item>
<label>Frequencies</label>
<label>ATC Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>ai</dialog-name>
</binding>
</item>
<!-- Not working at present
<item>
<label>ATC Services in range</label>
<binding>
<command>ATC-freq-search</command>
</binding>
</item>
-->
<item>
<label>Options</label>
<label>AI Formation</label>
<binding>
<command>dialog-show</command>
<dialog-name>atc-ai</dialog-name>
<dialog-name>formation</dialog-name>
</binding>
</item>
<item>
<label>Tanker</label>
<label>AI Tanker</label>
<name>tanker</name>
<enabled>false</enabled>
<binding>
@ -428,20 +493,31 @@
</item>
<item>
<label>Scenario</label>
<label>AI Carrier Options</label>
<binding>
<command>dialog-show</command>
<dialog-name>AIcarrier</dialog-name>
</binding>
</item>
<item>
<label>AI Scenario Select - takes effect on next run </label>
<binding>
<command>dialog-show</command>
<dialog-name>scenario</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Network</label>
<label>Multiplayer</label>
<name>multiplayer</name>
<item>
<label>Chat</label>
<label>Chat Dialog</label>
<binding>
<command>dialog-show</command>
<dialog-name>chat-full</dialog-name>
@ -470,13 +546,15 @@
<command>nasal</command>
<script>
if (contains(globals, "MPCarriers")) {
MPCarriers.carrier_dialog.show();
MPCarriers.carrier_dialog.show();
} else {
gui.popupTip("No MPCarriers around at the moment.");
gui.popupTip("No MPCarriers around at the moment.");
}
</script>
</binding>
</item>
</menu>
<menu>
@ -513,13 +591,13 @@
</binding>
</item>
<item>
<label>Reload Network</label>
<binding>
<command>reinit</command>
<subsystem>io</subsystem>
</binding>
</item>
<item>
<label>Reload Network</label>
<binding>
<command>reinit</command>
<subsystem>io</subsystem>
</binding>
</item>
<item>
<label>Nasal Console</label>
@ -577,20 +655,32 @@
<step type="int">1</step>
</binding>
</item>
<item>
<label>Browse Internal Properties</label>
<binding>
<command>nasal</command>
<script>gui.property_browser()</script>
</binding>
</item>
<item>
<label>Logging</label>
<binding>
<command>dialog-show</command>
<dialog-name>logging</dialog-name>
</binding>
</item>
</menu>
<menu>
<label>Help</label>
<item>
<label>About</label>
<binding>
<command>dialog-show</command>
<dialog-name>about</dialog-name>
</binding>
</item>
<item>
<label>Help</label>
<label>Help (opens in browser)</label>
<binding>
<command>old-help-dialog</command>
</binding>
@ -606,7 +696,11 @@
</item>
<item>
<label>Basic Keys</label>
<label> --- Key Reference ---</label>
</item>
<item>
<label>Basic Simulator Keys</label>
<binding>
<command>nasal</command>
<script>gui.showHelpDialog("/sim/help/basic")</script>
@ -622,7 +716,7 @@
</item>
<item>
<label>Aircraft Help</label>
<label> Current Aircraft Keys (?)</label>
<binding>
<command>nasal</command>
<script>gui.showHelpDialog("/sim/help")</script>
@ -630,15 +724,7 @@
</item>
<item>
<label>Toggle Glide Slope Tunnel</label>
<binding>
<command>nasal</command>
<script>
var p = "/sim/rendering/glide-slope-tunnel";
setprop(p, var i = !getprop(p));
gui.popupTip("Glide slope tunnel " ~ (i ? "enabled" : "disabled"));
</script>
</binding>
<label> ---------------------</label>
</item>
<item>
@ -659,6 +745,14 @@
<script>tutorial.stopTutorial()</script>
</binding>
</item>
<item>
<label>About</label>
<binding>
<command>dialog-show</command>
<dialog-name>about</dialog-name>
</binding>
</item>
</menu>
</PropertyList>

View file

@ -272,7 +272,7 @@ top down before the key bindings are parsed.
<key n="32">
<name>SPACE</name>
<desc>PTT - Push To Talk (via VoIP)</desc>
<desc>PTT - Push To Talk (via FGCom)</desc>
<binding>
<command>nasal</command>
<script>space(1, modifiers.getValue())</script>

View file

@ -148,6 +148,7 @@ Started September 2000 by David Megginson, david@megginson.com
</headshake>
<crop-shader userarchive="y">0</crop-shader>
<landmass-shader userarchive="y">0</landmass-shader>
<transition-shader userarchive="y">0</transition-shader>
<water-shader userarchive="y">0</water-shader>
<urban-shader userarchive="y">0</urban-shader>
<contrail-shader userarchive="y">0</contrail-shader>
@ -290,6 +291,14 @@ Started September 2000 by David Megginson, david@megginson.com
<autopilot>
<path>Aircraft/Generic/generic-autopilot-helper.xml</path>
</autopilot>
<property-rule>
<name>Environment METAR Interpolation Rule</name>
<path>Environment/metarinterpolator.xml</path>
</property-rule>
<property-rule>
<name>Environment Interpolation Rule</name>
<path>Environment/interpolator.xml</path>
</property-rule>
</systems>
<instrumentation>
<path>Aircraft/Generic/generic-instrumentation.xml</path>