1
0
Fork 0

Merge branch 'master' of \New Git\fgdata

This commit is contained in:
Vivian Meazza 2011-01-22 15:37:45 +00:00
commit 2812dab8a8
55 changed files with 15738 additions and 353 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 746 KiB

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 KiB

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 KiB

After

Width:  |  Height:  |  Size: 448 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 KiB

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 743 KiB

After

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -152,7 +152,10 @@ var update_loop = func {
setprop("/consumables/fuel/total-fuel-gals", gals);
setprop("/consumables/fuel/total-fuel-lbs", lbs);
setprop("/consumables/fuel/total-fuel-norm", gals / cap);
if (cap == 0)
setprop("/consumables/fuel/total-fuel-norm", 0);
else
setprop("/consumables/fuel/total-fuel-norm", gals / cap);
foreach (var e; engines)
e.getNode("out-of-fuel", 1).setBoolValue(out_of_fuel);

View file

@ -0,0 +1,52 @@
## Control Display Unit (CDU) for FlightGear Flight Simulator
# AUTHORS
Gijs de Rooy - Nasal and XML
Syd Adams - Boeing model and texture
# WIKI
The FlightGear wiki hosts additional information: http://wiki.flightgear.org/index.php/Control_Display_Unit
# IMPLEMENTATION
Add the following tags below the </sim> tag of your aircraft's -set.xml file.
<instrumentation>
...
<cdu>
<config>
<texture>boeing_brown.png</texture>
</config>
<display>IDENT</display>
<ident>
<model>747-400</model>
<engines>-80C2B1F</engines>
</ident>
<input type="string"/>
<serviceable>true</serviceable>
</cdu>
...
</instrumentation>
Each single CDU unit must be set in your aircraft's model .xml file, like:
<model>
<path>Aircraft/Instruments-3d/cdu/boeing.xml</path>
<offsets>
<x-m> 0.858</x-m>
<y-m> 0.186</y-m>
<z-m> 0.489</z-m>
<pitch-deg>-75</pitch-deg>
</offsets>
<overlay>
<texture>boeing_brown.png</texture>
</overlay>
</model>
Currently there are two textures to choose from:
- boeing_brown.png
- boeing_grey.png

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,362 @@
var input = func(v) {
setprop("/instrumentation/cdu/input",getprop("/instrumentation/cdu/input")~v);
}
var delete = func {
var length = size(getprop("/instrumentation/cdu/input")) - 1;
setprop("/instrumentation/cdu/input",substr(getprop("/instrumentation/cdu/input"),0,length));
}
var i = 0;
var plusminus = func {
var end = size(getprop("/instrumentation/cdu/input"));
var start = end - 1;
var lastchar = substr(getprop("/instrumentation/cdu/input"),start,end);
if (lastchar == "+"){
me.delete();
me.input('-');
}
if (lastchar == "-"){
me.delete();
me.input('+');
}
if ((lastchar != "-") and (lastchar != "+")){
me.input('+');
}
}
var cdu = func{
var display = getprop("/instrumentation/cdu/display");
var serviceable = getprop("/instrumentation/cdu/serviceable");
title = ""; page = "";
line1l = ""; line2l = ""; line3l = ""; line4l = ""; line5l = ""; line6l = "";
line1lt = ""; line2lt = ""; line3lt = ""; line4lt = ""; line5lt = ""; line6lt = "";
line1c = ""; line2c = ""; line3c = ""; line4c = ""; line5c = ""; line6c = "";
line1ct = ""; line2ct = ""; line3ct = ""; line4ct = ""; line5ct = ""; line6ct = "";
line1r = ""; line2r = ""; line3r = ""; line4r = ""; line5r = ""; line6r = "";
line1rt = ""; line2rt = ""; line3rt = ""; line4rt = ""; line5rt = ""; line6rt = "";
if (display == "MENU") {
title = "MENU";
line1l = "<FMC";
line1r = "SELECT>";
line2l = "<ACARS";
line2r = "SELECT>";
line6l = "<ACMS";
line6r = "CMC>";
}
if (display == "ALTN_NAV_RAD") {
title = "ALTN NAV RADIO";
}
if (display == "APP_REF") {
title = "APPROACH REF";
line1lt = "GROSS WT";
line1rt = "FLAPS VREF";
line1l = getprop("/instrumentation/fmc/vspeeds/Vref");
line4lt = getprop("/autopilot/route-manager/destination/airport");
line6l = "<INDEX";
line6r = "THRUST LIM>";
}
if (display == "DEP_ARR_INDEX") {
title = "DEP/ARR INDEX";
line1l = "<DEP";
line1ct = "RTE 1";
line1c = getprop("/autopilot/route-manager/departure/airport");
line1r = "ARR>";
line2c = getprop("/autopilot/route-manager/destination/airport");
line2r = "ARR>";
line3l = "<DEP";
line3r = "ARR>";
line4r = "ARR>";
line6lt ="DEP";
line6l = "<----";
line6c = "OTHER";
line6rt ="ARR";
line6r = "---->";
}
if (display == "EICAS_MODES") {
title = "EICAS MODES";
line1l = "<ENG";
line1r = "FUEL>";
line2l = "<STAT";
line2r = "GEAR>";
line5l = "<CANC";
line5r = "RCL>";
line6r = "SYNOPTICS>";
}
if (display == "EICAS_SYN") {
title = "EICAS SYNOPTICS";
line1l = "<ELEC";
line1r = "HYD>";
line2l = "<ECS";
line2r = "DOORS>";
line5l = "<CANC";
line5r = "RCL>";
line6r = "MODES>";
}
if (display == "FIX_INFO") {
title = "FIX INFO";
line1l = sprintf("%3.2f", getprop("/instrumentation/nav[0]/frequencies/selected-mhz-fmt"));
line1r = sprintf("%3.2f", getprop("/instrumentation/nav[1]/frequencies/selected-mhz-fmt"));
line2l = sprintf("%3.2f", getprop("/instrumentation/nav[0]/radials/selected-deg"));
line2r = sprintf("%3.2f", getprop("/instrumentation/nav[1]/radials/selected-deg"));
line6l = "<ERASE FIX";
}
if (display == "IDENT") {
title = "IDENT";
line1lt = "MODEL";
line1l = getprop("/instrumentation/cdu/ident/model");
line1rt = "ENGINES";
line2lt = "NAV DATA";
line1r = getprop("/instrumentation/cdu/ident/engines");
line6l = "<INDEX";
line6r = "POS INIT>";
}
if (display == "INIT_REF") {
title = "INIT/REF INDEX";
line1l = "<IDENT";
line1r = "NAV DATA>";
line2l = "<POS";
line3l = "<PERF";
line4l = "<THRUST LIM";
line5l = "<TAKEOFF";
line6l = "<APPROACH";
line6r = "MAINT>";
}
if (display == "NAV_RAD") {
title = "NAV RADIO";
line1lt = "VOR L";
line1l = sprintf("%3.2f", getprop("/instrumentation/nav[0]/frequencies/selected-mhz-fmt"));
line1rt = "VOR R";
line1r = sprintf("%3.2f", getprop("/instrumentation/nav[1]/frequencies/selected-mhz-fmt"));
line2lt = "CRS";
line2ct = "RADIAL";
line2c = sprintf("%3.2f", getprop("/instrumentation/nav[0]/radials/selected-deg"))~" "~sprintf("%3.2f", getprop("/instrumentation/nav[1]/radials/selected-deg"));
line2rt = "CRS";
line3lt = "ADF L";
line3l = sprintf("%3.2f", getprop("/instrumentation/adf[0]/frequencies/selected-khz"));
line3rt = "ADF R";
}
if (display == "PERF_INIT") {
title = "PERF INIT";
line1lt = "GR WT";
line1rt = "CRZ ALT";
line1r = getprop("/autopilot/route-manager/cruise/altitude-ft");
line2lt = "FUEL";
line3lt = "ZFW";
line4lt = "RESERVES";
line4rt = "CRZ CG";
line5lt = "COST INDEX";
line5rt = "STEP SIZE";
line6l = "<INDEX";
line6r = "THRUST LIM>";
if (getprop("/sim/flight-model") == "jsb") {
line1l = sprintf("%3.1f", (getprop("/fdm/jsbsim/inertia/weight-lbs")/1000));
line2l = sprintf("%3.1f", (getprop("/fdm/jsbsim/propulsion/total-fuel-lbs")/1000));
line3l = sprintf("%3.1f", (getprop("/fdm/jsbsim/inertia/empty-weight-lbs")/1000));
}
elsif (getprop("/sim/flight-model") == "yasim") {
line1l = sprintf("%3.1f", (getprop("/yasim/gross-weight-lbs")/1000));
line2l = sprintf("%3.1f", (getprop("/consumables/fuel/total-fuel-lbs")/1000));
yasim_emptyweight = getprop("/yasim/gross-weight-lbs");
yasim_emptyweight -= getprop("/consumables/fuel/total-fuel-lbs");
yasim_weights = props.globals.getNode("/sim").getChildren("weight");
for (i = 0; i < size(yasim_weights); i += 1) {
yasim_emptyweight -= yasim_weights[i].getChild("weight-lb").getValue();
}
line3l = sprintf("%3.1f", yasim_emptyweight/1000);
}
}
if (display == "POS_INIT") {
title = "POS INIT";
line6l = "<INDEX";
line6r = "ROUTE>";
}
if (display == "POS_REF") {
title = "POS REF";
line1lt = "FMC POST";
line1l = getprop("/position/latitude-string")~" "~getprop("/position/longitude-string");
line1rt = "GS";
line1r = sprintf("%3.0f", getprop("/velocities/groundspeed-kt"));
line5l = "<PURGE";
line5r = "INHIBIT>";
line6l = "<INDEX";
line6r = "BRG/DIST>";
}
if (display == "RTE1_1") {
title = "RTE 1";
page = "1/2";
line1lt = "ORIGIN";
line1l = getprop("/autopilot/route-manager/departure/airport");
line1rt = "DEST";
line1r = getprop("/autopilot/route-manager/destination/airport");
line2lt = "RUNWAY";
line2l = getprop("/autopilot/route-manager/departure/runway");
line2rt = "FLT NO";
line3rt = "CO ROUTE";
line5l = "<RTE COPY";
line6l = "<RTE 2";
if (getprop("/autopilot/route-manager/active") == 1){
line6r = "ACTIVATE>";
}
else {
line6r = "PERF INIT>";
}
}
if (display == "RTE1_2") {
title = "RTE 1";
page = "2/2";
line1lt = "VIA";
line1rt = "TO";
if (getprop("/autopilot/route-manager/route/wp[1]/id") != nil){
line1r = getprop("/autopilot/route-manager/route/wp[1]/id");
}
if (getprop("/autopilot/route-manager/route/wp[2]/id") != nil){
line2r = getprop("/autopilot/route-manager/route/wp[2]/id");
}
if (getprop("/autopilot/route-manager/route/wp[3]/id") != nil){
line3r = getprop("/autopilot/route-manager/route/wp[3]/id");
}
if (getprop("/autopilot/route-manager/route/wp[4]/id") != nil){
line4r = getprop("/autopilot/route-manager/route/wp[4]/id");
}
if (getprop("/autopilot/route-manager/route/wp[5]/id") != nil){
line5r = getprop("/autopilot/route-manager/route/wp[5]/id");
}
line6l = "<RTE 2";
line6r = "ACTIVATE>";
}
if (display == "RTE1_ARR") {
title = getprop("/autopilot/route-manager/destination/airport")~" ARRIVALS";
line1lt = "STARS";
line1rt = "APPROACHES";
line1r = getprop("/autopilot/route-manager/destination/runway");
line2lt = "TRANS";
line3rt = "RUNWAYS";
line6l = "<INDEX";
line6r = "ROUTE>";
}
if (display == "RTE1_DEP") {
title = getprop("/autopilot/route-manager/departure/airport")~" DEPARTURES";
line1lt = "SIDS";
line1rt = "RUNWAYS";
line1r = getprop("/autopilot/route-manager/departure/runway");
line2lt = "TRANS";
line6l = "<ERASE";
line6r = "ROUTE>";
}
if (display == "RTE1_LEGS") {
if (getprop("/autopilot/route-manager/active") == 1){
title = "ACT RTE 1 LEGS";
}
else {
title = "RTE 1 LEGS";
}
if (getprop("/autopilot/route-manager/route/wp[1]/id") != nil){
line1l = getprop("/autopilot/route-manager/route/wp[1]/id");
}
if (getprop("/autopilot/route-manager/route/wp[2]/id") != nil){
line2l = getprop("/autopilot/route-manager/route/wp[2]/id");
}
if (getprop("/autopilot/route-manager/route/wp[3]/id") != nil){
line3l = getprop("/autopilot/route-manager/route/wp[3]/id");
}
if (getprop("/autopilot/route-manager/route/wp[4]/id") != nil){
line4l = getprop("/autopilot/route-manager/route/wp[4]/id");
}
if (getprop("/autopilot/route-manager/route/wp[5]/id") != nil){
line5l = getprop("/autopilot/route-manager/route/wp[5]/id");
}
line6l = "<RTE 2 LEGS";
line6r = "RTE DATA>";
}
if (display == "THR_LIM") {
title = "THRUST LIM";
line1lt = "SEL";
line1ct = "OAT";
line1c = sprintf("%2.0f", getprop("/environment/temperature-degc"))~" °C";
line1rt = "TO 1 N1";
line2l = "<TO";
line2r = "CLB>";
line3lt = "TO 1";
line3c = "<SEL> <ARM>";
line3r = "CLB 1>";
line4lt = "TO 2";
line4r = "CLB 2>";
line6l = "<INDEX";
line6r = "TAKEOFF>";
}
if (display == "TO_REF") {
title = "TAKEOFF REF";
line1lt = "FLAP/ACCEL HT";
line1l = getprop("/instrumentation/fmc/to-flap");
line1rt = "REF V1";
line1r = sprintf("%3.0f", getprop("/instrumentation/fmc/vspeeds/V1"));
line2lt = "E/O ACCEL HT";
line2rt = "REF VR";
line2r = sprintf("%3.0f", getprop("/instrumentation/fmc/vspeeds/VR"));
line3lt = "THR REDUCTION";
line3rt = "REF V2";
line3r = sprintf("%3.0f", getprop("/instrumentation/fmc/vspeeds/V2"));
line4lt = "WIND/SLOPE";
line4rt = "TRIM CG";
line5rt = "POS SHIFT";
line6l = "<INDEX";
line6r = "POS INIT>";
}
if (serviceable != 1){
title = ""; page = "";
line1l = ""; line2l = ""; line3l = ""; line4l = ""; line5l = ""; line6l = "";
line1lt = ""; line2lt = ""; line3lt = ""; line4lt = ""; line5lt = ""; line6lt = "";
line1c = ""; line2c = ""; line3c = ""; line4c = ""; line5c = ""; line6c = "";
line1ct = ""; line2ct = ""; line3ct = ""; line4ct = ""; line5ct = ""; line6ct = "";
line1r = ""; line2r = ""; line3r = ""; line4r = ""; line5r = ""; line6r = "";
line1rt = ""; line2rt = ""; line3rt = ""; line4rt = ""; line5rt = ""; line6rt = "";
}
setprop("/instrumentation/cdu/output/title",title);
setprop("/instrumentation/cdu/output/page",page);
setprop("/instrumentation/cdu/output/line1/left",line1l);
setprop("/instrumentation/cdu/output/line2/left",line2l);
setprop("/instrumentation/cdu/output/line3/left",line3l);
setprop("/instrumentation/cdu/output/line4/left",line4l);
setprop("/instrumentation/cdu/output/line5/left",line5l);
setprop("/instrumentation/cdu/output/line6/left",line6l);
setprop("/instrumentation/cdu/output/line1/left-title",line1lt);
setprop("/instrumentation/cdu/output/line2/left-title",line2lt);
setprop("/instrumentation/cdu/output/line3/left-title",line3lt);
setprop("/instrumentation/cdu/output/line4/left-title",line4lt);
setprop("/instrumentation/cdu/output/line5/left-title",line5lt);
setprop("/instrumentation/cdu/output/line6/left-title",line6lt);
setprop("/instrumentation/cdu/output/line1/center",line1c);
setprop("/instrumentation/cdu/output/line2/center",line2c);
setprop("/instrumentation/cdu/output/line3/center",line3c);
setprop("/instrumentation/cdu/output/line4/center",line4c);
setprop("/instrumentation/cdu/output/line5/center",line5c);
setprop("/instrumentation/cdu/output/line6/center",line6c);
setprop("/instrumentation/cdu/output/line1/center-title",line1ct);
setprop("/instrumentation/cdu/output/line2/center-title",line2ct);
setprop("/instrumentation/cdu/output/line3/center-title",line3ct);
setprop("/instrumentation/cdu/output/line4/center-title",line4ct);
setprop("/instrumentation/cdu/output/line5/center-title",line5ct);
setprop("/instrumentation/cdu/output/line6/center-title",line6ct);
setprop("/instrumentation/cdu/output/line1/right",line1r);
setprop("/instrumentation/cdu/output/line2/right",line2r);
setprop("/instrumentation/cdu/output/line3/right",line3r);
setprop("/instrumentation/cdu/output/line4/right",line4r);
setprop("/instrumentation/cdu/output/line5/right",line5r);
setprop("/instrumentation/cdu/output/line6/right",line6r);
setprop("/instrumentation/cdu/output/line1/right-title",line1rt);
setprop("/instrumentation/cdu/output/line2/right-title",line2rt);
setprop("/instrumentation/cdu/output/line3/right-title",line3rt);
setprop("/instrumentation/cdu/output/line4/right-title",line4rt);
setprop("/instrumentation/cdu/output/line5/right-title",line5rt);
setprop("/instrumentation/cdu/output/line6/right-title",line6rt);
settimer(cdu,0.2);
}
_setlistener("/sim/signals/fdm-initialized", cdu);

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -0,0 +1,58 @@
<!-- $Id: display-text.xml,v 1.2 2009/11/02 16:31:26 vmmeazza Exp $ -->
<!--
Zeppelin NT07 airship.
Copyright (C) 2009 Anders Gidenstam (anders(at)gidenstam.org)
This file is licensed under the GPL license v2 or later.
-->
<PropertyList>
<params>
<property type="string">engines/engine[0]/mp-inhg</property>
<factor type="double">1.0</factor>
<offset type="double">0.0</offset>
<format type="string">%2.1f</format>
<color>
<red type="double">0.0</red>
<green type="double">1.0</green>
<blue type="double">0.0</blue>
</color>
</params>
<text>
<name>text</name>
<axis-alignment>yz-plane</axis-alignment>
<type type="string">text-value</type>
<property alias="../../params/property"/>
<scale alias="../../params/factor"/>
<offset alias="../../params/offset"/>
<format>%s</format>
<truncate type="bool">false</truncate>
<font type="string">Helvetica.txf</font>
<draw-text type="bool">true</draw-text>
<draw-alignment type="bool">false</draw-alignment>
<draw-boundingbox type="bool">false</draw-boundingbox>
<alignment alias="../../params/alignment"/>
<character-size alias="../../params/character-size"/>
</text>
<animation>
<type>material</type>
<diffuse>
<red alias="../../../params/color/red"/>
<green alias="../../../params/color/green"/>
<blue alias="../../../params/color/blue"/>
</diffuse>
<ambient>
<red alias="../../../params/color/red"/>
<green alias="../../../params/color/green"/>
<blue alias="../../../params/color/blue"/>
</ambient>
<emission>
<red alias="../../../params/color/red"/>
<green alias="../../../params/color/green"/>
<blue alias="../../../params/color/blue"/>
</emission>
</animation>
</PropertyList>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -1,23 +1,22 @@
AC3Db
MATERIAL "ac3dmat1" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 128 trans 0
MATERIAL "ac3dmat13" rgb 0.533 0.533 0.533 amb 0.533 0.533 0.533 emis 0 0 0 spec 0 0 0 shi 128 trans 0
MATERIAL "ac3dmat1" rgb 1 1 1 amb 0.745 0.745 0.745 emis 0 0 0 spec 0 0 0 shi 10 trans 0
MATERIAL "ac3dmat6" rgb 0 1 0 amb 0.2 0.2 0.2 emis 0 0 0 spec 0 0 0 shi 10 trans 1
OBJECT world
kids 7
OBJECT poly
name "magsw"
loc 0.000157679 -0.000165235 -7.60364e-005
loc 0.000157679 -0.000165235 -7.60364e-05
texture "mag_switch.png"
crease 45.000000
numvert 4
0 0.0249262 -0.0224353
-3.72529e-009 0.0249262 0.0254597
-3.72529e-09 0.0249262 0.0254597
0 -0.0229099 0.0254597
3.72529e-009 -0.0229099 -0.0224353
3.72529e-09 -0.0229099 -0.0224353
numsurf 1
SURF 0x20
mat 2
mat 1
refs 4
0 1 1
1 0 1
@ -27,14 +26,14 @@ kids 0
OBJECT poly
name "key"
loc 0.0153587 -0.00244115 -0.00120589
texture "mag_switch.png"
texture "key0.png"
crease 45.000000
numvert 32
-0.0130396 0.00629044 0.00605398
-0.00955094 0.00800882 0.0107752
-0.0044108 0.00907083 0.013693
0.001492 0.00929285 0.014303
0.00713683 0.00863649 0.0124997
-0.00957502 0.00800882 0.0107752
-0.00447036 0.00907083 0.013693
0.00139169 0.00929285 0.014303
0.00699756 0.00863649 0.0124997
0.0115476 0.00721524 0.00859484
0.0139617 0.00527484 0.00326365
0.0139617 0.00315082 -0.00257207
@ -47,13 +46,13 @@ numvert 32
-0.0130396 0.00213522 -0.00536241
-0.0142737 0.00100813 0.0015122
-0.0130396 0.00308575 0.00722039
-0.00955094 0.00480413 0.0119416
-0.0044108 0.00586614 0.0148594
0.001492 0.00608816 0.0154694
0.00713683 0.0054318 0.0136661
-0.00957502 0.00480413 0.0119416
-0.00447036 0.00586614 0.0148594
0.00139169 0.00608816 0.0154694
0.00699756 0.0054318 0.0136661
0.0115476 0.00401055 0.00976125
0.0139617 0.00207015 0.00443006
0.0139617 -5.3874e-005 -0.00140566
0.0139617 -5.3874e-05 -0.00140566
0.0115476 -0.00199427 -0.00673684
0.00713683 -0.00341552 -0.0106417
0.001492 -0.00407188 -0.012445
@ -66,293 +65,293 @@ numsurf 45
SURF 0x30
mat 1
refs 3
13 0.787042 0.460485
0 0.76391 0.566745
31 0.519483 0.460485
13 0.500002 0.00958884
0 0.700568 0.0521011
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
0 0.76391 0.566745
1 0.698515 0.654632
31 0.519483 0.460485
0 0.700568 0.0521011
1 0.866456 0.171449
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
1 0.698515 0.654632
2 0.602163 0.708949
31 0.519483 0.460485
1 0.866456 0.171449
2 0.968978 0.347295
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
2 0.602163 0.708949
3 0.491515 0.720305
31 0.519483 0.460485
2 0.968978 0.347295
3 0.990411 0.549232
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
3 0.491515 0.720305
4 0.385704 0.686735
31 0.519483 0.460485
3 0.990411 0.549232
4 0.927049 0.742344
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
4 0.385704 0.686735
5 0.303023 0.614044
31 0.519483 0.460485
4 0.927049 0.742344
5 0.789846 0.899084
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
5 0.303023 0.614044
6 0.257771 0.514802
31 0.519483 0.460485
5 0.789846 0.899084
6 0.602525 0.982245
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
6 0.257771 0.514802
7 0.257771 0.406168
31 0.519483 0.460485
6 0.602525 0.982245
7 0.397478 0.982245
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
7 0.257771 0.406168
8 0.303023 0.306925
31 0.519483 0.460485
7 0.397478 0.982245
8 0.210157 0.899084
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
8 0.303023 0.306925
9 0.385704 0.234234
31 0.519483 0.460485
8 0.210157 0.899084
9 0.0729544 0.747141
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
9 0.385704 0.234234
10 0.491515 0.200665
31 0.519483 0.460485
9 0.0729544 0.747141
10 0.00958884 0.552687
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
10 0.491515 0.200665
11 0.602163 0.21202
31 0.519483 0.460485
10 0.00958884 0.552687
11 0.0310223 0.349347
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
11 0.602163 0.21202
12 0.698515 0.266337
31 0.519483 0.460485
11 0.0310223 0.349347
12 0.133547 0.172279
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
12 0.698515 0.266337
14 0.76391 0.354224
31 0.519483 0.460485
12 0.133547 0.172279
14 0.299434 0.0521011
31 0.500002 0.501291
SURF 0x30
mat 1
refs 3
14 0.76391 0.354224
13 0.787042 0.460485
31 0.519483 0.460485
14 0.299434 0.0521011
13 0.500002 0.00958884
31 0.500002 0.501291
SURF 0x30
mat 1
refs 4
15 0.257771 0.200665
16 0.257771 0.200665
0 0.257771 0.200665
13 0.257771 0.200665
15 0.753928 0.533561
16 0.830603 0.560068
0 0.814935 0.600953
13 0.738261 0.574447
SURF 0x30
mat 1
refs 4
16 0.257771 0.200665
17 0.257771 0.200665
1 0.257771 0.200665
0 0.257771 0.200665
16 0.830603 0.560068
17 0.89402 0.581991
1 0.878352 0.622876
0 0.814935 0.600953
SURF 0x30
mat 1
refs 4
17 0.257771 0.200665
18 0.257771 0.200665
2 0.257771 0.200665
1 0.257771 0.200665
17 0.89402 0.581991
18 0.933213 0.59554
2 0.917545 0.636426
1 0.878352 0.622876
SURF 0x30
mat 1
refs 4
18 0.257771 0.200665
19 0.257771 0.200665
3 0.257771 0.200665
2 0.257771 0.200665
18 0.933213 0.59554
19 0.941406 0.598373
3 0.925739 0.639258
2 0.917545 0.636426
SURF 0x30
mat 1
refs 4
19 0.257771 0.200665
20 0.257771 0.200665
4 0.257771 0.200665
3 0.257771 0.200665
19 0.941406 0.598373
20 0.917184 0.589999
4 0.901516 0.630884
3 0.925739 0.639258
SURF 0x30
mat 1
refs 4
20 0.257771 0.200665
21 0.257771 0.200665
5 0.257771 0.200665
4 0.257771 0.200665
20 0.917184 0.589999
21 0.864732 0.571866
5 0.849065 0.612752
4 0.901516 0.630884
SURF 0x30
mat 1
refs 4
21 0.257771 0.200665
22 0.257771 0.200665
6 0.257771 0.200665
5 0.257771 0.200665
21 0.864732 0.571866
22 0.793122 0.54711
6 0.777454 0.587996
5 0.849065 0.612752
SURF 0x30
mat 1
refs 4
22 0.257771 0.200665
23 0.257771 0.200665
7 0.257771 0.200665
6 0.257771 0.200665
22 0.793122 0.54711
23 0.714734 0.520012
7 0.699067 0.560898
6 0.777454 0.587996
SURF 0x30
mat 1
refs 4
23 0.257771 0.200665
24 0.257771 0.200665
8 0.257771 0.200665
7 0.257771 0.200665
23 0.714734 0.520012
24 0.643124 0.495256
8 0.627456 0.536142
7 0.699067 0.560898
SURF 0x30
mat 1
refs 4
24 0.257771 0.200665
25 0.257771 0.200665
9 0.257771 0.200665
8 0.257771 0.200665
24 0.643124 0.495256
25 0.590673 0.477124
9 0.575005 0.51801
8 0.627456 0.536142
SURF 0x30
mat 1
refs 4
25 0.257771 0.200665
26 0.257771 0.200665
10 0.257771 0.200665
9 0.257771 0.200665
25 0.590673 0.477124
26 0.56645 0.46875
10 0.550781 0.509636
9 0.575005 0.51801
SURF 0x30
mat 1
refs 4
26 0.257771 0.200665
27 0.257771 0.200665
11 0.257771 0.200665
10 0.257771 0.200665
26 0.56645 0.46875
27 0.574644 0.471583
11 0.558975 0.512468
10 0.550781 0.509636
SURF 0x30
mat 1
refs 4
27 0.257771 0.200665
28 0.257771 0.200665
12 0.257771 0.200665
11 0.257771 0.200665
27 0.574644 0.471583
28 0.613837 0.485132
12 0.598169 0.526017
11 0.558975 0.512468
SURF 0x30
mat 1
refs 4
28 0.257771 0.200665
29 0.257771 0.200665
14 0.257771 0.200665
12 0.257771 0.200665
28 0.613837 0.485132
29 0.677254 0.507055
14 0.661586 0.547941
12 0.598169 0.526017
SURF 0x30
mat 1
refs 4
29 0.257771 0.200665
15 0.257771 0.200665
13 0.257771 0.200665
14 0.257771 0.200665
29 0.677254 0.507055
15 0.753928 0.533561
13 0.738261 0.574447
14 0.661586 0.547941
SURF 0x30
mat 1
refs 3
15 0.787042 0.460485
16 0.76391 0.566745
30 0.519483 0.460485
15 0.5 0.0134969
16 0.297836 0.0554971
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
16 0.76391 0.566745
17 0.698515 0.654632
30 0.519483 0.460485
16 0.297836 0.0554971
17 0.130627 0.173407
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
17 0.698515 0.654632
18 0.602163 0.708949
30 0.519483 0.460485
17 0.130627 0.173407
18 0.0272884 0.347135
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
18 0.602163 0.708949
19 0.491515 0.720305
30 0.519483 0.460485
18 0.0272884 0.347135
19 0.00568432 0.546638
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
19 0.491515 0.720305
20 0.385704 0.686735
30 0.519483 0.460485
19 0.00568432 0.546638
20 0.0695509 0.737423
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
20 0.385704 0.686735
21 0.303023 0.614044
30 0.519483 0.460485
20 0.0695509 0.737423
21 0.207847 0.892275
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
21 0.303023 0.614044
22 0.257771 0.514802
30 0.519483 0.460485
21 0.207847 0.892275
22 0.396659 0.974434
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
22 0.257771 0.514802
23 0.257771 0.406168
30 0.519483 0.460485
22 0.396659 0.974434
23 0.60334 0.974434
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
23 0.257771 0.406168
24 0.303023 0.306925
30 0.519483 0.460485
23 0.60334 0.974434
24 0.792152 0.892275
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
24 0.303023 0.306925
25 0.385704 0.234234
30 0.519483 0.460485
24 0.792152 0.892275
25 0.930449 0.742163
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
25 0.385704 0.234234
26 0.491515 0.200665
30 0.519483 0.460485
25 0.930449 0.742163
26 0.994316 0.550052
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
26 0.491515 0.200665
27 0.602163 0.21202
30 0.519483 0.460485
26 0.994316 0.550052
27 0.972712 0.349162
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
27 0.602163 0.21202
28 0.698515 0.266337
30 0.519483 0.460485
27 0.972712 0.349162
28 0.869373 0.174227
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
28 0.698515 0.266337
29 0.76391 0.354224
30 0.519483 0.460485
28 0.869373 0.174227
29 0.702165 0.0554971
30 0.5 0.499275
SURF 0x30
mat 1
refs 3
29 0.76391 0.354224
15 0.787042 0.460485
30 0.519483 0.460485
29 0.702165 0.0554971
15 0.5 0.0134969
30 0.5 0.499275
kids 0
OBJECT poly
name "start"
loc 0.0153587 0.000670004 0.00244825
texture "mag_switch.png"
texture "key0.png"
crease 45.000000
numvert 32
0 -0.00180695 -0.00382131
@ -391,288 +390,288 @@ numsurf 45
SURF 0x30
mat 1
refs 3
2 0.758681 0.349798
16 0.781762 0.454149
1 0.514799 0.454149
2 0.698265 0.0561047
16 0.499754 0.0137551
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
3 0.693432 0.263491
2 0.758681 0.349798
1 0.514799 0.454149
3 0.86245 0.175826
2 0.698265 0.0561047
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
4 0.597295 0.21015
3 0.693432 0.263491
1 0.514799 0.454149
4 0.963923 0.352221
3 0.86245 0.175826
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
5 0.486893 0.198999
4 0.597295 0.21015
1 0.514799 0.454149
5 0.985136 0.55479
4 0.963923 0.352221
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
6 0.381317 0.231965
5 0.486893 0.198999
1 0.514799 0.454149
6 0.922423 0.748504
5 0.985136 0.55479
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
7 0.298821 0.30335
6 0.381317 0.231965
1 0.514799 0.454149
7 0.786625 0.89987
6 0.922423 0.748504
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
8 0.253669 0.400808
7 0.298821 0.30335
1 0.514799 0.454149
8 0.601227 0.982717
7 0.786625 0.89987
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
9 0.253669 0.50749
8 0.253669 0.400808
1 0.514799 0.454149
9 0.398282 0.982717
8 0.601227 0.982717
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
10 0.298821 0.604948
9 0.253669 0.50749
1 0.514799 0.454149
10 0.212884 0.89987
9 0.398282 0.982717
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
11 0.381317 0.676333
10 0.298821 0.604948
1 0.514799 0.454149
11 0.0770854 0.748504
10 0.212884 0.89987
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
12 0.486893 0.709299
11 0.381317 0.676333
1 0.514799 0.454149
12 0.0143728 0.55479
11 0.0770854 0.748504
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
13 0.597295 0.698148
12 0.486893 0.709299
1 0.514799 0.454149
13 0.0355859 0.352221
12 0.0143728 0.55479
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
14 0.693432 0.644807
13 0.597295 0.698148
1 0.514799 0.454149
14 0.137058 0.175826
13 0.0355859 0.352221
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
15 0.758681 0.558499
14 0.693432 0.644807
1 0.514799 0.454149
15 0.301245 0.0561047
14 0.137058 0.175826
1 0.499754 0.503587
SURF 0x30
mat 1
refs 3
16 0.781762 0.454149
15 0.758681 0.558499
1 0.514799 0.454149
16 0.499754 0.0137551
15 0.301245 0.0561047
1 0.499754 0.503587
SURF 0x30
mat 1
refs 4
2 0.253669 0.198999
16 0.253669 0.198999
18 0.253669 0.198999
17 0.253669 0.198999
2 0.398374 0.602724
16 0.360487 0.638379
18 0.342638 0.614523
17 0.380525 0.578869
SURF 0x30
mat 1
refs 4
3 0.253669 0.198999
2 0.253669 0.198999
17 0.253669 0.198999
19 0.253669 0.198999
3 0.42971 0.573235
2 0.398374 0.602724
17 0.380525 0.578869
19 0.411862 0.54938
SURF 0x30
mat 1
refs 4
4 0.253669 0.198999
3 0.253669 0.198999
19 0.253669 0.198999
20 0.253669 0.198999
4 0.449076 0.55501
3 0.42971 0.573235
19 0.411862 0.54938
20 0.431229 0.531154
SURF 0x30
mat 1
refs 4
5 0.253669 0.198999
4 0.253669 0.198999
20 0.253669 0.198999
21 0.253669 0.198999
5 0.453125 0.5512
4 0.449076 0.55501
20 0.431229 0.531154
21 0.435277 0.527344
SURF 0x30
mat 1
refs 4
6 0.253669 0.198999
5 0.253669 0.198999
21 0.253669 0.198999
22 0.253669 0.198999
6 0.441156 0.562463
5 0.453125 0.5512
21 0.435277 0.527344
22 0.423308 0.538608
SURF 0x30
mat 1
refs 4
7 0.253669 0.198999
6 0.253669 0.198999
22 0.253669 0.198999
23 0.253669 0.198999
7 0.415238 0.586854
6 0.441156 0.562463
22 0.423308 0.538608
23 0.39739 0.562998
SURF 0x30
mat 1
refs 4
8 0.253669 0.198999
7 0.253669 0.198999
23 0.253669 0.198999
24 0.253669 0.198999
8 0.379853 0.620153
7 0.415238 0.586854
23 0.39739 0.562998
24 0.362005 0.596298
SURF 0x30
mat 1
refs 4
9 0.253669 0.198999
8 0.253669 0.198999
24 0.253669 0.198999
25 0.253669 0.198999
9 0.34112 0.656604
8 0.379853 0.620153
24 0.362005 0.596298
25 0.323272 0.632749
SURF 0x30
mat 1
refs 4
10 0.253669 0.198999
9 0.253669 0.198999
25 0.253669 0.198999
26 0.253669 0.198999
10 0.305735 0.689904
9 0.34112 0.656604
25 0.323272 0.632749
26 0.287887 0.666048
SURF 0x30
mat 1
refs 4
11 0.253669 0.198999
10 0.253669 0.198999
26 0.253669 0.198999
27 0.253669 0.198999
11 0.279817 0.714294
10 0.305735 0.689904
26 0.287887 0.666048
27 0.261969 0.690439
SURF 0x30
mat 1
refs 4
12 0.253669 0.198999
11 0.253669 0.198999
27 0.253669 0.198999
28 0.253669 0.198999
12 0.267848 0.725557
11 0.279817 0.714294
27 0.261969 0.690439
28 0.25 0.701702
SURF 0x30
mat 1
refs 4
13 0.253669 0.198999
12 0.253669 0.198999
28 0.253669 0.198999
29 0.253669 0.198999
13 0.271897 0.721747
12 0.267848 0.725557
28 0.25 0.701702
29 0.254048 0.697892
SURF 0x30
mat 1
refs 4
14 0.253669 0.198999
13 0.253669 0.198999
29 0.253669 0.198999
30 0.253669 0.198999
14 0.291263 0.703522
13 0.271897 0.721747
29 0.254048 0.697892
30 0.273415 0.679667
SURF 0x30
mat 1
refs 4
15 0.253669 0.198999
14 0.253669 0.198999
30 0.253669 0.198999
31 0.253669 0.198999
15 0.322599 0.674033
14 0.291263 0.703522
30 0.273415 0.679667
31 0.304751 0.650178
SURF 0x30
mat 1
refs 4
16 0.253669 0.198999
15 0.253669 0.198999
31 0.253669 0.198999
18 0.253669 0.198999
16 0.360487 0.638379
15 0.322599 0.674033
31 0.304751 0.650178
18 0.342638 0.614523
SURF 0x30
mat 1
refs 3
17 0.758681 0.349798
18 0.781762 0.454149
0 0.514799 0.454149
17 0.299646 0.0488043
18 0.499754 0.00594258
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
19 0.693432 0.263491
17 0.758681 0.349798
0 0.514799 0.454149
19 0.134139 0.169973
17 0.299646 0.0488043
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
20 0.597295 0.21015
19 0.693432 0.263491
0 0.514799 0.454149
20 0.0318503 0.348502
19 0.134139 0.169973
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
21 0.486893 0.198999
20 0.597295 0.21015
0 0.514799 0.454149
21 0.0104666 0.553521
20 0.0318503 0.348502
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
22 0.381317 0.231965
21 0.486893 0.198999
0 0.514799 0.454149
22 0.0736838 0.749578
21 0.0104666 0.553521
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
23 0.298821 0.30335
22 0.381317 0.231965
0 0.514799 0.454149
23 0.210575 0.902775
22 0.0736838 0.749578
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
24 0.253669 0.400808
23 0.298821 0.30335
0 0.514799 0.454149
24 0.397465 0.986623
23 0.210575 0.902775
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
25 0.253669 0.50749
24 0.253669 0.400808
0 0.514799 0.454149
25 0.602043 0.986623
24 0.397465 0.986623
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
26 0.298821 0.604948
25 0.253669 0.50749
0 0.514799 0.454149
26 0.788933 0.902775
25 0.602043 0.986623
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
27 0.381317 0.676333
26 0.298821 0.604948
0 0.514799 0.454149
27 0.925825 0.749578
26 0.788933 0.902775
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
28 0.486893 0.709299
27 0.381317 0.676333
0 0.514799 0.454149
28 0.989042 0.553521
27 0.925825 0.749578
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
29 0.597295 0.698148
28 0.486893 0.709299
0 0.514799 0.454149
29 0.967658 0.348502
28 0.989042 0.553521
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
30 0.693432 0.644807
29 0.597295 0.698148
0 0.514799 0.454149
30 0.865369 0.169973
29 0.967658 0.348502
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
31 0.758681 0.558499
30 0.693432 0.644807
0 0.514799 0.454149
31 0.699861 0.0488043
30 0.865369 0.169973
0 0.499754 0.501699
SURF 0x30
mat 1
refs 3
18 0.781762 0.454149
31 0.758681 0.558499
0 0.514799 0.454149
18 0.499754 0.00594258
31 0.699861 0.0488043
0 0.499754 0.501699
kids 0
OBJECT group
name "clicks"
@ -680,7 +679,7 @@ loc 0.00569378 -0.00756817 0.00125835
kids 1
OBJECT poly
name "click-S"
loc -1.86265e-009 0.00716951 -0.0440341
loc -1.86265e-09 0.00716951 -0.0440341
crease 180.000000
numvert 4
0 -0.014961 0.0280603
@ -689,7 +688,7 @@ numvert 4
0 0.014961 0.0374137
numsurf 1
SURF 0x10
mat 3
mat 2
refs 4
3 0 1
1 0 0
@ -702,7 +701,7 @@ loc 0.00569378 -0.00756817 0.00125835
kids 1
OBJECT poly
name "click-R"
loc -1.86265e-009 0.00716951 -0.0343163
loc -1.86265e-09 0.00716951 -0.0343163
crease 180.000000
numvert 4
0 0.014961 0.0374137
@ -711,7 +710,7 @@ numvert 4
0 -0.014961 0.0280603
numsurf 1
SURF 0x10
mat 3
mat 2
refs 4
0 0 1
2 0 0
@ -724,7 +723,7 @@ loc 0.00569378 -0.00756817 0.00125835
kids 1
OBJECT poly
name "click-L"
loc -1.86265e-009 0.00716951 -0.0245894
loc -1.86265e-09 0.00716951 -0.0245894
crease 180.000000
numvert 4
0 -0.014961 0.0280603
@ -733,7 +732,7 @@ numvert 4
0 0.014961 0.0374137
numsurf 1
SURF 0x10
mat 3
mat 2
refs 4
3 0 1
1 0 0

View file

@ -73,6 +73,12 @@
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>
<condition>
<property>/environment/config/presets/visibility-m-override</property>
</condition>
<property>/environment/config/presets/visibility-m</property>
</input>
<input>/environment/config/interpolated/visibility-m</input>
<output>/environment/visibility-m</output>
<type>exponential</type>
@ -89,6 +95,12 @@
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>
<condition>
<property>/environment/config/presets/wind-override</property>
</condition>
<property>/environment/config/presets/wind-from-north-fps</property>
</input>
<input>/environment/config/interpolated/wind-from-north-fps</input>
<output>/environment/wind-from-north-fps</output>
<type>exponential</type>
@ -102,10 +114,48 @@
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>
<condition>
<property>/environment/config/presets/wind-override</property>
</condition>
<property>/environment/config/presets/wind-from-east-fps</property>
</input>
<input>/environment/config/interpolated/wind-from-east-fps</input>
<output>/environment/wind-from-east-fps</output>
<type>exponential</type>
<filter-time>5</filter-time>
</filter>
<filter>
<name>EnvironmentInterpolator:turbulence-magnitude</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>
<condition>
<property>/environment/config/presets/turbulence-magnitude-norm-override</property>
</condition>
<property>/environment/config/presets/turbulence-magnitude-norm-override</property>
</input>
<input>/environment/config/interpolated/turbulence/magnitude-norm</input>
<output>/environment/turbulence/magnitude-norm</output>
<type>exponential</type>
<filter-time>1</filter-time>
</filter>
<filter>
<name>EnvironmentInterpolator:turbulence-rate</name>
<enable>
<condition>
<property>/environment/config/enabled</property>
</condition>
</enable>
<input>/environment/config/interpolated/turbulence/rate-hz</input>
<output>/environment/turbulence/rate-hz</output>
<type>exponential</type>
<filter-time>1</filter-time>
</filter>
</PropertyList>

2717
HLA/AviationSimNet-v3.1.xml Normal file

File diff suppressed because it is too large Load diff

63
HLA/av-aircraft.xml Normal file
View file

@ -0,0 +1,63 @@
<?xml version="1.0"?>
<hlaConfiguration version="1">
<!-- This is the top level HLA configuration file for use with the
multiplayer federation. This serves now as first demo how to configure
flightgears hla implementation.
This toplevel file consists of startup parameters for the rti,
the federate object model to use on create and a way to map the hla
attribute values to a semantic meaning or flightgear properties.
-->
<rti version="RTI13">
<!-- is ignored for RTI13 anyway, so the example here ... -->
<argument>rtiarg0</argument>
<argument>rtiarg1</argument>
</rti>
<!-- Contains the data layout and the object classes -->
<federateObjectModel name="AviationSimNet-v3.1.xml"/>
<!-- ??? more a AIModel Tag??? Or a generic one and decide which type should be time exact???? -->
<objects>
<objectClass type="Multiplayer" name="aircraft">
<model type="map">
<dataElement type="external" name="aircraftType"/>
<key external="A320" modelPath="Aircraft/A320/Models/a320-fb.xml"/>
<key external="B733" modelPath="Aircraft/737-300/Models/737-300.xml"/>
<key external="B742" modelPath="Aircraft/747-200/Models/boeing747-200.xml"/>
<key external="C172" modelPath="Aircraft/c172p/Models/c172p.xml"/>
<key external="C310" modelPath="Aircraft/c310/Models/c310-dpm.xml"/>
<key external="F18" modelPath="Aircraft/f18/Models/f18.xml"/>
<key external="PC7" modelPath="Aircraft/pc7/Models/pc7.xml"/>
<key external="DH8C" modelPath="Aircraft/dhc8/Models/dhc8-300Q.xml"/>
<key external="UFO" modelPath="Aircraft/ufo/Models/ufo.xml"/>
<key external="C172"/>
</model>
<!-- This is an example for the variant that would make the AviationSimNet guys visible in flightgear. -->
<!-- It does not know any rotational velocities, but the linear velocity is present. -->
<position type="geodetic">
<dataElement type="latitude-deg" name="latitude"/>
<dataElement type="longitude-deg" name="longitude"/>
<dataElement type="elevation-m" name="altitudeMSL"/>
<dataElement type="heading-deg" name="trueHeading"/>
<dataElement type="pitch-deg" name="pitch"/>
<dataElement type="roll-deg" name="roll"/>
<dataElement type="ground-track-deg" name="groundTrack"/>
<dataElement type="ground-speed-kt" name="groundSpeed"/>
<dataElement type="vertical-speed-ft-per-min" name="verticalSpeed"/>
</position>
<simTime type="attribute-sec-msec">
<dataElement type="local-simtime-sec" name="timestampSeconds"/>
<dataElement type="local-simtime-msec" name="timestampMilliseconds"/>
</simTime>
<dataElement type="property" name="tailNum" in="sim/user/callsign" out="sim/user/callsign"/>
</objectClass>
</objects>
</hlaConfiguration>

324
HLA/hla.dtd Normal file
View file

@ -0,0 +1,324 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- HLA.dtd This is version 1.0 of a DTD file to fully define the OMT in XML terms -->
<!ELEMENT objectModel (
objects?,
interactions?,
dimensions?,
time?,
tags?,
synchronizations?,
transportations?,
switches?,
dataTypes?,
notes?)>
<!ATTLIST objectModel
DTDversion CDATA #FIXED "1516.2"
name CDATA #REQUIRED
nameNotes NMTOKENS #IMPLIED
type (FOM|SOM) #REQUIRED
typeNotes NMTOKENS #IMPLIED
version CDATA #IMPLIED
versionNotes NMTOKENS #IMPLIED
date CDATA #IMPLIED
dateNotes NMTOKENS #IMPLIED
purpose CDATA #IMPLIED
purposeNotes NMTOKENS #IMPLIED
appDomain CDATA #IMPLIED
appDomainNotes NMTOKENS #IMPLIED
sponsor CDATA #IMPLIED
sponsorNotes NMTOKENS #IMPLIED
pocName CDATA #IMPLIED
pocNameNotes NMTOKENS #IMPLIED
pocOrg CDATA #IMPLIED
pocOrgNotes NMTOKENS #IMPLIED
pocPhone CDATA #IMPLIED
pocPhoneNotes NMTOKENS #IMPLIED
pocEmail CDATA #IMPLIED
pocEmailNotes NMTOKENS #IMPLIED
references CDATA #IMPLIED
referencesNotes NMTOKENS #IMPLIED
other CDATA #IMPLIED
otherNotes NMTOKENS #IMPLIED>
<!ELEMENT objects (objectClass+)>
<!ELEMENT objectClass (attribute*, objectClass*)>
<!ATTLIST objectClass
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
sharing (Publish|Subscribe|PublishSubscribe|Neither) #IMPLIED
sharingNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT attribute EMPTY>
<!ATTLIST attribute
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
updateType (Static|Periodic|Conditional|NA) #IMPLIED
updateTypeNotes NMTOKENS #IMPLIED
updateCondition CDATA #IMPLIED
updateConditionNotes NMTOKENS #IMPLIED
ownership (Divest|Acquire|DivestAcquire|NoTransfer)
#IMPLIED
ownershipNotes NMTOKENS #IMPLIED
sharing (Publish|Subscribe|PublishSubscribe|Neither)
#IMPLIED
sharingNotes NMTOKENS #IMPLIED
dimensions NMTOKENS #IMPLIED
dimensionsNotes NMTOKENS #IMPLIED
transportation NMTOKEN #IMPLIED
transportationNotes NMTOKENS #IMPLIED
order (Receive|TimeStamp) #IMPLIED
orderNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED>
<!ELEMENT interactions (interactionClass+)>
<!ELEMENT interactionClass (parameter*, interactionClass*)>
<!ATTLIST interactionClass
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
sharing (Publish|Subscribe|PublishSubscribe|Neither) #IMPLIED
sharingNotes NMTOKENS #IMPLIED
dimensions NMTOKENS #IMPLIED
dimensionsNotes NMTOKENS #IMPLIED
transportation NMTOKEN #IMPLIED
transportationNotes NMTOKENS #IMPLIED
order (Receive|TimeStamp) #IMPLIED
orderNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT dimensions (dimension*)>
<!ELEMENT dimension EMPTY>
<!ATTLIST dimension
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
upperBound CDATA #IMPLIED
upperBoundNotes NMTOKENS #IMPLIED
normalization CDATA #IMPLIED
normalizationNotes NMTOKENS #IMPLIED
value CDATA #IMPLIED
valueNotes NMTOKENS #IMPLIED>
<!ELEMENT time (timeStamp?, lookahead?)>
<!ELEMENT timeStamp EMPTY>
<!ATTLIST timeStamp
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT lookahead EMPTY>
<!ATTLIST lookahead
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT tags (updateReflectTag?,
sendReceiveTag?,
deleteRemoveTag?,
divestitureRequestTag?,
divestitureCompletionTag?,
acquisitionRequestTag?,
requestUpdateTag?)>
<!ELEMENT updateReflectTag EMPTY>
<!ATTLIST updateReflectTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT sendReceiveTag EMPTY>
<!ATTLIST sendReceiveTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT deleteRemoveTag EMPTY>
<!ATTLIST deleteRemoveTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT divestitureRequestTag EMPTY>
<!ATTLIST divestitureRequestTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT divestitureCompletionTag EMPTY>
<!ATTLIST divestitureCompletionTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT acquisitionRequestTag EMPTY>
<!ATTLIST acquisitionRequestTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT requestUpdateTag EMPTY>
<!ATTLIST requestUpdateTag
dataType NMTOKEN #REQUIRED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT synchronizations (synchronization+)>
<!ELEMENT synchronization EMPTY>
<!ATTLIST synchronization
label NMTOKEN #REQUIRED
labelNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
capability (Register|Achieve|RegisterAchieve|NoSynch) #IMPLIED
capabilityNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT transportations (transportation+)>
<!ELEMENT transportation EMPTY>
<!ATTLIST transportation
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
description CDATA #IMPLIED
descriptionNotes NMTOKENS #IMPLIED>
<!ELEMENT switches EMPTY>
<!ATTLIST switches
autoProvide (Enabled|Disabled) #IMPLIED
autoProvideNotes NMTOKENS #IMPLIED
conveyRegionDesignatorSets (Enabled|Disabled) #IMPLIED
conveyRegionDesignatorSetsNotes NMTOKENS #IMPLIED
attributeScopeAdvisory (Enabled|Disabled) #IMPLIED
attributeScopeAdvisoryNotes NMTOKENS #IMPLIED
attributeRelevanceAdvisory (Enabled|Disabled) #IMPLIED
attributeRelevanceAdvisoryNotes NMTOKENS #IMPLIED
objectClassRelevanceAdvisory (Enabled|Disabled) #IMPLIED
objectClassRelevanceAdvisoryNotes NMTOKENS #IMPLIED
interactionRelevanceAdvisory (Enabled|Disabled) #IMPLIED
interactionRelevanceAdvisoryNotes NMTOKENS #IMPLIED
serviceReporting (Enabled|Disabled) #IMPLIED
serviceReportingNotes NMTOKENS #IMPLIED>
<!ELEMENT dataTypes (basicDataRepresentations,
simpleDataTypes?,
enumeratedDataTypes?,
arrayDataTypes?,
fixedRecordDataTypes?,
variantRecordDataTypes?)>
<!ELEMENT basicDataRepresentations (basicData+)>
<!ELEMENT basicData EMPTY>
<!ATTLIST basicData
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
size CDATA #IMPLIED
sizeNotes NMTOKENS #IMPLIED
interpretation CDATA #IMPLIED
interpretationNotes NMTOKENS #IMPLIED
endian (Big|Little) #IMPLIED
endianNotes NMTOKENS #IMPLIED
encoding CDATA #IMPLIED
encodingNotes NMTOKENS #IMPLIED>
<!ELEMENT simpleDataTypes (simpleData+)>
<!ELEMENT simpleData EMPTY>
<!ATTLIST simpleData
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
representation NMTOKEN #IMPLIED
representationNotes NMTOKENS #IMPLIED
units CDATA #IMPLIED
unitsNotes NMTOKENS #IMPLIED
resolution CDATA #IMPLIED
resolutionNotes NMTOKENS #IMPLIED
accuracy CDATA #IMPLIED
accuracyNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED>
<!ELEMENT enumeratedDataTypes (enumeratedData+)>
<!ELEMENT enumeratedData (enumerator+)>
<!ATTLIST enumeratedData
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
representation NMTOKEN #IMPLIED
representationNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT enumerator EMPTY>
<!ATTLIST enumerator
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
values NMTOKENS #IMPLIED
valuesNotes NMTOKENS #IMPLIED>
<!ELEMENT arrayDataTypes (arrayData+)>
<!ELEMENT arrayData EMPTY>
<!ATTLIST arrayData
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
cardinality CDATA #IMPLIED
cardinalityNotes NMTOKENS #IMPLIED
encoding CDATA #IMPLIED
encodingNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED>
<!ELEMENT fixedRecordDataTypes (fixedRecordData+)>
<!ELEMENT fixedRecordData (field+)>
<!ATTLIST fixedRecordData
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
encoding CDATA #IMPLIED
encodingNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >
<!ELEMENT field EMPTY>
<!ATTLIST field
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED>
<!ELEMENT variantRecordDataTypes (variantRecordData+)>
<!ELEMENT variantRecordData (alternative+)>
<!ATTLIST variantRecordData
name NMTOKEN #REQUIRED
nameNotes NMTOKENS #IMPLIED
discriminant CDATA #IMPLIED
discriminantNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
encoding CDATA #IMPLIED
encodingNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED>
<!ELEMENT alternative EMPTY>
<!ATTLIST alternative
enumerator CDATA #REQUIRED
enumeratorNotes NMTOKENS #IMPLIED
name NMTOKEN #IMPLIED
nameNotes NMTOKENS #IMPLIED
dataType NMTOKEN #IMPLIED
dataTypeNotes NMTOKENS #IMPLIED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED>
<!ELEMENT notes (note+)>
<!ELEMENT note EMPTY>
<!ATTLIST note
name NMTOKEN #REQUIRED
semantics CDATA #IMPLIED
semanticsNotes NMTOKENS #IMPLIED >

1710
HLA/mp-aircraft-fom.xml Normal file

File diff suppressed because it is too large Load diff

64
HLA/mp-aircraft.xml Normal file
View file

@ -0,0 +1,64 @@
<?xml version="1.0"?>
<hlaConfiguration version="1">
<!-- This is the top level HLA configuration file for use with the
multiplayer federation. This serves now as first demo how to configure
flightgears hla implementation.
This toplevel file consists of startup parameters for the rti,
the federate object model to use on create and a way to map the hla
attribute values to a semantic meaning or flightgear properties.
-->
<rti version="RTI13">
<!-- is ignored for RTI13 anyway, so the example here ... -->
<argument>rtiarg0</argument>
<argument>rtiarg1</argument>
</rti>
<!-- Contains the data layout and the object classes -->
<federateObjectModel name="mp-aircraft-fom.xml"/>
<objects>
<objectClass type="Multiplayer" name="MPAircraft">
<model type="native">
<dataElement type="model-path" name="model.path"/>
</model>
<!-- Should contain all those attributes that form the position and orientation of the aircraft in total -->
<position type="cartesian">
<!-- These are the positions in the earth centered coordinate system. -->
<dataElement type="position-x" name="location.position[0]"/>
<dataElement type="position-y" name="location.position[1]"/>
<dataElement type="position-z" name="location.position[2]"/>
<!-- A very compact and lossless representation of a quaternion wrt the earth centered coordinate system. -->
<dataElement type="orientation-sin-angle-axis-x" name="location.orientation[0]"/>
<dataElement type="orientation-sin-angle-axis-y" name="location.orientation[1]"/>
<dataElement type="orientation-sin-angle-axis-z" name="location.orientation[2]"/>
<!-- The body velocities in the usual x-fwd, z-down, righthandside body coordinate system. -->
<dataElement type="linear-velocity-x" name="velocity.linear[0]"/>
<dataElement type="linear-velocity-y" name="velocity.linear[1]"/>
<dataElement type="linear-velocity-z" name="velocity.linear[2]"/>
<dataElement type="angular-velocity-x" name="velocity.angular[0]"/>
<dataElement type="angular-velocity-y" name="velocity.angular[1]"/>
<dataElement type="angular-velocity-z" name="velocity.angular[2]"/>
</position>
<simTime type="attribute">
<dataElement type="local-simtime" name="simTime"/>
</simTime>
<!-- the attribute that carries the big blob of multiplayer attributes.
This datatype is tightly coupled with the implementation for now.
It is done in this way to provide the same feature set for the
multiplayer object like the existing multiplayer protocol.
In the long term, think more about the content of this blob and
sensibly distribute that across different datatypes and attributes.
-->
<mpProperties name="mpProperties"/>
<dataElement type="property" name="model.livery" in="sim/model/livery/file" out="sim/model/livery/file"/>
</objectClass>
</objects>
</hlaConfiguration>

View file

@ -2,8 +2,7 @@
<PropertyList>
<name>Default Aircraft Hud</name>
<enable3d>true</enable3d>
<import>
<path>Huds/Instruments/turn-bank-indicator.xml</path>
<y-offset>-195</y-offset>

45
Nasal/environment.nas Executable file
View file

@ -0,0 +1,45 @@
##
## environment.nas
##
## Nasal code for implementing environment-specific functionality.
##
# Handler. Increase visibility by one step
#
var increaseVisibility = func {
adjustVisibility(1.1);
}
##
# Handler. Decrease visibility by one step
#
var decreaseVisibility = func {
adjustVisibility(0.9);
}
var adjustVisibility = func( factor ) {
var val = visibilityProp.getValue() * factor;
if( val < 1.0 ) val = getprop("/environment/visibility-m");
if( val > 30 ) {
visibilityProp.setDoubleValue(val);
visibilityOverrideProp.setBoolValue(1);
gui.popupTip(sprintf("Visibility: %.0f m", val));
}
}
##
# Handler. Reset visibility to default.
#
var resetVisibility = func {
visibilityProp.setDoubleValue(0);
visibilityOverrideProp.setBoolValue(0);
}
var visibilityProp = nil;
var visibilityOverrideProp = nil;
_setlistener("/sim/signals/nasal-dir-initialized", func {
visibilityProp = props.globals.initNode("/environment/config/presets/visibility-m", 0, "DOUBLE" );
visibilityOverrideProp = props.globals.initNode("/environment/config/presets/visibility-m-override", 0, "BOOL" );
});

View file

@ -532,6 +532,54 @@ var FileSelector = {
},
};
##
# ScreenshotSelector class (derived from Dialog class).
#
# SYNOPSIS: DirectorySelector.new(<callback>, <title>, <button> [, <pattern> [, <dir>]])
#
# callback ... callback function that gets return value as first argument
# title ... dialog title
# button ... button text (should say "Save", "Load", etc. and not just "OK")
# pattern ... array with shell pattern or nil (which is equivalent to "*")
# dir ... starting dir ($FG_ROOT if unset)
var ScreenshotSelector = {
new: func(callback, title, button, pattern = nil, dir = "") {
var name = "screenshot";
## var data = props.globals.getNode("/sim/gui/dialogs/", 1);
# for (var i = 1; 1; i += 1)
# if (data.getNode(name ~ i, 0) == nil)
# break;
data = props.globals.getNode("sim/gui/dialogs/screenshot", 1);
var m = Dialog.new(data.getNode("dialog", 1), "gui/dialogs/screenshot.xml", name);
m.parents = [ScreenshotSelector, Dialog];
m.data = data;
m.set_title(title);
m.set_button(button);
m.set_directory(dir);
m.set_pattern(pattern);
m.cblistener = setlistener(data.getNode("path", 1), callback);
return m;
},
# setters only take effect after the next call to open()
set_title: func(title) { me.data.getNode("title", 1).setValue(title) },
set_button: func(button) { me.data.getNode("button", 1).setValue(button) },
set_directory: func(dir) { me.data.getNode("directory", 1).setValue(dir) },
set_pattern: func(pattern) {
me.data.removeChildren("pattern");
if (pattern != nil)
forindex (var i; pattern)
me.data.getChild("pattern", i, 1).setValue(pattern[i]);
},
del: func {
me.close();
delete(me.instance, me.name);
removelistener(me.cblistener);
me.data.remove();
},
};
##
# Save/load flight menu functions.
@ -561,6 +609,32 @@ var load_flight = func {
}
##
# Save screenshot menu function.
#
var save_screenshot_sel = nil;
var save_screenshot = func {
foreach (var n; props.globals.getNode("/sim/presets").getChildren())
n.setAttribute("archive", 1);
var save = func(n) {
save_screenshot_sel.close();
setprop("/sim/paths/screenshot-dir", n.getValue());
var hide_menubar = getprop("sim/gui/dialogs/screenshot/hide-menubar");
if (hide_menubar == 1){
menu_visibility = getprop("/sim/menubar/visibility");
setprop("/sim/menubar/visibility",0);
}
settimer(func { fgcommand("screen-capture") },0);
if (hide_menubar == 1){
settimer(func { setprop("/sim/menubar/visibility",menu_visibility) },0);
}
}
if (save_screenshot_sel == nil)
save_screenshot_sel = ScreenshotSelector.new(save, "Save Screenshot", "Take screenshot",
, getprop("/sim/paths/screenshot-dir"),);
save_screenshot_sel.open();
}
##
# Open property browser with given target path.
@ -1175,6 +1249,7 @@ var basic_keys = {
{ name: "x/X", desc: "zoom in/out" },
{ name: "Ctrl-X", desc: "reset zoom to default" },
{ name: "z/Z", desc: "increase/decrease visibility" },
{ name: "Ctrl-Z", desc: "reset visibility to default" },
{ name: "'", desc: "display ATC setting dialog" },
{ name: "+", desc: "let ATC/instructor repeat last message" },
{ name: "-", desc: "open chat dialog" },

View file

@ -283,6 +283,27 @@ var request = func {
}
var request_random = func {
var tanker = values(Tanker.active);
if (size(tanker))
return tanker[0].identify();
var type = props.globals.getNode("systems/refuel", 1).getChildren("type");
if (!size(type))
return;
type = type[rand() * size(type)].getValue();
var (aiid, callsign, tacanid) =_= identity.get();
var hdg = rand() * 360;
var course = rand() * 360;
var dist = 6000 + rand() * 4000;
var alt = int(10 + rand() * 15) * 1000; # FL100--FL250
alt = skip_cloud_layer(alt * FT2M);
var coord = geo.aircraft_position().apply_course_distance(course, dist).set_alt(alt);
Tanker.new(aiid, callsign, tacanid, type, 250, hdg, coord);
}
var report = func {
var tanker = values(Tanker.active);
if (size(tanker))

View file

@ -252,8 +252,9 @@ var fly_by_view_handler = {
me.latN = props.globals.getNode("/sim/viewer/latitude-deg", 1);
me.lonN = props.globals.getNode("/sim/viewer/longitude-deg", 1);
me.altN = props.globals.getNode("/sim/viewer/altitude-ft", 1);
# me.hdgN = props.globals.getNode("/orientation/heading-deg", 1);
me.hdgN = props.globals.getNode("/instrumentation/gps/indicated-track-true-deg", 1);
me.vnN = props.globals.getNode("/velocities/speed-north-fps", 1);
me.veN = props.globals.getNode("/velocities/speed-east-fps", 1);
me.hdgN = props.globals.getNode("/orientation/heading-deg", 1);
setlistener("/sim/signals/reinit", func(n) { n.getValue() or me.reset() });
setlistener("/sim/crashed", func(n) { n.getValue() and me.reset() });
@ -267,21 +268,37 @@ var fly_by_view_handler = {
},
reset: func {
me.chase = -getprop("/sim/chase-distance-m");
me.course = me.hdgN.getValue();
# me.course = me.hdgN.getValue();
var vn = me.vnN.getValue();
var ve = me.veN.getValue();
me.course = (0.5*math.pi - math.atan2(vn, ve))*R2D;
me.last = geo.aircraft_position();
me.setpos(1);
me.dist = 20;
# me.dist = 20;
},
setpos : func(force = 0) {
var pos = geo.aircraft_position();
var vn = me.vnN.getValue();
var ve = me.veN.getValue();
var dist = 0.0;
if ( force ) {
# predict distance based on speed
var mps = math.sqrt( vn*vn + ve*ve ) * FT2M;
dist = mps * 3.5; # 3.5 seconds worth of travel
} else {
# use actual distance
dist = me.last.distance_to(pos);
}
# check if the aircraft has moved enough
var dist = me.last.distance_to(pos);
if (dist < 1.7 * me.chase and !force)
return 1.13;
# "predict" and remember next aircraft position
var course = me.hdgN.getValue();
# var course = me.hdgN.getValue();
var course = (0.5*math.pi - math.atan2(vn, ve))*R2D;
var delta_alt = (pos.alt() - me.last.alt()) * 0.5;
pos.apply_course_distance(course, dist * 0.8);
pos.set_alt(pos.alt() + delta_alt);

View file

@ -0,0 +1,27 @@
# Set the global weather according to the defined
# scenario in /environment/weather-scenario
#
var initialize_weather_scenario = func {
getprop( "/environment/params/metar-updates-environment", 0 ) == 0 and return;
getprop( "/environment/realwx/enabled", 0 ) and return;
getprop( "/environment/metar/data", "" ) != "" and return;
# preset configured scenario
var scn = getprop("/environment/weather-scenario", "");
var wsn = props.globals.getNode( "/environment/weather-scenarios" );
if( wsn != nil ) {
var scenarios = wsn.getChildren("scenario");
forindex (var i; scenarios ) {
if( scenarios[i].getNode("name").getValue() == scn ) {
setprop("/environment/metar/data", scenarios[i].getNode("metar").getValue() );
break;
}
}
}
};
_setlistener("/sim/signals/nasal-dir-initialized", func {
initialize_weather_scenario();
delete(globals, "weather_scenario");
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -27,16 +27,20 @@
<layout>hbox</layout>
<default-padding>1</default-padding>
<empty><stretch>true</stretch></empty>
<empty>
<stretch>true</stretch>
</empty>
<text>
<label>About FlightGear</label>
</text>
<empty><stretch>true</stretch></empty>
<empty>
<stretch>true</stretch>
</empty>
<button>
<legend></legend>
<legend/>
<key>Esc</key>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
@ -48,50 +52,100 @@
</group>
<hrule/>
<group>
<layout>vbox</layout>
<halign>left</halign>
<text>
<label>FlightGear Flight Simulator</label>
</text>
<text>
<label>MMMMMMMMMMMMM</label>
<format>Version: %s</format>
<halign>left</halign>
<label>MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM</label>
<format>This is FlightGear Flight Simulator V%s</format>
<property>/sim/version/flightgear</property>
</text>
<text>
<label>(c) 1996-2011, the FlightGear contributors</label>
<halign>left</halign>
<label>FlightGear is free and open source software, licensed</label>
</text>
<text>
<label>http://www.flightgear.org/</label>
<halign>left</halign>
<label>under the GNU General Public License Version 2.</label>
</text>
<text>
<label>License: GNU General Public License Version 2</label>
<halign>left</halign>
<label>Get new versions, add-ons, forum, wiki and more</label>
</text>
<text>
<halign>left</halign>
<label>from the web-site at http://www.flightgear.org/ for free.</label>
</text>
<text>
<halign>left</halign>
<label>Have a nice flight!</label>
</text>
<empty>
<stretch>true</stretch>
</empty>
<text>
<halign>left</halign>
<label>Version information</label>
</text>
<text>
<halign>left</halign>
<label>MMMMMMMMMM</label>
<format>SimGear Version: %s</format>
<property>/sim/version/flightgear</property>
</text>
<text>
<halign>left</halign>
<label>MMMMMMMMMM</label>
<format>SimGear Version: %s</format>
<property>/sim/version/simgear</property>
</text>
<text>
<halign>left</halign>
<label>MMMMMMMMMMMMMMMMMM</label>
<format>OpenSceneGraph Version: %s</format>
<property>/sim/version/openscenegraph</property>
</text>
<text>
<halign>left</halign>
<label>MMMMMMMMMMMMMMMMMM</label>
<format>Build Id: %s</format>
<property>/sim/version/build-id</property>
</text>
<text>
<halign>left</halign>
<label>MMMMMM</label>
<format>Build Number: %d</format>
<property>/sim/version/build-number</property>
</text>
<text>
<halign>left</halign>
<label>MMMMMM</label>
<format>Revision: %s</format>
<property>/sim/version/revision</property>
</text>
<hrule/>
<text>
<label>(c) 1996-2011, the FlightGear contributors</label>
</text>
</group>
<nasal>
<open><![CDATA[
@ -102,4 +156,3 @@
</nasal>
</PropertyList>

View file

@ -39,6 +39,7 @@ command interface /autopilot/route-manager/input:
var clear = func {
cmd.setValue("@clear");
selection.setIntValue(-1);
}
var insert = func {

261
gui/dialogs/screenshot.xml Normal file
View file

@ -0,0 +1,261 @@
<?xml version="1.0"?>
<!--
Ctrl-click on "." toggles display of hidden Unix filex (dotfiles)
Ctrl-click on ".." enters $FG_ROOT
Shift-click on ".." enters $FG_HOME
Alt-click on ".." enters current working directory
-->
<PropertyList>
<name>screenshot</name>
<dialog-name>screenshot</dialog-name>
<layout>vbox</layout>
<resizable>true</resizable>
<pref-width>450</pref-width>
<group>
<layout>hbox</layout>
<empty><stretch>1</stretch></empty>
<text>
<label>Select directory</label>
</text>
<empty><stretch>1</stretch></empty>
<button>
<pref-width>16</pref-width>
<pref-height>16</pref-height>
<legend></legend>
<default>1</default>
<keynum>27</keynum>
<border>2</border>
<binding>
<command>nasal</command>
<script>close()</script>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
<hrule/>
<input>
<name>dir-input</name>
<pref-width>442</pref-width>
<halign>fill</halign>
<property>/sim/gui/dialogs/screenshot/directory</property>
<live>1</live>
<binding>
<command>dialog-apply</command>
<object-name>dir-input</object-name>
</binding>
<binding>
<command>nasal</command>
<script>dir_input()</script>
</binding>
</input>
<list>
<name>list</name>
<halign>fill</halign>
<valign>fill</valign>
<stretch>true</stretch>
<pref-height>300</pref-height>
<property>/sim/gui/dialogs/screenshot/selection</property>
<binding>
<command>dialog-apply</command>
<object-name>list</object-name>
</binding>
<binding>
<command>nasal</command>
<script>select()</script>
</binding>
</list>
<group>
<layout>hbox</layout>
<checkbox>
<halign>left</halign>
<label>Hide menubar from screenshot</label>
<name>hide-menubar</name>
<property>/sim/gui/dialogs/screenshot/hide-menubar</property>
<binding>
<command>dialog-apply</command>
<object-name>hide-menubar</object-name>
</binding>
</checkbox>
<button>
<legend>OK</legend>
<live>1</live>
<pref-width>200</pref-width>
<default>true</default>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>ok()</script>
</binding>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
<nasal>
<open>
var self = cmdarg();
var list = self.getNode("list");
# cloning
var dlgname = self.getNode("name").getValue();
self.getNode("input/property").setValue("/sim/gui/dialogs/" ~ dlgname ~ "/directory");
self.getNode("list/property").setValue("/sim/gui/dialogs/" ~ dlgname ~ "/selection");
# self.getNode("group[1]/input/property").setValue("/sim/gui/dialogs/" ~ dlgname ~ "/selection");
var dlg = props.globals.getNode("/sim/gui/dialogs/" ~ dlgname, 1);
var selection = dlg.getNode("selection", 1);
var title = dlg.getNode("title", 1);
var button = dlg.getNode("button", 1);
var dir = dlg.getNode("directory", 1);
var file = dlg.getNode("file", 1);
var path = dlg.getNode("path", 1);
var dotfiles = dlg.getNode("dotfiles", 1);
dotfiles.setBoolValue(dotfiles.getValue());
var kbdctrl = props.globals.getNode("/devices/status/keyboard/ctrl", 1);
var kbdshift = props.globals.getNode("/devices/status/keyboard/shift", 1);
var kbdalt = props.globals.getNode("/devices/status/keyboard/alt", 1);
var current = { dir : "", file : "" };
var pattern = [];
foreach (var p; dlg.getChildren("pattern"))
append(pattern, p.getValue());
var matches = func(s) {
foreach (var p; pattern)
if (string.match(s, p))
return 1;
return 0;
}
var update = func(d) {
var entries = directory(d);
if (entries == nil) # dir doesn't exist or no permissions
return 0;
var files = [];
var dirs = [];
var hide = !dotfiles.getValue();
foreach (var e; entries) {
if (e == ".") {
append(dirs, e);
continue;
}
if (e == "..") {
if (d != "/")
append(dirs, e);
continue;
}
if (hide and e[0] == `.`)
continue;
var stat = io.stat(d ~ "/" ~ e);
if (stat == nil) # dead link
continue;
if (stat[11] == "dir")
append(dirs, e ~ "/");
elsif (!size(pattern) or matches(e))
append(files, e);
}
list.removeChildren("value");
var entries = sort(dirs, cmp) ~ sort(files, cmp);
forindex (var i; entries)
list.getChild("value", i, 1).setValue(entries[i]);
dir.setValue(d);
gui.dialog_update(dlgname, "dir-input", "list");
return 1;
}
var select = func {
var e = selection.getValue();
current.file = "";
var new = nil;
if (e == ".") {
new = current.dir;
if (kbdctrl.getValue())
dotfiles.setBoolValue(!dotfiles.getValue());
} elsif (e == "..") {
if (kbdctrl.getValue())
new = getprop("/sim/fg-root");
elsif (kbdshift.getValue())
new = getprop("/sim/fg-home");
elsif (kbdalt.getValue())
new = getprop("/sim/fg-current");
else
new = current.dir ~ "/..";
} elsif (e[size(e) - 1] == `/`) {
new = current.dir ~ "/" ~ e;
} else {
current.file = e;
gui.dialog_update(dlgname, "screenshot");
}
if (new != nil) {
var p = string.normpath(new);
if (update(p))
current.dir = p;
selection.setValue("");
}
}
var file_input = func {
current.file = selection.getValue();
}
var dir_input = func {
var p = string.normpath(dir.getValue());
if (update(p))
current.dir = p;
gui.dialog_update(dlgname, "list");
}
var close = func {
call(func { gui.Dialog.instance[dlgname].close() }, nil, var err = []);
}
var ok = func {
dir_input();
file_input();
var p = string.normpath(current.dir ~ "/" ~ current.file);
var stat = io.stat(p);
path.setValue(stat != nil and stat[11] == "dir" ? p ~ "/" : p);
file.setValue(current.file);
close();
}
var op = button.getValue();
if (op == nil or op == "")
op = "OK";
self.getNode("group[1]/button/legend").setValue(op);
var t = title.getValue();
if (t == nil or t == "")
t = "Select File";
self.getNode("group[0]/text/label").setValue(t);
current.dir = (var d = dir.getValue()) != nil and d != "" ? d : getprop("/sim/fg-current");
current.file = (var d = file.getValue()) != nil and d != "" ? d : "";
gui.dialog_update(dlgname, "screenshot"); ## dir-input ?
update(string.normpath(current.dir));
dir.setValue(current.dir);
</open>
</nasal>
</PropertyList>

View file

@ -578,6 +578,12 @@
<label>Dewpt (C)</label>
</text>
<text>
<row>0</row>
<col>6</col>
<label>Turbulence</label>
</text>
<input>
<name>aloft-4-elevation-ft</name>
<row>1</row>
@ -686,6 +692,33 @@
</binding>
</input>
<combo>
<name>aloft-4-turbulence</name>
<row>1</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/aloft/entry[4]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>aloft-4-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("aloft",4);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
<input>
<name>aloft-3-elevation-ft</name>
<row>2</row>
@ -794,6 +827,33 @@
</binding>
</input>
<combo>
<name>aloft-3-turbulence</name>
<row>2</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/aloft/entry[3]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>aloft-3-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("aloft",3);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
<input>
<name>aloft-2-elevation-ft</name>
<row>3</row>
@ -902,6 +962,34 @@
</binding>
</input>
<combo>
<name>aloft-2-turbulence</name>
<row>3</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/aloft/entry[2]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>aloft-2-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("aloft",2);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
<input>
<name>aloft-1-elevation-ft</name>
<row>4</row>
@ -1010,6 +1098,33 @@
</binding>
</input>
<combo>
<name>aloft-1-turbulence</name>
<row>4</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/aloft/entry[1]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>aloft-1-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("aloft",1);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
<input>
<name>aloft-0-elevation-ft</name>
<row>5</row>
@ -1123,6 +1238,34 @@
<object-name>aloft-0-dewpoint-degc</object-name>
</binding>
</input>
<combo>
<name>aloft-0-turbulence</name>
<row>5</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/aloft/entry[0]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>aloft-0-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("aloft",0);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
</group>
<empty>
<stretch>true</stretch>
@ -1316,6 +1459,33 @@
</binding>
</input>
<combo>
<name>boundary-1-turbulence</name>
<row>1</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/boundary/entry[1]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>boundary-1-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("boundary",1);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
<input>
<name>boundary-0-elevation-ft</name>
<row>2</row>
@ -1429,6 +1599,34 @@
<object-name>boundary-0-dewpoint-degc</object-name>
</binding>
</input>
<combo>
<name>boundary-0-turbulence</name>
<row>2</row>
<col>6</col>
<pref-width>90</pref-width>
<live>true</live>
<property>/environment/config/boundary/entry[0]/turbulence-name</property>
<value>none</value>
<value>light</value>
<value>moderate</value>
<value>severe</value>
<binding>
<command>dialog-apply</command>
<object-name>boundary-0-turbulence</object-name>
</binding>
<binding>
<command>nasal</command>
<script>controller.setTurbulence("boundary",0);</script>
</binding>
<!--enable>
<equals>
<property>/sim/gui/dialogs/weather-scenario/state</property>
<value type="int">1</value>
</equals>
</enable-->
</combo>
</group>
<empty>
<stretch>true</stretch>
@ -1593,13 +1791,35 @@
},
open : func {
for( var i = 0; i < 5; i+=1 )
me.initTurbulence("aloft", i );
for( var i = 0; i < 2; i+=1 )
me.initTurbulence("boundary", i );
#initialize the METAR source selection
if( getprop( "environment/params/metar-updates-environment" ) == 0 ) {
setprop( me.base ~ "/source-selection", "Disabled" );
} else if( getprop( "environment/realwx/enabled" ) ) {
setprop( me.base ~ "/source-selection", "Live data" );
} else {
setprop( me.base ~ "/source-selection", "Manual input" );
# preset configured scenario
var wsn = props.globals.getNode( "/environment/weather-scenarios" );
var found = 0;
if( wsn != nil ) {
var scenarios = wsn.getChildren("scenario");
forindex (var i; scenarios ) {
var metarN = scenarios[i].getNode("metar");
metarN == nil and continue;
if( metarN.getValue() == getprop("/environment/metar/data","") ) {
setprop( me.base ~ "/source-selection", scenarios[i].getNode("name").getValue() );
found = 1;
break;
}
}
}
if( found == 0 )
setprop( me.base ~ "/source-selection", "Manual input" );
}
setprop( me.base ~ "/metar", normalize_string(getprop("environment/metar/data")) );
@ -1697,6 +1917,26 @@
gui.dialog_update( "weather", "metar" );
},
setTurbulence : func( where, idx ) {
var propPath = "/environment/config/" ~ where ~ "/entry[" ~ idx ~ "]/";
setprop( propPath ~ "turbulence/magnitude-norm",
me.turbulenceNames[getprop(propPath ~ "turbulence-name")]/(size(me.turbulenceNames)-1) );
},
initTurbulence : func( where, idx ) {
var propPath = "/environment/config/" ~ where ~ "/entry[" ~ idx ~ "]/";
var turb = getprop( propPath ~ "turbulence/magnitude-norm" ) * (size(me.turbulenceNames)-1);
turb = int(int(10*turb+5)/10); # round to nearest integer
foreach( var t; keys(me.turbulenceNames) ) {
if( me.turbulenceNames[t] == turb ) {
setprop( propPath ~ "turbulence-name", t );
break;
}
}
},
turbulenceNames : { "none" : 0, "light" : 1, "moderate" : 2, "severe" : 3 },
};
var controller = GlobalWeatherDialogController.new( cmdarg() );

View file

@ -67,6 +67,13 @@
</script>
</binding>
</item>
<item>
<label>Screesnhot (set directory)</label>
<binding>
<command>nasal</command>
<script>gui.save_screenshot()</script>
</binding>
</item>
<!--
<item>
<label>Last snapshot</label>

View file

@ -255,7 +255,16 @@ top down before the key bindings are parsed.
</binding>
</key>
<key n="27">
<key n="26">
<name>Ctrl-Z</name>
<desc>Reset visibility to default</desc>
<binding>
<command>nasal</command>
<script>environment.resetVisibility()</script>
</binding>
</key>
<key n="27">
<name>ESC</name>
<desc>Prompt and quit FlightGear</desc>
<binding>
@ -765,7 +774,8 @@ top down before the key bindings are parsed.
<desc>Decrease Visibility</desc>
<repeatable type="bool">true</repeatable>
<binding>
<command>decrease-visibility</command>
<command>nasal</command>
<script>environment.decreaseVisibility()</script>
</binding>
</key>
@ -1040,8 +1050,9 @@ top down before the key bindings are parsed.
<name>z</name>
<desc>Increase Visibility</desc>
<repeatable type="bool">true</repeatable>
<binding>
<command>increase-visibility</command>
<binding>
<command>nasal</command>
<script>environment.increaseVisibility()</script>
</binding>
</key>

View file

@ -181,6 +181,12 @@ Shared parameters for various materials.
<wrapu>false</wrapu>
<wrapv>false</wrapv>
</material>
<material>
<name>pa_stopway</name>
<texture>Runway/pa_stopway.png</texture>
<wrapu>false</wrapu>
</material>
<material>
<name>pa_L</name>
@ -423,6 +429,12 @@ Shared parameters for various materials.
<wrapu>false</wrapu>
<wrapv>false</wrapv>
</material>
<material>
<name>pc_stopway</name>
<texture>Runway/pc_stopway.png</texture>
<wrapu>false</wrapu>
</material>
<material>
<name>pc_L</name>
@ -1350,6 +1362,7 @@ Shared parameters for various materials.
<name>IrrCropPastureCover</name>
<name>IrrCrop</name>
<name>Orchard</name>
<name>Rice</name>
<texture>Terrain/irrcrop1.png</texture>
<texture>Terrain/irrcrop2.png</texture>
<texture>Terrain/irrcrop3.png</texture>

View file

@ -246,7 +246,7 @@ Started September 2000 by David Megginson, david@megginson.com
</current-view>
<panel>
<path>Aircraft/Generic/Panels/generic-vfr-panel.xml</path>
<visibility type="bool">false</visibility>
<visibility type="bool" userarchive="y">false</visibility>
<jitter type="bool">false</jitter>
</panel>
<panel_2>
@ -574,8 +574,8 @@ Started September 2000 by David Megginson, david@megginson.com
</gui>
<mouse>
<hide-cursor>true</hide-cursor>
<cursor-timeout-sec>10.0</cursor-timeout-sec>
<hide-cursor type="bool" userarchive="y">true</hide-cursor>
<cursor-timeout-sec type="int" userarchive="y">10.0</cursor-timeout-sec>
</mouse>
<replay>