diff --git a/A320-100-CFM.xml b/A320-100-CFM.xml index e79ddbcd..eeb5ebf1 100644 --- a/A320-100-CFM.xml +++ b/A320-100-CFM.xml @@ -160,7 +160,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd"> </tank> </propulsion> - <system file="glass-effect1"/> + <system file="glass-effect"/> <system file="a320-fcs"/> <system file="a320-fuel"/> <system file="a320-fwc"/> diff --git a/A320-200-CFM.xml b/A320-200-CFM.xml index c731d0f4..b0a11a23 100644 --- a/A320-200-CFM.xml +++ b/A320-200-CFM.xml @@ -159,7 +159,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd"> </tank> </propulsion> - <system file="glass-effect1"/> + <system file="glass-effect"/> <system file="a320-fcs"/> <system file="a320-adr"/> <system file="a320-fuel"/> diff --git a/A320-200-IAE.xml b/A320-200-IAE.xml index fd7dac96..872f5b88 100644 --- a/A320-200-IAE.xml +++ b/A320-200-IAE.xml @@ -159,7 +159,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd"> </tank> </propulsion> - <system file="glass-effect1"/> + <system file="glass-effect"/> <system file="a320-fcs"/> <system file="a320-fuel"/> <system file="a320-fwc"/> diff --git a/A320-main.xml b/A320-main.xml index e71fd2dd..723e6698 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -45,7 +45,7 @@ <ice-inches>0.0</ice-inches> <salvage-control>/controls/deice/windowprobeheat</salvage-control> <sensitivity type="double">0.5</sensitivity> - <!-- not relevant for fdm, ignore output-property --> + <output-property>/environment/aircraft-effects/frost-level</output-property> </iceable> <iceable> <name>Fuselage</name> @@ -1676,6 +1676,33 @@ <script>libraries.resetView();</script> </binding> </key> + <key n="105"> + <name>i</name> + <desc>Change view to lights</desc> + <repeatable type="bool">true</repeatable> + <binding> + <command>nasal</command> + <script>libraries.lightsView();</script> + </binding> + </key> + <key n="111"> + <name>o</name> + <desc>Change view to overhead</desc> + <repeatable type="bool">true</repeatable> + <binding> + <command>nasal</command> + <script>libraries.overheadView();</script> + </binding> + </key> + <key n="117"> + <name>u</name> + <desc>Change view to pedestal</desc> + <repeatable type="bool">true</repeatable> + <binding> + <command>nasal</command> + <script>libraries.pedestalView();</script> + </binding> + </key> <key n="120"> <name>x</name> <desc>Decrease field of view</desc> @@ -1685,6 +1712,15 @@ <script>libraries.fovZoom(-1);</script> </binding> </key> + <key n="121"> + <name>y</name> + <desc>Change view to autopilot</desc> + <repeatable type="bool">true</repeatable> + <binding> + <command>nasal</command> + <script>libraries.autopilotView();</script> + </binding> + </key> <key n="127"> <name>DEL</name> <desc>Simple Engage/Disengage reversers</desc> @@ -1800,6 +1836,12 @@ <value>0</value> <value>1</value> </binding> + <binding> + <command>property-cycle</command> + <property>sim/rendering/als-secondary-lights/use-searchlight</property> + <value>0</value> + <value>1</value> + </binding> </key> </keyboard> </input> @@ -1926,6 +1968,9 @@ <file>Aircraft/A320-family/gui/dialogs/refuel.nas</file> <file>Aircraft/A320-family/gui/dialogs/rmp.nas</file> </Dialogs> + <save> + <file>Aircraft/A320-family/Nasal/Systems/save.nas</file> + </save> </nasal> </PropertyList> diff --git a/A320neo-CFM.xml b/A320neo-CFM.xml index 67cb63e2..e19a453e 100644 --- a/A320neo-CFM.xml +++ b/A320neo-CFM.xml @@ -159,7 +159,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd"> </tank> </propulsion> - <system file="glass-effect1"/> + <system file="glass-effect"/> <system file="a320-fcs"/> <system file="a320-fuel"/> <system file="a320-fwc"/> diff --git a/A320neo-PW.xml b/A320neo-PW.xml index 78827afc..7d3de32e 100644 --- a/A320neo-PW.xml +++ b/A320neo-PW.xml @@ -159,7 +159,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd"> </tank> </propulsion> - <system file="glass-effect1"/> + <system file="glass-effect"/> <system file="a320-fcs"/> <system file="a320-fuel"/> <system file="a320-fwc"/> diff --git a/AircraftConfig/acconfig.nas b/AircraftConfig/acconfig.nas index ca215827..5f875208 100644 --- a/AircraftConfig/acconfig.nas +++ b/AircraftConfig/acconfig.nas @@ -96,6 +96,7 @@ setprop("systems/acconfig/options/weight-kgs", 0); setprop("systems/acconfig/options/adirs-skip", 0); setprop("systems/acconfig/options/welcome-skip", 0); setprop("systems/acconfig/options/no-rendering-warn", 0); +setprop("systems/acconfig/options/save-state", 0); setprop("systems/acconfig/options/pfd-rate", 1); setprop("systems/acconfig/options/nd-rate", 1); setprop("systems/acconfig/options/uecam-rate", 1); @@ -187,9 +188,17 @@ setlistener("/sim/signals/fdm-initialized", func { } setprop("systems/acconfig/options/revision", current_revision); writeSettings(); + if (getprop("options/system/save-state") == 1) + { + save.restore(save.default, getprop("/sim/fg-home") ~ "/Export/" ~ getprop("/sim/aircraft") ~ "-save.xml"); + } spinning.stop(); }); +setlistener("/sim/signals/exit", func { + save.save(save.default, getprop("/sim/fg-home") ~ "/Export/" ~ getprop("/sim/aircraft") ~ "-save.xml"); +}); + var renderingSettings = { check: func() { var rembrandt = getprop("sim/rendering/rembrandt/enabled"); @@ -223,6 +232,7 @@ var readSettings = func { io.read_properties(getprop("sim/fg-home") ~ "/Export/A320-family-config.xml", "/systems/acconfig/options"); setprop("options/system/keyboard-mode", getprop("systems/acconfig/options/keyboard-mode")); setprop("options/system/weight-kgs", getprop("systems/acconfig/options/weight-kgs")); + setprop("options/system/save-state", getprop("systems/acconfig/options/save-state")); setprop("controls/adirs/skip", getprop("systems/acconfig/options/adirs-skip")); setprop("sim/model/autopush/route/show", getprop("systems/acconfig/options/autopush/show-route")); setprop("sim/model/autopush/route/show-wingtip", getprop("systems/acconfig/options/autopush/show-wingtip")); @@ -232,6 +242,7 @@ var readSettings = func { var writeSettings = func { setprop("systems/acconfig/options/keyboard-mode", getprop("options/system/keyboard-mode")); setprop("systems/acconfig/options/weight-kgs", getprop("options/system/weight-kgs")); + setprop("systems/acconfig/options/save-state", getprop("options/system/save-state")); setprop("systems/acconfig/options/adirs-skip", getprop("controls/adirs/skip")); setprop("systems/acconfig/options/autopush/show-route", getprop("sim/model/autopush/route/show")); setprop("systems/acconfig/options/autopush/show-wingtip", getprop("sim/model/autopush/route/show-wingtip")); diff --git a/AircraftConfig/main.xml b/AircraftConfig/main.xml index 84620273..f3e266a1 100644 --- a/AircraftConfig/main.xml +++ b/AircraftConfig/main.xml @@ -426,6 +426,27 @@ </binding> <live>true</live> </checkbox> + + <checkbox> + <!-- TODO there might be a better way to formulate this. --> + <label>Save states between sessions</label> + <halign>left</halign> + <property>/systems/acconfig/options/save-state</property> + <binding> + <command>property-toggle</command> + <property>/options/system/save-state</property> + </binding> + <binding> + <command>dialog-apply</command> + </binding> + <binding> + <command>nasal</command> + <script> + acconfig.writeSettings(); + </script> + </binding> + <live>true</live> + </checkbox> <group> <layout>hbox</layout> diff --git a/Models/FlightDeck/res/0001.png b/Models/FlightDeck/res/0001.png deleted file mode 100644 index 7576ebdb..00000000 Binary files a/Models/FlightDeck/res/0001.png and /dev/null differ diff --git a/Models/FlightDeck/res/0002.png b/Models/FlightDeck/res/0002.png deleted file mode 100644 index 0f12d744..00000000 Binary files a/Models/FlightDeck/res/0002.png and /dev/null differ diff --git a/Models/FlightDeck/res/0003.png b/Models/FlightDeck/res/0003.png deleted file mode 100644 index 22947c41..00000000 Binary files a/Models/FlightDeck/res/0003.png and /dev/null differ diff --git a/Models/FlightDeck/res/0004.png b/Models/FlightDeck/res/0004.png deleted file mode 100644 index f6b69c03..00000000 Binary files a/Models/FlightDeck/res/0004.png and /dev/null differ diff --git a/Models/FlightDeck/res/0005.png b/Models/FlightDeck/res/0005.png deleted file mode 100644 index f6b69c03..00000000 Binary files a/Models/FlightDeck/res/0005.png and /dev/null differ diff --git a/Models/FlightDeck/res/0006.png b/Models/FlightDeck/res/0006.png deleted file mode 100644 index f6b69c03..00000000 Binary files a/Models/FlightDeck/res/0006.png and /dev/null differ diff --git a/Models/FlightDeck/res/ped_sw_1.png b/Models/FlightDeck/res/ped_sw_1.png deleted file mode 100644 index 6ce04102..00000000 Binary files a/Models/FlightDeck/res/ped_sw_1.png and /dev/null differ diff --git a/Models/FlightDeck/res/ped_sw_2.png b/Models/FlightDeck/res/ped_sw_2.png deleted file mode 100644 index e2e6336a..00000000 Binary files a/Models/FlightDeck/res/ped_sw_2.png and /dev/null differ diff --git a/Models/FlightDeck/res/ped_xtra.png b/Models/FlightDeck/res/ped_xtra.png deleted file mode 100644 index 8ca5b7ff..00000000 Binary files a/Models/FlightDeck/res/ped_xtra.png and /dev/null differ diff --git a/Models/Fuselages/A320-100/fuselage.xml b/Models/Fuselages/A320-100/fuselage.xml index 4877bde7..3a74a144 100644 --- a/Models/Fuselages/A320-100/fuselage.xml +++ b/Models/Fuselages/A320-100/fuselage.xml @@ -14,7 +14,7 @@ <effect> <inherits-from>Effects/glass</inherits-from> - <object-name>Windshield</object-name> + <object-name>Windsheild</object-name> <object-name>Windows</object-name> <object-name>glass</object-name> <object-name>glass1</object-name> diff --git a/Models/Fuselages/A320/fuselage.xml b/Models/Fuselages/A320/fuselage.xml index 4877bde7..3a74a144 100644 --- a/Models/Fuselages/A320/fuselage.xml +++ b/Models/Fuselages/A320/fuselage.xml @@ -14,7 +14,7 @@ <effect> <inherits-from>Effects/glass</inherits-from> - <object-name>Windshield</object-name> + <object-name>Windsheild</object-name> <object-name>Windows</object-name> <object-name>glass</object-name> <object-name>glass1</object-name> diff --git a/Models/Fuselages/A320neo/fuselage.xml b/Models/Fuselages/A320neo/fuselage.xml index 4877bde7..3a74a144 100644 --- a/Models/Fuselages/A320neo/fuselage.xml +++ b/Models/Fuselages/A320neo/fuselage.xml @@ -14,7 +14,7 @@ <effect> <inherits-from>Effects/glass</inherits-from> - <object-name>Windshield</object-name> + <object-name>Windsheild</object-name> <object-name>Windows</object-name> <object-name>glass</object-name> <object-name>glass1</object-name> diff --git a/Models/Instruments/ND/canvas/res/airbus_vor.old.svg b/Models/Instruments/ND/canvas/res/airbus_vor.old.svg deleted file mode 100644 index 43b3ef98..00000000 --- a/Models/Instruments/ND/canvas/res/airbus_vor.old.svg +++ /dev/null @@ -1,101 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="50" - height="50" - id="svg3076" - version="1.1" - inkscape:version="0.48.2 r9819" - sodipodi:docname="airbus-vor.svg"> - <metadata - id="metadata3092"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs3090" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1248" - inkscape:window-height="703" - id="namedview3088" - showgrid="false" - inkscape:zoom="1.6619718" - inkscape:cx="-33.09322" - inkscape:cy="71" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg3076" /> - <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ --> - <g - id="g3078" - inkscape:groupmode="layer" - transform="matrix(0.34013605,0,0,0.33783784,0.84746249,0.78240397)"> - <title - id="title3080">Layer 1</title> - <g - id="svg_7"> - <line - id="svg_3" - y2="71" - x2="142" - y1="71" - x1="112" - style="fill:none;stroke:#b00064;stroke-width:5" /> - <circle - id="svg_2" - r="39.115215" - cy="71.5" - cx="71" - sodipodi:cx="71" - sodipodi:cy="71.5" - sodipodi:rx="39.115215" - sodipodi:ry="39.115215" - style="fill:none;stroke:#b00064;stroke-width:5" - d="m 110.11522,71.5 c 0,21.602737 -17.512483,39.11522 -39.11522,39.11522 -21.602737,0 -39.115215,-17.512483 -39.115215,-39.11522 0,-21.602737 17.512478,-39.115215 39.115215,-39.115215 21.602737,0 39.11522,17.512478 39.11522,39.115215 z" /> - <line - id="svg_4" - y2="71" - x2="30" - y1="71" - x1="0" - style="fill:none;stroke:#b00064;stroke-width:5" /> - <line - transform="matrix(0,1,-1,0,198,58)" - id="svg_5" - y2="128" - x2="85" - y1="128" - x1="55" - style="fill:none;stroke:#b00064;stroke-width:5" /> - <line - id="svg_6" - transform="matrix(0,1,-1,0,85,-55)" - y2="15" - x2="85" - y1="15" - x1="55" - style="fill:none;stroke:#b00064;stroke-width:5" /> - </g> - </g> -</svg> diff --git a/Models/Instruments/ND/res/A320neo_symbols.png b/Models/Instruments/ND/res/A320neo_symbols.png deleted file mode 100644 index ca6e434b..00000000 Binary files a/Models/Instruments/ND/res/A320neo_symbols.png and /dev/null differ diff --git a/Models/Instruments/ND/res/Main_Displays.png b/Models/Instruments/ND/res/Main_Displays.png deleted file mode 100644 index a881fd18..00000000 Binary files a/Models/Instruments/ND/res/Main_Displays.png and /dev/null differ diff --git a/Models/Instruments/ND/res/airbus_symbols.png b/Models/Instruments/ND/res/airbus_symbols.png deleted file mode 100644 index 41a1c584..00000000 Binary files a/Models/Instruments/ND/res/airbus_symbols.png and /dev/null differ diff --git a/Models/Instruments/ND/res/hsi2a.png b/Models/Instruments/ND/res/hsi2a.png deleted file mode 100644 index 633ff531..00000000 Binary files a/Models/Instruments/ND/res/hsi2a.png and /dev/null differ diff --git a/Models/Instruments/ND/res/hsiarc.png b/Models/Instruments/ND/res/hsiarc.png deleted file mode 100644 index 2c410ed8..00000000 Binary files a/Models/Instruments/ND/res/hsiarc.png and /dev/null differ diff --git a/Models/Instruments/ND/res/mask.png b/Models/Instruments/ND/res/mask.png deleted file mode 100644 index 74bad34d..00000000 Binary files a/Models/Instruments/ND/res/mask.png and /dev/null differ diff --git a/Models/Instruments/ND/res/maskfull.png b/Models/Instruments/ND/res/maskfull.png deleted file mode 100644 index ed8892c3..00000000 Binary files a/Models/Instruments/ND/res/maskfull.png and /dev/null differ diff --git a/Models/Instruments/ND/res/od_wxradar.png b/Models/Instruments/ND/res/od_wxradar.png deleted file mode 100644 index 159304c1..00000000 Binary files a/Models/Instruments/ND/res/od_wxradar.png and /dev/null differ diff --git a/Models/Instruments/ND/res/symbols.png b/Models/Instruments/ND/res/symbols.png deleted file mode 100644 index 7f663882..00000000 Binary files a/Models/Instruments/ND/res/symbols.png and /dev/null differ diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index 6bbfacdd..c76c2b2a 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -1261,9 +1261,6 @@ var canvas_PFD_1 = { } tgt_flap = 200; - if (ind_spd >= 210) { - tgt_flap = 215; - } me.flaptrgt = tgt_flap - 30 - me.ASI; me.SPDflaptrgtdiff = tgt_flap - ind_spd; @@ -1881,9 +1878,6 @@ var canvas_PFD_2 = { } tgt_flap = 200; - if (ind_spd >= 210) { - tgt_flap = 215; - } me.flaptrgt = tgt_flap - 30 - me.ASI; me.SPDflaptrgtdiff = tgt_flap - ind_spd; diff --git a/Models/LandingGears/a320.mlg.left.xml b/Models/LandingGears/a320.mlg.left.xml index 26fad8f5..22709509 100644 --- a/Models/LandingGears/a320.mlg.left.xml +++ b/Models/LandingGears/a320.mlg.left.xml @@ -112,7 +112,7 @@ <object-name>ACTUTATOR</object-name> <object-name>Main Tires</object-name> <object-name>Compression lower scissor</object-name> - <property>gear/gear[1]/compression-ft</property> + <property>gear/gear[1]/compression-norm</property> <factor>0.305</factor> <axis> <x1-m>0</x1-m> diff --git a/Models/LandingGears/a320.mlg.right.xml b/Models/LandingGears/a320.mlg.right.xml index 0dab8028..c225ccf8 100644 --- a/Models/LandingGears/a320.mlg.right.xml +++ b/Models/LandingGears/a320.mlg.right.xml @@ -112,7 +112,7 @@ <object-name>ACTUTATOR</object-name> <object-name>Main Tires</object-name> <object-name>Compression lower scissor</object-name> - <property>gear/gear[2]/compression-ft</property> + <property>gear/gear[2]/compression-norm</property> <factor>0.305</factor> <axis> <x1-m>0</x1-m> diff --git a/Models/LandingGears/a320.nlg.xml b/Models/LandingGears/a320.nlg.xml index 9f57dd4f..db90103d 100644 --- a/Models/LandingGears/a320.nlg.xml +++ b/Models/LandingGears/a320.nlg.xml @@ -112,7 +112,7 @@ <object-name>AXLE</object-name> <object-name>Nose Tires</object-name> <object-name>Compression lower scissor</object-name> - <property>gear/gear[0]/compression-ft</property> + <property>gear/gear[0]/compression-norm</property> <factor>0.305</factor> <axis> <x1-m>-0.366</x1-m> diff --git a/Nasal/Sim/libraries.nas b/Nasal/Sim/libraries.nas index 6995097d..251f2ff0 100644 --- a/Nasal/Sim/libraries.nas +++ b/Nasal/Sim/libraries.nas @@ -731,9 +731,125 @@ var resetView = func() { } interpolate("sim/current-view/field-of-view", 63, 0.66); - interpolate("sim/current-view/heading-offset-deg", hd_t,0.66); - interpolate("sim/current-view/pitch-offset-deg", -14.6,0.66); + interpolate("sim/current-view/heading-offset-deg", hd_t, 0.66); + interpolate("sim/current-view/pitch-offset-deg", -14.6, 0.66); + interpolate("sim/current-view/roll-offset-deg", 0, 0.66); + interpolate("sim/current-view/x-offset-m", -0.45, 0.66); + interpolate("sim/current-view/y-offset-m", 2.34, 0.66); + interpolate("sim/current-view/z-offset-m", -13.75, 0.66); + + if (_shakeFlag) { + setprop("sim/rendering/headshake/enabled", 1); + } + } +} + +var autopilotView = func() { + if (getprop("sim/current-view/view-number") == 0) { + if (getprop("sim/rendering/headshake/enabled")) { + var _shakeFlag = 1; + setprop("sim/rendering/headshake/enabled", 0); + } else { + var _shakeFlag = 0; + } + + var hd = getprop("sim/current-view/heading-offset-deg"); + var hd_t = 341.7; + if (hd < 180) { + hd_t = hd_t - 360; + } + + interpolate("sim/current-view/field-of-view", 63, 0.66); + interpolate("sim/current-view/heading-offset-deg", hd_t, 0.66); + interpolate("sim/current-view/pitch-offset-deg", -16.4, 0.66); + interpolate("sim/current-view/roll-offset-deg", 0, 0.66); + interpolate("sim/current-view/x-offset-m", -0.45, 0.66); + interpolate("sim/current-view/y-offset-m", 2.34, 0.66); + interpolate("sim/current-view/z-offset-m", -13.75, 0.66); + + if (_shakeFlag) { + setprop("sim/rendering/headshake/enabled", 1); + } + } +} + +var overheadView = func() { + if (getprop("sim/current-view/view-number") == 0) { + if (getprop("sim/rendering/headshake/enabled")) { + var _shakeFlag = 1; + setprop("sim/rendering/headshake/enabled", 0); + } else { + var _shakeFlag = 0; + } + + var hd = getprop("sim/current-view/heading-offset-deg"); + var hd_t = 348; + if (hd < 180) { + hd_t = hd_t - 360; + } + + interpolate("sim/current-view/field-of-view", 105.8, 0.66); + interpolate("sim/current-view/heading-offset-deg", hd_t, 0.66); + interpolate("sim/current-view/pitch-offset-deg", 65.25, 0.66); interpolate("sim/current-view/roll-offset-deg", 0,0.66); + interpolate("sim/current-view/x-offset-m", -0.12, 0.66); + interpolate("sim/current-view/y-offset-m", 2.34, 0.66); + interpolate("sim/current-view/z-offset-m", -13.75, 0.66); + + if (_shakeFlag) { + setprop("sim/rendering/headshake/enabled", 1); + } + } +} + +var pedestalView = func() { + if (getprop("sim/current-view/view-number") == 0) { + if (getprop("sim/rendering/headshake/enabled")) { + var _shakeFlag = 1; + setprop("sim/rendering/headshake/enabled", 0); + } else { + var _shakeFlag = 0; + } + + var hd = getprop("sim/current-view/heading-offset-deg"); + var hd_t = 315; + if (hd < 180) { + hd_t = hd_t - 360; + } + + interpolate("sim/current-view/field-of-view", 63, 0.66); + interpolate("sim/current-view/heading-offset-deg", hd_t, 0.66); + interpolate("sim/current-view/pitch-offset-deg", -46.3, 0.66); + interpolate("sim/current-view/roll-offset-deg", 0, 0.66); + interpolate("sim/current-view/x-offset-m", -0.45, 0.66); + interpolate("sim/current-view/y-offset-m", 2.34, 0.66); + interpolate("sim/current-view/z-offset-m", -13.75, 0.66); + + if (_shakeFlag) { + setprop("sim/rendering/headshake/enabled", 1); + } + } +} + +var lightsView = func() { + if (getprop("sim/current-view/view-number") == 0) { + if (getprop("sim/rendering/headshake/enabled")) { + var _shakeFlag = 1; + setprop("sim/rendering/headshake/enabled", 0); + } else { + var _shakeFlag = 0; + } + + var hd = getprop("sim/current-view/heading-offset-deg"); + var hd_t = 329; + if (hd < 180) { + hd_t = hd_t - 360; + } + + interpolate("sim/current-view/field-of-view", 63, 0.66); + interpolate("sim/current-view/heading-offset-deg", hd_t, 0.66); + interpolate("sim/current-view/pitch-offset-deg", 17.533, 0.66); + interpolate("sim/current-view/roll-offset-deg", 0, 0.66); interpolate("sim/current-view/x-offset-m", -0.45, 0.66); interpolate("sim/current-view/y-offset-m", 2.34, 0.66); interpolate("sim/current-view/z-offset-m", -13.75, 0.66); diff --git a/Nasal/Systems/icing.nas b/Nasal/Systems/icing.nas index 9ffffad4..35262a8e 100644 --- a/Nasal/Systems/icing.nas +++ b/Nasal/Systems/icing.nas @@ -3,17 +3,100 @@ # Copyright (c) 2019 Joshua Davidson (Octal450) -var dewpoint = 0; -var temperature = 0; -var speed = 0; -var visibility = 0; -var visibLclWx = 0; -var severity = 0; -var factor = 0; + +### Ice sensitive components definition. +var Iceable = { + new: func(node) { + var m = { parents: [Iceable] }; + m.ice_inches = node.getNode("ice-inches", 1); + m.sensitivity = node.getNode("sensitivity", 1); + + var deice_prop = node.getValue("salvage-control"); + m.deice = deice_prop ? props.globals.getNode(deice_prop, 1) : nil; + var output_prop = node.getValue("output-property"); + m.output = output_prop ? props.globals.getNode(output_prop, 1): nil; + + return m; + }, + + update: func(factor, melt) { + var icing = me.ice_inches.getValue(); + if(me.deice != nil and me.deice.getBoolValue()) { + icing += melt; + } else { + icing += factor * me.sensitivity.getValue(); + } + if(icing < 0) icing = 0; + + me.ice_inches.setValue(icing); + if(me.output != nil) me.output.setValue(icing); + }, +}; + + +### Icing parameters computation. +# Environmental parameters of the icing model. +var environment = { + dewpoint: props.globals.getNode("environment/dewpoint-degc"), + temperature: props.globals.getNode("environment/temperature-degc"), + visibility: props.globals.getNode("environment/effective-visibility-m"), + visibLclWx: props.globals.getNode("environment/visibility-m"), +}; + +var effects = { + frost_inch: props.globals.getNode("environment/aircraft-effects/frost-inch", 1), + frost_norm: props.globals.getNode("environment/aircraft-effects/frost-level"), +}; + + +# Icing factor computation. var maxSpread = 0; -var icingCond = 0; + +var severity_factor_table = [ + -0.00000166, + 0.00000277, + 0.00000277, + 0.00000554, + 0.00001108, + 0.00002216, +]; + +var melt_factor = -0.00005; + +var icing_factor = func() { + var temperature = environment.temperature.getValue(); + var dewpoint = environment.dewpoint.getValue(); + var visibility = environment.visibility.getValue(); + var visibLclWx = environment.visibLclWx.getValue(); + + # Do we create ice? + var spread = temperature - dewpoint; + # freezing fog or low temp and below dp or in advanced wx cloud + var icingCond = ((spread < maxSpread or visibility < 1000 or visibLclWx < 5000) + and temperature < 0); + + # todo: turn this into a table or something + var severity = 0; + if (icingCond) { + if (temperature >= -2) { + severity = 1; + } else if (temperature >= -12) { + severity = 3; + } else if (temperature >= -30) { + severity = 5; + } else if (temperature >= -40) { + severity = 3; + } else if (temperature >= -99) { + severity = 1; + } + } + + return severity_factor_table[severity]; +} + + +var speed = 0; var pause = 0; -var melt = 0; var windowprobe = 0; var wingBtn = 0; var wingFault = 0; @@ -31,40 +114,13 @@ var lengAnti = 0; var rengAnti = 0; var WingHasBeenTurnedOff = 0; var GroundModeFinished = 0; -var icing1 = 0; -var sensitive1 = 0; -var v = 0; -var a = 0; -var icing2 = 0; -var sensitive2 = 0; -var u = 0; -var b = 0; -var icing3 = 0; -var sensitive3 = 0; -var t = 0; -var c = 0; -var icing4 = 0; -var sensitive4 = 0; -var s = 0; -var d = 0; -var icing5 = 0; -var sensitive5 = 0; -var r = 0; -var icing6 = 0; -var sensitive6 = 0; -var q = 0; -var e = 0; -var spread = 0; var windowprb = 0; var stateL = 0; var stateR = 0; +var iceables = []; + var icingInit = func { - setprop("systems/icing/severity", "0"); # maximum severity: we will make it random - setprop("systems/icing/factor", 0.0); # the factor is how many inches we add per second - setprop("systems/icing/max-spread-degc", 0.0); - setprop("systems/icing/melt-w-heat-factor", -0.00005000); - setprop("systems/icing/icingcond", 0); setprop("controls/switches/windowprobeheat", 0); setprop("controls/switches/wing", 0); setprop("controls/switches/wingfault", 0); @@ -80,21 +136,18 @@ var icingInit = func { setprop("systems/pitot/failed", 1); setprop("controls/deice/WingHasBeenTurnedOff", 0); setprop("controls/deice/GroundModeFinished", 0); + + iceables = props.globals.getNode("sim/model/icing", 1).getChildren("iceable"); + forindex(var i; iceables) { + iceables[i] = Iceable.new(iceables[i]); + } + icing_timer.start(); } var icingModel = func { - dewpoint = getprop("environment/dewpoint-degc"); - temperature = getprop("environment/temperature-degc"); speed = getprop("velocities/airspeed-kt"); - visibility = getprop("environment/effective-visibility-m"); - visibLclWx = getprop("environment/visibility-m"); - severity = getprop("systems/icing/severity"); - factor = getprop("systems/icing/factor"); - maxSpread = getprop("systems/icing/max-spread-degc"); - icingCond = getprop("systems/icing/icingcond"); pause = getprop("sim/freeze/master"); - melt = getprop("systems/icing/melt-w-heat-factor"); windowprobe = getprop("controls/deice/windowprobeheat"); wingBtn = getprop("controls/switches/wing"); wingFault = getprop("controls/switches/wingfault"); @@ -112,104 +165,19 @@ var icingModel = func { rengAnti = getprop("controls/deice/rengine"); WingHasBeenTurnedOff = getprop("controls/deice/WingHasBeenTurnedOff"); GroundModeFinished = getprop("controls/deice/GroundModeFinished"); - - if (temperature >= 0 or !icingCond) { - setprop("systems/icing/severity", "0"); - } else if (temperature < 0 and temperature >= -2 and icingCond) { - setprop("systems/icing/severity", "1"); - } else if (temperature < -2 and temperature >= -12 and icingCond) { - setprop("systems/icing/severity", "3"); - } else if (temperature < -12 and temperature >= -30 and icingCond) { - setprop("systems/icing/severity", "5"); - } else if (temperature < -30 and temperature >= -40 and icingCond) { - setprop("systems/icing/severity", "3"); - } else if (temperature < -40 and temperature >= -99 and icingCond) { - setprop("systems/icing/severity", "1"); - } - - icing1 = getprop("sim/model/icing/iceable[0]/ice-inches"); - sensitive1 = getprop("sim/model/icing/iceable[0]/sensitivity"); - v = icing1 + (factor * sensitive1); - a = icing1 + melt; - if (icing1 < 0.0 and !pause) { - setprop("sim/model/icing/iceable[0]/ice-inches", 0.0); - } else if (wingAnti) { - setprop("sim/model/icing/iceable[0]/ice-inches", a); - } else if (!pause and !wingAnti) { - setprop("sim/model/icing/iceable[0]/ice-inches", v); - } - - icing2 = getprop("sim/model/icing/iceable[1]/ice-inches"); - sensitive2 = getprop("sim/model/icing/iceable[1]/sensitivity"); - u = icing2 + (factor * sensitive2); - b = icing2 + melt; - if (icing2 < 0.0 and !pause) { - setprop("sim/model/icing/iceable[1]/ice-inches", 0.0); - } else if (lengAnti) { - setprop("sim/model/icing/iceable[1]/ice-inches", b); - } else if (!pause and !lengAnti) { - setprop("sim/model/icing/iceable[1]/ice-inches", u); - } - - icing3 = getprop("sim/model/icing/iceable[2]/ice-inches"); - sensitive3 = getprop("sim/model/icing/iceable[2]/sensitivity"); - t = icing3 + (factor * sensitive3); - c = icing3 + melt; - if (icing3 < 0.0 and !pause) { - setprop("sim/model/icing/iceable[2]/ice-inches", 0.0); - } else if (rengAnti) { - setprop("sim/model/icing/iceable[2]/ice-inches", c); - } else if (!pause and !rengAnti) { - setprop("sim/model/icing/iceable[2]/ice-inches", t); - } - - icing4 = getprop("sim/model/icing/iceable[3]/ice-inches"); - sensitive4 = getprop("sim/model/icing/iceable[3]/sensitivity"); - s = icing4 + (factor * sensitive4); - d = icing4 + melt; - if (icing4 < 0.0 and !pause) { - setprop("sim/model/icing/iceable[3]/ice-inches", 0.0); - } else if (windowprobe) { - setprop("sim/model/icing/iceable[3]/ice-inches", d); - } else if (!pause and !windowprobe) { - setprop("sim/model/icing/iceable[3]/ice-inches", s); - } - - icing5 = getprop("sim/model/icing/iceable[4]/ice-inches"); - sensitive5 = getprop("sim/model/icing/iceable[4]/sensitivity"); - r = icing5 + (factor * sensitive5); - if (icing5 < 0.0 and !pause) { - setprop("sim/model/icing/iceable[4]/ice-inches", 0.0); - } else if (!pause) { - setprop("sim/model/icing/iceable[4]/ice-inches", r); - } - - icing6 = getprop("sim/model/icing/iceable[5]/ice-inches"); - sensitive6 = getprop("sim/model/icing/iceable[5]/sensitivity"); - q = icing6 + (factor * sensitive6); - e = icing6 + melt; - if (icing6 < 0.0 and !pause) { - setprop("sim/model/icing/iceable[5]/ice-inches", 0.0); - } else if (windowprobe) { - setprop("sim/model/icing/iceable[5]/ice-inches", e); - } else if (!pause and !windowprobe) { - setprop("sim/model/icing/iceable[5]/ice-inches", q); - } - - # Do we create ice? - spread = temperature - dewpoint; - # freezing fog or low temp and below dp or in advanced wx cloud - if ((spread < maxSpread and temperature < 0) or (temperature < 0 and visibility < 1000) or (visibLclWx < 5000 and temperature < 0)) { - setprop("systems/icing/icingcond", 1); - } else { - setprop("systems/icing/icingcond", 0); + + var factor = icing_factor(); + foreach(iceable; iceables) { + iceable.update(factor, melt_factor); } + + effects.frost_norm.setDoubleValue(effects.frost_inch.getValue() * 50); if (WingHasBeenTurnedOff and !wowl and !wowr and GroundModeFinished) { setprop("controls/deice/wing", 1); setprop("controls/switches/WingHasBeenTurnedOff", 0); } - + # If we have low pressure we have a fault if (PSI < 10) { setprop("controls/switches/wingfault", 1); @@ -232,7 +200,7 @@ var icingModel = func { setprop("systems/pitot/failed", 0); } } - + # if ((getprop("systems/electrical/bus/dc-1") == 0 or getprop("systems/electrical/bus/dc-2") == 0) and getprop("fdm/jsbsim/position/wow") == 0) { # setprop("controls/switches/leng", 1); # setprop("controls/switches/reng", 1); @@ -364,3 +332,4 @@ var update_Icing = func { } var icing_timer = maketimer(0.2, update_Icing); +icing_timer.simulatedTime = 1; diff --git a/Nasal/Systems/save.nas b/Nasal/Systems/save.nas new file mode 100644 index 00000000..f91cf4f2 --- /dev/null +++ b/Nasal/Systems/save.nas @@ -0,0 +1,74 @@ +# Copyright (C) 2020 Merspieler, merspieler _at_ airmail.cc +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Save and restore properties between sessions + +# To add more properties to autosave, just add them here. +var default = [ + # CONSUMABLES + # Fuel + "/consumables/fuel/tank[0]/level-lbs", + "/consumables/fuel/tank[1]/level-lbs", + "/consumables/fuel/tank[2]/level-lbs", + "/consumables/fuel/tank[3]/level-lbs", + "/consumables/fuel/tank[4]/level-lbs", + # CONTROLS + # rmp + "/controls/radio/rmp[0]/on", + "/controls/radio/rmp[1]/on", + "/controls/radio/rmp[2]/on", + # efis + "/instrumentation/efis[0]/inputs/range-nm", + "/instrumentation/efis[0]/nd/display-mode", + "/instrumentation/efis[0]/input/lh-vor-adf", + "/instrumentation/efis[0]/input/rh-vor-adf", + "/instrumentation/efis[1]/inputs/range-nm", + "/instrumentation/efis[1]/nd/display-mode", + "/instrumentation/efis[1]/input/lh-vor-adf", + "/instrumentation/efis[1]/input/rh-vor-adf", + # parking brake + "/controls/gear/brake-parking" +]; + +var save = func (saved_props, file) { + print("Saving state..."); + for (var i = 0; i < size(saved_props); i += 1) + { + setprop("/save" ~ saved_props[i], getprop(saved_props[i])); + } + + var saveNode = props.globals.getNode("/save", 0); + + io.write_properties(file, saveNode); + print("State saved"); +} + +var restore = func (saved_props, file) { + print("Loading saved state..."); + var readNode = props.globals.initNode("/save", ); + + io.read_properties(file, readNode); + + for (var i = 0; i < size(saved_props); i += 1) + { + var val = getprop("/save" ~ saved_props[i]); + if (val != nil) + { + setprop(saved_props[i], val); + } + } + print("Saved state loaded"); +} diff --git a/Sounds/GPWS/500-above.wav b/Sounds/GPWS/500-above.wav deleted file mode 100644 index a0b40540..00000000 Binary files a/Sounds/GPWS/500-above.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-10.wav b/Sounds/GPWS/altitude-10.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-10.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-100.wav b/Sounds/GPWS/altitude-100.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-100.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-1000.wav b/Sounds/GPWS/altitude-1000.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-1000.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-20.wav b/Sounds/GPWS/altitude-20.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-20.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-200.wav b/Sounds/GPWS/altitude-200.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-200.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-30.wav b/Sounds/GPWS/altitude-30.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-30.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-300.wav b/Sounds/GPWS/altitude-300.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-300.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-40.wav b/Sounds/GPWS/altitude-40.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-40.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-400.wav b/Sounds/GPWS/altitude-400.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-400.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-50.wav b/Sounds/GPWS/altitude-50.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-50.wav and /dev/null differ diff --git a/Sounds/GPWS/altitude-500.wav b/Sounds/GPWS/altitude-500.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/altitude-500.wav and /dev/null differ diff --git a/Sounds/GPWS/application-data-base-failed.wav b/Sounds/GPWS/application-data-base-failed.wav deleted file mode 100644 index b7c57ae7..00000000 Binary files a/Sounds/GPWS/application-data-base-failed.wav and /dev/null differ diff --git a/Sounds/GPWS/bank-angle-inop.wav b/Sounds/GPWS/bank-angle-inop.wav deleted file mode 100644 index 0c4c8bac..00000000 Binary files a/Sounds/GPWS/bank-angle-inop.wav and /dev/null differ diff --git a/Sounds/GPWS/bank-angle.wav b/Sounds/GPWS/bank-angle.wav deleted file mode 100644 index 8dbde954..00000000 Binary files a/Sounds/GPWS/bank-angle.wav and /dev/null differ diff --git a/Sounds/GPWS/callouts-inop.wav b/Sounds/GPWS/callouts-inop.wav deleted file mode 100644 index 47e2ceeb..00000000 Binary files a/Sounds/GPWS/callouts-inop.wav and /dev/null differ diff --git a/Sounds/GPWS/configuration-type-invalid.wav b/Sounds/GPWS/configuration-type-invalid.wav deleted file mode 100644 index 3dfa69ab..00000000 Binary files a/Sounds/GPWS/configuration-type-invalid.wav and /dev/null differ diff --git a/Sounds/GPWS/glideslope-inop.wav b/Sounds/GPWS/glideslope-inop.wav deleted file mode 100644 index 0840c4ba..00000000 Binary files a/Sounds/GPWS/glideslope-inop.wav and /dev/null differ diff --git a/Sounds/GPWS/gpws-inop.wav b/Sounds/GPWS/gpws-inop.wav deleted file mode 100644 index 54b78da4..00000000 Binary files a/Sounds/GPWS/gpws-inop.wav and /dev/null differ diff --git a/Sounds/GPWS/minimums.wav b/Sounds/GPWS/minimums.wav deleted file mode 100644 index 59c8e62a..00000000 Binary files a/Sounds/GPWS/minimums.wav and /dev/null differ diff --git a/Systems/glass-effect.xml b/Systems/glass-effect.xml new file mode 100644 index 00000000..4022bc78 --- /dev/null +++ b/Systems/glass-effect.xml @@ -0,0 +1,56 @@ +<?xml version="1.0"?> + +<!-- Copyright (c) 2019 Joshua Davidson (Octal450) --> + +<system name="glass-effect"> + <channel name="rain"> + <fcs_function name="glass-effects/splashx"> + <function> + <table> + <independentVar>velocities/u-aero-fps</independentVar> + <tableData> + 0 0.01 + 7 0.01 + 8 -0.01 + 25 -0.5 + 50 -1.2 + 120 -2 + </tableData> + </table> + </function> + <output>/environment/aircraft-effects/splash-vector-x</output> + </fcs_function> + + <fcs_function name="glass-effects/splashy"> + <function> + <table> + <independentVar>velocities/v-aero-fps</independentVar> + <tableData> + -25 -0.1 + -8 0 + 8 0 + 25 0.1 + </tableData> + </table> + </function> + <output>/environment/aircraft-effects/splash-vector-y</output> + </fcs_function> + + <fcs_function name="glass-effects/splashz"> + <function> + <table> + <independentVar>velocities/u-aero-fps</independentVar> + <tableData> + 0 1.2 + 7 1.2 + 8 0.9 + 25 0.9 + 50 -0.2 + 120 -0.5 + </tableData> + </table> + </function> + <output>/environment/aircraft-effects/splash-vector-z</output> + </fcs_function> + </channel> +</system> diff --git a/Systems/glass-effect1.xml b/Systems/glass-effect1.xml deleted file mode 100644 index 654426e3..00000000 --- a/Systems/glass-effect1.xml +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0"?> - -<!-- Copyright (c) 2019 Joshua Davidson (Octal450) --> - -<system name="glass-effect1"> - - <channel name="rain"> - - <fcs_function name="glass-effects/airspeed-clamped-sqrt"> - <function> - <sqrt> - <quotient> - <min> - <property>/velocities/airspeed-kt</property> - <value>40</value> - </min> - <value>40</value> - </quotient> - </sqrt> - </function> - </fcs_function> - - <fcs_function name="glass-effects/splashx"> - <function> - <difference> - <value>-0.1</value> - <product> - <value>2.0</value> - <property>/fdm/jsbsim/glass-effects/airspeed-clamped-sqrt</property> - </product> - </difference> - </function> - <output>/environment/aircraft-effects/splash-vector-x</output> - </fcs_function> - - <fcs_function name="glass-effects/splashy"> - <function> - <value>0.0</value> - </function> - <output>/environment/aircraft-effects/splash-vector-y</output> - </fcs_function> - - <fcs_function name="glass-effects/splashz"> - <function> - <difference> - <value>1.0</value> - <product> - <value>1.35</value> - <property>/fdm/jsbsim/glass-effects/airspeed-clamped-sqrt</property> - </product> - </difference> - </function> - <output>/environment/aircraft-effects/splash-vector-z</output> - </fcs_function> - - </channel> - -</system> diff --git a/Systems/glass-effect2.xml b/Systems/glass-effect2.xml deleted file mode 100644 index aea5dfbb..00000000 --- a/Systems/glass-effect2.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- Copyright (c) 2019 Joshua Davidson (Octal450) --> - -<PropertyList> - - <filter> - <name>splashX</name> - <type>gain</type> - <input> - <property>/fdm/jsbsim/glass-effects/splashx</property> - </input> - <output> - <property>/environment/aircraft-effects/splash-vector-x</property> - </output> - </filter> - - <filter> - <name>splashY</name> - <type>gain</type> - <input> - <value>0.0</value> - </input> - <output> - <property>/environment/aircraft-effects/splash-vector-y</property> - </output> - </filter> - - <filter> - <name>splashZ</name> - <type>gain</type> - <input> - <property>/fdm/jsbsim/glass-effects/splashz</property> - </input> - <output> - <property>/environment/aircraft-effects/splash-vector-z</property> - </output> - </filter> - -</PropertyList> diff --git a/Systems/libraries.xml b/Systems/libraries.xml index 06bb51a4..acd2b244 100644 --- a/Systems/libraries.xml +++ b/Systems/libraries.xml @@ -608,27 +608,6 @@ <output>/systems/pressurization/targetvs</output> </filter> - <filter> - <name>Icing Severity</name> - <type>gain</type> - <gain>1.0</gain> - <update-interval-secs type="double">0.1</update-interval-secs> - <input> - <expression> - <table> - <property>/systems/icing/severity</property> - <entry><ind>0</ind><dep>-0.00000166</dep></entry> - <entry><ind>1</ind><dep> 0.00000277</dep></entry> - <entry><ind>2</ind><dep> 0.00000277</dep></entry> - <entry><ind>3</ind><dep> 0.00000554</dep></entry> - <entry><ind>4</ind><dep> 0.00001108</dep></entry> - <entry><ind>5</ind><dep> 0.00002216</dep></entry> - </table> - </expression> - </input> - <output>/systems/icing/factor</output> - </filter> - <filter> <name>TAS</name> <type>gain</type>