1
0
Fork 0

Merge branch 'dev' into maint

This commit is contained in:
legoboyvdlp R 2020-10-20 18:50:01 +01:00
commit 2b4388ba65
190 changed files with 28659 additions and 14861 deletions

View file

@ -14,6 +14,7 @@
<livery>
<file>Airbus</file>
</livery>
<livery-dir type="string">Aircraft/A320-family/Models/Liveries/A320/CFM-100</livery-dir>
</model>
<sound>
@ -171,10 +172,4 @@
<eng>CFM56-5A1</eng>
</MCDUC>
<nasal>
<specific>
<file>Aircraft/A320-family/Nasal/Libraries/a320livery-cfm-100.nas</file>
</specific>
</nasal>
</PropertyList>

View file

@ -202,17 +202,20 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>
<system file="a320-spoiler"/>
<system file="a320-electrical"/>
<system file="a320-hydraulic"/>
<system file="a320-pneumatic"/>
<system file="a320-aircond"/> <!-- after pneu -->
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>
<external_reactions file="Systems/a320-external-reactions"/>

View file

@ -14,6 +14,7 @@
<livery>
<file>Airbus</file>
</livery>
<livery-dir type="string">Aircraft/A320-family/Models/Liveries/A320/CFM</livery-dir>
</model>
<sound>
@ -170,10 +171,4 @@
<eng>CFM56-5B4</eng>
</MCDUC>
<nasal>
<specific>
<file>Aircraft/A320-family/Nasal/Libraries/a320livery-cfm.nas</file>
</specific>
</nasal>
</PropertyList>

View file

@ -201,17 +201,20 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>
<system file="a320-spoiler"/>
<system file="a320-electrical"/>
<system file="a320-hydraulic"/>
<system file="a320-pneumatic"/>
<system file="a320-aircond"/> <!-- after pneu -->
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>
<external_reactions file="Systems/a320-external-reactions"/>

View file

@ -14,6 +14,7 @@
<livery>
<file>Airbus</file>
</livery>
<livery-dir type="string">Aircraft/A320-family/Models/Liveries/A320/IAE</livery-dir>
</model>
<sound>
@ -170,10 +171,4 @@
<eng>V2527-A5</eng>
</MCDUC>
<nasal>
<specific>
<file>Aircraft/A320-family/Nasal/Libraries/a320livery-iae.nas</file>
</specific>
</nasal>
</PropertyList>

View file

@ -201,14 +201,18 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>
<system file="a320-spoiler"/>
<system file="a320-electrical"/>
<system file="a320-hydraulic"/>
<system file="a320-pneumatic"/>
<system file="a320-aircond"/> <!-- after pneu -->
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>

View file

@ -6,6 +6,10 @@
<PropertyList include="Aircraft/Generic/Human/Include/walker-include.xml">
<sim>
<animation>
<fire-services type="bool">0</fire-services>
</animation>
<author>Josh Davidson/Octal450 (Flight Dynamics, Systems, Displays), Jonathan Redpath/legoboyvdlp, merspieler, Matthew Maring/mattmaring (Systems, Displays), Thorsten Herrmann/TH-555, Semir Gebran/CaptB (3D, Textures)</author>
<checklists include="A32X-Checklists.xml"/>
@ -24,60 +28,74 @@
<display-contrast type="double">0.7</display-contrast>
<icing>
<iceable>
<name>Wing</name>
<name>WingLeft</name>
<ice-inches>0.0</ice-inches>
<salvage-control>/controls/deice/wing</salvage-control>
<salvage-control>/systems/pneumatics/valves/wing-ice-1</salvage-control>
<sensitivity type="double">0.8</sensitivity>
<output-property>/fdm/jsbsim/ice/wing</output-property>
<output-property>/fdm/jsbsim/ice/wingL</output-property>
</iceable>
<iceable>
<name>WingRight</name>
<ice-inches>0.0</ice-inches>
<salvage-control>/systems/pneumatics/valves/wing-ice-2</salvage-control>
<sensitivity type="double">0.8</sensitivity>
<output-property>/fdm/jsbsim/ice/wingR</output-property>
</iceable>
<iceable>
<name>LeftEngine</name>
<ice-inches>0.0</ice-inches>
<salvage-control>/controls/deice/lengine</salvage-control>
<salvage-control>/systems/pneumatics/valves/engine-ice-1</salvage-control>
<sensitivity type="double">0.5</sensitivity>
<output-property>/fdm/jsbsim/ice/lengine</output-property>
</iceable>
<iceable>
<name>RightEngine</name>
<ice-inches>0.0</ice-inches>
<salvage-control>/controls/deice/rengine</salvage-control>
<salvage-control>/systems/pneumatics/valves/engine-ice-2</salvage-control>
<sensitivity type="double">0.5</sensitivity>
<output-property>/fdm/jsbsim/ice/rengine</output-property>
</iceable>
<iceable>
<name>Windshield</name>
<ice-inches>0.0</ice-inches>
<salvage-control>/controls/deice/windowprobeheat</salvage-control>
<salvage-control>/controls/ice-protection/windowprobeheat-output</salvage-control>
<sensitivity type="double">0.5</sensitivity>
<output-property>/environment/aircraft-effects/frost-inch</output-property>
</iceable>
<iceable>
<name>Fuselage</name>
<ice-inches>0.0</ice-inches>
<!-- salvage control: de-icing truck -->
<sensitivity type="double">0.3</sensitivity>
<!-- salvage control: de-icing truck -->
<salvage-control>services/deicing_truck/deicing/position-norm</salvage-control>
<output-property>/fdm/jsbsim/ice/fuselage</output-property>
</iceable>
<iceable>
<name>Pitot tube</name>
<ice-inches>0.0</ice-inches>
<sensitivity type="double">1</sensitivity>
<salvage-control>/controls/deice/windowprobeheat</salvage-control>
<output-property>/systems/pitot/icing</output-property>
<sensitivity type="double">0.99</sensitivity>
<salvage-control>/controls/ice-protection/windowprobeheat-output</salvage-control>
<output-property>/systems/pitot[0]/icing</output-property>
</iceable>
<iceable>
<name>Pitot tube</name>
<ice-inches>0.0</ice-inches>
<sensitivity type="double">0.99</sensitivity>
<salvage-control>/controls/ice-protection/windowprobeheat-output</salvage-control>
<output-property>/systems/pitot[1]/icing</output-property>
</iceable>
<iceable>
<name>Pitot tube</name>
<ice-inches>0.0</ice-inches>
<sensitivity type="double">0.98</sensitivity>
<salvage-control>/controls/ice-protection/windowprobeheat-output</salvage-control>
<output-property>/systems/pitot[2]/icing</output-property>
</iceable>
</icing>
<flame>
<red-high type="double">1.0</red-high>
<red-low type="double">0.95</red-low>
<red-base type="double">1.0</red-base>
<green-high type="double">0.741</green-high>
<green-low type="double">0.32</green-low>
<green-base type="double">0.741</green-base>
<blue-high type="double">0.10</blue-high>
<blue-low type="double">0.02</blue-low>
<blue-base type="double">0.09</blue-base>
</flame>
<lights>
<dome-light type="double">0</dome-light>
<nose-lights type="double">0</nose-lights>
</lights>
</model>
<previews>
@ -177,11 +195,6 @@
<autopilot n="13">
<path>Aircraft/A320-family/Systems/ecam-proprules.xml</path>
</autopilot>
<wingflexer include="Systems/wingflexer-params.xml"/>
<property-rule n="100">
<name>Generic Wing Flexer</name>
<path>Aircraft/Generic/wingflexer.xml</path>
</property-rule>
<path>Aircraft/A320-family/Systems/pitot-static.xml</path>
</systems>
@ -199,6 +212,12 @@
<oh-btn type="bool">0</oh-btn>
<switch1 type="bool">0</switch1>
<flaps-click type="bool">0</flaps-click>
<pushbutton type="bool">0</pushbutton>
<spdbrk-click type="bool">0</spdbrk-click>
<relay-batt-1 type="bool">0</relay-batt-1>
<relay-batt-2 type="bool">0</relay-batt-2>
<relay-apu type="bool">0</relay-apu>
<relay-ext type="bool">0</relay-ext>
</sounde>
<instrumentation>
@ -254,6 +273,15 @@
</script>
</binding>
</item>
<item>
<label>Simbrief</label>
<binding>
<command>nasal</command>
<script>
acconfig.simbrief_dlg.open();
</script>
</binding>
</item>
</menu>
<menu n="103">
<label>DU</label>
@ -439,6 +467,15 @@
<value>1</value>
</binding>
</item>
<item>
<label>Canvas QRH</label>
<binding>
<command>nasal</command>
<script>
canvas_qrh.createCanvasQRH();
</script>
</binding>
</item>
</menu>
</default>
</menubar>
@ -528,6 +565,11 @@
<y alias="/sim/model/autopush/force-y"/>
</tractor>
</external_reactions>
<fbw>
<yaw>
<max-deg-switch type="double">25</max-deg-switch>
</yaw>
</fbw>
<zero type="int">0</zero>
</jsbsim>
</fdm>
@ -601,6 +643,8 @@
<alpha-hld type="bool">0</alpha-hld>
<degrade-law type="int">0</degrade-law>
<law type="int">0</law>
<degrade-yaw-law type="int">0</degrade-yaw-law>
<yaw-law type="int">0</yaw-law>
<roll-lim type="string">33</roll-lim>
<roll-back type="bool">0</roll-back>
<override type="bool">0</override>
@ -618,10 +662,9 @@
<active-fmgc-channel type="int">0</active-fmgc-channel>
<internal>
<cost-index type="int">0</cost-index>
<to-state type="bool">0</to-state>
</internal>
<status>
<to-state type="bool">1</to-state>
</status>
<simbrief-username type="string"></simbrief-username>
</FMGC>
<controls>
@ -680,6 +723,9 @@
</electrical>
<engines>
<engine-start-switch type="int">1</engine-start-switch>
<epr-limit type="double">0.0</epr-limit>
<n1-limit type="double">0.0</n1-limit>
<thrust-limit type="string">TOGA</thrust-limit>
<engine n="0">
<cutoff type="bool">true</cutoff>
<cutoff-switch type="bool">true</cutoff-switch>
@ -692,6 +738,11 @@
<max-athr-thrust type="double">0.94</max-athr-thrust>
<throttle-output type="double">0</throttle-output>
<throttle-fdm type="double">0</throttle-fdm>
<throttle-rev type="double">0</throttle-rev>
<reverser type="double">0</reverser>
<igniter-a type="bool">0</igniter-a>
<igniter-b type="bool">0</igniter-b>
<last-igniter type="string">B</last-igniter>
</engine>
<engine n="1">
<cutoff type="bool">true</cutoff>
@ -705,6 +756,11 @@
<max-athr-thrust type="double">0.94</max-athr-thrust>
<throttle-output type="double">0</throttle-output>
<throttle-fdm type="double">0</throttle-fdm>
<throttle-rev type="double">0</throttle-rev>
<reverser type="double">0</reverser>
<igniter-a type="bool">0</igniter-a>
<igniter-b type="bool">0</igniter-b>
<last-igniter type="string">B</last-igniter>
</engine>
<engine n="2">
<cutoff type="bool">true</cutoff>
@ -714,15 +770,6 @@
</engine>
</engines>
<fctl>
<lights>
<elac1-fault type="bool">0</elac1-fault>
<elac2-fault type="bool">0</elac2-fault>
<sec1-fault type="bool">0</sec1-fault>
<sec2-fault type="bool">0</sec2-fault>
<sec3-fault type="bool">0</sec3-fault>
<fac1-fault type="bool">0</fac1-fault>
<fac2-fault type="bool">0</fac2-fault>
</lights>
<switches>
<elac1 type="bool">0</elac1>
<elac2 type="bool">0</elac2>
@ -771,6 +818,7 @@
</refuel>
</fuel>
<gear>
<brake-fans type="bool">0</brake-fans>
<brake-parking type="bool">0</brake-parking>
<tiller-cmd-norm type="double">0</tiller-cmd-norm>
<tiller-enabled type="bool">0</tiller-enabled>
@ -787,6 +835,16 @@
<yellow-elec type="bool">0</yellow-elec>
</switches>
</hydraulic>
<ice-protection>
<leng type="bool">0</leng>
<reng type="bool">0</reng>
<wing type="bool">0</wing>
<lengfault type="bool">0</lengfault>
<rengfault type="bool">0</rengfault>
<wingfault type="bool">0</wingfault>
<windowprobeheat type="bool">0</windowprobeheat>
<windowprobeheat-output type="bool">0</windowprobeheat-output>
</ice-protection>
<lighting>
<DU>
<du1 type="double">1</du1>
@ -822,6 +880,9 @@
<no-smoking-sign type="bool">1</no-smoking-sign>
<seatbelt-sign type="bool">0</seatbelt-sign>
<taxi-light-switch type="float">0</taxi-light-switch>
<turnoff-light-switch type="bool">0</turnoff-light-switch>
<leftturnoff type="bool">0</leftturnoff>
<rightturnoff type="bool">0</rightturnoff>
</lighting>
<navigation>
<adirscp>
@ -865,26 +926,38 @@
<eng2-manstart type="bool">0</eng2-manstart>
<eng1-n1 type="bool">0</eng1-n1>
<eng2-n1 type="bool">0</eng2-n1>
<IDG1 type="bool">0</IDG1>
<IDG2 type="bool">0</IDG2>
<idg1 type="bool">0</idg1>
<idg2 type="bool">0</idg2>
<maskman type="bool">0</maskman>
<ramair type="bool">0</ramair>
<ratman type="bool">0</ratman>
</protectors>
</OH>
<pneumatic n="0">
<pneumatics n="0">
<switches n="0">
<aft-temp type="double">0.5</aft-temp>
<cockpit-temp type="double">0.5</cockpit-temp>
<fwd-temp type="double">0.5</fwd-temp>
<apu type="bool">0</apu>
<bleed-1 type="bool">1</bleed-1>
<bleed-2 type="bool">1</bleed-2>
<blower type="bool">0</blower>
<cabin-fans type="bool">0</cabin-fans>
<extract type="bool">0</extract>
<groundair type="bool">0</groundair>
<hot-air type="bool">1</hot-air>
<pack-1 type="bool">0</pack-1>
<pack-2 type="bool">0</pack-2>
<pack-flow type="double">1.0</pack-flow>
<ram-air type="bool">0</ram-air>
<temp-cabin-aft type="double">0.5</temp-cabin-aft>
<temp-cabin-fwd type="double">0.5</temp-cabin-fwd>
<temp-cockpit type="double">0.5</temp-cockpit>
<x-bleed type="int">1</x-bleed> <!-- auto -->
</switches>
</pneumatic>
</pneumatics>
<switches>
<!-- Smoking is bad :P -->
<no-smoking-sign type="double">0.5</no-smoking-sign>
<seatbelt-sign type="double">0.0</seatbelt-sign>
<annun-test>0</annun-test>
<windowprobeheat type="double">0.5</windowprobeheat>
<annun-test type="int">0</annun-test>
<qnh-knb>100000</qnh-knb>
<strobe type="double">0.0</strobe>
<beacon type="bool">0</beacon>
@ -906,6 +979,7 @@
</controls>
<engines>
<ready type="bool">0</ready>
<engine n="0">
<egt-actual type="double">0</egt-actual>
<epr-actual type="double">1</epr-actual>
@ -931,7 +1005,7 @@
<n1 type="double">0</n1>
<n-actual type="double">0</n-actual>
<running type="bool">0</running>
<servicable type="bool">1</servicable>
<serviceable type="bool">1</serviceable>
</engine>
</engines>
@ -943,12 +1017,18 @@
<caster-angle-deg-damped type="double">0</caster-angle-deg-damped>
</gear>
<gear n="1">
<Lbrake-smoke type="double">0</Lbrake-smoke>
<L1brake-temp-degc type="double">15</L1brake-temp-degc>
<L2brake-temp-degc type="double">15</L2brake-temp-degc>
<tyre-smoke type="int">0</tyre-smoke>
<sprayspeed-ms type="double">0</sprayspeed-ms>
<spray-density type="double">0</spray-density>
<caster-angle-deg-damped type="double">0</caster-angle-deg-damped>
</gear>
<gear n="2">
<Rbrake-smoke type="double">0</Rbrake-smoke>
<R3brake-temp-degc type="double">15</R3brake-temp-degc>
<R4brake-temp-degc type="double">15</R4brake-temp-degc>
<tyre-smoke type="int">0</tyre-smoke>
<sprayspeed-ms type="double">0</sprayspeed-ms>
<spray-density type="double">0</spray-density>
@ -958,9 +1038,7 @@
<services n="0">
<chocks n="0">
<nose type="bool">0</nose>
<left type="bool">0</left>
<right type="bool">0</right>
<enable type="bool">0</enable>
</chocks>
<fuel-truck>
<connect type="bool">0</connect>
@ -978,6 +1056,38 @@
<seperate-tiller-axis type="bool">0</seperate-tiller-axis>
</options>
</acconfig>
<air-conditioning>
<packs>
<pack-1-output-temp type="double">0</pack-1-output-temp>
<pack-2-output-temp type="double">0</pack-2-output-temp>
<pack-1-outlet-temp type="double">0</pack-1-outlet-temp>
<pack-2-outlet-temp type="double">0</pack-2-outlet-temp>
<pack-flow-1 type="double">0</pack-flow-1>
<pack-flow-2 type="double">0</pack-flow-2>
</packs>
<temperatures>
<cabin-overall-temp-kelvin type="double">297</cabin-overall-temp-kelvin>
<cockpit-duct type="double">0</cockpit-duct>
<cabin-aft-duct type="double">0</cabin-aft-duct>
<cabin-fwd-duct type="double">0</cabin-fwd-duct>
<cockpit-temp type="double">0</cockpit-temp>
<cabin-aft-temp type="double">0</cabin-aft-temp>
<cabin-fwd-temp type="double">0</cabin-fwd-temp>
</temperatures>
<valves>
<flow-control-valve-1 type="double">0</flow-control-valve-1>
<flow-control-valve-2 type="double">0</flow-control-valve-2>
<ram-air type="double">0</ram-air>
</valves>
<warnings>
<pack-1-disagree type="bool">0</pack-1-disagree>
<pack-2-disagree type="bool">0</pack-2-disagree>
<pack-1-fault-light type="bool">0</pack-1-fault-light>
<pack-2-fault-light type="bool">0</pack-2-fault-light>
<pack-1-ovht type="bool">0</pack-1-ovht>
<pack-2-ovht type="bool">0</pack-2-ovht>
</warnings>
</air-conditioning>
<atc>
<transponder-code type="string">2000</transponder-code>
<failed type="bool">0</failed>
@ -1015,6 +1125,7 @@
</ess-tr-contactor>
</relay>
<some-electric-thingie>
<emer-elec-config type="bool">0</emer-elec-config>
<emer-gen-operate type="bool">0</emer-gen-operate>
</some-electric-thingie>
<sources>
@ -1028,6 +1139,12 @@
</bat-2>
</sources>
</electrical>
<fadec>
<n1mode1 type="bool">0</n1mode1>
<n1mode2 type="bool">0</n1mode2>
</fadec>
<failures n="0">
<aileron-left type="bool">0</aileron-left>
<aileron-right type="bool">0</aileron-right>
@ -1062,7 +1179,20 @@
<sec3 type="bool">0</sec3>
<fac1 type="bool">0</fac1>
<fac2 type="bool">0</fac2>
<rtlu-1 type="bool">0</rtlu-1>
<rtlu-2 type="bool">0</rtlu-2>
<yaw-damper-1 type="bool">0</yaw-damper-1>
<yaw-damper-2 type="bool">0</yaw-damper-2>
</fctl>
<fuel>
<left-tank-pump-1 type="bool">0</left-tank-pump-1>
<left-tank-pump-2 type="bool">0</left-tank-pump-2>
<center-tank-pump-1 type="bool">0</center-tank-pump-1>
<center-tank-pump-2 type="bool">0</center-tank-pump-2>
<right-tank-pump-1 type="bool">0</right-tank-pump-1>
<right-tank-pump-2 type="bool">0</right-tank-pump-2>
</fuel>
<gear type="bool">0</gear>
<hydraulic>
<blue-edp type="bool">0</blue-edp>
<blue-elec type="bool">0</blue-elec>
@ -1074,7 +1204,31 @@
<yellow-elec type="bool">0</yellow-elec>
<yellow-leak type="bool">0</yellow-leak>
</hydraulic>
<rudder type="bool">0</rudder>
<icing>
<wing-left-valve type="bool">0</wing-left-valve>
<wing-right-valve type="bool">0</wing-right-valve>
<engine-left-valve type="bool">0</engine-left-valve>
<engine-right-valve type="bool">0</engine-right-valve>
</icing>
<pneumatics>
<apu-valve type="bool">0</apu-valve>
<bleed-1-valve type="bool">0</bleed-1-valve>
<bleed-2-valve type="bool">0</bleed-2-valve>
<bmc-1 type="bool">0</bmc-1>
<bmc-2 type="bool">0</bmc-2>
<cabin-fans type="bool">0</cabin-fans>
<hot-air-valve type="bool">0</hot-air-valve>
<hp-1-valve type="bool">0</hp-1-valve>
<hp-2-valve type="bool">0</hp-2-valve>
<pack-1-valve type="bool">0</pack-1-valve>
<pack-2-valve type="bool">0</pack-2-valve>
<ram-air-valve type="bool">0</ram-air-valve>
<trim-valve-cockpit type="bool">0</trim-valve-cockpit>
<trim-valve-cabin-aft type="bool">0</trim-valve-cabin-aft>
<trim-valve-cabin-fwd type="bool">0</trim-valve-cabin-fwd>
<x-bleed-valve type="bool">0</x-bleed-valve>
</pneumatics>
<spoilers>
<spoiler-l1 type="bool">0</spoiler-l1>
<spoiler-l2 type="bool">0</spoiler-l2>
<spoiler-l3 type="bool">0</spoiler-l3>
@ -1085,12 +1239,14 @@
<spoiler-r3 type="bool">0</spoiler-r3>
<spoiler-r4 type="bool">0</spoiler-r4>
<spoiler-r5 type="bool">0</spoiler-r5>
</spoilers>
<engine-left-fire type="bool">0</engine-left-fire>
<engine-right-fire type="bool">0</engine-right-fire>
<apu-fire type="bool">0</apu-fire>
<cargo-fwd-fire type="bool">0</cargo-fwd-fire>
<cargo-aft-fire type="bool">0</cargo-aft-fire>
</failures>
<fctl n="0">
<elac1 type="bool">0</elac1>
<elac2 type="bool">0</elac2>
@ -1099,7 +1255,9 @@
<sec3 type="bool">0</sec3>
<fac1 type="bool">0</fac1>
<fac2 type="bool">0</fac2>
<yawdamper-active type="bool">0</yawdamper-active>
</fctl>
<fire n="0">
<apu>
<temperature type="double">0</temperature>
@ -1141,9 +1299,13 @@
<valves>
<apu-lp-valve-cmd type="bool">0</apu-lp-valve-cmd>
</valves>
<offset-left type="double">0</offset-left>
<offset-right type="double">0</offset-right>
<fuel-used-1 type="double">0</fuel-used-1>
<fuel-used-2 type="double">0</fuel-used-2>
<mode-fault type="bool">0</mode-fault>
</fuel>
<hydraulic n="0">
<sources>
<ptu>
@ -1156,22 +1318,120 @@
<yellow-psi>0</yellow-psi>
</hydraulic>
<pneumatics>
<egt-1-factor type="double">0.36</egt-1-factor>
<egt-2-factor type="double">0.36</egt-2-factor>
<indicating>
<bmc1-working type="bool">0</bmc1-working>
<bmc2-working type="bool">0</bmc2-working>
</indicating>
<pack-1-bypass type="bool">0</pack-1-bypass>
<pack-2-bypass type="bool">0</pack-2-bypass>
<pack-1-flow type="double">0</pack-1-flow>
<pack-2-flow type="double">0</pack-2-flow>
<precooler>
<temp-1 type="double">0</temp-1>
<temp-2 type="double">0</temp-2>
<ovht-1 type="double">0</ovht-1>
<ovht-2 type="double">0</ovht-2>
</precooler>
<psi>
<crossbleed-duct-left type="double">0</crossbleed-duct-left>
<crossbleed-duct-right type="double">0</crossbleed-duct-right>
<crossbleed-duct-left-src type="int">0</crossbleed-duct-left-src>
<crossbleed-duct-right-src type="int">0</crossbleed-duct-right-src>
<engine-1-psi type="double">0</engine-1-psi>
<engine-2-psi type="double">0</engine-2-psi>
<engine-1-downstream-prv type="double">0</engine-1-downstream-prv>
<engine-2-downstream-prv type="double">0</engine-2-downstream-prv>
<engine-1-downstream-opv type="double">0</engine-1-downstream-opv>
<engine-2-downstream-opv type="double">0</engine-2-downstream-opv>
<engine-1-upstream-src type="double">0</engine-1-upstream-src>
<engine-2-upstream-src type="double">0</engine-2-upstream-src>
</psi>
<source>
<apu-psi type="double">0</apu-psi>
<gnd-psi type="double">0</gnd-psi>
<engine-1-lp-psi type="double">0</engine-1-lp-psi>
<engine-2-lp-psi type="double">0</engine-2-lp-psi>
<engine-1-hp-psi type="double">0</engine-1-hp-psi>
<engine-2-hp-psi type="double">0</engine-2-hp-psi>
</source>
<valves>
<apu-bleed-valve type="double">0</apu-bleed-valve>
<crossbleed-valve type="double">0</crossbleed-valve>
<engine-1-lp-valve type="double">0</engine-1-lp-valve>
<engine-2-lp-valve type="double">0</engine-2-lp-valve>
<engine-1-hp-valve type="double">0</engine-1-hp-valve>
<engine-2-hp-valve type="double">0</engine-2-hp-valve>
<engine-1-opv-valve type="double">0</engine-1-opv-valve>
<engine-2-opv-valve type="double">0</engine-2-opv-valve>
<engine-1-prv-valve type="double">0</engine-1-prv-valve>
<engine-2-prv-valve type="double">0</engine-2-prv-valve>
<engine-1-prv-valve-disag type="bool">0</engine-1-prv-valve-disag>
<engine-2-prv-valve-disag type="bool">0</engine-2-prv-valve-disag>
<wing-ice-1 type="double">0</wing-ice-1>
<wing-ice-2 type="double">0</wing-ice-2>
<pack-1 type="double">0</pack-1>
<pack-2 type="double">0</pack-2>
<starter-valve-1 type="bool">0</starter-valve-1>
<starter-valve-2 type="bool">0</starter-valve-2>
</valves>
<warnings>
<apu-bleed-not-on-cmd type="bool">0</apu-bleed-not-on-cmd>
<apu-bleed-not-on type="double">0</apu-bleed-not-on>
<bleed1-fault type="bool">0</bleed1-fault>
<bleed2-fault type="bool">0</bleed2-fault>
<crossbleed-disag type="bool">0</crossbleed-disag>
<crossbleed-disag-open type="bool">0</crossbleed-disag-open>
</warnings>
</pneumatics>
<pressurization>
<cabinpsi type="double">14.7</cabinpsi>
<ditchingpb type="double">14.7</ditchingpb>
</pressurization>
<pitot n="0">
<icing type="double">0</icing>
<serviceable type="bool">1</serviceable>
</pitot>
<pitot n="1">
<serviceable>1</serviceable>
<icing type="double">0</icing>
<serviceable type="bool">1</serviceable>
</pitot>
<pitot n="2">
<serviceable>1</serviceable>
<icing type="double">0</icing>
<serviceable type="bool">1</serviceable>
</pitot>
<static n="1">
<serviceable>1</serviceable>
<serviceable type="bool">1</serviceable>
</static>
<static n="2">
<serviceable>1</serviceable>
<serviceable type="bool">1</serviceable>
</static>
<thrust>
<alpha-floor type="bool">0</alpha-floor>
<clbreduc-ft type="double">1500</clbreduc-ft>
<eng-out type="bool">0</eng-out>
<lim-flex type="bool">0</lim-flex>
<lvrclb type="bool">0</lvrclb>
<state1 type="string">IDLE</state1>
<state2 type="string">IDLE</state2>
<toga-lk type="bool">0</toga-lk>
<thr-locked type="bool">0</thr-locked>
<thr-locked-alert type="bool">0</thr-locked-alert>
<thr-lock-cmd n="0" type="double">0</thr-lock-cmd>
<thr-lock-cmd n="1" type="double">0</thr-lock-cmd>
<thr-locked-flash type="bool">0</thr-locked-flash>
<thr-locked-time type="double">0</thr-locked-time>
</thrust>
<navigation>
<aligned-1 type="bool">0</aligned-1>
<aligned-2 type="bool">0</aligned-2>
@ -1192,6 +1452,14 @@
<steep-ils-avail type="bool">0</steep-ils-avail>
<enable-ecam-actions>0</enable-ecam-actions>
<test-canvas type="bool">0</test-canvas>
<model-options>
<registration type="string">G-EZTB</registration>
<three-letter type="string">EZY</three-letter>
<two-letter type="string">U2</two-letter>
<sharklet type="bool">0</sharklet>
<wifi-aft type="bool">0</wifi-aft> <!-- Iridium / inmarsat satcom + wireless -->
<wifi-fwd type="bool">0</wifi-fwd> <!-- Fly-fy-->
</model-options>
</options>
<instrumentation n="0">
@ -4001,10 +4269,16 @@
<file>Aircraft/A320-family/Nasal/Libraries/buttons.nas</file>
<file>Aircraft/A320-family/Nasal/Libraries/shake.nas</file>
<file>Aircraft/A320-family/Nasal/Libraries/zoom-views.nas</file>
<file>Aircraft/A320-family/Nasal/Libraries/custom-views.nas</file>
</libraries>
<acconfig>
<file>Aircraft/A320-family/AircraftConfig/acconfig.nas</file>
</acconfig>
<effects>
<file>Aircraft/A320-family/Nasal/Effects/light-manager.nas</file>
<file>Aircraft/A320-family/Nasal/Effects/thunder-effects.nas</file>
<file>Aircraft/A320-family/Nasal/Effects/icing.nas</file>
</effects>
<systems>
<file>Aircraft/A320-family/Nasal/Systems/APU.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/electrical.nas</file>
@ -4013,15 +4287,13 @@
<file>Aircraft/A320-family/Nasal/Systems/fuel.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/FADEC/engines-common.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/ADIRS/ADR.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/ADIRS/SwitchingPanel.nas</file>
<file>Aircraft/A320-family/Nasal/Panels/SwitchingPanel.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/Comm/HF.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/brakes.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/brakesystem.nas</file>
<file>Aircraft/A320-family/Nasal/Instruments/clock.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/fire.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/ground_services.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/icing.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/payload.nas</file>
<file>Aircraft/A320-family/Nasal/Panels/clock.nas</file>
<file>Aircraft/A320-family/Nasal/Systems/tyresmoke.nas</file>
</systems>
<ecam>
@ -4031,11 +4303,6 @@
<file>Aircraft/A320-family/Nasal/ECAM/ECAM-messages.nas</file>
<file>Aircraft/A320-family/Nasal/ECAM/ECAM-phases.nas</file>
</ecam>
<effects>
<file>Aircraft/A320-family/Nasal/Effects/light-manager.nas</file>
<file>Aircraft/A320-family/Nasal/Effects/effects.nas</file>
<file>Aircraft/A320-family/Nasal/Effects/thunder-effects.nas</file>
</effects>
<fadec>
<file>Aircraft/A320-family/Nasal/Systems/FADEC/fadec-common.nas</file>
</fadec>
@ -4052,6 +4319,7 @@
<file>Aircraft/A320-family/Nasal/FMGC/FMGC.nas</file>
<file>Aircraft/A320-family/Nasal/FMGC/FMGC-b.nas</file>
<file>Aircraft/A320-family/Nasal/FMGC/FMGC-c.nas</file>
<file>Aircraft/A320-family/Nasal/FMGC/winds.nas</file>
</fmgc>
<mcdu>
<file>Aircraft/A320-family/Nasal/MCDU/DUPLICATE.nas</file> <!-- dynamic page - init before others as used in various pages -->
@ -4062,9 +4330,14 @@
<file>Aircraft/A320-family/Nasal/MCDU/ARRIVAL.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/AIRWAYS.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/CLOSESTAIRPORT.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/RECEIVEDMESSAGES.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/PILOTWAYPOINT.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/HOLD.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/F-PLN.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/WINDCLB.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/WINDCRZ.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/WINDDES.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/WINDHIST.nas</file> <!-- dynamic page - init before MCDU -->
<file>Aircraft/A320-family/Nasal/MCDU/MCDU.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/INITA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/IRSINIT.nas</file>
@ -4083,6 +4356,7 @@
<file>Aircraft/A320-family/Nasal/MCDU/PERFTO.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/RADNAV.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/DATA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/DATA2.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
</mcdu>
<!-- Canvas -->
@ -4102,6 +4376,9 @@
<canvas_mcdu>
<file>Aircraft/A320-family/Models/Instruments/MCDU/MCDU.nas</file>
</canvas_mcdu>
<canvas_qrh>
<file>Aircraft/A320-family/Nasal/QRH/QRH.nas</file>
</canvas_qrh>
<mcdu_scratchpad> <!-- delay till after canvas mcdu -->
<file>Aircraft/A320-family/Nasal/FMGC/mcdu-messages.nas</file>
</mcdu_scratchpad>
@ -4128,6 +4405,9 @@
<atc>
<file>Aircraft/A320-family/Nasal/Panels/atc.nas</file>
</atc>
<atsu>
<file>Aircraft/A320-family/Nasal/Systems/Comm/Notification.nas</file>
</atsu>
<dmc>
<file>Aircraft/A320-family/Nasal/Displays/DMC.nas</file>
</dmc>
@ -4139,6 +4419,9 @@
<save>
<file>Aircraft/A320-family/Nasal/Systems/save.nas</file>
</save>
<Simbrief>
<file>Aircraft/A320-family/Nasal/FMGC/SimbriefParser.nas</file>
</Simbrief>
</nasal>
<maintainance>

View file

@ -14,6 +14,7 @@
<livery>
<file>Airbus</file>
</livery>
<livery-dir type="string">Aircraft/A320-family/Models/Liveries/A320/CFM-NEO</livery-dir>
</model>
<sound>
@ -170,10 +171,4 @@
<eng>LEAP-1A26</eng>
</MCDUC>
<nasal>
<specific>
<file>Aircraft/A320-family/Nasal/Libraries/a320livery-neocfm.nas</file>
</specific>
</nasal>
</PropertyList>

View file

@ -201,17 +201,20 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>
<system file="a320-spoiler"/>
<system file="a320-electrical"/>
<system file="a320-hydraulic"/>
<system file="a320-pneumatic"/>
<system file="a320-aircond"/> <!-- after pneu -->
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>
<external_reactions file="Systems/a320-external-reactions"/>

View file

@ -14,6 +14,7 @@
<livery>
<file>Airbus</file>
</livery>
<livery-dir type="string">Aircraft/A320-family/Models/Liveries/A320/PW-NEO</livery-dir>
</model>
<sound>
@ -170,10 +171,4 @@
<eng>PW1133-JM</eng>
</MCDUC>
<nasal>
<specific>
<file>Aircraft/A320-family/Nasal/Libraries/a320livery-neopw.nas</file>
</specific>
</nasal>
</PropertyList>

View file

@ -201,17 +201,20 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-fuel"/>
<system file="a320-fwc"/>
<system file="a320-fwc-phases"/>
<system file="a320-spoiler"/>
<system file="a320-electrical"/>
<system file="a320-hydraulic"/>
<system file="a320-pneumatic"/>
<system file="a320-aircond"/> <!-- after pneu -->
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>
<external_reactions file="Systems/a320-external-reactions"/>

View file

@ -21,60 +21,41 @@ var spinning = maketimer(0.05, func {
});
var failReset = func {
# Put IntegratedSystems Fail Reset Functions here
systems.ELEC.resetFail();
systems.PNEU.resetFail();
}
var failResetOld = func {
setprop("/systems/failures/elac1", 0);
setprop("/systems/failures/elac2", 0);
setprop("/systems/failures/sec1", 0);
setprop("/systems/failures/sec2", 0);
setprop("/systems/failures/sec3", 0);
setprop("/systems/failures/fac1", 0);
setprop("/systems/failures/fac2", 0);
setprop("/systems/failures/fctl/elac1", 0);
setprop("/systems/failures/fctl/elac2", 0);
setprop("/systems/failures/fctl/sec1", 0);
setprop("/systems/failures/fctl/sec2", 0);
setprop("/systems/failures/fctl/sec3", 0);
setprop("/systems/failures/fctl/fac1", 0);
setprop("/systems/failures/fctl/fac2", 0);
setprop("/systems/failures/fctl/rtlu-1", 0);
setprop("/systems/failures/fctl/rtlu-2", 0);
setprop("/systems/failures/aileron-left", 0);
setprop("/systems/failures/aileron-right", 0);
setprop("/systems/failures/elevator-left", 0);
setprop("/systems/failures/elevator-right", 0);
setprop("/systems/failures/rudder", 0);
setprop("/systems/failures/spoiler-l1", 0);
setprop("/systems/failures/spoiler-l2", 0);
setprop("/systems/failures/spoiler-l3", 0);
setprop("/systems/failures/spoiler-l4", 0);
setprop("/systems/failures/spoiler-l5", 0);
setprop("/systems/failures/spoiler-r1", 0);
setprop("/systems/failures/spoiler-r2", 0);
setprop("/systems/failures/spoiler-r3", 0);
setprop("/systems/failures/spoiler-r4", 0);
setprop("/systems/failures/spoiler-r5", 0);
setprop("/systems/failures/elec-ac-ess", 0);
setprop("/systems/failures/elec-batt1", 0);
setprop("/systems/failures/elec-batt2", 0);
setprop("/systems/failures/elec-galley", 0);
setprop("/systems/failures/elec-genapu", 0);
setprop("/systems/failures/elec-gen1", 0);
setprop("/systems/failures/elec-gen2", 0);
setprop("/systems/failures/bleed-apu", 0);
setprop("/systems/failures/bleed-ext", 0);
setprop("/systems/failures/bleed-eng1", 0);
setprop("/systems/failures/bleed-eng2", 0);
setprop("/systems/failures/pack1", 0);
setprop("/systems/failures/pack2", 0);
setprop("/systems/failures/spoilers/spoiler-l1", 0);
setprop("/systems/failures/spoilers/spoiler-l2", 0);
setprop("/systems/failures/spoilers/spoiler-l3", 0);
setprop("/systems/failures/spoilers/spoiler-l4", 0);
setprop("/systems/failures/spoilers/spoiler-l5", 0);
setprop("/systems/failures/spoilers/spoiler-r1", 0);
setprop("/systems/failures/spoilers/spoiler-r2", 0);
setprop("/systems/failures/spoilers/spoiler-r3", 0);
setprop("/systems/failures/spoilers/spoiler-r4", 0);
setprop("/systems/failures/spoilers/spoiler-r5", 0);
setprop("/systems/failures/hyd-blue", 0);
setprop("/systems/failures/hyd-green", 0);
setprop("/systems/failures/hyd-yellow", 0);
setprop("/systems/failures/ptu", 0);
setprop("/systems/failures/pump-blue", 0);
setprop("/systems/failures/pump-green", 0);
setprop("/systems/failures/pump-yellow-eng", 0);
setprop("/systems/failures/pump-yellow-elec", 0);
setprop("/systems/failures/tank0pump1", 0);
setprop("/systems/failures/tank0pump2", 0);
setprop("/systems/failures/tank1pump1", 0);
setprop("/systems/failures/tank1pump2", 0);
setprop("/systems/failures/tank2pump1", 0);
setprop("/systems/failures/tank2pump2", 0);
setprop("/systems/failures/fuelmode", 0);
setprop("/systems/failures/cargo-aft-fire", 0);
setprop("/systems/failures/cargo-fwd-fire", 0);
setprop("/systems/failures/engine-left-fire", 0);
@ -121,6 +102,7 @@ var error_mismatch = gui.Dialog.new("/sim/gui/dialogs/acconfig/error/mismatch/di
var fuel_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/fuel/dialog", "Aircraft/A320-family/AircraftConfig/fuel.xml");
var groundservices_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/groundsrvc/dialog", "Aircraft/A320-family/AircraftConfig/groundservices.xml");
var loadflightplan_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/loadfpln/dialog","Aircraft/A320-family/AircraftConfig/load-flightplan.xml");
var simbrief_dlg = gui.Dialog.new("/sim/gui/dialogs/acconfig/simbrief/dialog","Aircraft/A320-family/AircraftConfig/simbrief.xml");
var du_quality = gui.Dialog.new("/sim/gui/dialogs/acconfig/du-quality/dialog", "Aircraft/A320-family/AircraftConfig/du-quality.xml");
var rendering_dlg = gui.Dialog.new("/sim/gui/dialogs/rendering/dialog", "Aircraft/A320-family/AircraftConfig/rendering.xml");
spinning.start();
@ -131,6 +113,7 @@ var current_revision = io.readfile(revisionFile);
print("A320-family Revision: " ~ current_revision);
setprop("/systems/acconfig/revision", current_revision);
setprop("/systems/acconfig/options/fo-view", 0);
setprop("/systems/acconfig/options/simbrief-username", "");
setlistener("/systems/acconfig/new-revision", func {
if (getprop("/systems/acconfig/new-revision") > current_revision) {
@ -247,6 +230,7 @@ var readSettings = func {
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"));
setprop("/options/system/fo-view", getprop("/systems/acconfig/options/fo-view"));
setprop("/FMGC/simbrief-username", getprop("/systems/acconfig/options/simbrief-username"));
}
var writeSettings = func {
@ -258,6 +242,7 @@ var writeSettings = func {
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"));
setprop("/systems/acconfig/options/fo-view", getprop("/options/system/fo-view"));
setprop("/systems/acconfig/options/simbrief-username", getprop("/FMGC/simbrief-username"));
io.write_properties(getprop("/sim/fg-home") ~ "/Export/A320-family-config.xml", "/systems/acconfig/options");
}
@ -375,11 +360,11 @@ var beforestart_b = func {
setprop("/controls/electrical/switches/galley", 1);
setprop("/controls/electrical/switches/gen-1", 1);
setprop("/controls/electrical/switches/gen-2", 1);
setprop("/controls/pneumatic/switches/bleedapu", 1);
setprop("/controls/pneumatic/switches/bleed1", 1);
setprop("/controls/pneumatic/switches/bleed2", 1);
setprop("/controls/pneumatic/switches/pack1", 1);
setprop("/controls/pneumatic/switches/pack2", 1);
setprop("/controls/pneumatics/switches/apu", 1);
setprop("/controls/pneumatics/switches/bleed-1", 1);
setprop("/controls/pneumatics/switches/bleed-2", 1);
setprop("/controls/pneumatics/switches/pack-1", 1);
setprop("/controls/pneumatics/switches/pack-2", 1);
setprop("/controls/adirs/ir[0]/knob","1");
setprop("/controls/adirs/ir[1]/knob","1");
setprop("/controls/adirs/ir[2]/knob","1");
@ -462,11 +447,11 @@ var taxi_b = func {
setprop("/controls/electrical/switches/galley", 1);
setprop("/controls/electrical/switches/gen-1", 1);
setprop("/controls/electrical/switches/gen-2", 1);
setprop("/controls/pneumatic/switches/bleedapu", 1);
setprop("/controls/pneumatic/switches/bleed1", 1);
setprop("/controls/pneumatic/switches/bleed2", 1);
setprop("/controls/pneumatic/switches/pack1", 1);
setprop("/controls/pneumatic/switches/pack2", 1);
setprop("/controls/pneumatics/switches/apu", 1);
setprop("/controls/pneumatics/switches/bleed-1", 1);
setprop("/controls/pneumatics/switches/bleed-2", 1);
setprop("/controls/pneumatics/switches/pack-1", 1);
setprop("/controls/pneumatics/switches/pack-2", 1);
setprop("/controls/adirs/ir[0]/knob","1");
setprop("/controls/adirs/ir[1]/knob","1");
setprop("/controls/adirs/ir[2]/knob","1");
@ -497,7 +482,7 @@ var taxi_b = func {
if (pts.Instrumentation.Altimeter.std.getBoolValue()) {
libraries.toggleSTD();
}
setprop("/instrumentation/altimeter[0]/setting-inhg", getprop("/environment/pressure-sea-level-inhg"));
setprop("/instrumentation/altimeter[0]/setting-inhg", getprop("/environment/metar[0]/pressure-inhg") or 29.92);
settimer(taxi_c, 2);
}
var taxi_c = func {
@ -512,7 +497,7 @@ var taxi_d = func {
# After Start items.
setprop("/controls/engines/engine-start-switch", 1);
setprop("/controls/apu/master", 0);
setprop("/controls/pneumatic/switches/bleedapu", 0);
setprop("/controls/pneumatics/switches/apu", 0);
setprop("/controls/gear/brake-left", 0);
setprop("/controls/gear/brake-right", 0);
setprop("/systems/acconfig/autoconfig-running", 0);
@ -527,7 +512,7 @@ var takeoff = func {
# The same as taxi, except we set some things afterwards.
taxi();
var eng_one_chk_c = setlistener("/engines/engine[0]/state", func {
if (getprop("/engines/engine[0]/state") == 3) {
if (pts.Engines.Engine.state[0].getValue() == 3) {
removelistener(eng_one_chk_c);
setprop("/controls/switches/strobe", 1.0);
setprop("/controls/lighting/taxi-light-switch", 1);
@ -538,7 +523,7 @@ var takeoff = func {
setprop("/controls/atc/mode-knob", 4);
atc.transponderPanel.modeSwitch(5);
setprop("/controls/flight/elevator-trim", -0.07);
systems.arm_autobrake(3);
systems.Autobrake.arm_autobrake(3);
setprop("/ECAM/to-config-test", 1);
settimer(func {
setprop("/ECAM/to-config-test", 0);

View file

@ -5,7 +5,7 @@
<pitch-deg type="float">0.0</pitch-deg>
<min-turn-radius-m type="float">15</min-turn-radius-m>
<stopping-distance-m type="float">5.0</stopping-distance-m>
<chocks alias="/services/chocks/nose"/>
<chocks alias="/services/chocks/enable"/>
<available type="int">1</available>
<enabled type="int"/>
<connected type="bool">false</connected>

View file

@ -124,6 +124,46 @@
<live>true</live>
</checkbox>
<checkbox>
<label>RTLU1</label>
<halign>left</halign>
<property>/systems/failures/fctl/rtlu-1</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>RTLU2</label>
<halign>left</halign>
<property>/systems/failures/fctl/rtlu-2</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Yaw Damper 1</label>
<halign>left</halign>
<property>/systems/failures/fctl/yaw-damper-1</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Yaw Damper 2</label>
<halign>left</halign>
<property>/systems/failures/fctl/yaw-damper-2</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<group>
<layout>hbox</layout>
@ -138,30 +178,10 @@
</hrule>
</group>
<checkbox>
<label>Bleed APU</label>
<halign>left</halign>
<property>/systems/failures/bleed-apu</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Bleed EXT</label>
<halign>left</halign>
<property>/systems/failures/bleed-ext</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Bleed ENG 1</label>
<halign>left</halign>
<property>/systems/failures/bleed-eng1</property>
<property>/systems/failures/pneumatics/bleed-1-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -171,7 +191,47 @@
<checkbox>
<label>Bleed ENG 2</label>
<halign>left</halign>
<property>/systems/failures/bleed-eng2</property>
<property>/systems/failures/pneumatics/bleed-2-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>HP Valve ENG 1</label>
<halign>left</halign>
<property>/systems/failures/pneumatics/hp-1-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>HP Valve ENG 2</label>
<halign>left</halign>
<property>/systems/failures/pneumatics/hp-2-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Hot Air Valve</label>
<halign>left</halign>
<property>/systems/failures/pneumatics/hot-air-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Ram Air Valve</label>
<halign>left</halign>
<property>/systems/failures/pneumatics/ram-air-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -181,7 +241,7 @@
<checkbox>
<label>Pack 1</label>
<halign>left</halign>
<property>/systems/failures/pack1</property>
<property>/systems/failures/pneumatics/pack-1-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -191,13 +251,22 @@
<checkbox>
<label>Pack 2</label>
<halign>left</halign>
<property>/systems/failures/pack2</property>
<property>/systems/failures/pneumatics/pack-2-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>X Bleed</label>
<halign>left</halign>
<property>/systems/failures/pneumatics/x-bleed-valve</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
</group>
<vrule/>
@ -222,7 +291,7 @@
<checkbox>
<label>Blue HYD Leak</label>
<halign>left</halign>
<property>/systems/failures/hyd-blue</property>
<property>/systems/failures/hydraulic/blue-leak</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -232,7 +301,7 @@
<checkbox>
<label>Blue ELEC Pump</label>
<halign>left</halign>
<property>/systems/failures/pump-blue</property>
<property>/systems/failures/hydraulic/blue-elec</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -242,7 +311,7 @@
<checkbox>
<label>Green HYD Leak</label>
<halign>left</halign>
<property>/systems/failures/hyd-green</property>
<property>/systems/failures/hydraulic/green-leak</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -252,7 +321,7 @@
<checkbox>
<label>Green ENG 1 Pump</label>
<halign>left</halign>
<property>/systems/failures/pump-green</property>
<property>/systems/failures/hydraulic/green-edp</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -262,7 +331,7 @@
<checkbox>
<label>Yellow HYD Leak</label>
<halign>left</halign>
<property>/systems/failures/hyd-yellow</property>
<property>/systems/failures/hydraulic/yellow-leak</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -272,7 +341,7 @@
<checkbox>
<label>Yellow ENG 2 Pump</label>
<halign>left</halign>
<property>/systems/failures/pump-yellow-eng</property>
<property>/systems/failures/hydraulic/yellow-edp</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -282,7 +351,17 @@
<checkbox>
<label>Yellow ELEC Pump</label>
<halign>left</halign>
<property>/systems/failures/pump-yellow-elec</property>
<property>/systems/failures/hydraulic/yellow-elec</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>PTU</label>
<halign>left</halign>
<property>/systems/failures/hydraulic/ptu</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -306,7 +385,7 @@
<checkbox>
<label>AC ESS Bus</label>
<halign>left</halign>
<property>/systems/failures/elec-ac-ess</property>
<property>/systems/failures/electrical/ac-ess-bus</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -316,7 +395,7 @@
<checkbox>
<label>APU GEN</label>
<halign>left</halign>
<property>/systems/failures/elec-genapu</property>
<property>/systems/failures/electrical/apu</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -326,7 +405,7 @@
<checkbox>
<label>BATTERY 1</label>
<halign>left</halign>
<property>/systems/failures/elec-batt1</property>
<property>/systems/failures/electrical/bat-1</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -336,7 +415,27 @@
<checkbox>
<label>BATTERY 2</label>
<halign>left</halign>
<property>/systems/failures/elec-batt2</property>
<property>/systems/failures/electrical/bat-2</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>DC ESS BUS</label>
<halign>left</halign>
<property>/systems/failures/electrical/dc-ess-bus</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>EMER GEN</label>
<halign>left</halign>
<property>/systems/failures/electrical/emer-gen</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -346,7 +445,7 @@
<checkbox>
<label>ENG 1 GEN</label>
<halign>left</halign>
<property>/systems/failures/elec-gen1</property>
<property>/systems/failures/electrical/gen-1</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -356,17 +455,7 @@
<checkbox>
<label>ENG 2 GEN</label>
<halign>left</halign>
<property>/systems/failures/elec-gen2</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Galley Bus</label>
<halign>left</halign>
<property>/systems/failures/elec-galley</property>
<property>/systems/failures/electrical/gen-2</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -397,7 +486,7 @@
<checkbox>
<label>Tank L Pump 1</label>
<halign>left</halign>
<property>/systems/failures/tank0pump1</property>
<property>/systems/failures/fuel/left-tank-pump-1</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -407,7 +496,7 @@
<checkbox>
<label>Tank L Pump 2</label>
<halign>left</halign>
<property>/systems/failures/tank0pump2</property>
<property>/systems/failures/fuel/left-tank-pump-2</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -417,7 +506,7 @@
<checkbox>
<label>Tank C Pump 1</label>
<halign>left</halign>
<property>/systems/failures/tank1pump1</property>
<property>/systems/failures/fuel/center-tank-pump-1</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -427,7 +516,7 @@
<checkbox>
<label>Tank C Pump 2</label>
<halign>left</halign>
<property>/systems/failures/tank1pump2</property>
<property>/systems/failures/fuel/center-tank-pump-2</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -437,7 +526,7 @@
<checkbox>
<label>Tank R Pump 1</label>
<halign>left</halign>
<property>/systems/failures/tank2pump1</property>
<property>/systems/failures/fuel/right-tank-pump-1</property>
<binding>
<command>dialog-apply</command>
</binding>
@ -447,7 +536,7 @@
<checkbox>
<label>Tank R Pump 2</label>
<halign>left</halign>
<property>/systems/failures/tank2pump2</property>
<property>/systems/failures/fuel/right-tank-pump-2</property>
<binding>
<command>dialog-apply</command>
</binding>

View file

@ -51,8 +51,11 @@
<binding>
<command>nasal</command>
<script>
setprop("it-fbw/degrade-law", 0);
setprop("it-fbw/law", 0);
setprop("/it-fbw/degrade-law", 0);
setprop("/it-fbw/law", 0);
setprop("/it-fbw/degrade-yaw-law", 0);
setprop("/it-fbw/yaw-law", 0);
fbw.FBW.apOff = 0;
gui.popupTip("Fly By Wire switched to NORMAL law!");
</script>
</binding>
@ -67,8 +70,11 @@
<binding>
<command>nasal</command>
<script>
setprop("it-fbw/degrade-law", 1);
setprop("it-fbw/law", 1);
setprop("/it-fbw/degrade-law", 1);
setprop("/it-fbw/law", 1);
setprop("/it-fbw/degrade-yaw-law", 1);
setprop("/it-fbw/yaw-law", 1);
fbw.FBW.apOff = 1;
gui.popupTip("Fly By Wire switched to ALTERNATE law!");
</script>
</binding>
@ -83,8 +89,11 @@
<binding>
<command>nasal</command>
<script>
setprop("it-fbw/degrade-law", 2);
setprop("it-fbw/law", 2);
setprop("/it-fbw/degrade-law", 2);
setprop("/it-fbw/law", 2);
setprop("/it-fbw/degrade-yaw-law", 2);
setprop("/it-fbw/yaw-law", 2);
fbw.FBW.apOff = 1;
gui.popupTip("Fly By Wire switched to DIRECT law!");
</script>
</binding>
@ -99,8 +108,11 @@
<binding>
<command>nasal</command>
<script>
setprop("it-fbw/degrade-law", 3);
setprop("it-fbw/law", 3);
setprop("/it-fbw/degrade-law", 3);
setprop("/it-fbw/law", 3);
setprop("/it-fbw/degrade-yaw-law", 2);
setprop("/it-fbw/yaw-law", 2);
fbw.FBW.apOff = 1;
gui.popupTip("Fly By Wire switched to MECHANICAL BACKUP law!");
</script>
</binding>

View file

@ -32,100 +32,181 @@
<group>
<layout>vbox</layout>
<checkbox>
<label>Enable De-icing Truck</label>
<halign>left</halign>
<property>/services/deicing_truck/enable</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Landing Gear</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<button>
<legend>De-ice Aircraft</legend>
<halign>center</halign>
<padding>5</padding>
<group>
<layout>vbox</layout>
<checkbox>
<label>Enable Gear Chocks</label>
<halign>left</halign>
<enable>
<property>/services/deicing_truck/enable</property>
<and>
<property>/gear/gear[0]/wow</property>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</enable>
<binding>
<command>property-assign</command>
<property>/services/deicing_truck/de-ice</property>
<value>1</value>
</binding>
</button>
<hrule />
<button>
<legend>Fuel Truck</legend>
<halign>center</halign>
<padding>5</padding>
<binding>
<command>nasal</command>
<script>
acconfig.fuel_dlg.open();
</script>
</binding>
</button>
<hrule />
<checkbox>
<label>Enable Catering Truck</label>
<halign>left</halign>
<property>/services/catering/enable</property>
<property>/services/chocks/enable</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
</group>
</group>
<button>
<legend>Toggle Catering</legend>
<halign>center</halign>
<padding>5</padding>
<enable>
<property>/services/catering/enable</property>
</enable>
<binding>
<condition>
<less-than>
<property>/services/catering/position-norm</property>
<value>0.1</value>
</less-than>
</condition><command>property-interpolate</command>
<property>/services/catering/position-norm</property>
<value>0.68</value>
<time>5</time>
</binding>
<binding>
<condition>
<greater-than-equals>
<property>/services/catering/position-norm</property>
<value>0.1</value>
</greater-than-equals>
</condition><command>property-interpolate</command>
<property>/services/catering/position-norm</property>
<value>0.0</value>
<time>5</time>
</binding>
</button>
<checkbox>
<label>Enable Baggage Ramp</label>
<halign>left</halign>
<property>/services/baggage/enable</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<group>
<layout>vbox</layout>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>APU / EPU / AIR / HYD</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<text>
<label>APU Oil Level</label>
</text>
<group>
<layout>hbox</layout>
<slider>
<enable>
<property>/systems/apu/oil/allow-oil-consumption</property>
</enable>
<x>10</x>
<y>50</y>
<width>200</width>
<property>/systems/apu/oil/level-l</property>
<min>3.9</min>
<max>5.4</max>
<live>true</live>
<binding>
<command>dialog-apply</command>
</binding>
</slider>
<text>
<x>10</x>
<y>200</y>
<label>8.8 litres</label><!-- placeholder for width -->
<format>%.1f litres</format>
<property>/systems/apu/oil/level-l</property>
<live>true</live>
</text>
</group>
<checkbox>
<label>Enable External Power Box</label>
<halign>left</halign>
<property>/controls/electrical/ground-cart</property>
<binding>
<command>property-assign</command>
<property>/controls/electrical/switches/ext-pwr</property>
<value>0</value>
</binding>
<enable>
<and>
<or>
<property>/controls/gear/brake-parking</property>
<property>/services/chocks/enable</property>
</or>
<less-than>
<property>/velocities/groundspeed-kt</property>
<value>2</value>
</less-than>
</and>
</enable>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Enable External Air</label>
<halign>left</halign>
<property>/controls/pneumatics/switches/groundair</property>
<binding>
<command>property-toggle</command>
<property>/controls/pneumatics/switches/groundair</property>
</binding>
<enable>
<and>
<or>
<property>/controls/gear/brake-parking</property>
<property>/services/chocks/enable</property>
</or>
<less-than>
<property>/velocities/groundspeed-kt</property>
<value>2</value>
</less-than>
</and>
</enable>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Yellow HYD Hand Pump</label>
<halign>left</halign>
<property>/controls/hydraulic/hand-pump-yellow</property>
<binding>
<command>property-toggle</command>
<property>/controls/hydraulic/hand-pump-yellow</property>
</binding>
<enable>
<and>
<or>
<property>/controls/gear/brake-parking</property>
<property>/services/chocks/enable</property>
</or>
<less-than>
<property>/velocities/groundspeed-kt</property>
<value>2</value>
</less-than>
<less-than>
<property>/systems/electrical/bus/ac-2</property>
<value>115</value>
</less-than>
<equals>
<property>/controls/electrical/switches/ext-pwr</property>
<value>0</value>
</equals>
</and>
</enable>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
</group>
<group>
<layout>vbox</layout>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
@ -169,45 +250,144 @@
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>APU Oil Level</label>
<label>Baggage</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<group>
<layout>hbox</layout>
<slider>
<enable>
<property>/systems/apu/oil/allow-oil-consumption</property>
</enable>
<x>10</x>
<y>50</y>
<width>200</width>
<property>/systems/apu/oil/level-l</property>
<min>3.9</min>
<max>5.4</max>
<live>true</live>
<checkbox>
<label>Enable Baggage Ramp</label>
<halign>left</halign>
<property>/services/baggage/enable</property>
<binding>
<command>dialog-apply</command>
</binding>
</slider>
<text>
<x>10</x>
<y>200</y>
<label>8.8 litres</label> <!-- placeholder for width -->
<format>%.1f litres</format>
<property>/systems/apu/oil/level-l</property>
<live>true</live>
</checkbox>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Catering</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<checkbox>
<label>Enable Catering Truck</label>
<halign>left</halign>
<property>/services/catering/enable</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<button>
<legend>Toggle Catering</legend>
<halign>center</halign>
<padding>5</padding>
<enable>
<property>/services/catering/enable</property>
</enable>
<binding>
<condition>
<less-than>
<property>/services/catering/position-norm</property>
<value>0.1</value>
</less-than>
</condition>
<command>property-interpolate</command>
<property>/services/catering/position-norm</property>
<value>0.68</value>
<time>5</time>
</binding>
<binding>
<condition>
<greater-than-equals>
<property>/services/catering/position-norm</property>
<value>0.1</value>
</greater-than-equals>
</condition>
<command>property-interpolate</command>
<property>/services/catering/position-norm</property>
<value>0.0</value>
<time>5</time>
</binding>
</button>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Fuel</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<button>
<legend>Fuel Truck</legend>
<halign>center</halign>
<padding>5</padding>
<binding>
<command>nasal</command>
<script>
acconfig.fuel_dlg.open();
</script>
</binding>
</button>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>De-icing</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<checkbox>
<label>Enable De-icing Truck</label>
<halign>left</halign>
<property>/services/deicing_truck/enable</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<button>
<legend>De-ice Aircraft</legend>
<halign>center</halign>
<padding>5</padding>
<enable>
<property>/services/deicing_truck/enable</property>
</enable>
<binding>
<command>property-assign</command>
<property>/services/deicing_truck/de-ice</property>
<value>1</value>
</binding>
</button>
</group>
</PropertyList>

View file

@ -74,6 +74,10 @@
<halign>left</halign>
<label>If you have a NAVIGRAPH subcription, we reccomend to load them in the MCDU instead of here.</label>
</text>
<text>
<halign>left</halign>
<label>Minimum FGFS version for use of this feature (due to bugs in prior versions) is 2020.1.3.</label>
</text>
<group>
<layout>hbox</layout>
<text>
@ -85,7 +89,29 @@
<legend>Load flightplan</legend>
<equal>true</equal>
<enable>
<and>
<property>FMGC/internal/tofrom-set</property>
<not>
<or>
<equals>
<property>/sim/version/flightgear</property>
<value>2019.2.0</value>
</equals>
<equals>
<property>/sim/version/flightgear</property>
<value>2020.1.0</value>
</equals>
<equals>
<property>/sim/version/flightgear</property>
<value>2020.1.1</value>
</equals>
<equals>
<property>/sim/version/flightgear</property>
<value>2020.1.2</value>
</equals>
</or>
</not>
</and>
</enable>
<binding>
<command>nasal</command>

View file

@ -220,150 +220,6 @@
</binding>
</button>
<checkbox>
<label>Nose Gear Chock</label>
<halign>left</halign>
<enable>
<and>
<property>/gear/gear[0]/wow</property>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</enable>
<property>/services/chocks/nose</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Main Left Gear Chock</label>
<halign>left</halign>
<enable>
<and>
<property>/gear/gear[0]/wow</property>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</enable>
<property>/services/chocks/left</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Main Right Gear Chock</label>
<halign>left</halign>
<enable>
<and>
<property>/gear/gear[0]/wow</property>
<property>/gear/gear[1]/wow</property>
<property>/gear/gear[2]/wow</property>
</and>
</enable>
<property>/services/chocks/right</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Enable External Power Box</label>
<halign>left</halign>
<property>/controls/electrical/ground-cart</property>
<binding>
<command>property-assign</command>
<property>/controls/electrical/switches/ext-pwr</property>
<value>0</value>
</binding>
<enable>
<and>
<or>
<property>/controls/gear/brake-parking</property>
<property>/services/chocks/nose</property>
<property>/services/chocks/left</property>
<property>/services/chocks/right</property>
</or>
<less-than>
<property>/velocities/groundspeed-kt</property>
<value>2</value>
</less-than>
</and>
</enable>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Enable External Air</label>
<halign>left</halign>
<property>/controls/pneumatic/switches/groundair</property>
<binding>
<command>property-toggle</command>
<property>/controls/pneumatic/switches/groundair</property>
</binding>
<enable>
<and>
<or>
<property>/controls/gear/brake-parking</property>
<property>/services/chocks/nose</property>
<property>/services/chocks/left</property>
<property>/services/chocks/right</property>
</or>
<less-than>
<property>/velocities/groundspeed-kt</property>
<value>2</value>
</less-than>
</and>
</enable>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Yellow HYD Hand Pump</label>
<halign>left</halign>
<property>/controls/hydraulic/hand-pump-yellow</property>
<binding>
<command>property-toggle</command>
<property>/controls/hydraulic/hand-pump-yellow</property>
</binding>
<enable>
<and>
<or>
<property>/controls/gear/brake-parking</property>
<property>/services/chocks/nose</property>
<property>/services/chocks/left</property>
<property>/services/chocks/right</property>
</or>
<less-than>
<property>/velocities/groundspeed-kt</property>
<value>2</value>
</less-than>
<less-than>
<property>/systems/electrical/bus/ac-2</property>
<value>115</value>
</less-than>
<equals>
<property>/controls/electrical/switches/ext-pwr</property>
<value>0</value>
</equals>
</and>
</enable>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<hrule/>
<checkbox>
@ -387,7 +243,7 @@
</checkbox>
<!-- TODO Comment back in, when fully implemented -->
<!-- checkbox>
<checkbox>
<label>Weight in KG</label>
<halign>left</halign>
<property>/options/system/weight-kgs</property>
@ -405,7 +261,7 @@
</script>
</binding>
<live>true</live>
</checkbox -->
</checkbox>
<checkbox>
<label>ADIRS Aligns Instantly</label>

View file

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<!-- A3XX Load Flightplans -->
<PropertyList>
<name>simbrief</name>
<layout>vbox</layout>
<nasal>
<close>
acconfig.writeSettings();
</close>
</nasal>
<group>
<layout>hbox</layout>
<text>
<halign>left</halign>
<label>Simbrief API</label>
</text>
<button>
<halign>right</halign>
<pref-width>20</pref-width>
<pref-height>20</pref-height>
<legend>X</legend>
<key>Esc</key>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
<hrule/>
<group>
<layout>vbox</layout>
<text>
<halign>left</halign>
<label>This dialog allows users to pull their flightplan from simbrief.</label>
</text>
<text>
<halign>left</halign>
<label>1. ACARS is only available if VHF3 is not in voice mode, and the appropriate electrical power is available.</label>
</text>
<text>
<halign>left</halign>
<label>2. Flightplan uplink is only available before engine start, if a flightplan is not yet entered in the MCDU</label>
</text>
<text>
<halign>left</halign>
<label>3. GIGO... there is no sanity check on inputs!</label>
</text>
<text>
<halign>left</halign>
<label>4. Please enter your username in the following text field (not case sensitive)</label>
</text>
<group>
<layout>hbox</layout>
<input>
<width>200</width>
<height>25</height>
<label>Username</label>
<property>/FMGC/simbrief-username</property>
<binding>
<command>dialog-apply</command>
</binding>
<live type="bool">true</live>
</input>
</group>
<button>
<x>40</x>
<y>10</y>
<legend>Apply / Exit</legend>
<binding>
<command>dialog-close</command>
</binding>
</button>
</group>
</PropertyList>

View file

@ -3,9 +3,9 @@
These examples will show the Guidelines for contributing. Please follow this at all times, or your contribution will not be merged.
## Basic Guidelines:
- Use Tabs to indent code, DO NOT USE SPACE.
- Use lowerCamelCase or underscores for naming Nasal variables/functions (someFunction, some_function).
- Comments optional for XML, mandatory for Nasal.
- Use Tabs to indent code
- Use lowerCamelCase for naming Nasal variables/functions (someFunction)
- Please document your code!
- Do not add a comment to every line, only to functions/groups of code.
- Remove .bak or .blend files, unless absolutely needed.
- Leave one extra line at the bottom of each file.

View file

@ -132,7 +132,7 @@
<path>Aircraft/A320-family/Models/Services/Chocks/chock_nose.ac</path>
<condition>
<equals>
<property>services/chocks/nose</property>
<property>services/chocks/enable</property>
<value>1</value>
</equals>
</condition>
@ -147,7 +147,7 @@
<path>Aircraft/A320-family/Models/Services/Chocks/chock_left.ac</path>
<condition>
<equals>
<property>services/chocks/left</property>
<property>services/chocks/enable</property>
<value>1</value>
</equals>
</condition>
@ -163,7 +163,7 @@
<path>Aircraft/A320-family/Models/Services/Chocks/chock_right.ac</path>
<condition>
<equals>
<property>services/chocks/right</property>
<property>services/chocks/enable</property>
<value>1</value>
</equals>
</condition>

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View file

@ -1157,6 +1157,11 @@
<repeatable>true</repeatable>
<binding>
<condition>
<and>
<not>
<property>/it-autoflight/output/ap1</property>
<property>/it-autoflight/output/ap2</property>
</not>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
@ -1167,6 +1172,7 @@
<value>25</value>
</greater-than-equals>
</or>
</and>
</condition>
<command>nasal</command>
<script>
@ -1235,6 +1241,11 @@
<repeatable>false</repeatable>
<binding>
<condition>
<and>
<not>
<property>/it-autoflight/output/ap1</property>
<property>/it-autoflight/output/ap2</property>
</not>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
@ -1245,6 +1256,7 @@
<value>25</value>
</greater-than-equals>
</or>
</and>
</condition>
<command>nasal</command>
<script>
@ -1618,10 +1630,10 @@
</condition>
<command>nasal</command>
<script>
if (getprop("controls/autobrake/mode") != 1) {
systems.arm_autobrake(1);
if (systems.Autobrake.mode.getValue() != 1) {
systems.Autobrake.arm_autobrake(1);
} else {
systems.arm_autobrake(0);
systems.Autobrake.arm_autobrake(0);
}
setprop("sim/sounde/oh-btn", 1);
</script>
@ -1645,10 +1657,10 @@
</condition>
<command>nasal</command>
<script>
if (getprop("controls/autobrake/mode") != 2) {
systems.arm_autobrake(2);
if (systems.Autobrake.mode.getValue() != 2) {
systems.Autobrake.arm_autobrake(2);
} else {
systems.arm_autobrake(0);
systems.Autobrake.arm_autobrake(0);
}
setprop("sim/sounde/oh-btn", 1);
</script>
@ -1672,10 +1684,10 @@
</condition>
<command>nasal</command>
<script>
if (getprop("controls/autobrake/mode") != 3) {
systems.arm_autobrake(3);
if (systems.Autobrake.mode.getValue() != 3) {
systems.Autobrake.arm_autobrake(3);
} else {
systems.arm_autobrake(0);
systems.Autobrake.arm_autobrake(0);
}
setprop("sim/sounde/oh-btn", 1);
</script>
@ -4323,7 +4335,7 @@
<axis-alignment>xy-plane</axis-alignment>
<type type="string">number-value</type>
<format type="string">%3.0f</format>
<property>it-autoflight/input/spd-kts</property>
<property>it-autoflight/input/kts</property>
<truncate>false</truncate>
<font type="string">led.txf</font>
<draw-text>true</draw-text>
@ -4349,7 +4361,7 @@
<axis-alignment>xy-plane</axis-alignment>
<type type="string">number-value</type>
<format type="string">%0.3f</format>
<property>it-autoflight/input/spd-mach</property>
<property>it-autoflight/input/mach</property>
<truncate>false</truncate>
<font type="string">led.txf</font>
<draw-text>true</draw-text>
@ -6162,9 +6174,8 @@
<button>3</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>controls/flight/elevator-trim</property>
<step>0.01</step>
<command>nasal</command>
<script>libraries.slewPitchWheel(1);</script>
</binding>
</action>
<action>
@ -6172,9 +6183,8 @@
<button>4</button>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>controls/flight/elevator-trim</property>
<step>-0.01</step>
<command>nasal</command>
<script>libraries.slewPitchWheel(-1);</script>
</binding>
</action>
</animation>
@ -6231,7 +6241,7 @@
<type>rotate</type>
<object-name>LRudderPedalL</object-name>
<object-name>LRudderPedalR</object-name>
<property>controls/gear/brake-left</property>
<property>/fdm/jsbsim/fcs/brake-left</property>
<factor>15</factor>
<axis>
<x>0</x>
@ -6249,7 +6259,7 @@
<type>rotate</type>
<object-name>RRudderPedalL</object-name>
<object-name>RRudderPedalR</object-name>
<property>controls/gear/brake-right</property>
<property>/fdm/jsbsim/fcs/brake-right</property>
<factor>15</factor>
<axis>
<x>0</x>

View file

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View file

@ -72761,7 +72761,7 @@ name "ecam_glare_down"
data 15
CU1_curve_.1252
crease 40.0
texture "ECAM_glare.png"
texture "ecam_glare_tex.png"
texrep 1 1
numvert 8
-0.40392 -0.06108 -0.10745
@ -72793,7 +72793,7 @@ name "ecam_glare_up"
data 15
CU1_curve_.1253
crease 40.0
texture "ECAM_glare.png"
texture "ecam_glare_tex.png"
texrep 1 1
numvert 4
-0.40892 -0.06801 0.10755

View file

@ -18,9 +18,6 @@ var iesi_rate = props.globals.getNode("/systems/acconfig/options/iesi-rate", 1);
var et = props.globals.getNode("/sim/time/elapsed-sec", 1);
var aconfig = props.globals.getNode("/systems/acconfig/autoconfig-running", 1);
var dcess = 0;
var dchot1 = 0;
var airspeed = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1);
var mach = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1);
var pitch = props.globals.getNode("/orientation/pitch-deg", 1);
@ -29,7 +26,7 @@ var skid = props.globals.getNode("/instrumentation/slip-skid-ball/indicated-slip
var altitude = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1);
var altitude_ind = props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft-pfd", 1);
var altimeter_mode = props.globals.getNode("/modes/altimeter/std", 1);
var altimeter_mode = props.globals.getNode("/instrumentation/altimeter[0]/std", 1);
var qnh_hpa = props.globals.getNode("/instrumentation/altimeter/setting-hpa", 1);
var qnh_inhg = props.globals.getNode("/instrumentation/altimeter/setting-inhg", 1);
@ -77,11 +74,8 @@ var canvas_IESI_base = {
return [];
},
update: func() {
dcess = systems.ELEC.Bus.dcEss.getValue();
dchot1 = systems.ELEC.Bus.dcHot1.getValue();
cur_time = et.getValue();
if (dcess >= 25 or (dchot1 >= 25 and airspeed.getValue() >= 50 and cur_time >= 5)) {
if (systems.ELEC.Bus.dcEss.getValue() >= 25 or (systems.ELEC.Bus.dcHot1.getValue() >= 25 and airspeed.getValue() >= 50 and cur_time >= 5)) {
IESI.page.show();
IESI.update();
@ -103,6 +97,7 @@ var canvas_IESI = {
new: func(canvas_group, file) {
var m = {parents: [canvas_IESI, canvas_IESI_base]};
m.init(canvas_group, file);
m._cachedInhg = -99;
return m;
},
@ -113,6 +108,7 @@ var canvas_IESI = {
if (iesi_time.getValue() + 90 >= et.getValue()) {
me["IESI"].hide();
me["IESI_Init"].show();
return;
} else {
me["IESI_Init"].hide();
me["IESI"].show();
@ -175,8 +171,13 @@ var canvas_IESI = {
altTens = num(right(sprintf("%02d", altitude.getValue()), 2));
me["ALT_tens"].setTranslation(0, altTens * 3.16);
# QNH
if (altimeter_mode.getValue() == 1) {
if (qnh_inhg.getValue() != me._cachedInhg) {
me._cachedInhg = qnh_inhg.getValue();
me.updateQNH();
}
},
updateQNH: func() {
if (altimeter_mode.getBoolValue()) {
me["QNH_setting"].hide();
me["QNH_std"].show();
} else {
@ -184,7 +185,7 @@ var canvas_IESI = {
me["QNH_setting"].show();
me["QNH_std"].hide();
}
},
}
};
setlistener("sim/signals/fdm-initialized", func {
@ -199,12 +200,16 @@ setlistener("sim/signals/fdm-initialized", func {
IESI = canvas_IESI.new(group_IESI, "Aircraft/A320-family/Models/Instruments/IESI/res/iesi.svg");
IESI.updateQNH();
IESI_update.start();
if (iesi_rate.getValue() > 1) {
rateApply();
}
});
setlistener("/instrumentation/altimeter[0]/std", func() { if (IESI != nil) { IESI.updateQNH(); } }, 0, 0);
var rateApply = func {
IESI_update.restart(0.05 * iesi_rate.getValue());
}

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="bleed.svg">
<metadata
id="metadata375">
@ -40,10 +40,10 @@
inkscape:window-width="1366"
inkscape:window-height="705"
id="namedview371"
showgrid="false"
inkscape:zoom="1.4773733"
inkscape:cx="843.6625"
inkscape:cy="621.84897"
showgrid="true"
inkscape:zoom="0.73868665"
inkscape:cx="272.22904"
inkscape:cy="280.96379"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
@ -70,14 +70,6 @@
id="rect5105-2"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:4.09363317;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-5"
width="5.3955846"
height="367.33694"
x="463.6044"
y="-581.08691"
transform="rotate(90)" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.18700027px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:2.68228626px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
@ -301,25 +293,30 @@
transform="rotate(90)"
inkscape:label="#rect5105-6-4-5-0" />
<g
id="BLEED-APU-LINES"
inkscape:label="#g4686">
<g
transform="rotate(-90,880.67779,539.2177)"
id="BLEED-APU"
inkscape:label="#g3445"
id="BLEED-APU">
transform="rotate(-90,880.67779,539.2177)" />
<g
id="BLEED-APU-LINES"
inkscape:label="#g1035">
<g
id="BLEED-APU-CIRCLE"
inkscape:label="#g1015">
<path
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
id="path5107-1-44-0"
transform="rotate(-90,880.67777,539.21767)"
sodipodi:nodetypes="zzzzz"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzzz" />
id="path5107-1-44-0"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-2-5-3-6"
width="53.195583"
height="5.1203089"
transform="rotate(-90,880.67777,539.21767)"
y="169.28328"
x="817.61298"
y="169.28328" />
height="5.1203089"
width="53.195583"
id="rect5105-2-5-3-6"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<rect
y="602.28253"
@ -328,14 +325,6 @@
width="5.3955846"
id="rect5105-6-4-5-1"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.27201295;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
inkscape:label="#rect5105-6-4-5-3"
y="465.25"
x="510.46811"
height="83.83696"
width="5.3955846"
id="BLEED-APU-connection"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.95566499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="BLEED-GND"
@ -360,13 +349,31 @@
style="fill:none;stroke:#cecdce;stroke-width:2.87359571;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:2.66503072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-5-7"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.91679168;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="BLEED-APU-connectionTop"
width="5.3955846"
height="80.537186"
x="510.46811"
y="465.25"
inkscape:label="#rect5105-6-4-5-3" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:3.71239424;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="BLEED-xbleedLeft"
width="5.3955846"
height="302.10294"
x="463.6044"
y="-515.85291"
transform="rotate(90)"
inkscape:label="#rect5105-5" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:2.64573288;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="BLEED-xbleedRight"
width="4.7754087"
height="175.90536"
height="173.36708"
x="464.18976"
y="-813.75"
transform="rotate(90)" />
transform="rotate(90)"
inkscape:label="#rect5105-5-7" />
<g
id="BLEED-Pack-1-Flow-Valve"
inkscape:label="#g3445"
@ -599,7 +606,7 @@
x="212.20123"
height="28.975597"
width="4.1129341"
id="BLEED-Pack-1-Packflow-needel"
id="BLEED-Pack-1-Packflow-needle"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.00380528;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="-0.06117064"
inkscape:transform-center-y="-30.783886" />
@ -610,7 +617,7 @@
x="-218.12874"
height="32.696423"
width="4.1145287"
id="BLEED-Pack-1-Bypass-needel"
id="BLEED-Pack-1-Bypass-needle"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.0665164;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="-0.13399155"
inkscape:transform-center-y="-28.056774" />
@ -802,7 +809,7 @@
x="209.9595"
height="31.200571"
width="4.1151652"
id="BLEED-Pack-2-Packflow-needel"
id="BLEED-Pack-2-Packflow-needle"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.04191506;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="1.3492459"
inkscape:transform-center-y="-34.314208" />
@ -813,7 +820,7 @@
x="-213.51646"
height="32.714966"
width="4.1114964"
id="BLEED-Pack-2-Bypass-needel"
id="BLEED-Pack-2-Bypass-needle"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.06642556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="0.24542415"
inkscape:transform-center-y="-28.143827" />
@ -1063,7 +1070,7 @@
y="537.82135">PSI</tspan></text>
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.35079527;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="BLEED-HP-1-connection-0"
id="BLEED-HP-2-connection"
width="5.3955846"
height="39.996841"
x="797.35443"
@ -1138,12 +1145,12 @@
transform="scale(0.94655352,1.0564643)"
inkscape:label="#text3720"
id="APUGentext-7-2-1-3-6-1"
y="426.34195"
x="148.62262"
y="417.6925"
x="130.38766"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.18700027px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.68228602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="426.34195"
x="148.62262"
y="417.6925"
x="130.38766"
id="tspan5816-7"
sodipodi:role="line">ANTI</tspan></text>
<path
@ -1156,12 +1163,12 @@
transform="scale(0.94655352,1.0564643)"
inkscape:label="#text3720"
id="APUGentext-7-2-1-3-6-7-5"
y="457.41693"
x="171.19373"
y="448.76749"
x="152.95877"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.18700027px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.68228602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="457.41693"
x="171.19373"
y="448.76749"
x="152.95877"
id="tspan5836-7"
sodipodi:role="line">ICE</tspan></text>
</g>
@ -1346,4 +1353,13 @@
x="560.88452"
y="976.25214"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b">00</tspan></text>
<rect
transform="rotate(90)"
y="-580.51971"
x="463.6044"
height="64.666832"
width="5.3955846"
id="BLEED-xbleedCenter"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.71758175;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="#rect1024" />
</svg>

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

View file

@ -12,7 +12,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="cond.svg">
<metadata
id="metadata375">
@ -41,9 +41,9 @@
inkscape:window-height="705"
id="namedview371"
showgrid="false"
inkscape:zoom="0.5"
inkscape:cx="935.0004"
inkscape:cy="859.89724"
inkscape:zoom="163.84"
inkscape:cx="931.44175"
inkscape:cy="894.81836"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
@ -119,19 +119,6 @@
id="rect5105-2"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:2.64407849px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="418.23062"
y="52.832542"
id="CONDZoneFault"
inkscape:label="#text5149"
transform="scale(0.92294741,1.0834854)"><tspan
sodipodi:role="line"
id="tspan95"
x="418.23062"
y="52.832542"
style="font-size:31.72893906px;line-height:0;fill:#0dc04b;fill-opacity:1;stroke-width:2.64407849px">ALTN MODE</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
@ -375,7 +362,9 @@
<g
id="CONDTrimValveCKPT"
inkscape:label="#g4870"
transform="matrix(1.0008336,0,0,1.0076569,-0.20693166,-2.7123511)">
transform="matrix(1.0008336,0,0,1.0076569,-0.20693166,-2.7123511)"
inkscape:transform-center-x="0.34849792"
inkscape:transform-center-y="-35.397308">
<path
inkscape:connector-curvature="0"
id="path4844"
@ -438,7 +427,9 @@
<g
transform="translate(224.8544,-0.57971191)"
id="CONDTrimValveFWD"
inkscape:label="#g4870">
inkscape:label="#g4870"
inkscape:transform-center-x="0.27914252"
inkscape:transform-center-y="-35.133687">
<path
inkscape:connector-curvature="0"
id="path4844-7"
@ -501,7 +492,9 @@
<g
transform="translate(449.85443,-0.57974243)"
id="CONDTrimValveAFT"
inkscape:label="#g4870">
inkscape:label="#g4870"
inkscape:transform-center-x="0.17680135"
inkscape:transform-center-y="-35.128738">
<path
inkscape:connector-curvature="0"
id="path4844-7-1"
@ -572,263 +565,267 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<g
transform="translate(453.74998,318.74089)"
id="CargoCond"
inkscape:label="#g1002">
<g
inkscape:label="#g4925"
id="CONDHeat-scale-3-3-7"
inkscape:label="#g4925">
transform="translate(453.74998,318.74089)">
<path
inkscape:label="#APUN-scale"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="1234-9-9-8"
style="fill:none;fill-opacity:1;stroke:#cecdce;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 192.74999,303.24999 c 27.03805,-27.40296 77.25,-33 110.25,0"
style="fill:none;fill-opacity:1;stroke:#cecdce;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
id="1234-9-9-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:label="#APUN-scale" />
<rect
transform="scale(-1)"
y="-282.70255"
x="-251.25"
height="12.452538"
width="5.3955846"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.75371224;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-1-7-2-4-0-4"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.75371224;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
width="5.3955846"
height="12.452538"
x="-251.25"
y="-282.70255"
transform="scale(-1)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.62508571"
x="221.56564"
y="279.96747"
transform="scale(0.83344761,1.1998355)"
id="text4971-8-8-5"
transform="scale(0.83344761,1.1998355)"><tspan
sodipodi:role="line"
x="221.56564"
y="279.96747"
x="221.56564"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.62508571"
xml:space="preserve"><tspan
id="tspan4973-1-8-0"
style="font-size:25.00342751px;line-height:1.25;fill:#cecdce;fill-opacity:1;stroke-width:0.62508571"
id="tspan4973-1-8-0">C</tspan></text>
y="279.96747"
x="221.56564"
sodipodi:role="line">C</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.6385085"
x="343.26071"
y="285.13028"
transform="scale(0.8513447,1.1746123)"
id="text4979-2-5-3"
transform="scale(0.8513447,1.1746123)"><tspan
sodipodi:role="line"
id="tspan4977-9-0-6"
x="343.26071"
y="285.13028"
style="font-size:25.54034042px;line-height:1.25;fill:#cecdce;fill-opacity:1;stroke-width:0.6385085">H</tspan></text>
x="343.26071"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.6385085"
xml:space="preserve"><tspan
style="font-size:25.54034042px;line-height:1.25;fill:#cecdce;fill-opacity:1;stroke-width:0.6385085"
y="285.13028"
x="343.26071"
id="tspan4977-9-0-6"
sodipodi:role="line">H</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="734.49084"
y="474.75494"
inkscape:label="#text5149"
id="CONDTempCargoAFT"
inkscape:label="#text5149"><tspan
sodipodi:role="line"
id="tspan5151-3-3"
x="734.49084"
y="474.75494"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;stroke-width:1px">34</tspan></text>
<text
xml:space="preserve"
x="734.49084"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="721.77655"
y="514.75751"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;stroke-width:1px"
y="474.75494"
x="734.49084"
id="tspan5151-3-3"
sodipodi:role="line">34</tspan></text>
<text
inkscape:label="#text5149"
id="CONDDuctTempCargoAFT"
inkscape:label="#text5149"><tspan
sodipodi:role="line"
id="tspan5151-3-9-0"
x="721.77655"
y="514.75751"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;stroke-width:1px">34</tspan></text>
x="721.77655"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#0dc04b;stroke-width:1px"
y="514.75751"
x="721.77655"
id="tspan5151-3-9-0"
sodipodi:role="line">34</tspan></text>
<g
id="CONDOutletValve"
transform="translate(-71.362998,288.46671)"
inkscape:label="#g3445"
transform="translate(-71.362998,288.46671)">
id="CONDOutletValve">
<path
sodipodi:nodetypes="zzzzz"
inkscape:connector-curvature="0"
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
id="path5107-1"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="169.28328"
x="817.61298"
height="5.1203089"
width="53.195583"
id="rect5105-2-5"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="CONDHotAirCargoValve"
inkscape:label="#g3445"
transform="translate(-9.6455357,523.96681)">
<path
sodipodi:nodetypes="zzzzz"
inkscape:connector-curvature="0"
id="path5107-1-4"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="169.28328"
x="817.61298"
height="5.1203089"
width="53.195583"
id="rect5105-2-5-7"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
sodipodi:nodetypes="zzzzz" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6"
width="5.3955846"
height="21.920309"
x="693.10443"
y="-885.17029"
transform="rotate(90)" />
<g
transform="translate(-8.4626824,314.74572)"
id="CONDHotAir-text-5"
inkscape:label="#g5063">
<text
transform="scale(0.89370291,1.1189401)"
id="text5049-6"
y="332.37225"
x="1004.2363"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.73987794"
xml:space="preserve"><tspan
y="332.37225"
x="1004.2363"
id="tspan5053-9"
sodipodi:role="line"
style="font-size:29.59499741px;line-height:1.25">HOT</tspan></text>
<text
transform="scale(0.99117946,1.008899)"
id="text5057-3"
y="408.18839"
x="907.98334"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.83926964"
xml:space="preserve"><tspan
style="font-size:33.57078552px;line-height:1.25;fill:#cecdce;fill-opacity:1;stroke-width:0.83926964"
y="408.18839"
x="907.98334"
id="tspan5055-7"
sodipodi:role="line">AIR</tspan></text>
</g>
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:2.18858266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-4"
width="5.3955846"
height="104.99595"
x="693.25"
y="-804"
transform="rotate(90)" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.11282313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-4-5"
width="5.3955846"
height="27.145565"
x="699.00403"
y="671.5" />
<g
transform="matrix(1,0,0,0.97190814,453.00403,328.09597)"
id="CONDTrimValveCargoAFT"
inkscape:label="#g4870">
<path
inkscape:connector-curvature="0"
id="path4844-7-1-5"
d="m 248.50536,283.25445 7.99463,31.99554 h -16.5 z"
style="fill:#0dc04b;fill-opacity:1;stroke:#0dc04b;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccc" />
<rect
transform="scale(-1)"
y="-353.32971"
x="-251.39558"
height="38.079739"
width="5.3955846"
id="rect5105-1-7-2-9-7-5-4"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.31802487;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="CONDInletValve"
inkscape:label="#g3445"
transform="rotate(-90,966.83923,436.0927)">
<path
sodipodi:nodetypes="zzzzz"
inkscape:connector-curvature="0"
id="path5107-1-44"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="169.28328"
x="817.61298"
height="5.1203089"
id="rect5105-2-5"
width="53.195583"
id="rect5105-2-5-3"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
height="5.1203089"
x="817.61298"
y="169.28328" />
</g>
<g
transform="translate(-9.6455357,523.96681)"
inkscape:label="#g3445"
id="CONDHotAirCargoValve">
<path
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
id="path5107-1-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzzz" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-2-5-7"
width="53.195583"
height="5.1203089"
x="817.61298"
y="169.28328" />
</g>
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.77140373;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0"
transform="rotate(90)"
y="-885.17029"
x="693.10443"
height="21.920309"
width="5.3955846"
height="13.04398"
x="699.60443"
y="519.70599" />
<rect
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.77140373;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0-7"
width="5.3955846"
height="13.04398"
x="768.60443"
y="493.45602" />
<rect
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:1.47977984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0-7-8"
width="5.3955846"
height="47.999954"
x="501.1044"
y="-774"
transform="rotate(90)" />
<rect
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.31769943;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0-7-8-6"
width="5.3955846"
height="117.74998"
x="501.10443"
y="-675"
transform="rotate(90)" />
<rect
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:1.99221587;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0-7-8-6-8"
width="5.3955846"
height="87.000038"
x="557.25"
y="419.5" />
<rect
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:3.13363338;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0-7-8-6-8-8"
width="5.3955846"
height="215.24992"
x="-421.1456"
y="557.25"
transform="rotate(-90)" />
<rect
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.73988998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-6-0-7-4"
width="5.3955846"
height="11.99999"
x="768.75"
y="415.75" />
id="rect5105-6"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
inkscape:label="#g5063"
id="CONDHotAir-text-5"
transform="translate(-8.4626824,314.74572)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.68228602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="597.97925"
y="448.3699"
id="APUGentext-7-2-1-3"
inkscape:label="#text3720"
transform="scale(0.94655352,1.0564643)"><tspan
style="font-size:32.18700027px;line-height:0;stroke-width:2.68228602px"
y="448.3699"
x="597.97925"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.73987794"
x="1004.2363"
y="332.37225"
id="text5049-6"
transform="scale(0.89370291,1.1189401)"><tspan
style="font-size:29.59499741px;line-height:1.25"
sodipodi:role="line"
id="tspan4769-1">AFT</tspan></text>
id="tspan5053-9"
x="1004.2363"
y="332.37225">HOT</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.83926964"
x="907.98334"
y="408.18839"
id="text5057-3"
transform="scale(0.99117946,1.008899)"><tspan
sodipodi:role="line"
id="tspan5055-7"
x="907.98334"
y="408.18839"
style="font-size:33.57078552px;line-height:1.25;fill:#cecdce;fill-opacity:1;stroke-width:0.83926964">AIR</tspan></text>
</g>
<rect
transform="rotate(90)"
y="-804"
x="693.25"
height="104.99595"
width="5.3955846"
id="rect5105-6-4"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:2.18858266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="671.5"
x="699.00403"
height="27.145565"
width="5.3955846"
id="rect5105-6-4-5"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.11282313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
inkscape:label="#g4870"
id="CONDTrimValveCargoAFT"
transform="matrix(1,0,0,0.97190814,453.00403,328.09597)">
<path
sodipodi:nodetypes="cccc"
style="fill:#0dc04b;fill-opacity:1;stroke:#0dc04b;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 248.50536,283.25445 7.99463,31.99554 h -16.5 z"
id="path4844-7-1-5"
inkscape:connector-curvature="0" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.31802487;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-1-7-2-9-7-5-4"
width="5.3955846"
height="38.079739"
x="-251.39558"
y="-353.32971"
transform="scale(-1)" />
</g>
<g
transform="rotate(-90,966.83923,436.0927)"
inkscape:label="#g3445"
id="CONDInletValve">
<path
style="fill:none;fill-opacity:1;stroke:#0dc04b;stroke-width:4.80000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 872.14551,172.28989 c 0,15.58192 -12.63164,28.21356 -28.21356,28.21356 -15.58192,0 -28.21356,-12.63164 -28.21356,-28.21356 0,-15.58192 12.63164,-28.21356 28.21356,-28.21356 15.58192,0 28.21356,12.63164 28.21356,28.21356 z"
id="path5107-1-44"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzzz" />
<rect
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5105-2-5-3"
width="53.195583"
height="5.1203089"
x="817.61298"
y="169.28328" />
</g>
<rect
y="519.70599"
x="699.60443"
height="13.04398"
width="5.3955846"
id="rect5105-6-0"
style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.77140373;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="493.45602"
x="768.60443"
height="13.04398"
width="5.3955846"
id="rect5105-6-0-7"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.77140373;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="rotate(90)"
y="-774"
x="501.1044"
height="47.999954"
width="5.3955846"
id="rect5105-6-0-7-8"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:1.47977984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="rotate(90)"
y="-675"
x="501.10443"
height="117.74998"
width="5.3955846"
id="rect5105-6-0-7-8-6"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.31769943;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="419.5"
x="557.25"
height="87.000038"
width="5.3955846"
id="rect5105-6-0-7-8-6-8"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:1.99221587;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="rotate(-90)"
y="557.25"
x="-421.1456"
height="215.24992"
width="5.3955846"
id="rect5105-6-0-7-8-6-8-8"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:3.13363338;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
y="415.75"
x="768.75"
height="11.99999"
width="5.3955846"
id="rect5105-6-0-7-4"
style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:0.73988998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
transform="scale(0.94655352,1.0564643)"
inkscape:label="#text3720"
id="APUGentext-7-2-1-3"
y="448.3699"
x="597.97925"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.68228602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan4769-1"
sodipodi:role="line"
x="597.97925"
y="448.3699"
style="font-size:32.18700027px;line-height:0;stroke-width:2.68228602px">AFT</tspan></text>
</g>
<g
id="g913">
<rect

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -534,7 +534,7 @@
style="font-size:57.48457718px;line-height:1.25;fill:#0dbe4a;fill-opacity:1;stroke-width:1.43711448">-</tspan></text>
<rect
style="fill:#0dbe4a;fill-opacity:1;stroke:none;stroke-width:1.60198247;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="PRESS-Alt-needel"
id="PRESS-Alt-needle"
width="2.9978156"
height="101.25005"
x="353.5022"
@ -543,7 +543,7 @@
inkscape:label="#rect5105-6-0-7-4-5-6-7" />
<rect
style="fill:#0dbe4a;fill-opacity:1;stroke:none;stroke-width:1.60198259;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="PRESS-VS-needel"
id="PRESS-VS-needle"
width="2.9978156"
height="101.25005"
x="331.0022"
@ -559,7 +559,7 @@
inkscape:label="#APUN-scale" />
<rect
style="fill:#0dbe4a;fill-opacity:1;stroke:none;stroke-width:1.60198259;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="PRESS-deltaP-needel"
id="PRESS-deltaP-needle"
width="2.9978156"
height="101.25005"
x="352.75"
@ -849,7 +849,7 @@
y="861.18341"
transform="rotate(-67.5)" />
<g
id="PRESS-Inlet-Needel"
id="PRESS-Inlet-needle"
inkscape:label="#g5744">
<rect
transform="rotate(90)"
@ -868,7 +868,7 @@
</g>
<g
transform="matrix(-1,0,0,1,739.49999,-0.75002256)"
id="PRESS-Outlet-Needel"
id="PRESS-Outlet-needle"
inkscape:label="#g5744">
<rect
transform="rotate(90)"
@ -887,7 +887,7 @@
</g>
<g
transform="translate(455.99998,-24.145591)"
id="PRESS-Man-Needel"
id="PRESS-Man-needle"
inkscape:label="#g5744">
<rect
transform="rotate(90)"
@ -906,7 +906,7 @@
</g>
<g
transform="rotate(-90,502.87498,368.875)"
id="PRESS-Safety-Needel"
id="PRESS-Safety-needle"
inkscape:label="#g5744">
<rect
transform="rotate(90)"

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

File diff suppressed because it is too large Load diff

View file

@ -58,7 +58,7 @@
<object-name>BRT</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<repeatable>true</repeatable>
<binding>
<condition>
<greater-than-equals>
@ -70,7 +70,7 @@
<property>controls/lighting/DU/mcdu1</property>
<min>0.0</min>
<max>1.0</max>
<step>0.2</step>
<step>0.05</step>
<wrap>false</wrap>
</binding>
</action>
@ -81,7 +81,7 @@
<object-name>DIM</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<repeatable>true</repeatable>
<binding>
<condition>
<greater-than-equals>
@ -93,7 +93,7 @@
<property>controls/lighting/DU/mcdu1</property>
<min>0.0</min>
<max>1.0</max>
<step>-0.2</step>
<step>-0.05</step>
<wrap>false</wrap>
</binding>
</action>
@ -174,6 +174,31 @@
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_comm</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>mcdu.pagebutton("atc", 0);</script>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/ac-1</property>
<value>110</value>
</greater-than-equals>
<greater-than>
<property>controls/lighting/DU/mcdu1</property>
<value>0.01</value>
</greater-than>
</and>
</condition>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>mcdu</object-name>

View file

@ -58,7 +58,7 @@
<object-name>BRT</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<repeatable>true</repeatable>
<binding>
<condition>
<greater-than-equals>
@ -70,7 +70,7 @@
<property>controls/lighting/DU/mcdu2</property>
<min>0.0</min>
<max>1.0</max>
<step>0.2</step>
<step>0.05</step>
<wrap>false</wrap>
</binding>
</action>
@ -81,7 +81,7 @@
<object-name>DIM</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<repeatable>true</repeatable>
<binding>
<condition>
<greater-than-equals>
@ -93,7 +93,7 @@
<property>controls/lighting/DU/mcdu2</property>
<min>0.0</min>
<max>1.0</max>
<step>-0.2</step>
<step>-0.05</step>
<wrap>false</wrap>
</binding>
</action>
@ -174,6 +174,31 @@
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_comm</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>mcdu.pagebutton("atc", 1);</script>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/ac-2</property>
<value>110</value>
</greater-than-equals>
<greater-than>
<property>controls/lighting/DU/mcdu2</property>
<value>0.01</value>
</greater-than>
</and>
</condition>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>mcdu</object-name>

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 162 KiB

File diff suppressed because it is too large Load diff

View file

@ -14,11 +14,11 @@
<condition>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc1</property>
<property>systems/electrical/bus/dc-1</property>
<value>25</value>
</greater-than-equals>
<greater-than-equals>
<property>systems/electrical/bus/dc2</property>
<property>systems/electrical/bus/dc-2</property>
<value>25</value>
</greater-than-equals>
</or>
@ -42,11 +42,11 @@
</equals>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc1</property>
<property>systems/electrical/bus/dc-1</property>
<value>25</value>
</greater-than-equals>
<greater-than-equals>
<property>systems/electrical/bus/dc2</property>
<property>systems/electrical/bus/dc-2</property>
<value>25</value>
</greater-than-equals>
</or>
@ -55,6 +55,11 @@
<command>property-toggle</command>
<property>controls/fadec/n1mode1</property>
</binding>
<binding>
<command>property-assign</command>
<property>controls/OH/protectors/eng1-n1</property>
<value>0</value>
</binding>
<binding>
<condition>
<equals>
@ -63,35 +68,30 @@
</equals>
</condition>
<command>nasal</command>
<script>setprop("sim/sounde/oh-btn", 1);</script>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Eng1N1Btn</object-name>
<object-name>Eng1N1Btn2O</object-name>
<object-name>Eng1N1Prot</object-name>
<action>
<button>1</button>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<command>property-toggle</command>
<property>controls/OH/protectors/eng1-n1</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>controls/OH/protectors/eng1-n1</property>
<value>0</value>
</binding>
<binding>
<condition>
<not>
<property>controls/OH/protectors/eng1-n1</property>
</not>
</condition>
<command>nasal</command>
<script>setprop("sim/sounde/oh-cover", 1);</script>
</binding>
</mod-up>
</action>
</animation>
@ -143,11 +143,11 @@
</equals>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc1</property>
<property>systems/electrical/bus/dc-1</property>
<value>25</value>
</greater-than-equals>
<greater-than-equals>
<property>systems/electrical/bus/dc2</property>
<property>systems/electrical/bus/dc-2</property>
<value>25</value>
</greater-than-equals>
</or>
@ -156,6 +156,11 @@
<command>property-toggle</command>
<property>controls/fadec/n1mode2</property>
</binding>
<binding>
<command>property-assign</command>
<property>controls/OH/protectors/eng2-n1</property>
<value>0</value>
</binding>
<binding>
<condition>
<equals>
@ -164,35 +169,30 @@
</equals>
</condition>
<command>nasal</command>
<script>setprop("sim/sounde/oh-btn", 1);</script>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>Eng2N1Btn</object-name>
<object-name>Eng2N1Btn2O</object-name>
<object-name>Eng2N1Prot</object-name>
<action>
<button>1</button>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<command>property-toggle</command>
<property>controls/OH/protectors/eng2-n1</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>controls/OH/protectors/eng2-n1</property>
<value>0</value>
</binding>
<binding>
<condition>
<not>
<property>controls/OH/protectors/eng2-n1</property>
</not>
</condition>
<command>nasal</command>
<script>setprop("sim/sounde/oh-cover", 1);</script>
</binding>
</mod-up>
</action>
</animation>

View file

@ -14,11 +14,11 @@
<condition>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc1</property>
<property>systems/electrical/bus/dc-1</property>
<value>25</value>
</greater-than-equals>
<greater-than-equals>
<property>systems/electrical/bus/dc2</property>
<property>systems/electrical/bus/dc-2</property>
<value>25</value>
</greater-than-equals>
</or>
@ -39,11 +39,11 @@
<condition>
<or>
<greater-than-equals>
<property>systems/electrical/bus/dc1</property>
<property>systems/electrical/bus/dc-1</property>
<value>25</value>
</greater-than-equals>
<greater-than-equals>
<property>systems/electrical/bus/dc2</property>
<property>systems/electrical/bus/dc-2</property>
<value>25</value>
</greater-than-equals>
</or>
@ -53,7 +53,7 @@
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/oh-btn", 1);</script>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>

View file

@ -15,6 +15,8 @@ var updateR = 0;
var elapsedtime = 0;
var altTens = 0;
var altPolarity = "";
var track_diff = 0;
var AICenter = nil;
# Fetch nodes:
var state1 = props.globals.getNode("/systems/thrust/state1", 1);
@ -37,8 +39,6 @@ var wow2 = props.globals.getNode("/gear/gear[2]/wow");
var pitch = props.globals.getNode("/orientation/pitch-deg", 1);
var roll = props.globals.getNode("/orientation/roll-deg", 1);
var elapsedtime = props.globals.getNode("/sim/time/elapsed-sec", 1);
var acess = props.globals.getNode("/systems/electrical/bus/ac-ess", 1);
var ac2 = props.globals.getNode("/systems/electrical/bus/ac-2", 1);
var du1_lgt = props.globals.getNode("/controls/lighting/DU/du1", 1);
var du6_lgt = props.globals.getNode("/controls/lighting/DU/du6", 1);
var acconfig = props.globals.getNode("/systems/acconfig/autoconfig-running", 1);
@ -73,22 +73,19 @@ var alt_diff = props.globals.getNode("/instrumentation/pfd/alt-diff", 1);
var ground_diff = props.globals.getNode("/instrumentation/pfd/ground-diff", 1);
var landing_diff = props.globals.getNode("/instrumentation/pfd/landing-diff", 1);
var ap_alt = props.globals.getNode("/it-autoflight/internal/alt", 1);
var alt_agl = props.globals.getNode("/position/altitude-agl-ft", 1);
var vs_needle = props.globals.getNode("/instrumentation/pfd/vs-needle", 1);
var vs_digit = props.globals.getNode("/instrumentation/pfd/vs-digit-trans", 1);
var ap_vs_pfd = props.globals.getNode("/it-autoflight/internal/vert-speed-fpm-pfd", 1);
var athr_arm = props.globals.getNode("/modes/pfd/fma/athr-armed", 1);
var FMGC_max_spd = props.globals.getNode("/FMGC/internal/maxspeed", 1);
var ind_spd_kt = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1);
var ind_spd_mach = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1);
var at_mach_mode = props.globals.getNode("/it-autoflight/input/kts-mach", 1);
var at_input_spd_mach = props.globals.getNode("/it-autoflight/input/spd-mach", 1);
var at_input_spd_kts = props.globals.getNode("/it-autoflight/input/spd-kts", 1);
var at_input_spd_mach = props.globals.getNode("/it-autoflight/input/mach", 1);
var at_input_spd_kts = props.globals.getNode("/it-autoflight/input/kts", 1);
var fd_roll = props.globals.getNode("/it-autoflight/fd/roll-bar", 1);
var fd_pitch = props.globals.getNode("/it-autoflight/fd/pitch-bar", 1);
var decision = props.globals.getNode("/instrumentation/mk-viii/inputs/arinc429/decision-height", 1);
var slip_skid = props.globals.getNode("/instrumentation/pfd/slip-skid", 1);
var FMGCphase = props.globals.getNode("/FMGC/status/phase", 1);
var loc = props.globals.getNode("/instrumentation/nav[0]/heading-needle-deflection-norm", 1);
var gs = props.globals.getNode("/instrumentation/nav[0]/gs-needle-deflection-norm", 1);
var show_hdg = props.globals.getNode("/it-autoflight/custom/show-hdg", 1);
@ -128,19 +125,21 @@ var ils1_crs_set = props.globals.getNode("/FMGC/internal/ils1crs-set/", 1);
var outer_marker = props.globals.getNode("/instrumentation/marker-beacon/outer", 1);
var middle_marker = props.globals.getNode("/instrumentation/marker-beacon/middle", 1);
var inner_marker = props.globals.getNode("/instrumentation/marker-beacon/inner", 1);
var v1 = props.globals.getNode("/FMGC/internal/v1", 1);
var v1_set = props.globals.getNode("/FMGC/internal/v1-set", 1);
var vr = props.globals.getNode("/FMGC/internal/vr", 1);
var vr_set = props.globals.getNode("/FMGC/internal/vr-set", 1);
var v2 = props.globals.getNode("/FMGC/internal/v2", 1);
var v2_set = props.globals.getNode("/FMGC/internal/v2-set", 1);
var flap_config = props.globals.getNode("/controls/flight/flaps-input", 1);
var hundredAbove = props.globals.getNode("/instrumentation/pfd/hundred-above", 1);
var minimum = props.globals.getNode("/instrumentation/pfd/minimums", 1);
var aoa_1 = props.globals.getNode("/systems/navigation/adr/output/aoa-1", 1);
var aoa_2 = props.globals.getNode("/systems/navigation/adr/output/aoa-2", 1);
var aoa_3 = props.globals.getNode("/systems/navigation/adr/output/aoa-3", 1);
var adr_1_switch = props.globals.getNode("/controls/navigation/adirscp/switches/adr-1", 1);
var adr_2_switch = props.globals.getNode("/controls/navigation/adirscp/switches/adr-2", 1);
var adr_3_switch = props.globals.getNode("/controls/navigation/adirscp/switches/adr-3", 1);
var adr_1_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr-1-fault", 1);
var adr_2_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr-2-fault", 1);
var adr_3_fault = props.globals.getNode("/controls/navigation/adirscp/lights/adr-3-fault", 1);
var air_data_switch = props.globals.getNode("/controls/navigation/switching/air-data", 1);
# Create Nodes:
var vs_needle = props.globals.initNode("/instrumentation/pfd/vs-needle", 0.0, "DOUBLE");
var vs_needle_trans = props.globals.initNode("/instrumentation/pfd/vs-digit-trans", 0.0, "DOUBLE");
var alt_diff = props.globals.initNode("/instrumentation/pfd/alt-diff", 0.0, "DOUBLE");
var ground_diff = props.globals.initNode("/instrumentation/pfd/ground-diff", 0.0, "DOUBLE");
var landing_diff = props.globals.initNode("/instrumentation/pfd/landing-diff", 0.0, "DOUBLE");
@ -150,7 +149,7 @@ var horizon_ground = props.globals.initNode("/instrumentation/pfd/horizon-ground
var hdg_diff = props.globals.initNode("/instrumentation/pfd/hdg-diff", 0.0, "DOUBLE");
var hdg_scale = props.globals.initNode("/instrumentation/pfd/heading-scale", 0.0, "DOUBLE");
var track = props.globals.initNode("/instrumentation/pfd/track-deg", 0.0, "DOUBLE");
var track_diff = props.globals.initNode("/instrumentation/pfd/track-hdg-diff", 0.0, "DOUBLE");
#var track_diff = props.globals.initNode("/instrumentation/pfd/track-hdg-diff", 0.0, "DOUBLE"); # returns incorrect value
var du1_test = props.globals.initNode("/instrumentation/du/du1-test", 0, "BOOL");
var du1_test_time = props.globals.initNode("/instrumentation/du/du1-test-time", 0.0, "DOUBLE");
var du1_offtime = props.globals.initNode("/instrumentation/du/du1-off-time", 0.0, "DOUBLE");
@ -213,6 +212,9 @@ var canvas_PFD_base = {
me.AI_horizon_hdg_trans = me["AI_heading"].createTransform();
me.AI_horizon_hdg_rot = me["AI_heading"].createTransform();
me.AI_fpv_trans = me["FPV"].createTransform();
me.AI_fpv_rot = me["FPV"].createTransform();
me.page = canvas_group;
return me;
@ -225,11 +227,11 @@ var canvas_PFD_base = {
"AI_agl_g","AI_agl","AI_error","AI_group","FD_roll","FD_pitch","ALT_box_flash","ALT_box","ALT_box_amber","ALT_scale","ALT_target","ALT_target_digit","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_digit_UP",
"ALT_digit_DN","ALT_error","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale",
"HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","HDG_error","HDG_group","HDG_frame","TRK_pointer","machError","ilsError","ils_code","ils_freq","dme_dist","dme_dist_legend","ILS_HDG_R","ILS_HDG_L",
"ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref"];
"ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref","FPV","spdLimError"];
},
updateDu1: func() {
var elapsedtime_act = elapsedtime.getValue();
if (acess.getValue() >= 110) {
if (systems.ELEC.Bus.acEss.getValue() >= 110) {
if (du1_offtime.getValue() + 3 < elapsedtime_act) {
if (wow0.getValue() == 1) {
if (acconfig.getValue() != 1 and du1_test.getValue() != 1) {
@ -254,7 +256,7 @@ var canvas_PFD_base = {
},
updateDu6: func() {
var elapsedtime_act = elapsedtime.getValue();
if (ac2.getValue() >= 110) {
if (systems.ELEC.Bus.ac2.getValue() >= 110) {
if (du6_offtime.getValue() + 3 < elapsedtime_act) {
if (wow0.getValue() == 1) {
if (acconfig.getValue() != 1 and du6_test.getValue() != 1) {
@ -283,7 +285,7 @@ var canvas_PFD_base = {
if (acconfig_mismatch.getValue() == "0x000") {
PFD_1_mismatch.page.hide();
PFD_2_mismatch.page.hide();
if (acess.getValue() >= 110 and du1_lgt.getValue() > 0.01) {
if (systems.ELEC.Bus.acEss.getValue() >= 110 and du1_lgt.getValue() > 0.01) {
if (du1_test_time.getValue() + du1_test_amount.getValue() >= elapsedtime_act and cpt_du_xfr.getValue() != 1) {
PFD_1_test.update();
updateL = 0;
@ -306,7 +308,7 @@ var canvas_PFD_base = {
PFD_1_test.page.hide();
PFD_1.page.hide();
}
if (ac2.getValue() >= 110 and du6_lgt.getValue() > 0.01) {
if (systems.ELEC.Bus.ac2.getValue() >= 110 and du6_lgt.getValue() > 0.01) {
if (du6_test_time.getValue() + du6_test_amount.getValue() >= elapsedtime_act and fo_du_xfr.getValue() != 1) {
PFD_2_test.update();
updateR = 0;
@ -644,7 +646,7 @@ var canvas_PFD_base = {
me["QNH"].hide();
me["QNH_setting"].hide();
if (altitude.getValue() < fmgc.FMGCInternal.transAlt and FMGCphase.getValue() == '4') {
if (altitude.getValue() < fmgc.FMGCInternal.transAlt and fmgc.FMGCInternal.phase == 4) {
if (qnh_going == 0) {
qnh_going = 1;
}
@ -669,7 +671,7 @@ var canvas_PFD_base = {
me["QNH_std"].hide();
me["QNH_box"].hide();
if (altitude.getValue() >= fmgc.FMGCInternal.transAlt and FMGCphase.getValue() == '2') {
if (altitude.getValue() >= fmgc.FMGCInternal.transAlt and fmgc.FMGCInternal.phase == 2) {
if (qnh_going == 0) {
qnh_going = 1;
}
@ -694,7 +696,7 @@ var canvas_PFD_base = {
} else if (alt_inhg_mode.getValue() == 1) {
if (altitude.getValue() >= fmgc.FMGCInternal.transAlt and FMGCphase.getValue() == '2') {
if (altitude.getValue() >= fmgc.FMGCInternal.transAlt and fmgc.FMGCInternal.phase == 2) {
if (qnh_going == 0) {
qnh_going = 1;
}
@ -761,7 +763,7 @@ var canvas_PFD_base = {
me["AI_agl"].setText(sprintf("%s", math.round(math.clamp(gear_agl_cur, 0, 2500))));
if (FMGCphase.getValue() < 3 or fmgc.flightPlanController.arrivalDist >= 250) {
if (fmgc.FMGCInternal.phase < 3 or fmgc.flightPlanController.arrivalDist >= 250) {
me["FMA_dh_box"].hide();
me["FMA_dh"].hide();
me["FMA_dhn"].hide();
@ -807,7 +809,7 @@ var canvas_PFD_base = {
} else {
me["AI_agl"].setColor(0.0509,0.7529,0.2941);
}
} else if (getprop("/FMGC/internal/radio-no")) {
} else if (fmgc.FMGCInternal.radioNo) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText("100");
@ -848,7 +850,7 @@ var canvas_PFD_base = {
me["FMA_dhn"].setText(sprintf("%.0f", getprop("/FMGC/internal/baro")));
me["FMA_dhn"].show();
me["FMA_nodh"].hide();
} else if (getprop("/FMGC/internal/radio-no")) {
} else if (fmgc.FMGCInternal.radioNo) {
me["FMA_dh"].setText("BARO");
me["FMA_dh"].show();
me["FMA_dhn"].setText("100");
@ -864,7 +866,7 @@ var canvas_PFD_base = {
me["AI_agl_g"].setRotation(-roll_cur * D2R);
FMGCphase_act = FMGCphase.getValue();
FMGCphase_act = fmgc.FMGCInternal.phase;
if ((wow1.getValue() == 1 or wow2.getValue() == 1) and FMGCphase_act != 0 and FMGCphase_act != 1) {
me["AI_stick"].show();
me["AI_stick_pos"].show();
@ -897,6 +899,19 @@ var canvas_PFD_base = {
me["VS_digit"].setText(sprintf("%02d", vs_pfd_cur));
}
var vs_itaf = fmgc.Internal.vs.getValue();
var gearAgl = gear_agl.getValue();
if (abs(vs_itaf) >= 6000 or (vs_itaf <= -2000 and gearAgl <= 2500) or (vs_itaf <= -1200 and gearAgl <= 1000)) {
me["VS_digit"].setColor(0.7333,0.3803,0);
me["VS_pointer"].setColor(0.7333,0.3803,0);
me["VS_pointer"].setColorFill(0.7333,0.3803,0);
} else {
me["VS_digit"].setColor(0.0509,0.7529,0.2941);
me["VS_pointer"].setColor(0.0509,0.7529,0.2941);
me["VS_pointer"].setColorFill(0.0509,0.7529,0.2941);
}
# ILS
me["LOC_pointer"].setTranslation(loc.getValue() * 197, 0);
me["GS_pointer"].setTranslation(0, gs.getValue() * -197);
@ -961,12 +976,15 @@ var canvas_PFD_base = {
me["HDG_target"].hide();
}
me["TRK_pointer"].setTranslation((math.clamp(track_diff.getValue(), -23.62, 23.62) / 10) * 98.5416, 0);
var heading_deg = heading.getValue();
track_diff = geo.normdeg180(track.getValue() - heading_deg);
me["TRK_pointer"].setTranslation(me.getTrackDiffPixels(track_diff),0);
split_ils = split("/", ils_data1.getValue());
if (ap_ils_mode.getValue() == 1 and size(split_ils) == 2) {
magnetic_hdg = ils_crs.getValue();
magnetic_hdg_dif = geo.normdeg180(magnetic_hdg - heading.getValue());
magnetic_hdg_dif = geo.normdeg180(magnetic_hdg - heading_deg);
if (magnetic_hdg_dif >= -23.62 and magnetic_hdg_dif <= 23.62) {
me["CRS_pointer"].setTranslation((magnetic_hdg_dif / 10) * 98.5416, 0);
me["ILS_HDG_R"].hide();
@ -1010,6 +1028,28 @@ var canvas_PFD_base = {
me.AI_horizon_hdg_rot.setRotation(-roll_cur * D2R, me["AI_center"].getCenter());
me["AI_heading"].update();
},
# Get Angle of Attack from ADR1 or, depending on Switching panel, ADR3
getAOAForPFD1: func() {
if (air_data_switch.getValue() != -1 and adr_1_switch.getValue() and !adr_1_fault.getValue()) return aoa_1.getValue();
if (air_data_switch.getValue() == -1 and adr_3_switch.getValue() and !adr_3_fault.getValue()) return aoa_3.getValue();
return nil;
},
# Get Angle of Attack from ADR2 or, depending on Switching panel, ADR3
getAOAForPFD2: func() {
if (air_data_switch.getValue() != 1 and adr_2_switch.getValue() and !adr_2_fault.getValue()) return aoa_2.getValue();
if (air_data_switch.getValue() == 1 and adr_3_switch.getValue() and !adr_3_fault.getValue()) return aoa_3.getValue();
return nil;
},
# Convert difference between magnetic heading and track measured in degrees to pixel for display on PFDs
# And set max and minimum values
getTrackDiffPixels: func(track_diff_deg) {
return ((math.clamp(track_diff_deg, -23.62, 23.62) / 10) * 98.5416);
},
};
var canvas_PFD_1 = {
@ -1032,7 +1072,6 @@ var canvas_PFD_1 = {
SPDftrgtdiff: 0,
SPDflaptrgtdiff: 0,
SPDcleantrgtdiff: 0,
FMGC_max: 0,
new: func(canvas_group, file) {
var m = {parents: [canvas_PFD_1, canvas_PFD_base]};
m.init(canvas_group, file);
@ -1067,6 +1106,14 @@ var canvas_PFD_1 = {
me["VS_group"].hide();
}
# Apparently SPD LIM only on captains PFD. I find this odd. But manual says it.
# Spd Lim Error
if (!fbw.FBW.Computers.fac1.getValue() and !fbw.FBW.Computers.fac2.getValue()) {
me["spdLimError"].show();
} else {
me["spdLimError"].hide();
}
# FD
if (fd1_act == 1 and ((!wow1_act and !wow2_act and roll_mode_cur != " ") or roll_mode_cur != " ") and ap_trk_sw.getValue() == 0 and pitch_cur < 25 and pitch_cur > -13 and roll_cur < 45 and roll_cur > -45) {
me["FD_roll"].show();
@ -1080,6 +1127,26 @@ var canvas_PFD_1 = {
me["FD_pitch"].hide();
}
# If TRK FPA selected, display FPV on PFD1
if (ap_trk_sw.getValue() == 0 ) {
me["FPV"].hide();
} else {
var aoa = me.getAOAForPFD1();
if (aoa == nil or (systems.ADIRS.ADIRunits[0].aligned != 1 and att_switch.getValue() == 0) or (systems.ADIRS.ADIRunits[2].aligned != 1 and att_switch.getValue() == -1)){
me["FPV"].hide();
} else {
var roll_deg = roll.getValue() or 0;
AICenter = me["AI_center"].getCenter();
var track_x_translation = me.getTrackDiffPixels(track_diff);
me.AI_fpv_trans.setTranslation(track_x_translation, math.clamp(aoa, -20, 20) * 12.5);
me.AI_fpv_rot.setRotation(-roll_deg * D2R, AICenter);
me["FPV"].setRotation(roll_deg * D2R); # It shouldn't be rotated, only the axis should be
me["FPV"].show();
}
}
# ILS
if (ap_ils_mode.getValue() == 1) {
me["LOC_scale"].show();
@ -1193,7 +1260,7 @@ var canvas_PFD_1 = {
me.ASI = ind_spd - 30;
}
me.FMGC_max = FMGC_max_spd.getValue();
me.FMGC_max = fmgc.FMGCInternal.maxspeed;
if (me.FMGC_max <= 30) {
me.ASImax = 0 - me.ASI;
} else if (me.FMGC_max >= 420) {
@ -1203,10 +1270,16 @@ var canvas_PFD_1 = {
}
me["ASI_scale"].setTranslation(0, me.ASI * 6.6);
me["ASI_max"].setTranslation(0, me.ASImax * -6.6);
if (!getprop("/FMGC/status/to-state") and FMGCphase.getValue() >= 1 and !wow1.getValue() and !wow2.getValue()) {
me.FMGC_vls = getprop("/FMGC/internal/computed-speeds/vls_min");
if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) {
me["ASI_max"].setTranslation(0, me.ASImax * -6.6);
me["ASI_max"].show();
} else {
me["ASI_max"].hide();
}
if (!fmgc.FMGCInternal.takeoffState and fmgc.FMGCInternal.phase >= 1 and !wow1.getValue() and !wow2.getValue()) {
me.FMGC_vls = fmgc.FMGCInternal.vls_min;
if (me.FMGC_vls <= 30) {
me.VLSmin = 0 - me.ASI;
} else if (me.FMGC_vls >= 420) {
@ -1214,7 +1287,7 @@ var canvas_PFD_1 = {
} else {
me.VLSmin = me.FMGC_vls - 30 - me.ASI;
}
me.FMGC_prot = getprop("/FMGC/internal/computed-speeds/alpha_prot");
me.FMGC_prot = fmgc.FMGCInternal.alpha_prot;
if (me.FMGC_prot <= 30) {
me.ALPHAprot = 0 - me.ASI;
} else if (me.FMGC_prot >= 420) {
@ -1222,7 +1295,7 @@ var canvas_PFD_1 = {
} else {
me.ALPHAprot = me.FMGC_prot - 30 - me.ASI;
}
me.FMGC_max = getprop("/FMGC/internal/computed-speeds/alpha_max");
me.FMGC_max = fmgc.FMGCInternal.alpha_max;
if (me.FMGC_max <= 30) {
me.ALPHAmax = 0 - me.ASI;
} else if (me.FMGC_max >= 420) {
@ -1230,7 +1303,7 @@ var canvas_PFD_1 = {
} else {
me.ALPHAmax = me.FMGC_max - 30 - me.ASI;
}
me.FMGC_vsw = getprop("/FMGC/internal/computed-speeds/vsw");
me.FMGC_vsw = fmgc.FMGCInternal.vsw;
if (me.FMGC_vsw <= 30) {
me.ALPHAvsw = 0 - me.ASI;
} else if (me.FMGC_vsw >= 420) {
@ -1238,20 +1311,28 @@ var canvas_PFD_1 = {
} else {
me.ALPHAvsw = me.FMGC_vsw - 30 - me.ASI;
}
if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) {
me["VLS_min"].setTranslation(0, me.VLSmin * -6.6);
me["VLS_min"].show();
if (getprop("/it-fbw/law") == 0) {
me["ALPHA_PROT"].setTranslation(0, me.ALPHAprot * -6.6);
me["ALPHA_MAX"].setTranslation(0, me.ALPHAmax * -6.6);
me["ALPHA_SW"].setTranslation(0, me.ALPHAvsw * -6.6);
if (getprop("/it-fbw/law") == 0) {
me["ALPHA_PROT"].show();
me["ALPHA_MAX"].show();
me["ALPHA_SW"].hide();
} else {
me["ALPHA_PROT"].hide();
me["ALPHA_MAX"].hide();
me["ALPHA_SW"].setTranslation(0, me.ALPHAvsw * -6.6);
me["ALPHA_SW"].show();
}
} else {
me["VLS_min"].hide();
me["ALPHA_PROT"].hide();
me["ALPHA_MAX"].hide();
me["ALPHA_SW"].hide();
}
}
tgt_ias = at_tgt_ias.getValue();
@ -1260,15 +1341,15 @@ var canvas_PFD_1 = {
if (managed_spd.getValue() == 1) {
if (getprop("/FMGC/internal/decel") == 1) {
if (getprop("/FMGC/internal/vapp-speed-set")) {
vapp = getprop("/FMGC/internal/computed-speeds/vapp_appr");
if (fmgc.FMGCInternal.vappSpeedSet) {
vapp = fmgc.FMGCInternal.vapp_appr;
} else {
vapp = getprop("/FMGC/internal/computed-speeds/vapp");
vapp = fmgc.FMGCInternal.vapp;
}
tgt_ias = vapp;
tgt_kts = vapp;
} else if (FMGCphase.getValue() == 6) {
clean = getprop("/FMGC/internal/computed-speeds/clean");
} else if (fmgc.FMGCInternal.phase == 6) {
clean = fmgc.FMGCInternal.clean;
tgt_ias = clean;
tgt_kts = clean;
}
@ -1331,8 +1412,8 @@ var canvas_PFD_1 = {
me["ASI_target"].hide();
}
if (v1_set.getValue() == '1') {
tgt_v1 = v1.getValue();
if (fmgc.FMGCInternal.v1set) {
tgt_v1 = fmgc.FMGCInternal.v1;
if (tgt_v1 <= 30) {
me.V1trgt = 0 - me.ASI;
} else if (tgt_v1 >= 420) {
@ -1343,14 +1424,14 @@ var canvas_PFD_1 = {
me.SPDv1trgtdiff = tgt_v1 - ind_spd;
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv1trgtdiff >= -42 and me.SPDv1trgtdiff <= 42) {
if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2 and me.SPDv1trgtdiff >= -42 and me.SPDv1trgtdiff <= 42) {
me["v1_group"].show();
me["v1_text"].hide();
me["v1_group"].setTranslation(0, me.V1trgt * -6.6);
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
} else if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2) {
me["v1_group"].hide();
me["v1_text"].show();
me["v1_text"].setText(sprintf("%3.0f", v1.getValue()));
me["v1_text"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v1));
} else {
me["v1_group"].hide();
me["v1_text"].hide();
@ -1360,8 +1441,8 @@ var canvas_PFD_1 = {
me["v1_text"].hide();
}
if (vr_set.getValue() == '1') {
tgt_vr = vr.getValue();
if (fmgc.FMGCInternal.vrset) {
tgt_vr = fmgc.FMGCInternal.vr;
if (tgt_vr <= 30) {
me.VRtrgt = 0 - me.ASI;
} else if (tgt_vr >= 420) {
@ -1372,7 +1453,7 @@ var canvas_PFD_1 = {
me.SPDvrtrgtdiff = tgt_vr - ind_spd;
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDvrtrgtdiff >= -42 and me.SPDvrtrgtdiff <= 42) {
if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2 and me.SPDvrtrgtdiff >= -42 and me.SPDvrtrgtdiff <= 42) {
me["vr_speed"].show();
me["vr_speed"].setTranslation(0, me.VRtrgt * -6.6);
} else {
@ -1382,8 +1463,8 @@ var canvas_PFD_1 = {
me["vr_speed"].hide();
}
if (v2_set.getValue() == '1') {
tgt_v2 = v2.getValue();
if (fmgc.FMGCInternal.v2set) {
tgt_v2 = fmgc.FMGCInternal.v2;
if (tgt_v2 <= 30) {
me.V2trgt = 0 - me.ASI;
} else if (tgt_v2 >= 420) {
@ -1394,21 +1475,22 @@ var canvas_PFD_1 = {
me.SPDv2trgtdiff = tgt_v2 - ind_spd;
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) {
if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) {
me["ASI_target"].show();
me["ASI_target"].setTranslation(0, me.V2trgt * -6.6);
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue()));
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
} else if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2) {
me["ASI_target"].hide();
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue()));
me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
}
}
if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) {
if (flap_config.getValue() == '1') {
me["F_target"].hide();
me["clean_speed"].hide();
tgt_S = getprop("/FMGC/internal/computed-speeds/slat");
tgt_S = fmgc.FMGCInternal.slat;
if (tgt_S <= 30) {
me.Strgt = 0 - me.ASI;
@ -1420,7 +1502,7 @@ var canvas_PFD_1 = {
me.SPDstrgtdiff = tgt_S - ind_spd;
if (me.SPDstrgtdiff >= -42 and me.SPDstrgtdiff <= 42) {
if (me.SPDstrgtdiff >= -42 and me.SPDstrgtdiff <= 42 and gear_agl.getValue() >= 400) {
me["S_target"].show();
me["S_target"].setTranslation(0, me.Strgt * -6.6);
} else {
@ -1442,7 +1524,7 @@ var canvas_PFD_1 = {
me["S_target"].hide();
me["clean_speed"].hide();
tgt_F = getprop("/FMGC/internal/computed-speeds/flap2");
tgt_F = fmgc.FMGCInternal.flap2;
if (tgt_F <= 30) {
me.Ftrgt = 0 - me.ASI;
@ -1454,7 +1536,7 @@ var canvas_PFD_1 = {
me.SPDftrgtdiff = tgt_F - ind_spd;
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42) {
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42 and gear_agl.getValue() >= 400) {
me["F_target"].show();
me["F_target"].setTranslation(0, me.Ftrgt * -6.6);
} else {
@ -1476,7 +1558,7 @@ var canvas_PFD_1 = {
me["S_target"].hide();
me["clean_speed"].hide();
tgt_F = getprop("/FMGC/internal/computed-speeds/flap3");
tgt_F = fmgc.FMGCInternal.flap3;
if (tgt_F <= 30) {
me.Ftrgt = 0 - me.ASI;
@ -1488,7 +1570,7 @@ var canvas_PFD_1 = {
me.SPDftrgtdiff = tgt_F - ind_spd;
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42) {
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42 and gear_agl.getValue() >= 400) {
me["F_target"].show();
me["F_target"].setTranslation(0, me.Ftrgt * -6.6);
} else {
@ -1515,7 +1597,7 @@ var canvas_PFD_1 = {
me["S_target"].hide();
me["F_target"].hide();
tgt_clean = getprop("/FMGC/internal/computed-speeds/clean");
tgt_clean = fmgc.FMGCInternal.clean;
me.cleantrgt = tgt_clean - 30 - me.ASI;
me.SPDcleantrgtdiff = tgt_clean - ind_spd;
@ -1539,10 +1621,11 @@ var canvas_PFD_1 = {
me["flap_max"].hide();
}
}
if (alt_agl.getValue() < 400) {
} else {
me["S_target"].hide();
me["F_target"].hide();
me["clean_speed"].hide();
me["flap_max"].hide();
}
me.ASItrend = dmc.DMController.DMCs[0].outputs[6].getValue() - me.ASI;
@ -1681,7 +1764,7 @@ var canvas_PFD_1 = {
landing_diff_cur = landing_diff.getValue();
if (landing_diff_cur >= -565 and landing_diff_cur <= 565) {
if ((FMGCphase.getValue() == 5 or FMGCphase.getValue() == 6) and !wow1.getValue() and !wow2.getValue()) { #add std too
if ((fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) and !wow1.getValue() and !wow2.getValue()) { #add std too
me["ground"].setTranslation(0, (landing_diff_cur / 100) * -48.66856);
me["ground"].show();
} else {
@ -1691,13 +1774,13 @@ var canvas_PFD_1 = {
me["ground"].hide();
}
if (!getprop("/ECAM/alt-alert-flash") and !getprop("/ECAM/alt-alert-steady")) {
if (!ecam.altAlertFlash and !ecam.altAlertSteady) {
alt_going1 = 0;
amber_going1 = 0;
me["ALT_box_flash"].hide();
me["ALT_box_amber"].hide();
} else {
if (getprop("/ECAM/alt-alert-flash")) {
if (ecam.altAlertFlash) {
if (alt_going1 == 1) {
me["ALT_box_flash"].hide();
altTimer1.stop();
@ -1715,7 +1798,7 @@ var canvas_PFD_1 = {
} else {
me["ALT_box_amber"].show();
}
} elsif (getprop("/ECAM/alt-alert-steady")) {
} elsif (ecam.altAlertSteady) {
if (amber_going1 == 1) {
me["ALT_box"].show();
me["ALT_box_amber"].hide();
@ -1804,6 +1887,7 @@ var canvas_PFD_2 = {
me["VS_error"].show();
me["VS_group"].hide();
}
me["spdLimError"].hide();
# FD
if (fd2_act == 1 and ((!wow1_act and !wow2_act and roll_mode_cur != " ") or roll_mode_cur != " ") and ap_trk_sw.getValue() == 0 and pitch_cur < 25 and pitch_cur > -13 and roll_cur < 45 and roll_cur > -45) {
@ -1818,6 +1902,25 @@ var canvas_PFD_2 = {
me["FD_pitch"].hide();
}
# If TRK FPA selected, display FPV on PFD2
if (ap_trk_sw.getValue() == 0 ) {
me["FPV"].hide();
} else {
var aoa = me.getAOAForPFD2();
if (aoa == nil or (systems.ADIRS.ADIRunits[1].aligned != 1 and att_switch.getValue() == 0) or (systems.ADIRS.ADIRunits[2].aligned != 1 and att_switch.getValue() == 1)) {
me["FPV"].hide();
} else {
var roll_deg = roll.getValue() or 0;
AICenter = me["AI_center"].getCenter();
var track_x_translation = me.getTrackDiffPixels(track_diff);
me.AI_fpv_trans.setTranslation(track_x_translation, math.clamp(aoa, -20, 20) * 12.5);
me.AI_fpv_rot.setRotation(-roll_deg * D2R, AICenter);
me["FPV"].setRotation(roll_deg * D2R); # It shouldn't be rotated, only the axis should be
me["FPV"].show();
}
}
# ILS
if (ap_ils_mode2.getValue() == 1) {
me["LOC_scale"].show();
@ -1931,7 +2034,7 @@ var canvas_PFD_2 = {
me.ASI = ind_spd - 30;
}
me.FMGC_max = FMGC_max_spd.getValue();
me.FMGC_max = fmgc.FMGCInternal.maxspeed;
if (me.FMGC_max <= 30) {
me.ASImax = 0 - me.ASI;
} else if (me.FMGC_max >= 420) {
@ -1941,10 +2044,16 @@ var canvas_PFD_2 = {
}
me["ASI_scale"].setTranslation(0, me.ASI * 6.6);
me["ASI_max"].setTranslation(0, me.ASImax * -6.6);
if (!getprop("/FMGC/status/to-state") and FMGCphase.getValue() >= 1 and !wow1.getValue() and !wow2.getValue()) {
me.FMGC_vls = getprop("/FMGC/internal/computed-speeds/vls_min");
if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) {
me["ASI_max"].setTranslation(0, me.ASImax * -6.6);
me["ASI_max"].show();
} else {
me["ASI_max"].hide();
}
if (!fmgc.FMGCInternal.takeoffState and fmgc.FMGCInternal.phase >= 1 and !wow1.getValue() and !wow2.getValue()) {
me.FMGC_vls = fmgc.FMGCInternal.vls_min;
if (me.FMGC_vls <= 30) {
me.VLSmin = 0 - me.ASI;
} else if (me.FMGC_vls >= 420) {
@ -1952,7 +2061,7 @@ var canvas_PFD_2 = {
} else {
me.VLSmin = me.FMGC_vls - 30 - me.ASI;
}
me.FMGC_prot = getprop("/FMGC/internal/computed-speeds/alpha_prot");
me.FMGC_prot = fmgc.FMGCInternal.alpha_prot;
if (me.FMGC_prot <= 30) {
me.ALPHAprot = 0 - me.ASI;
} else if (me.FMGC_prot >= 420) {
@ -1960,7 +2069,7 @@ var canvas_PFD_2 = {
} else {
me.ALPHAprot = me.FMGC_prot - 30 - me.ASI;
}
me.FMGC_max = getprop("/FMGC/internal/computed-speeds/alpha_max");
me.FMGC_max = fmgc.FMGCInternal.alpha_max;
if (me.FMGC_max <= 30) {
me.ALPHAmax = 0 - me.ASI;
} else if (me.FMGC_max >= 420) {
@ -1968,7 +2077,7 @@ var canvas_PFD_2 = {
} else {
me.ALPHAmax = me.FMGC_max - 30 - me.ASI;
}
me.FMGC_vsw = getprop("/FMGC/internal/computed-speeds/vsw");
me.FMGC_vsw = fmgc.FMGCInternal.vsw;
if (me.FMGC_vsw <= 30) {
me.ALPHAvsw = 0 - me.ASI;
} else if (me.FMGC_vsw >= 420) {
@ -1976,20 +2085,28 @@ var canvas_PFD_2 = {
} else {
me.ALPHAvsw = me.FMGC_vsw - 30 - me.ASI;
}
if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) {
me["VLS_min"].setTranslation(0, me.VLSmin * -6.6);
me["VLS_min"].show();
if (getprop("/it-fbw/law") == 0) {
me["ALPHA_PROT"].setTranslation(0, me.ALPHAprot * -6.6);
me["ALPHA_MAX"].setTranslation(0, me.ALPHAmax * -6.6);
me["ALPHA_SW"].setTranslation(0, me.ALPHAvsw * -6.6);
if (getprop("/it-fbw/law") == 0) {
me["ALPHA_PROT"].show();
me["ALPHA_MAX"].show();
me["ALPHA_SW"].hide();
} else {
me["ALPHA_PROT"].hide();
me["ALPHA_MAX"].hide();
me["ALPHA_SW"].setTranslation(0, me.ALPHAvsw * -6.6);
me["ALPHA_SW"].show();
}
} else {
me["VLS_min"].hide();
me["ALPHA_PROT"].hide();
me["ALPHA_MAX"].hide();
me["ALPHA_SW"].hide();
}
}
tgt_ias = at_tgt_ias.getValue();
@ -1998,15 +2115,15 @@ var canvas_PFD_2 = {
if (managed_spd.getValue() == 1) {
if (getprop("/FMGC/internal/decel") == 1) {
if (getprop("/FMGC/internal/vapp-speed-set")) {
vapp = getprop("/FMGC/internal/computed-speeds/vapp_appr");
if (fmgc.FMGCInternal.vappSpeedSet) {
vapp = fmgc.FMGCInternal.vapp_appr;
} else {
vapp = getprop("/FMGC/internal/computed-speeds/vapp");
vapp = fmgc.FMGCInternal.vapp;
}
tgt_ias = vapp;
tgt_kts = vapp;
} else if (FMGCphase.getValue() == 6) {
clean = getprop("/FMGC/internal/computed-speeds/clean");
} else if (fmgc.FMGCInternal.phase == 6) {
clean = fmgc.FMGCInternal.clean;
tgt_ias = clean;
tgt_kts = clean;
}
@ -2024,7 +2141,6 @@ var canvas_PFD_2 = {
me["ASI_decimal_DN"].setColor(0.0901,0.6039,0.7176);
}
tgt_ias = at_tgt_ias.getValue();
if (tgt_ias <= 30) {
me.ASItrgt = 0 - me.ASI;
} else if (tgt_ias >= 420) {
@ -2070,8 +2186,8 @@ var canvas_PFD_2 = {
me["ASI_target"].hide();
}
if (v1_set.getValue() == '1') {
tgt_v1 = v1.getValue();
if (fmgc.FMGCInternal.v1set) {
tgt_v1 = fmgc.FMGCInternal.v1;
if (tgt_v1 <= 30) {
me.V1trgt = 0 - me.ASI;
} else if (tgt_v1 >= 420) {
@ -2082,14 +2198,14 @@ var canvas_PFD_2 = {
me.SPDv1trgtdiff = tgt_v1 - ind_spd;
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv1trgtdiff >= -42 and me.SPDv1trgtdiff <= 42) {
if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2 and me.SPDv1trgtdiff >= -42 and me.SPDv1trgtdiff <= 42) {
me["v1_group"].show();
me["v1_text"].hide();
me["v1_group"].setTranslation(0, me.V1trgt * -6.6);
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
} else if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2) {
me["v1_group"].hide();
me["v1_text"].show();
me["v1_text"].setText(sprintf("%3.0f", v1.getValue()));
me["v1_text"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v1));
} else {
me["v1_group"].hide();
me["v1_text"].hide();
@ -2099,8 +2215,8 @@ var canvas_PFD_2 = {
me["v1_text"].hide();
}
if (vr_set.getValue() == '1') {
tgt_vr = vr.getValue();
if (fmgc.FMGCInternal.vrset) {
tgt_vr = fmgc.FMGCInternal.vr;
if (tgt_vr <= 30) {
me.VRtrgt = 0 - me.ASI;
} else if (tgt_vr >= 420) {
@ -2111,7 +2227,7 @@ var canvas_PFD_2 = {
me.SPDvrtrgtdiff = tgt_vr - ind_spd;
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDvrtrgtdiff >= -42 and me.SPDvrtrgtdiff <= 42) {
if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2 and me.SPDvrtrgtdiff >= -42 and me.SPDvrtrgtdiff <= 42) {
me["vr_speed"].show();
me["vr_speed"].setTranslation(0, me.VRtrgt * -6.6);
} else {
@ -2121,8 +2237,8 @@ var canvas_PFD_2 = {
me["vr_speed"].hide();
}
if (v2_set.getValue() == '1') {
tgt_v2 = v2.getValue();
if (fmgc.FMGCInternal.v2set) {
tgt_v2 = fmgc.FMGCInternal.v2;
if (tgt_v2 <= 30) {
me.V2trgt = 0 - me.ASI;
} else if (tgt_v2 >= 420) {
@ -2133,21 +2249,22 @@ var canvas_PFD_2 = {
me.SPDv2trgtdiff = tgt_v2 - ind_spd;
if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) {
if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2 and me.SPDv2trgtdiff >= -42 and me.SPDv2trgtdiff <= 42) {
me["ASI_target"].show();
me["ASI_target"].setTranslation(0, me.V2trgt * -6.6);
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue()));
} else if (pts.Position.gearAglFt.getValue() < 55 and FMGCphase.getValue() <= 2) {
me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
} else if (pts.Position.gearAglFt.getValue() < 55 and fmgc.FMGCInternal.phase <= 2) {
me["ASI_target"].hide();
me["ASI_digit_UP"].setText(sprintf("%3.0f", v2.getValue()));
me["ASI_digit_UP"].setText(sprintf("%3.0f", fmgc.FMGCInternal.v2));
}
}
if (fbw.FBW.Computers.fac1.getValue() or fbw.FBW.Computers.fac2.getValue()) {
if (flap_config.getValue() == '1') {
me["F_target"].hide();
me["clean_speed"].hide();
tgt_S = tgt_S = getprop("/FMGC/internal/computed-speeds/slat");
tgt_S = fmgc.FMGCInternal.slat;
if (tgt_S <= 30) {
me.Strgt = 0 - me.ASI;
@ -2159,7 +2276,7 @@ var canvas_PFD_2 = {
me.SPDstrgtdiff = tgt_S - ind_spd;
if (me.SPDstrgtdiff >= -42 and me.SPDstrgtdiff <= 42) {
if (me.SPDstrgtdiff >= -42 and me.SPDstrgtdiff <= 42 and gear_agl.getValue() >= 400) {
me["S_target"].show();
me["S_target"].setTranslation(0, me.Strgt * -6.6);
} else {
@ -2181,7 +2298,7 @@ var canvas_PFD_2 = {
me["S_target"].hide();
me["clean_speed"].hide();
tgt_F = tgt_S = getprop("/FMGC/internal/computed-speeds/flap2");
tgt_F = fmgc.FMGCInternal.flap2;
if (tgt_F <= 30) {
me.Ftrgt = 0 - me.ASI;
@ -2193,7 +2310,7 @@ var canvas_PFD_2 = {
me.SPDftrgtdiff = tgt_F - ind_spd;
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42) {
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42 and gear_agl.getValue() >= 400) {
me["F_target"].show();
me["F_target"].setTranslation(0, me.Ftrgt * -6.6);
} else {
@ -2215,7 +2332,7 @@ var canvas_PFD_2 = {
me["S_target"].hide();
me["clean_speed"].hide();
tgt_F = tgt_S = getprop("/FMGC/internal/computed-speeds/flap3");
tgt_F = fmgc.FMGCInternal.flap3;
if (tgt_F <= 30) {
me.Ftrgt = 0 - me.ASI;
@ -2227,7 +2344,7 @@ var canvas_PFD_2 = {
me.SPDftrgtdiff = tgt_F - ind_spd;
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42) {
if (me.SPDftrgtdiff >= -42 and me.SPDftrgtdiff <= 42 and gear_agl.getValue() >= 400) {
me["F_target"].show();
me["F_target"].setTranslation(0, me.Ftrgt * -6.6);
} else {
@ -2254,7 +2371,7 @@ var canvas_PFD_2 = {
me["S_target"].hide();
me["F_target"].hide();
tgt_clean = tgt_S = getprop("/FMGC/internal/computed-speeds/clean");
tgt_clean = fmgc.FMGCInternal.clean;
me.cleantrgt = tgt_clean - 30 - me.ASI;
me.SPDcleantrgtdiff = tgt_clean - ind_spd;
@ -2278,10 +2395,11 @@ var canvas_PFD_2 = {
me["flap_max"].hide();
}
}
if (alt_agl.getValue() < 400) {
} else {
me["S_target"].hide();
me["F_target"].hide();
me["clean_speed"].hide();
me["flap_max"].hide();
}
me.ASItrend = dmc.DMController.DMCs[1].outputs[6].getValue() - me.ASI;
@ -2419,7 +2537,7 @@ var canvas_PFD_2 = {
landing_diff_cur = landing_diff.getValue();
if (landing_diff_cur >= -565 and landing_diff_cur <= 565) {
if ((FMGCphase.getValue() == 5 or FMGCphase.getValue() == 6) and !wow1.getValue() and !wow2.getValue()) { #add std too
if ((fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) and !wow1.getValue() and !wow2.getValue()) { #add std too
me["ground"].setTranslation(0, (landing_diff_cur / 100) * -48.66856);
me["ground"].show();
} else {
@ -2429,13 +2547,13 @@ var canvas_PFD_2 = {
me["ground"].hide();
}
if (!getprop("/ECAM/alt-alert-flash") and !getprop("/ECAM/alt-alert-steady")) {
if (!ecam.altAlertFlash and !ecam.altAlertSteady) {
alt_going2 = 0;
amber_going2 = 0;
me["ALT_box_flash"].hide();
me["ALT_box_amber"].hide();
} else {
if (getprop("/ECAM/alt-alert-flash")) {
if (ecam.altAlertFlash) {
if (alt_going2 == 1) {
me["ALT_box_flash"].hide();
altTimer2.stop();
@ -2453,7 +2571,7 @@ var canvas_PFD_2 = {
} else {
me["ALT_box_amber"].hide();
}
} elsif (getprop("/ECAM/alt-alert-steady")) {
} elsif (ecam.altAlertSteady) {
if (amber_going2 == 1) {
me["ALT_box"].show();
me["ALT_box_amber"].hide();

View file

@ -0,0 +1,13 @@
Heading Tape:
123.177
61.5885
98.5416 is 123.177 in 1024
49.2708 is 61.5885 in 1024
Altitude Tape:
304.178
60.8357
243.3424 is 304.178 in 1024
48.66856 is 60.8357 in 1024

View file

@ -8,7 +8,7 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="pfd.svg"
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
id="svg2"
version="1.1"
viewBox="0 0 1024 1024"
@ -39,14 +39,14 @@
showguides="true"
inkscape:current-layer="svg2"
inkscape:window-maximized="1"
inkscape:window-y="23"
inkscape:window-x="0"
inkscape:cy="886.5494"
inkscape:cx="916.44902"
inkscape:zoom="2.1546825"
inkscape:window-y="18"
inkscape:window-x="3840"
inkscape:cy="557.03495"
inkscape:cx="619.57094"
inkscape:zoom="0.53867065"
showgrid="true"
id="namedview371"
inkscape:window-height="1035"
inkscape:window-height="1062"
inkscape:window-width="1920"
inkscape:pageshadow="2"
inkscape:pageopacity="1"
@ -1396,9 +1396,10 @@
<path
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0"
id="rect4760-1"
id="fixed_aircraft_outline_1"
d="m 279.39676,473.84829 20.67975,-1.3e-4 v 15.43882 0 l 1.8e-4,25.65723 h -15.4389 l -0.14628,-25.65723 v 0 l -81.2588,-5e-5 v -15.43891 l 76.16405,2.1e-4 z"
style="fill:none;fill-opacity:1;stroke:#c9d121;stroke-width:3.54375;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
style="fill:none;fill-opacity:1;stroke:#c9d121;stroke-width:3.54375;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="fixed_aircraft_outline_1" />
</g>
<g
id="g4856"
@ -1420,9 +1421,10 @@
<path
style="fill:none;fill-opacity:1;stroke:#c9d121;stroke-width:3.54375;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 279.39676,473.84829 20.67975,-1.3e-4 v 15.43882 0 l 1.8e-4,25.65723 h -15.4389 l -0.14628,-25.65723 v 0 l -81.2588,-5e-5 v -15.43891 l 76.16405,2.1e-4 z"
id="path4854"
id="fixed_aircraft_outline_2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccc" />
sodipodi:nodetypes="cccccccccccc"
inkscape:label="fixed_aircraft_outline_2" />
</g>
<path
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3.19995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
@ -2607,14 +2609,6 @@
width="33.21196"
id="LOC_pointer"
style="fill:none;fill-opacity:1;stroke:#b055be;stroke-width:4.0350337;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="display:inline;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.22735;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
id="ground_ref"
width="16.287683"
height="2088.8245"
x="857.0014"
y="512.75592"
inkscape:label="ground_ref" />
<g
inkscape:label="#g4828"
id="ALT_group2">
@ -2872,17 +2866,12 @@
</g>
<text
id="ALT_tens"
y="289.66925"
y="317.73038"
x="898.703"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
inkscape:label="#text913"
transform="scale(0.96366556,1.0377044)"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30.8364px;line-height:95%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="289.66925"
x="898.703"
id="tspan911"
sodipodi:role="line" /><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30.8364px;line-height:87%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="317.73038"
x="898.703"
@ -6503,6 +6492,14 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<rect
style="display:inline;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.22735;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
id="ground_ref"
width="16.287683"
height="2088.8245"
x="857.0014"
y="512.75592"
inkscape:label="ground_ref" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.75"
@ -6656,4 +6653,54 @@
x="61.095329"
y="74.429939"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.9995px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577">FLX</tspan></text>
<text
inkscape:label="#text1607"
id="spdLimError"
y="742.30011"
x="135.06754"
style="font-style:normal;font-weight:normal;font-size:30px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:0.5;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ff0000;fill-opacity:1;stroke-width:0.75"
y="742.30011"
x="135.06754"
id="tspan1605-4"
sodipodi:role="line">SPD</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:0.5;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#ff0000;fill-opacity:1;stroke-width:0.75"
y="779.80011"
x="135.06754"
sodipodi:role="line"
id="tspan1860">LIM</tspan></text>
<g
id="FPV"
inkscape:label="#g4866"
transform="matrix(1.1096488,0,0,1.1096488,-44.149294,-44.038907)">
<rect
transform="rotate(90)"
style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:4.32775;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4864"
width="11.546137"
height="4.3256927"
x="471.68945"
y="-445.96243" />
<path
style="fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:4.32569;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 461.34624,502.24844 c 0,9.69662 -7.86065,17.55727 -17.55727,17.55727 -9.69662,0 -17.55727,-7.86065 -17.55727,-17.55727 0,-9.69662 7.86065,-17.55727 17.55727,-17.55727 9.69662,0 17.55727,7.86065 17.55727,17.55727 z"
id="path4858"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzzz" />
<rect
y="500.03757"
x="399.82227"
height="4.3256927"
width="25.012779"
id="rect4860"
style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:6.36979;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:6.36977;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4862"
width="25.012671"
height="4.3256927"
x="462.76437"
y="500.03757" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 367 KiB

After

Width:  |  Height:  |  Size: 369 KiB

View file

@ -240,7 +240,6 @@
</animation>
<!-- Knob -->
<!-- TODO add bindings for VOR, LS and ADF -->
<!-- We use a little hack to get 8.33MHz spacing working:
First we assign our current STBY freq we want to adjust to the default instrument.
Then we change the channel there.
@ -514,6 +513,144 @@
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>0.05</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/radials/selected-deg</property>
<step>1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[2]/frequencies/standby-mhz</property>
<step>0.05</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[2]/radials/selected-deg</property>
<step>1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">adf</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/adf[0]/frequencies/standby-khz</property>
<step>1</step>
<min>190</min>
<max>1751</max>
<wrap>true</wrap>
</binding>
</action>
<action>
<button>1</button>
@ -780,8 +917,147 @@
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>-0.05</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/radials/selected-deg</property>
<step>-1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[2]/frequencies/standby-mhz</property>
<step>-0.05</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[2]/radials/selected-deg</property>
<step>-1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">adf</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/adf[0]/frequencies/standby-khz</property>
<step>-1</step>
<min>190</min>
<max>1751</max>
<wrap>true</wrap>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>radio_rot0</object-name>
@ -926,6 +1202,63 @@
<mask>integer</mask>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>1.00</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[2]/frequencies/standby-mhz</property>
<step>1.00</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
</action>
<action>
<button>1</button>
@ -1068,6 +1401,63 @@
<mask>integer</mask>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>-1.00</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[0]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[0]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[2]/frequencies/standby-mhz</property>
<step>-1</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
</action>
</animation>
@ -1076,23 +1466,15 @@
<type>pick</type>
<object-name>radio_nav_lit</object-name>
<action>
<button>1</button>
<button>0</button>
<binding>
<command>property-assign</command>
<command>property-toggle</command>
<property>controls/radio/rmp[0]/nav-protect</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>controls/radio/rmp[0]/nav-protect</property>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/oh-cover", 1);</script>
</binding>
</mod-up>
</action>
</animation>
<animation>
@ -1111,7 +1493,7 @@
<object-name>radio_nav</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<repeatable>false</repeatable>
<binding>
<command>property-toggle</command>
<property>systems/radio/rmp[0]/nav</property>
@ -1132,6 +1514,15 @@
</and>
</condition>
</binding>
<binding>
<command>property-assign</command>
<property>controls/radio/rmp[0]/nav-protect</property>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/oh-cover", 1);</script>
</binding>
</action>
</animation>

View file

@ -240,7 +240,6 @@
</animation>
<!-- Knob -->
<!-- TODO add bindings for VOR, LS and ADF -->
<!-- We use a little hack to get 8.33MHz spacing working:
First we assign our current STBY freq we want to adjust to the default instrument.
Then we change the channel there.
@ -514,6 +513,145 @@
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>0.05</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/radials/selected-deg</property>
<step>1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[3]/frequencies/standby-mhz</property>
<step>0.05</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[3]/radials/selected-deg</property>
<step>1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">adf</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/adf[1]/frequencies/standby-khz</property>
<step>1</step>
<min>190</min>
<max>1751</max>
<wrap>true</wrap>
</binding>
</action>
<action>
<button>1</button>
@ -780,6 +918,144 @@
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>-0.05</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/radials/selected-deg</property>
<step>-1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[3]/frequencies/standby-mhz</property>
<step>-0.05</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>1</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[3]/radials/selected-deg</property>
<step>-1</step>
<min>1</min>
<max>361</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">adf</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/adf[1]/frequencies/standby-khz</property>
<step>-1</step>
<min>190</min>
<max>1751</max>
<wrap>true</wrap>
</binding>
</action>
</animation>
<animation>
@ -926,6 +1202,63 @@
<mask>integer</mask>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>1.00</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[3]/frequencies/standby-mhz</property>
<step>1.00</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
</action>
<action>
<button>1</button>
@ -1068,6 +1401,63 @@
<mask>integer</mask>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">ls</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[0]/frequencies/standby-mhz</property>
<step>-1.00</step>
<min>108.00</min>
<max>112.00</max>
<wrap>true</wrap>
</binding>
<binding>
<condition>
<and>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
<equals>
<property>controls/radio/rmp[1]/on</property>
<value>1</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/sel_chan</property>
<value type="string">vor</value>
</equals>
<equals>
<property>systems/radio/rmp[1]/select-crs</property>
<value>0</value>
</equals>
</and>
</condition>
<command>property-adjust</command>
<property>instrumentation/nav[3]/frequencies/standby-mhz</property>
<step>-1</step>
<min>108.00</min>
<max>118.00</max>
<wrap>true</wrap>
</binding>
</action>
</animation>
@ -1076,23 +1466,15 @@
<type>pick</type>
<object-name>radio_nav_lit</object-name>
<action>
<button>1</button>
<button>0</button>
<binding>
<command>property-assign</command>
<command>property-toggle</command>
<property>controls/radio/rmp[1]/nav-protect</property>
<value>1</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>controls/radio/rmp[1]/nav-protect</property>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/oh-cover", 1);</script>
</binding>
</mod-up>
</action>
</animation>
<animation>
@ -1111,7 +1493,7 @@
<object-name>radio_nav</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<repeatable>false</repeatable>
<binding>
<command>property-toggle</command>
<property>systems/radio/rmp[1]/nav</property>
@ -1132,6 +1514,15 @@
</and>
</condition>
</binding>
<binding>
<command>property-assign</command>
<property>controls/radio/rmp[1]/nav-protect</property>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/oh-cover", 1);</script>
</binding>
</action>
</animation>

View file

@ -3,7 +3,7 @@ MATERIAL "radio" rgb 0.800 0.800 0.800 amb 1.000 1.000 1.000 emis 0.100 0.100
MATERIAL "radio_emit" rgb 0.640 0.640 0.640 amb 1.000 1.000 1.000 emis 0.850 0.850 0.850 spec 0.400 0.400 0.400 shi 12 trans 0.000
MATERIAL "DefaultWhite" rgb 1.000 1.000 1.000 amb 0.200 0.200 0.200 emis 0.000 0.000 0.000 spec 0.500 0.500 0.500 shi 10 trans 0.000
OBJECT world
name "Blender_exporter_v2.26__Radio.ac"
name "Blender_exporter_v3.3__Radio.ac"
kids 37
OBJECT poly
name "radio_active.screen"
@ -14746,9 +14746,9 @@ SURF 0X0
mat 0
refs 4
5 0.993212 0.944859
4 0.931324 0.944859
10 0.931324 0.943492
11 0.993212 0.943492
10 0.931324 0.943492
4 0.931324 0.944859
SURF 0X0
mat 0
refs 4
@ -14760,9 +14760,9 @@ SURF 0X0
mat 0
refs 4
1 0.965523 0.925681
0 0.997855 0.925681
4 0.997855 0.935702
5 0.965523 0.935702
4 0.997855 0.935702
0 0.997855 0.925681
SURF 0X0
mat 0
refs 4
@ -14792,9 +14792,9 @@ SURF 0X0
mat 0
refs 4
0 0.931324 0.94175
1 0.993212 0.94175
3 0.993212 0.942381
2 0.931324 0.942381
3 0.993212 0.942381
1 0.993212 0.94175
kids 0
OBJECT poly
name "radio_nav_lit.axis"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 KiB

After

Width:  |  Height:  |  Size: 320 KiB

View file

@ -3,7 +3,7 @@ MATERIAL "radio" rgb 0.800 0.800 0.800 amb 1.000 1.000 1.000 emis 0.100 0.100
MATERIAL "radio_emit" rgb 0.640 0.640 0.640 amb 1.000 1.000 1.000 emis 0.850 0.850 0.850 spec 0.400 0.400 0.400 shi 12 trans 0.000
MATERIAL "DefaultWhite" rgb 1.000 1.000 1.000 amb 0.200 0.200 0.200 emis 0.000 0.000 0.000 spec 0.500 0.500 0.500 shi 10 trans 0.000
OBJECT world
name "Blender_exporter_v2.26__Radio1.ac"
name "Blender_exporter_v3.3__Radio1.ac"
kids 37
OBJECT poly
name "radio_active.screen"
@ -14746,9 +14746,9 @@ SURF 0X0
mat 0
refs 4
5 0.993212 0.944859
4 0.931324 0.944859
10 0.931324 0.943492
11 0.993212 0.943492
10 0.931324 0.943492
4 0.931324 0.944859
SURF 0X0
mat 0
refs 4
@ -14760,9 +14760,9 @@ SURF 0X0
mat 0
refs 4
1 0.965523 0.925681
0 0.997855 0.925681
4 0.997855 0.935702
5 0.965523 0.935702
4 0.997855 0.935702
0 0.997855 0.925681
SURF 0X0
mat 0
refs 4
@ -14792,9 +14792,9 @@ SURF 0X0
mat 0
refs 4
0 0.931324 0.94175
1 0.993212 0.94175
3 0.993212 0.942381
2 0.931324 0.942381
3 0.993212 0.942381
1 0.993212 0.94175
kids 0
OBJECT poly
name "radio_nav_lit.axis"

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="cfm-eis2.svg">
<metadata
id="metadata375">
@ -40,10 +40,10 @@
inkscape:window-width="1366"
inkscape:window-height="705"
id="namedview371"
showgrid="false"
inkscape:zoom="0.50000001"
inkscape:cx="659.36853"
inkscape:cy="512.09207"
showgrid="true"
inkscape:zoom="1"
inkscape:cx="718.57047"
inkscape:cy="505.8628"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
@ -76,11 +76,6 @@
height="8.496521"
x="691.55396"
y="692.57446" />
<path
id="path4447"
style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 718.11442,596.89138 11.4047,16.81213 m -36.4425,-17.34853 -10.5797,15.51213 m 11.1047,-15.46213 24.4703,0.46213 m -35.5703,14.98787 47.0582,1.94289"
inkscape:connector-curvature="0" />
<text
inkscape:label="#text4219"
id="FlapTxt"
@ -94,6 +89,13 @@
x="729.04968"
id="tspan4331"
sodipodi:role="line">1+F</tspan></text>
<path
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.23279285;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 917.38445,644.30596 720.66027,597.47244"
id="FlapLine"
sodipodi:nodetypes="cc"
inkscape:label="#path1103"
inkscape:connector-curvature="0" />
<g
id="FlapDots"
inkscape:label="#g4344"
@ -102,11 +104,11 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect4346"
d="m 636.15001,595.05001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
d="m 636.16173,590.75725 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 590.60001,606.45001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
d="m 590.60001,605.24377 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
id="path4349"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
@ -118,7 +120,7 @@
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 821.6363,589.13181 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
d="m 821.6363,592.59471 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
id="path4353"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
@ -126,11 +128,11 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4355"
d="m 867.18574,600.69907 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
d="m 867.18574,603.7664 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 913.00626,612.50775 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
d="m 913.00626,615.19254 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
id="path4357"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
@ -1264,485 +1266,6 @@
y="943.73566"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#cecdce">LINE 8</tspan></text>
</g>
<g
id="TO_Memo"
inkscape:label="#g4517">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4412"
y="686.0564"
x="14.033532"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="686.0564"
x="14.033532"
id="tspan4414"
sodipodi:role="line">T.O</tspan></text>
<path
style="fill:none;stroke:#0dc04b;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.8216,741.99564 77.932201,0"
id="path4556"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="686.0564"
id="TO_Autobrake"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4421"
x="104.6523"
y="686.0564"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">AUTO BRK</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="TO_Signs"
y="722.50458"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="722.50458"
x="104.6523"
id="tspan4425"
sodipodi:role="line">SIGNS</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="759.67883"
id="TO_Spoilers"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4429"
x="104.6523"
y="759.67883"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">SPLRS</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="TO_Flaps"
y="796.12726"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="796.12726"
x="104.6523"
id="tspan4436"
sodipodi:role="line">FLAPS </tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="833.30151"
id="TO_Config"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4440"
x="104.6523"
y="833.30151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">T.O CONFIG</tspan></text>
<g
inkscape:label="#g4487"
id="TO_Autobrake_B">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="686.41925"
id="text4442"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4444"
x="489.9281"
y="686.41925"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">MAX</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4462"
y="686.41925"
x="403.6488"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="686.41925"
x="403.6488"
id="tspan4465"
sodipodi:role="line">. . . . .</tspan></text>
</g>
<g
inkscape:label="#g4493"
id="TO_Signs_B">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4446"
y="722.50458"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="722.50458"
x="489.9281"
id="tspan4448"
sodipodi:role="line"> ON</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="424.27417"
y="722.86768"
id="text4471"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"
inkscape:transform-center-y="-46.367479"><tspan
sodipodi:role="line"
id="tspan4473"
x="424.27417"
y="722.86768"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4499"
id="TO_Spoilers_B">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="760.04193"
id="text4450"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4452"
x="489.9281"
y="760.04193"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">ARM</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="403.6488"
y="760.04193"
id="text4475"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4477"
x="403.6488"
y="760.04193"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4505"
id="TO_Flaps_B">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4454"
y="796.12726"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.12726"
x="489.9281"
id="tspan4456"
sodipodi:role="line">T.O</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="424.27417"
y="796.49036"
id="text4479"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4481"
x="424.27417"
y="796.49036"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4511"
id="TO_Config_B">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="833.30151"
id="text4458"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4460"
x="489.9281"
y="833.30151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">TEST</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4483"
y="833.66461"
x="383.02429"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="833.66461"
x="383.02429"
id="tspan4485"
sodipodi:role="line">. . .</tspan></text>
</g>
</g>
<g
inkscape:label="#g4517"
id="LDG_Memo">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="14.033532"
y="686.0564"
id="text4418"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan233"
x="14.033532"
y="686.0564"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">LDG</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4424"
d="M 13.8216,741.99564 H 91.753801"
style="fill:none;stroke:#0dc04b;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="LDG_Gear"
y="686.0564"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="686.0564"
x="104.6523"
id="tspan4428"
sodipodi:role="line">LDG GEAR</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="722.50458"
id="LDG_Signs"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4432"
x="104.6523"
y="722.50458"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">SIGNS</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="759.37872"
id="LDG_Cabin"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan241"
x="104.6523"
y="759.37872"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">CABIN READY</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="LDG_Spoilers"
y="796.12726"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="796.12726"
x="104.6523"
id="tspan4438"
sodipodi:role="line">SPLRS</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="833.30151"
id="LDG_Flaps"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4442"
x="104.6523"
y="833.30151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">FLAPS </tspan></text>
<g
id="LDG_Gear_B"
inkscape:label="#g4487">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4451"
y="686.41925"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="686.41925"
x="489.9281"
id="tspan4453"
sodipodi:role="line">DN</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="424.27417"
y="686.41925"
id="text4455"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4457"
x="424.27417"
y="686.41925"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . .</tspan></text>
</g>
<g
id="LDG_Signs_B"
inkscape:label="#g4493">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="722.50458"
id="text4461"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4463"
x="489.9281"
y="722.50458"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"> ON</tspan></text>
<text
inkscape:transform-center-y="-46.367479"
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4465"
y="722.86768"
x="424.27417"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="722.86768"
x="424.27417"
id="tspan4467"
sodipodi:role="line">. . . . . . . . . .</tspan></text>
</g>
<g
id="LDG_Spoilers_B"
inkscape:label="#g4499">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4472"
y="796.49036"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.49036"
x="489.9281"
id="tspan4474"
sodipodi:role="line">ARM</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4476"
y="796.49036"
x="403.6488"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.49036"
x="403.6488"
id="tspan4478"
sodipodi:role="line">. . . . . . . . .</tspan></text>
</g>
<g
id="LDG_Flaps_B"
inkscape:label="#g4505"
transform="translate(0,39.990378)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="796.12726"
id="text4482"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4484"
x="489.9281"
y="796.12726"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">FULL</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4486"
y="796.49036"
x="383.02411"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.49036"
x="383.02411"
id="tspan4488"
sodipodi:role="line">. . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4505"
id="LDG_Flaps_B3">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text5125"
y="833.30151"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="833.30151"
x="489.9281"
id="tspan5127"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="465.52426"
y="833.66461"
id="text5129"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan5131"
x="465.52426"
y="833.66461"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . . . . .</tspan></text>
</g>
</g>
<g
inkscape:label="#g4376"
id="ECAM_Right"
@ -1852,4 +1375,57 @@
id="tspan1108"
sodipodi:role="line">LINE 8</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:1.25;font-family:'Liberation Sabs';-inkscape-font-specification:'Liberation Sabs';letter-spacing:0px;word-spacing:0px;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
x="650.08069"
y="575.68427"
id="SlatAlphaLock"
inkscape:label="#text4800"><tspan
sodipodi:role="line"
id="tspan4798"
x="650.08069"
y="575.68427"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75">A-LOCK</tspan></text>
<path
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.44862556;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 555.26245,639.8335 691.24239,597.33411"
id="SlatLine"
inkscape:original-d="m 555.22993,639.86602 135.34892,-43.9598"
inkscape:label="#path1119"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
id="path4447"
style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="m 718.11442,596.89138 11.4047,16.81213 m -35.92874,-17.24909 -11.09346,15.41269 m 11.13785,-15.41241 24.43715,0.41241 m -35.5703,14.98787 47.0582,1.94289"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 928.84849,661.23101 -11.44541,-16.90649 38.53701,7.25587 v 15.15993 l -27.0916,-5.50931"
id="FlapIndicator"
sodipodi:nodetypes="ccccc"
inkscape:label="#path1093" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 530.43575,645.52404 24.69434,-5.55908 -11.10498,15.46142 -24.69434,5.56055 z"
id="SlatIndicator"
inkscape:label="#path1114" />
<rect
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:4.08072662;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="FlapLine_clip"
width="195.52469"
height="50.843338"
x="718.86694"
y="594.42938"
inkscape:label="#rect1023" />
<rect
inkscape:label="#rect1023"
y="594.05438"
x="554.93781"
height="48.089657"
width="137.63597"
id="SlatLine_clip"
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
</svg>

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View file

@ -12,7 +12,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="iae-eis2.svg">
<metadata
id="metadata375">
@ -42,7 +42,7 @@
id="namedview371"
showgrid="false"
inkscape:zoom="0.43942712"
inkscape:cx="568.82143"
inkscape:cx="180.81625"
inkscape:cy="433.53356"
inkscape:window-x="-8"
inkscape:window-y="-8"
@ -97,11 +97,6 @@
height="8.496521"
x="691.55396"
y="692.57446" />
<path
id="path4447"
style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 718.11442,596.89138 11.4047,16.81213 m -36.4425,-17.34853 -10.5797,15.51213 m 11.1047,-15.46213 24.4703,0.46213 m -35.5703,14.98787 47.0582,1.94289"
inkscape:connector-curvature="0" />
<text
inkscape:label="#text4219"
id="FlapTxt"
@ -115,6 +110,13 @@
x="729.04968"
id="tspan4331"
sodipodi:role="line">1+F</tspan></text>
<path
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.23279285;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 917.38445,644.30596 720.66027,597.47244"
id="FlapLine"
sodipodi:nodetypes="cc"
inkscape:label="#path1103"
inkscape:connector-curvature="0" />
<g
id="FlapDots"
inkscape:label="#g4344"
@ -123,11 +125,11 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="rect4346"
d="m 636.15001,595.05001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
d="m 636.16173,590.75725 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 590.60001,606.45001 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
d="m 590.60001,605.24377 9.50347,-2.225 -1.075,3.72508 -9.90347,2.525 z"
id="path4349"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
@ -139,7 +141,7 @@
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 821.6363,589.13181 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
d="m 821.6363,592.59471 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
id="path4353"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
@ -147,11 +149,11 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4355"
d="m 867.18574,600.69907 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
d="m 867.18574,603.7664 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecdce;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 913.00626,612.50775 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
d="m 913.00626,615.19254 -9.50347,-2.225 1.075,3.72508 9.90347,2.525 z"
id="path4357"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
@ -1632,485 +1634,6 @@
y="943.73566"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#cecdce">LINE 8</tspan></text>
</g>
<g
id="TO_Memo"
inkscape:label="#g4517">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4412"
y="686.0564"
x="14.033532"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="686.0564"
x="14.033532"
id="tspan4414"
sodipodi:role="line">T.O</tspan></text>
<path
style="fill:none;stroke:#0dc04b;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.8216,741.99564 77.932201,0"
id="path4556"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="686.0564"
id="TO_Autobrake"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4421"
x="104.6523"
y="686.0564"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">AUTO BRK</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="TO_Signs"
y="722.50458"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="722.50458"
x="104.6523"
id="tspan4425"
sodipodi:role="line">SIGNS</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="759.67883"
id="TO_Spoilers"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4429"
x="104.6523"
y="759.67883"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">SPLRS</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="TO_Flaps"
y="796.12726"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="796.12726"
x="104.6523"
id="tspan4436"
sodipodi:role="line">FLAPS </tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="833.30151"
id="TO_Config"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4440"
x="104.6523"
y="833.30151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">T.O CONFIG</tspan></text>
<g
inkscape:label="#g4487"
id="TO_Autobrake_B">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="686.41925"
id="text4442"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4444"
x="489.9281"
y="686.41925"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">MAX</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4462"
y="686.41925"
x="403.6488"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="686.41925"
x="403.6488"
id="tspan4465"
sodipodi:role="line">. . . . .</tspan></text>
</g>
<g
inkscape:label="#g4493"
id="TO_Signs_B">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4446"
y="722.50458"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="722.50458"
x="489.9281"
id="tspan4448"
sodipodi:role="line"> ON</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="424.27417"
y="722.86768"
id="text4471"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"
inkscape:transform-center-y="-46.367479"><tspan
sodipodi:role="line"
id="tspan4473"
x="424.27417"
y="722.86768"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4499"
id="TO_Spoilers_B">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="760.04193"
id="text4450"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4452"
x="489.9281"
y="760.04193"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">ARM</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="403.6488"
y="760.04193"
id="text4475"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4477"
x="403.6488"
y="760.04193"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4505"
id="TO_Flaps_B">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4454"
y="796.12726"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.12726"
x="489.9281"
id="tspan4456"
sodipodi:role="line">T.O</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="424.27417"
y="796.49036"
id="text4479"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4481"
x="424.27417"
y="796.49036"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4511"
id="TO_Config_B">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="833.30151"
id="text4458"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4460"
x="489.9281"
y="833.30151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">TEST</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4483"
y="833.66461"
x="383.02429"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="833.66461"
x="383.02429"
id="tspan4485"
sodipodi:role="line">. . .</tspan></text>
</g>
</g>
<g
inkscape:label="#g4517"
id="LDG_Memo">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="14.033532"
y="686.0564"
id="text4418"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4422"
x="14.033532"
y="686.0564"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">LDG</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4424"
d="m 13.8216,741.99564 77.932201,0"
style="fill:none;stroke:#0dc04b;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="LDG_Gear"
y="686.0564"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="686.0564"
x="104.6523"
id="tspan4428"
sodipodi:role="line">LDG GEAR</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="722.50458"
id="LDG_Signs"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4432"
x="104.6523"
y="722.50458"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">SIGNS</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="759.37872"
id="LDG_Cabin"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4455"
x="104.6523"
y="759.37872"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">CABIN READY</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="LDG_Spoilers"
y="796.12726"
x="104.6523"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1"
y="796.12726"
x="104.6523"
id="tspan4438"
sodipodi:role="line">SPLRS</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="104.6523"
y="833.30151"
id="LDG_Flaps"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4442"
x="104.6523"
y="833.30151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;fill-opacity:1">FLAPS </tspan></text>
<g
id="LDG_Gear_B"
inkscape:label="#g4487">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4451"
y="686.41925"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="686.41925"
x="489.9281"
id="tspan4453"
sodipodi:role="line">DN</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="424.27417"
y="686.41925"
id="text4455"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4457"
x="424.27417"
y="686.41925"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . .</tspan></text>
</g>
<g
id="LDG_Signs_B"
inkscape:label="#g4493">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="722.50458"
id="text4461"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4463"
x="489.9281"
y="722.50458"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"> ON</tspan></text>
<text
inkscape:transform-center-y="-46.367479"
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4465"
y="722.86768"
x="424.27417"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="722.86768"
x="424.27417"
id="tspan4467"
sodipodi:role="line">. . . . . . . . . .</tspan></text>
</g>
<g
id="LDG_Spoilers_B"
inkscape:label="#g4499">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4472"
y="796.49036"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.49036"
x="489.9281"
id="tspan4474"
sodipodi:role="line">ARM</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4476"
y="796.49036"
x="403.6488"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.49036"
x="403.6488"
id="tspan4478"
sodipodi:role="line">. . . . . . . . .</tspan></text>
</g>
<g
id="LDG_Flaps_B"
inkscape:label="#g4505"
transform="translate(0,39.990378)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="489.9281"
y="796.12726"
id="text4482"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan4484"
x="489.9281"
y="796.12726"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">FULL</tspan></text>
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text4486"
y="796.49036"
x="383.02411"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="796.49036"
x="383.02411"
id="tspan4488"
sodipodi:role="line">. . . . . . . .</tspan></text>
</g>
<g
inkscape:label="#g4505"
id="LDG_Flaps_B3">
<text
transform="scale(0.92957935,1.0757554)"
inkscape:label="#text4314"
id="text5125"
y="833.30151"
x="489.9281"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1"
y="833.30151"
x="489.9281"
id="tspan5127"
sodipodi:role="line">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="465.52426"
y="833.66461"
id="text5129"
inkscape:label="#text4314"
transform="scale(0.92957935,1.0757554)"><tspan
sodipodi:role="line"
id="tspan5131"
x="465.52426"
y="833.66461"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.1831665px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:end;text-anchor:end;fill:#179ab7;fill-opacity:1">. . . . . . . . . . . .</tspan></text>
</g>
</g>
<g
inkscape:label="#g4376"
id="ECAM_Right"
@ -2220,4 +1743,57 @@
id="tspan1162"
sodipodi:role="line">LINE 8</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30px;line-height:1.25;font-family:'Liberation Sabs';-inkscape-font-specification:'Liberation Sabs';letter-spacing:0px;word-spacing:0px;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
x="650.08069"
y="575.68427"
id="SlatAlphaLock"
inkscape:label="#text4800"><tspan
sodipodi:role="line"
id="tspan4798"
x="650.08069"
y="575.68427"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.25px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#0dc04b;fill-opacity:1;stroke-width:0.75">A-LOCK</tspan></text>
<path
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.44862556;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 555.26245,639.8335 691.24239,597.33411"
id="SlatLine"
inkscape:original-d="m 555.22993,639.86602 135.34892,-43.9598"
inkscape:label="#path1119"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
id="path4447"
style="fill:none;fill-rule:evenodd;stroke:#575757;stroke-width:5.19999981;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="m 718.11442,596.89138 11.4047,16.81213 m -35.92874,-17.24909 -11.09346,15.41269 m 11.13785,-15.41241 24.43715,0.41241 m -35.5703,14.98787 47.0582,1.94289"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 928.84849,661.23101 -11.44541,-16.90649 38.53701,7.25587 v 15.15993 l -27.0916,-5.50931"
id="FlapIndicator"
sodipodi:nodetypes="ccccc"
inkscape:label="#path1093" />
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0dc04b;stroke-width:5.2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 530.43575,645.52404 24.69434,-5.55908 -11.10498,15.46142 -24.69434,5.56055 z"
id="SlatIndicator"
inkscape:label="#path1114" />
<rect
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:4.08072662;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="FlapLine_clip"
width="195.52469"
height="50.843338"
x="718.86694"
y="594.42938"
inkscape:label="#rect1023" />
<rect
inkscape:label="#rect1023"
y="594.05438"
x="554.93781"
height="48.089657"
width="137.63597"
id="SlatLine_clip"
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:3.34691048;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
</svg>

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View file

@ -1,6 +1,6 @@
AC3Db
MATERIAL "ac3dmat0" rgb 0 0 0 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 128 trans 0
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 "ac3dmat0" rgb 0 0 0 amb 0.0 0.0 0.0 emis 0 0 0 spec 1.0 1.0 1.0 shi 128 trans 0
MATERIAL "ac3dmat1" rgb 1 1 1 amb 1.0 1.0 1.0 emis 0 0 0 spec 1.0 1.0 1.0 shi 128 trans 0
MATERIAL "ac3dmat13" rgb 0.533333 0.533333 0.533333 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 128 trans 0
OBJECT world
kids 2

View file

@ -26,7 +26,7 @@ var _unitconv = M2FT / 3.6;
var _debug = nil;
var _loop = func() {
if (!getprop("sim/model/autopush/available")) {
if (!getprop("/sim/model/autopush/available")) {
_stop();
return;
}
@ -37,9 +37,9 @@ var _loop = func() {
# Rollspeed is only adequate if the wheel is touching the ground.
if (getprop("gear/gear[0]/wow")) {
var V = getprop("gear/gear[0]/rollspeed-ms") * 3.6;
var deltaV = getprop("sim/model/autopush/target-speed-km_h") - V;
var deltaV = getprop("/sim/model/autopush/target-speed-km_h") - V;
var minus_dV = _V - V;
var time = getprop("sim/time/elapsed-sec");
var time = getprop("/sim/time/elapsed-sec");
var prop = math.min(math.max(_K_p * deltaV, -_F_p), _F_p);
var dt = time - _time;
var deriv = 0.0;
@ -63,24 +63,24 @@ var _loop = func() {
} else {
force = accel * getprop("fdm/yasim/gross-weight-lbs") * _unitconv;
}
var pitch = getprop("sim/model/autopush/pitch-deg") * D2R;
var pitch = getprop("/sim/model/autopush/pitch-deg") * D2R;
z = math.sin(pitch);
var pz = math.cos(pitch);
var yaw = getprop("sim/model/autopush/yaw") * _K_yaw;
var yaw = getprop("/sim/model/autopush/yaw") * _K_yaw;
x = math.cos(yaw) * pz;
y = math.sin(yaw) * pz;
setprop("sim/model/autopush/force-x", x);
setprop("sim/model/autopush/force-y", y);
setprop("/sim/model/autopush/force-x", x);
setprop("/sim/model/autopush/force-y", y);
# JSBSim force's z is down.
setprop("sim/model/autopush/force-z", -z);
setprop("/sim/model/autopush/force-z", -z);
}
setprop("sim/model/autopush/force-lbf", force);
setprop("/sim/model/autopush/force-lbf", force);
if (_yasim) {
# The force is divided by YASim thrust="100000.0" setting.
setprop("sim/model/autopush/force-x-yasim", x * force * 0.00001);
setprop("/sim/model/autopush/force-x-yasim", x * force * 0.00001);
# YASim force's y is to the left.
setprop("sim/model/autopush/force-y-yasim", -y * force * 0.00001);
setprop("sim/model/autopush/force-z-yasim", z * force * 0.00001);
setprop("/sim/model/autopush/force-y-yasim", -y * force * 0.00001);
setprop("/sim/model/autopush/force-z-yasim", z * force * 0.00001);
}
}
@ -89,26 +89,26 @@ var _timer = maketimer(0.0167, func{_loop()});
var _start = func() {
# Else overwritten by dialog.
settimer(func() {
setprop("sim/model/autopush/target-speed-km_h", 0.0)
setprop("/sim/model/autopush/target-speed-km_h", 0.0)
}, 0.1);
_K_p = getprop("sim/model/autopush/K_p");
_F_p = getprop("sim/model/autopush/F_p");
_K_i = getprop("sim/model/autopush/K_i");
_F_i = getprop("sim/model/autopush/F_i");
_K_d = getprop("sim/model/autopush/K_d");
_F_d = getprop("sim/model/autopush/F_d");
_F = getprop("sim/model/autopush/F");
_T_f = getprop("sim/model/autopush/T_f");
_K_yaw = getprop("sim/model/autopush/yaw-mult") * D2R;
_yasim = (getprop("sim/flight-model") == "yasim");
_debug = getprop("sim/model/autopush/debug") or 0;
_K_p = getprop("/sim/model/autopush/K_p");
_F_p = getprop("/sim/model/autopush/F_p");
_K_i = getprop("/sim/model/autopush/K_i");
_F_i = getprop("/sim/model/autopush/F_i");
_K_d = getprop("/sim/model/autopush/K_d");
_F_d = getprop("/sim/model/autopush/F_d");
_F = getprop("/sim/model/autopush/F");
_T_f = getprop("/sim/model/autopush/T_f");
_K_yaw = getprop("/sim/model/autopush/yaw-mult") * D2R;
_yasim = (getprop("/sim/flight-model") == "yasim");
_debug = getprop("/sim/model/autopush/debug") or 0;
_int = 0.0;
_V = 0.0;
_time = getprop("sim/time/elapsed-sec");
setprop("sim/model/autopush/connected", 1);
_time = getprop("/sim/time/elapsed-sec");
setprop("/sim/model/autopush/connected", 1);
if (!_timer.isRunning) {
if (getprop("sim/model/autopush/chocks")) {
setprop("sim/model/autopush/chocks", 0);
if (getprop("/sim/model/autopush/chocks")) {
setprop("/sim/model/autopush/chocks", 0);
screen.log.write("(pushback): Pushback connected, chocks removed. Please release brakes.");
} else {
screen.log.write("(pushback): Pushback connected, please release brakes.");
@ -122,18 +122,18 @@ var _stop = func() {
screen.log.write("(pushback): Pushback and bypass pin removed.");
}
_timer.stop();
setprop("sim/model/autopush/force-lbf", 0.0);
setprop("/sim/model/autopush/force-lbf", 0.0);
if (_yasim) {
setprop("sim/model/autopush/force-x-yasim", 0.0);
setprop("sim/model/autopush/force-y-yasim", 0.0);
setprop("/sim/model/autopush/force-x-yasim", 0.0);
setprop("/sim/model/autopush/force-y-yasim", 0.0);
}
setprop("sim/model/autopush/connected", 0);
setprop("sim/model/autopush/enabled", 0);
setprop("/sim/model/autopush/connected", 0);
setprop("/sim/model/autopush/enabled", 0);
}
setlistener("/sim/model/autopush/enabled", func(p) {
var enabled = p.getValue();
if ((enabled) and getprop("sim/model/autopush/available")) {
if ((enabled) and getprop("/sim/model/autopush/available")) {
_start();
} else {
_stop();

View file

@ -46,7 +46,7 @@ var _advance_wp = func(flip_sign = 0) {
}
var _loop = func() {
if (!getprop("sim/model/autopush/connected")) {
if (!getprop("/sim/model/autopush/connected")) {
stop();
return;
}
@ -56,7 +56,7 @@ var _loop = func() {
var deltapsi = geo.normdeg180(A - psi_leg);
var psi = getprop("orientation/heading-deg") + _push * 180.0;
var deltaA = math.min(math.max(_K_psi * geo.normdeg180(A - psi), -_F_psi), _F_psi);
var time = getprop("sim/time/elapsed-sec");
var time = getprop("/sim/time/elapsed-sec");
var dt = time - _time;
var minus_psidot = (dt > 0.002) * math.min(math.max(_K_psidot * (_psi - psi) / dt, -_F_psidot), _F_psidot);
_psi = psi;
@ -83,8 +83,8 @@ var _loop = func() {
if (_debug > 1) {
print("autopush_driver to_wp " ~ _to_wp ~ ", A " ~ geo.normdeg(A) ~ ", deltaA " ~ deltaA ~ ", minus_psidot " ~ minus_psidot);
}
setprop("sim/model/autopush/target-speed-km_h", _sign * V);
setprop("sim/model/autopush/steer-cmd-norm", steering);
setprop("/sim/model/autopush/target-speed-km_h", _sign * V);
setprop("/sim/model/autopush/steer-cmd-norm", steering);
}
var _timer = maketimer(0.051, func{_loop()});
@ -100,7 +100,7 @@ var start = func() {
gui.popupTip("Already moving");
return;
}
if (!getprop("sim/model/autopush/connected")) {
if (!getprop("/sim/model/autopush/connected")) {
gui.popupTip("Pushback not connected");
return;
}
@ -112,15 +112,15 @@ var start = func() {
} else {
autopush_route.done();
}
_K_V = getprop("sim/model/autopush/driver/K_V");
_F_V = getprop("sim/model/autopush/driver/F_V");
_R_turn_min = getprop("sim/model/autopush/min-turn-radius-m");
_D_stop = getprop("sim/model/autopush/stopping-distance-m");
_K_psi = getprop("sim/model/autopush/driver/K_psi");
_F_psi = getprop("sim/model/autopush/driver/F_psi");
_K_psidot = getprop("sim/model/autopush/driver/K_psidot");
_F_psidot = getprop("sim/model/autopush/driver/F_psidot");
_debug = getprop("sim/model/autopush/debug") or 0;
_K_V = getprop("/sim/model/autopush/driver/K_V");
_F_V = getprop("/sim/model/autopush/driver/F_V");
_R_turn_min = getprop("/sim/model/autopush/min-turn-radius-m");
_D_stop = getprop("/sim/model/autopush/stopping-distance-m");
_K_psi = getprop("/sim/model/autopush/driver/K_psi");
_F_psi = getprop("/sim/model/autopush/driver/F_psi");
_K_psidot = getprop("/sim/model/autopush/driver/K_psidot");
_F_psidot = getprop("/sim/model/autopush/driver/F_psidot");
_debug = getprop("/sim/model/autopush/debug") or 0;
if (!_to_wp) {
var (psi_park, D_park) = courseAndDistance(_route[0], _route[1]);
_push = (abs(geo.normdeg180(getprop("orientation/heading-deg") - psi_park)) > 90.0);
@ -128,7 +128,7 @@ var start = func() {
_advance_wp();
_psi = 0.0;
}
_time = getprop("sim/time/elapsed-sec");
_time = getprop("/sim/time/elapsed-sec");
_timer.start();
var endsign = _sign;
for (ii = _to_wp; ii < size(_route_reverse); ii += 1) {
@ -146,7 +146,7 @@ var start = func() {
var pause = func() {
_timer.stop();
setprop("sim/model/autopush/target-speed-km_h", 0.0);
setprop("/sim/model/autopush/target-speed-km_h", 0.0);
}
var stop = func() {

View file

@ -29,7 +29,7 @@ var _R_turn_min = 0;
var _invalid = 0;
# Make top-down view point north in old FG.
var __fg_version = num(string.replace(getprop("sim/version/flightgear"),".",""));
var __fg_version = num(string.replace(getprop("/sim/version/flightgear"),".",""));
if (__fg_version < 201920) {
_top_view_heading_offset_deg = 94.5;
}
@ -144,14 +144,14 @@ var top_view = func() {
return;
}
_top_view_index = view.indexof("Chase View Without Yaw");
_reset_view_index = getprop("sim/current-view/view-number");
setprop("sim/current-view/view-number", _top_view_index);
_view_pitch_offset_deg = getprop("sim/current-view/pitch-offset-deg");
_view_heading_offset_deg = getprop("sim/current-view/heading-offset-deg");
_view_z_offset = getprop("sim/current-view/z-offset-m");
setprop("sim/current-view/z-offset-m", -500.0);
setprop("sim/current-view/heading-offset-deg", _top_view_heading_offset_deg);
setprop("sim/current-view/pitch-offset-deg", 90.0);
_reset_view_index = getprop("/sim/current-view/view-number");
setprop("/sim/current-view/view-number", _top_view_index);
_view_pitch_offset_deg = getprop("/sim/current-view/pitch-offset-deg");
_view_heading_offset_deg = getprop("/sim/current-view/heading-offset-deg");
_view_z_offset = getprop("/sim/current-view/z-offset-m");
setprop("/sim/current-view/z-offset-m", -500.0);
setprop("/sim/current-view/heading-offset-deg", _top_view_heading_offset_deg);
setprop("/sim/current-view/pitch-offset-deg", 90.0);
_view_listener = setlistener("/sim/current-view/name", func {
_finalize_top_view();
}, 0, 0);
@ -164,11 +164,11 @@ var _finalize_top_view = func() {
removelistener(_view_listener);
_view_listener = nil;
# Go back to the view to restore settings, in case user has switched away.
setprop("sim/current-view/view-number", _top_view_index);
setprop("sim/current-view/z-offset-m", _view_z_offset);
setprop("sim/current-view/heading-offset-deg", _view_heading_offset_deg);
setprop("sim/current-view/pitch-offset-deg", _view_pitch_offset_deg);
setprop("sim/current-view/view-number", _reset_view_index);
setprop("/sim/current-view/view-number", _top_view_index);
setprop("/sim/current-view/z-offset-m", _view_z_offset);
setprop("/sim/current-view/heading-offset-deg", _view_heading_offset_deg);
setprop("/sim/current-view/pitch-offset-deg", _view_pitch_offset_deg);
setprop("/sim/current-view/view-number", _reset_view_index);
if (!_show) {
_clear_user_point_models();
_clear_waypoint_models();
@ -330,7 +330,7 @@ var _check_turn_radius = func() {
}
}
setprop("sim/model/autopush/route/invalid", _invalid);
setprop("/sim/model/autopush/route/invalid", _invalid);
}
setlistener("/sim/model/autopush/route/show", func(p) {
@ -351,7 +351,7 @@ setlistener("/sim/model/autopush/route/show", func(p) {
var enter = func() {
clear();
top_view();
_R_turn_min = getprop("sim/model/autopush/min-turn-radius-m");
_R_turn_min = getprop("/sim/model/autopush/min-turn-radius-m");
var wp = geo.aircraft_position();
var H = geo.elevation(wp.lat(), wp.lon());
if (H != nil) {
@ -362,7 +362,7 @@ var enter = func() {
_add(geo.click_position());
});
# This property can be overridden manually, if needed.
var wingspan = getprop("sim/model/autopush/route/wingspan-m");
var wingspan = getprop("/sim/model/autopush/route/wingspan-m");
if ((wingspan == nil) or (wingspan == 0.0)) {
# JSBSim
wingspan = getprop("fdm/jsbsim/metrics/bw-ft");
@ -372,7 +372,7 @@ var enter = func() {
# YAsim
wingspan = getprop("fdm/yasim/model/wings/wing/wing-span");
}
setprop("sim/model/autopush/route/wingspan-m", wingspan);
setprop("/sim/model/autopush/route/wingspan-m", wingspan);
}
}

View file

@ -7,21 +7,17 @@ var DMC = {
_set: 0,
_setNil: 0,
activeADIRS: -9,
airspeeds: [props.globals.getNode("systems/navigation/adr/output/cas-1", 1), props.globals.getNode("systems/navigation/adr/output/cas-2", 1), props.globals.getNode("systems/navigation/adr/output/cas-3", 1)],
altitudes: [props.globals.getNode("systems/navigation/adr/output/baro-alt-corrected-1-capt", 1), props.globals.getNode("systems/navigation/adr/output/baro-alt-corrected-2-capt", 1), props.globals.getNode("systems/navigation/adr/output/baro-alt-corrected-3-capt", 1)],
machs: [props.globals.getNode("systems/navigation/adr/output/mach-1", 1), props.globals.getNode("systems/navigation/adr/output/mach-2", 1), props.globals.getNode("systems/navigation/adr/output/mach-3", 1)],
altitudesPfd: [props.globals.getNode("instrumentation/altimeter[0]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[1]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[2]/indicated-altitude-ft-pfd", 1)],
sats: [props.globals.getNode("systems/navigation/adr/output/sat-1", 1), props.globals.getNode("systems/navigation/adr/output/sat-2", 1), props.globals.getNode("systems/navigation/adr/output/sat-3", 1)],
tats: [props.globals.getNode("systems/navigation/adr/output/tat-1", 1), props.globals.getNode("systems/navigation/adr/output/tat-2", 1), props.globals.getNode("systems/navigation/adr/output/tat-3", 1)],
trends: [props.globals.getNode("instrumentation/pfd/speed-lookahead-1", 1), props.globals.getNode("instrumentation/pfd/speed-lookahead-2", 1), props.globals.getNode("instrumentation/pfd/speed-lookahead-3", 1)],
outputs: [nil, nil, nil, nil, nil, nil, nil], # airspeed, altitude, mach, pfd altitude, sat, tat, speed trend
new: func(num) {
var d = { parents:[DMC] };
d.activeADIRS = num;
d.outputs = [nil, nil, nil, nil, nil, nil, nil];
d.airspeeds = [props.globals.getNode("/systems/navigation/adr/output/cas-1", 1), props.globals.getNode("/systems/navigation/adr/output/cas-2", 1), props.globals.getNode("/systems/navigation/adr/output/cas-3", 1)];
d.altitudes = [props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-1-capt", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-2-capt", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-3-capt", 1)];
d.machs = [props.globals.getNode("/systems/navigation/adr/output/mach-1", 1), props.globals.getNode("/systems/navigation/adr/output/mach-2", 1), props.globals.getNode("/systems/navigation/adr/output/mach-3", 1)];
d.altitudesPfd = [props.globals.getNode("instrumentation/altimeter[0]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[1]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[2]/indicated-altitude-ft-pfd", 1)];
d.sats = [props.globals.getNode("/systems/navigation/adr/output/sat-1", 1), props.globals.getNode("/systems/navigation/adr/output/sat-2", 1), props.globals.getNode("/systems/navigation/adr/output/sat-3", 1)];
d.tats = [props.globals.getNode("/systems/navigation/adr/output/tat-1", 1), props.globals.getNode("/systems/navigation/adr/output/tat-2", 1), props.globals.getNode("/systems/navigation/adr/output/tat-3", 1)];
d.trends = [props.globals.getNode("instrumentation/pfd/speed-lookahead-1", 1), props.globals.getNode("instrumentation/pfd/speed-lookahead-2", 1), props.globals.getNode("instrumentation/pfd/speed-lookahead-3", 1)];
d.outputs = [nil, nil, nil, nil, nil, nil, nil]; # airspeed, altitude, mach, pfd altitude, sat, tat, speed trend
return d;
},
changeActiveADIRS: func(newADIRS) {
@ -74,7 +70,7 @@ var DMController = {
me.DMCs = [DMC.new(0), DMC.new(1), DMC.new(2)];
# update DMC2 to correct properties for first officer PFD
me.DMCs[1].altitudes = [props.globals.getNode("systems/navigation/adr/output/baro-alt-corrected-1-fo", 1), props.globals.getNode("systems/navigation/adr/output/baro-alt-corrected-2-fo", 1), props.globals.getNode("systems/navigation/adr/output/baro-alt-corrected-3-fo", 1)];
me.DMCs[1].altitudes = [props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-1-fo", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-2-fo", 1), props.globals.getNode("/systems/navigation/adr/output/baro-alt-corrected-3-fo", 1)];
me.DMCs[1].altitudesPfd = [props.globals.getNode("instrumentation/altimeter[3]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[4]/indicated-altitude-ft-pfd", 1), props.globals.getNode("instrumentation/altimeter[5]/indicated-altitude-ft-pfd", 1)];
me._init = 1;

View file

@ -12,10 +12,10 @@ var leftOverflow = props.globals.initNode("/ECAM/warnings/overflow-left", 0, "B
var rightOverflow = props.globals.initNode("/ECAM/warnings/overflow-right", 0, "BOOL");
var overflow = props.globals.initNode("/ECAM/warnings/overflow", 0, "BOOL");
var dc_ess = props.globals.getNode("systems/electrical/bus/dc-ess", 1);
var dc_ess = props.globals.getNode("/systems/electrical/bus/dc-ess", 1);
var lights = [props.globals.initNode("/ECAM/warnings/master-warning-light", 0, "BOOL"), props.globals.initNode("/ECAM/warnings/master-caution-light", 0, "BOOL")];
var aural = [props.globals.initNode("/sim/sound/warnings/crc", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/chime", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cricket", 0, "BOOL")];
var aural = [props.globals.initNode("/sim/sound/warnings/crc", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/chime", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cricket", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/retard", 0, "BOOL")];
var warningFlash = props.globals.initNode("/ECAM/warnings/master-warning-flash", 0, "BOOL");
var lineIndex = 0;
@ -29,6 +29,95 @@ var counter = 0;
var noMainMsg = 0;
var storeFirstWarning = nil;
var warningNodes = {
Logic: {
crossbleedFault: props.globals.initNode("/ECAM/warnings/logic/crossbleed-fault"),
crossbleedWai: props.globals.initNode("/ECAM/warnings/logic/crossbleed-wai"),
bleed1LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-unsucc"),
bleed1LoTempXbleed: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-xbleed"),
bleed1LoTempBleed: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-bleed"),
bleed1LoTempPack: props.globals.initNode("/ECAM/warnings/logic/bleed-1-lo-temp-pack"),
bleed1WaiAvail: props.globals.initNode("/ECAM/warnings/logic/bleed-1-wai-avail"),
bleed2LoTempUnsuc: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-unsucc"),
bleed2LoTempXbleed: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-xbleed"),
bleed2LoTempBleed: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-bleed"),
bleed2LoTempPack: props.globals.initNode("/ECAM/warnings/logic/bleed-2-lo-temp-pack"),
bleed2WaiAvail: props.globals.initNode("/ECAM/warnings/logic/bleed-2-wai-avail"),
waiSysfault: props.globals.initNode("/ECAM/warnings/logic/wing-anti-ice-sys-fault"),
waiLclosed: props.globals.initNode("/ECAM/warnings/flipflop/wing-anti-ice-left-closed"),
waiRclosed: props.globals.initNode("/ECAM/warnings/flipflop/wing-anti-ice-right-closed"),
procWaiShutdown: props.globals.initNode("/ECAM/warnings/logic/proc-wai-shutdown-output"),
waiGndFlight: props.globals.initNode("/ECAM/warnings/logic/wing-anti-ice-gnd-fault"),
pack12Fault: props.globals.initNode("/ECAM/warnings/logic/pack-1-2-fault"),
pack1ResetPb: props.globals.initNode("/ECAM/warnings/logic/reset-pack-1-switch-cmd"),
pack2ResetPb: props.globals.initNode("/ECAM/warnings/logic/reset-pack-2-switch-cmd"),
cabinFans: props.globals.initNode("/ECAM/warnings/logic/cabin-fans-fault"),
rtlu1Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-1-fault"),
rtlu2Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-2-fault"),
rtlu12Fault: props.globals.initNode("/ECAM/warnings/logic/rud-trav-lim-sys-fault"),
fac12Fault: props.globals.initNode("/ECAM/warnings/logic/fac-12-fault"),
fac1Fault: props.globals.initNode("/ECAM/warnings/logic/fac-1-fault"),
fac2Fault: props.globals.initNode("/ECAM/warnings/logic/fac-2-fault"),
stallWarn: props.globals.initNode("/ECAM/warnings/logic/stall/stall-warn-on"),
yawDamper12Fault: props.globals.initNode("/ECAM/warnings/logic/yaw-damper-12-fault"),
gearNotDown1: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-not-cancellable"),
gearNotDown2: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-cancellable"),
gearNotDownLocked: props.globals.initNode("/ECAM/warnings/fctl/gear-not-down-locked"),
gearNotDownLockedFlipflop: props.globals.initNode("/ECAM/warnings/fctl/gear-not-downlocked-output"),
blueGreen: props.globals.initNode("/ECAM/warnings/hyd/blue-green-failure"),
blueGreenFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-green-fuel-consumpt"),
blueYellow: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-failure"),
blueYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/blue-yellow-fuel-consumpt"),
greenYellow: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-failure"),
greenYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-fuel-consumpt"),
},
Timers: {
apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"),
bleed1Fault: props.globals.initNode("/ECAM/warnings/timer/bleed-1-fault"),
bleed1FaultOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-1-fault-output"),
bleed2Fault: props.globals.initNode("/ECAM/warnings/timer/bleed-2-fault"),
bleed2FaultOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-2-fault-output"),
bleed1NotShutOutput: props.globals.initNode("/ECAM/warnings/timer/prv-1-not-shut-output"),
bleed2NotShutOutput: props.globals.initNode("/ECAM/warnings/timer/prv-2-not-shut-output"),
bleed1And2LoTemp: props.globals.initNode("/ECAM/warnings/timer/bleed-1-and-2-low-temp"),
bleed1And2LoTempOutput: props.globals.initNode("/ECAM/warnings/timer/bleed-1-and-2-low-temp-output"),
bleed1Off60Output: props.globals.initNode("/ECAM/warnings/logic/bleed-1-off-60-output"),
bleed1Off5Output: props.globals.initNode("/ECAM/warnings/logic/bleed-1-off-5-output"),
bleed2Off60Output: props.globals.initNode("/ECAM/warnings/logic/bleed-2-off-60-output"),
bleed2Off5Output: props.globals.initNode("/ECAM/warnings/logic/bleed-2-off-5-output"),
eng1AiceNotClsd: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-open-output"),
eng2AiceNotClsd: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-open-output"),
eng1AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-1-closed-output"),
eng2AiceNotOpen: props.globals.initNode("/ECAM/warnings/timer/eng-aice-2-closed-output"),
LRElevFault: props.globals.initNode("/ECAM/warnings/fctl/lrElevFault-output"),
waiLhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-left"),
waiRhiPr: props.globals.initNode("/ECAM/warnings/timer/wing-hi-pr-right"),
pack1Fault: props.globals.initNode("/ECAM/warnings/timer/pack-1-fault-2"),
pack2Fault: props.globals.initNode("/ECAM/warnings/timer/pack-2-fault-2"),
pack1Off: props.globals.initNode("/ECAM/warnings/timer/pack-1-off"),
pack2Off: props.globals.initNode("/ECAM/warnings/timer/pack-2-off"),
trimAirFault: props.globals.initNode("/ECAM/warnings/timer/trim-air-fault"),
yawDamper1Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-1-fault"),
yawDamper2Fault: props.globals.initNode("/ECAM/warnings/timer/yaw-damper-2-fault"),
navTerrFault: props.globals.initNode("/ECAM/warnings/timer/nav-gpws-terr-fault"),
},
Flipflops: {
apuGenFault: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault"),
apuGenFaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault-on-off"),
bleed1LowTemp: props.globals.initNode("/ECAM/warnings/logic/bleed-1-low-temp-flipflop-output"),
bleed2LowTemp: props.globals.initNode("/ECAM/warnings/logic/bleed-2-low-temp-flipflop-output"),
gen1Fault: props.globals.initNode("/ECAM/warnings/flipflop/gen-1-fault"),
gen2Fault: props.globals.initNode("/ECAM/warnings/flipflop/gen-2-fault"),
gen1FaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/gen-1-fault-on-off"),
gen2FaultOnOff: props.globals.initNode("/ECAM/warnings/flipflop/gen-2-fault-on-off"),
pack1Ovht: props.globals.initNode("/ECAM/warnings/flipflop/pack-1-ovht"),
pack2Ovht: props.globals.initNode("/ECAM/warnings/flipflop/pack-2-ovht"),
parkBrk: props.globals.initNode("/ECAM/warnings/config/park-brk/park-brk-output"),
eng1ThrLvrAbvIdle: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-thr-lvr-abv-idle"),
eng2ThrLvrAbvIdle: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-thr-lvr-abv-idle"),
},
};
var warning = {
new: func(msg,colour = "g",aural = 9,light = 9,isMainMsg = 0,lastSubmsg = 0, sdPage = "nil", isMemo = 0) {
var t = {parents:[warning]};
@ -84,7 +173,7 @@ var warning = {
me.noRepeat = 1;
},
sound: func() {
if (me.aural > 2) { return; }
if (me.aural > 3) { return; }
if (me.active == 0 and me.wasActive == 1) {
aural[me.aural].setBoolValue(0);
me.wasActive = 0;
@ -168,14 +257,21 @@ var status = {
var ECAM_controller = {
_recallCounter: 0,
_noneActive: 0,
counter: 0,
init: func() {
ECAMloopTimer.start();
me.counter = 0;
me.reset();
},
loop: func() {
if ((systems.ELEC.Bus.acEss.getValue() >= 110 or systems.ELEC.Bus.ac2.getValue() >= 110) and !getprop("systems/acconfig/acconfig-running")) {
if ((systems.ELEC.Bus.acEss.getValue() >= 110 or systems.ELEC.Bus.ac2.getValue() >= 110) and !pts.Acconfig.running.getBoolValue()) {
# update FWC phases
if (me.counter == 0) {
phaseLoop();
me.counter = 1;
return;
}
me.counter = 0;
# check active messages
messages_priority_3();
@ -206,7 +302,7 @@ var ECAM_controller = {
# write to ECAM
var counter = 0;
if (!getprop("systems/acconfig/autoconfig-running")) {
if (!pts.Acconfig.running.getBoolValue()) {
foreach (var w; warnings.vector) {
if (w.active == 1) {
if (counter < 9) {

File diff suppressed because it is too large Load diff

View file

@ -20,8 +20,6 @@ var apOffTime = 0;
var athrOffTime = 0;
var apWarnNode = 0;
var athrWarnNode = 0;
var leftMsg = 0;
var rightMsg = 0;
var engStrtTimeSw = 0;
var engStrtTime = 0;
var page = 0;
@ -42,7 +40,7 @@ var clrLight = 0;
var ECAM = {
_cachePage: "",
init: func() {
setprop("systems/gear/landing-gear-warning-light", 0);
setprop("/systems/gear/landing-gear-warning-light", 0);
page = props.globals.initNode("/ECAM/Lower/page", "door", "STRING");
apuLight = props.globals.initNode("/ECAM/Lower/light/apu", 0, "BOOL");
bleedLight = props.globals.initNode("/ECAM/Lower/light/bleed", 0, "BOOL");
@ -61,8 +59,6 @@ var ECAM = {
phase = props.globals.initNode("/ECAM/warning-phase", 0, "INT");
apOffTime = props.globals.initNode("/ECAM/ap-off-time", 0, "INT");
athrOffTime = props.globals.initNode("/ECAM/athr-off-time", 0, "INT");
leftMsg = props.globals.initNode("/ECAM/left-msg", "MSG", "STRING");
rightMsg = props.globals.initNode("/ECAM/right-msg", "MSG", "STRING");
engStrtTimeSw = props.globals.initNode("/ECAM/engine-start-time-switch", 0, "BOOL");
engStrtTime = props.globals.initNode("/ECAM/engine-start-time", 0.0, "DOUBLE");
apWarnNode = props.globals.initNode("/it-autoflight/output/ap-warning", 0, "INT");
@ -223,7 +219,7 @@ var SystemDisplay = {
},
update: func() {
phase = pts.ECAM.fwcWarningPhase.getValue();
APUMaster = pts.APU.masterSw.getValue();
APUMaster = systems.APUNodes.Controls.master.getValue();
APURPM = pts.APU.rpm.getValue();
engModeSel = pts.Controls.Engines.startSw.getValue();
elapsedSec = pts.Sim.Time.elapsedSec.getValue();

View file

@ -11,42 +11,33 @@
var warnings = std.Vector.new([
var stall = warning.new(msg: "", aural: 2),
var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0),
var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var overspeed = warning.new(msg: "OVER SPEED", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var overspeedVMO = warning.new(msg: "-VMO/MMO.......350 /.82", colour: "r"),
var overspeedGear = warning.new(msg: "-VLE...........280 /.67", colour: "r"),
var overspeedFlap = warning.new(msg: "-VFE................XXX", colour: "r"),
# DUAL ENG FAIL
var dualFail = warning.new(msg: "ENG DUAL FAILURE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var dualFailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var dualFailLevers = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var dualFailRelightSPD = warning.new(msg: " OPTIMUM RELIGHT SPD.280", colour: "c"),
var dualFailRelightSPDCFM = warning.new(msg: " OPTIMUM RELIGHT SPD.300", colour: "c"),
var dualFailElec = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var dualFailRadio = warning.new(msg: " -VHF1/ATC1..........USE", colour: "c"),
var dualFailFAC = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
var dualFailRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w", isMainMsg: 1),
var dualFailMasters = warning.new(msg: " -ENG MASTERS.OFF 30S/ON", colour: "c"),
var dualFailSuccess = warning.new(msg: " •IF UNSUCCESSFUL : ", colour: "w", isMainMsg: 1),
var dualFailAPU = warning.new(msg: " -APU (IF AVAIL)...START", colour: "c"),
var dualFailAPUwing = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var dualFailAPUbleed = warning.new(msg: " -APU BLEED...........ON", colour: "c"),
var dualFailMastersAPU = warning.new(msg: " -ENG MASTERS.OFF 30S/ON", colour: "c"),
var dualFailSPDGD = warning.new(msg: " OPTIMUM SPEED.....G DOT", colour: "c"),
var dualFailAPPR = warning.new(msg: " •EARLY IN APPR : ", colour: "w", isMainMsg: 1),
var dualFailcabin = warning.new(msg: " -CAB SECURE.......ORDER", colour: "c"),
var dualFailrudd = warning.new(msg: " -USE RUDDER WITH CARE ", colour: "c"),
var dualFailflap = warning.new(msg: " -FOR LDG.....USE FLAP 3", colour: "c"),
var dualFail5000 = warning.new(msg: " •AT 5000 FT AGL : ", colour: "w", isMainMsg: 1),
var dualFailgear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
var dualFailfinalspeed = warning.new(msg: " TARGET SPEED.....150 KT", colour: "c"),
var dualFailtouch = warning.new(msg: " •AT TOUCH DOWN : ", colour: "w", isMainMsg: 1),
var dualFailmasteroff = warning.new(msg: " -ENG MASTERS........OFF", colour: "c"),
var dualFailapuoff = warning.new(msg: " -APU MASTER SW......OFF", colour: "c"),
var dualFailevac = warning.new(msg: " -EVAC..........INITIATE", colour: "c"),
var dualFailbatt = warning.new(msg: " -BAT 1+2............OFF", colour: "c"),
var allEngFail = warning.new(msg: "ENG ALL ENGINES FAILURE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var allEngFailElec = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var allEngFailSPD1 = warning.new(msg: " OPT RELIGHT SPD.260/.77", colour: "c"),
var allEngFailSPD2 = warning.new(msg: " OPT RELIGHT SPD.270/.77", colour: "c"),
var allEngFailSPD3 = warning.new(msg: " OPT RELIGHT SPD.280/.77", colour: "c"),
var allEngFailSPD4 = warning.new(msg: " OPT RELIGHT SPD.300/.77", colour: "c"),
var allEngFailAPU = warning.new(msg: " -APU..............START", colour: "c"),
var allEngFailLevers = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var allEngFailFAC = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
var allEngFailGlide = warning.new(msg: " GLDG DIST: 2NM/1000FT", colour: "c"),
var allEngFailDiversion = warning.new(msg: " -DIVERSION.....INITIATE", colour: "c"),
var allEngFailProc = warning.new(msg: " -ALL ENG FAIL PROC.APPLY", colour: "c"),
# ENG 1 THR LEVER ABV IDLE
var eng1ThrLvrAbvIdle = warning.new(msg: "ENG 1 THR LEVER ABV IDLE", colour: "r", aural: 3, light: 0, isMainMsg: 1),
var eng1ThrLvrAbvIdle2 = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
# ENG 2 THR LEVER ABV IDLE
var eng2ThrLvrAbvIdle = warning.new(msg: "ENG 2 THR LEVER ABV IDLE", colour: "r", aural: 3, light: 0, isMainMsg: 1),
var eng2ThrLvrAbvIdle2 = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
# ENG 1 FIRE (flight)
var eng1Fire = warning.new(msg: "ENG 1 FIRE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
@ -63,17 +54,13 @@ var warnings = std.Vector.new([
var eng1FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1),
var eng1FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng1FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
var eng1FireGnmaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
var eng1FireGnPB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
var eng1FireGnAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng1FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng1FireGnmaster2 = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
var eng1FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
var eng1FireGnevac = warning.new(msg: " •IF EVAC RQRD:", colour: "w", isMainMsg: 1),
var eng1FireGnevacSw = warning.new(msg: " -EVAC COMMAND........ON", colour: "c"),
var eng1FireGnevacApu = warning.new(msg: " -APU MASTER SW......OFF", colour: "c"),
var eng1FireGnevacBat = warning.new(msg: " -BAT 1+2............OFF", colour: "c"),
var eng1FireGnEvac = warning.new(msg: " -EMER EVAC PROC...APPLY", colour: "c"),
# ENG 2 FIRE (flight)
var eng2Fire = warning.new(msg: "ENG 2 FIRE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
@ -90,17 +77,13 @@ var warnings = std.Vector.new([
var eng2FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", isMainMsg: 1),
var eng2FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng2FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
var eng2FireGnmaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
var eng2FireGnPB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
var eng2FireGnAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng2FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng2FireGnmaster2 = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
var eng2FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
var eng2FireGnevac = warning.new(msg: " •IF EVAC RQRD:", colour: "w", isMainMsg: 1),
var eng2FireGnevacSw = warning.new(msg: " -EVAC COMMAND........ON", colour: "c"),
var eng2FireGnevacApu = warning.new(msg: " -APU MASTER SW......OFF", colour: "c"),
var eng2FireGnevacBat = warning.new(msg: " -BAT 1+2............OFF", colour: "c"),
var eng2FireGnEvac = warning.new(msg: " -EMER EVAC PROC...APPLY", colour: "c"),
# APU FIRE
var apuFire = warning.new(msg: "APU FIRE ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "apu"),
@ -122,6 +105,21 @@ var warnings = std.Vector.new([
var rud_trim_config_1 = warning.new(msg: " NOT IN T.O. RANGE", colour: "r", aural: 0, light: 0),
var park_brk_config = warning.new(msg: "CONFIG PARK BRK ON", colour: "r", aural: 0, light: 0),
# FCTL L+R ELEV FAULT
var lrElevFault = warning.new(msg: "F/CTL L+R ELEV FAULT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var lrElevFaultSpeed = warning.new(msg: " MAX SPEED.......320/.77", colour: "c"),
var lrElevFaultTrim = warning.new(msg: " -MAN PITCH TRIM.....USE", colour: "c"),
var lrElevFaultSpdBrk = warning.new(msg: " SPD BRK......DO NOT USE", colour: "c"),
# Gear not down
var gearNotDown = warning.new(msg: "L/G GEAR NOT DOWN", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var gearNotDownLocked = warning.new(msg: "L/G GEAR NOT DOWNLOCKED", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var gearNotDownLockedRec = warning.new(msg: " -L/G LEVER......RECYCLE", colour: "c"),
var gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "c"),
var gearNotDownLocked120 = warning.new(msg: " AFTER 120S:", colour: "c"),
var gearNotDownLockedGrav = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
# Autopilot off involuntary
var ap_offw = warning.new(msg: "AUTO FLT AP OFF", colour: "r", light: 0, isMainMsg: 1),
@ -161,6 +159,40 @@ var warnings = std.Vector.new([
var emerconfigProt = warning.new(msg: " (PROT LOST)", colour: "a"),
var emerconfigMaxSpeed = warning.new(msg: " MAX SPEED........320 KT", colour: "c"),
# B + Y LO PR
var hydBYloPr = warning.new(msg: "HYD B+Y SYS LO PR", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var hydBYloPrRat = warning.new(msg: " MIN RAT SPD......140 KT", colour: "c"),
var hydBYloPrYElec = warning.new(msg: " -YELLOW ELEC PUMP....ON", colour: "c"),
var hydBYloPrRatOn = warning.new(msg: " -RAT.............MAN ON", colour: "c"),
var hydBYloPrBElec = warning.new(msg: " -BLUE ELEC PUMP.....OFF", colour: "c"),
var hydBYloPrYEng = warning.new(msg: " -YELLOW ENG 2 PUMP..OFF", colour: "c"),
var hydBYloPrMaxSpd = warning.new(msg: " MAX SPEED.......320/.77", colour: "c"),
var hydBYloPrMnvrCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"),
var hydBYloPrGaPitch = warning.new(msg: " FOR GA:MAX PITCH 15 DEG", colour: "c"),
var hydBYloPrFuelCnsmpt = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var hydBYloPrFmsPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
# G + B LO PR
var hydGBloPr = warning.new(msg: "HYD G+B SYS LO PR", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var hydGBloPrRat = warning.new(msg: " MIN RAT SPD......140 KT", colour: "c"),
var hydGBloPrRatOn = warning.new(msg: " -RAT.............MAN ON", colour: "c"),
var hydGBloPrBElec = warning.new(msg: " -BLUE ELEC PUMP.....OFF", colour: "c"),
var hydGBloPrGEng = warning.new(msg: " -GREEN ENG 1 PUMP...OFF", colour: "c"),
var hydGBloPrMnvrCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"),
var hydGBloPrGaPitch = warning.new(msg: " FOR GA:MAX PITCH 15 DEG", colour: "c"),
var hydGBloPrFuelCnsmpt = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var hydGBloPrFmsPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
# G + Y LO PR
var hydGYloPr = warning.new(msg: "HYD G+Y SYS LO PR", colour: "r", aural: 0, light: 0, isMainMsg: 1),
var hydGYloPrPtu = warning.new(msg: " -PTU................OFF", colour: "c"),
var hydGYloPrGEng = warning.new(msg: " -GREEN ENG 1 PUMP...OFF", colour: "c"),
var hydGYloPrYEng = warning.new(msg: " -YELLOW ENG 2 PUMP..OFF", colour: "c"),
var hydGYloPrYElec = warning.new(msg: " -YELLOW ELEC PUMP....ON", colour: "c"),
var hydGYloPrMnvrCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"),
var hydGYloPrFuelCnsmpt = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
var hydGYloPrFmsPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
# DC EMER CONFIG
var dcEmerconfig = warning.new(msg: "ELEC DC EMER CONFIG", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var dcEmerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
@ -212,9 +244,27 @@ var warnings = std.Vector.new([
var dcBusEssShedIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
# AC ESS BUS SHED
var acBusEssShed = warning.new(msg: "ELEC DC ESS BUS SHED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var acBusEssShed = warning.new(msg: "ELEC AC ESS BUS SHED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var acBusEssShedAtc = warning.new(msg: " -ATC..............SYS 2", colour: "c"),
# GEN 1 FAULT
var gen1fault = warning.new(msg: "ELEC GEN 1 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gen1faultGen = warning.new(msg: "-GEN 1......OFF THEN ON", colour: "c"),
var gen1faultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var gen1faultGen3 = warning.new(msg: "-GEN 1..............OFF", colour: "c"),
# GEN 2 FAULT
var gen2fault = warning.new(msg: "ELEC GEN 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gen2faultGen = warning.new(msg: "-GEN 2......OFF THEN ON", colour: "c"),
var gen2faultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var gen2faultGen3 = warning.new(msg: "-GEN 2..............OFF", colour: "c"),
# APU GEN FAULT
var apuGenfault = warning.new(msg: "ELEC APU GEN FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var apuGenfaultGen = warning.new(msg: "-APU GEN....OFF THEN ON", colour: "c"),
var apuGenfaultGen2 = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var apuGenfaultGen3 = warning.new(msg: "-APU GEN............OFF", colour: "c"),
# Autothrust
var athr_offw = warning.new(msg: "AUTO FLT A/THR OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var athr_offw_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
@ -225,6 +275,39 @@ var warnings = std.Vector.new([
# TCAS FAULT
var tcasFault = warning.new(msg: "NAV TCAS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gpwsFault = warning.new(msg: "NAV GPWS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gpwsFaultOff = warning.new(msg: "-GPWS...............OFF", colour: "c"),
var gpwsTerrFault = warning.new(msg: "NAV GPWS TERR DET FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var gpwsTerrFaultOff = warning.new(msg: "-GPWS TERR..........OFF", colour: "c"),
# FAC and Rudder System
var fac12Fault = warning.new(msg: "AUTO FLT FAC 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var fac12FaultRud = warning.new(msg: "RUD WITH CARE ABV 160 KT", colour: "c"),
var fac12FaultFac = warning.new(msg: " -FAC 1+2....OFF THEN ON", colour: "c"),
var fac12FaultSuccess = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var fac12FaultFacOff = warning.new(msg: " -FAC 1+2............OFF", colour: "c"),
var yawDamperSysFault = warning.new(msg: "AUTO FLT YAW DAMPER SYS", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var yawDamperSysFaultFac = warning.new(msg: " -FAC 1+2....OFF THEN ON", colour: "c"),
# var rudderTrimSysFault = warning.new(msg: "AUTO FLT RUD TRIM SYS", colour: "a", aural: 1, light: 1, isMainMsg: 1), not implemented
# var rudderTrimSysFaultFac = warning.new(msg: " -FAC 1+2....OFF THEN ON", colour: "c"),
var rudTravLimSysFault = warning.new(msg: "AUTO FLT RUD TRV LIM SYS", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var rudTravLimSysFaultRud = warning.new(msg: "RUD WITH CARE ABV 160 KT", colour: "c"),
var rudTravLimSysFaultFac = warning.new(msg: " -FAC 1+2....OFF THEN ON", colour: "c"),
var fac1Fault = warning.new(msg: "AUTO FLT FAC 1 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var fac1FaultFac = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
var fac1FaultSuccess = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var fac1FaultFacOff = warning.new(msg: " -FAC 1..............OFF", colour: "c"),
var fac2Fault = warning.new(msg: "AUTO FLT FAC 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var fac2FaultFac = warning.new(msg: " -FAC 2......OFF THEN ON", colour: "c"),
var fac2FaultSuccess = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "w"),
var fac2FaultFacOff = warning.new(msg: " -FAC 2..............OFF", colour: "c"),
var yawDamper1Fault = warning.new(msg: "AUTO FLT YAW DAMPER 1", colour: "a", isMainMsg: 1),
var yawDamper2Fault = warning.new(msg: "AUTO FLT YAW DAMPER 2", colour: "a", isMainMsg: 1),
# var rudTrim1Fault = warning.new(msg: "AUTO FLT RUD TRIM1 FAULT", colour: "a", isMainMsg: 1), not implemented
# var rudTrim2Fault = warning.new(msg: "AUTO FLT RUD TRIM2 FAULT", colour: "a", isMainMsg: 1), not implemented
var rudTravLimSys1Fault = warning.new(msg: "AUTO FLT RUD TRV LIM 1", colour: "a", isMainMsg: 1),
var rudTravLimSys2Fault = warning.new(msg: "AUTO FLT RUD TRV LIM 2", colour: "a", isMainMsg: 1),
# FCU fault
var fcuFault = warning.new(msg: "AUTO FLT FCU 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
@ -240,6 +323,137 @@ var warnings = std.Vector.new([
var apuAutoShutdown = warning.new(msg: "APU AUTO SHUT DOWN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var apuAutoShutdownMast = warning.new(msg: " -MASTER SW..........OFF", colour: "c"),
# Bleed
var bleed1Fault = warning.new(msg: "AIR ENG 1 BLEED FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var bleed1FaultOff = warning.new(msg: " -ENG 1 BLEED........OFF", colour: "c"),
var bleed1FaultPack = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var bleed1FaultXBleed = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var bleed2Fault = warning.new(msg: "AIR ENG 2 BLEED FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var bleed2FaultOff = warning.new(msg: " -ENG 2 BLEED........OFF", colour: "c"),
var bleed2FaultPack = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var bleed2FaultXBleed = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var apuBleedFault = warning.new(msg: "AIR APU BLEED FAULT", colour: "a", aural: 1, light: 1),
var hpValve1Fault = warning.new(msg: "AIR ENG 1 HP VALVE FAULT", colour: "a"),
var hpValve2Fault = warning.new(msg: "AIR ENG 2 HP VALVE FAULT", colour: "a"),
var xBleedFault = warning.new(msg: "AIR X BLEED FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var xBleedFaultMan = warning.new(msg: " -X BLEED........MAN CTL", colour: "c"),
var xBleedOff = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var xBleedIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var bleed1Off = warning.new(msg: "AIR BLEED 1 OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var bleed2Off = warning.new(msg: "AIR BLEED 2 OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var engBleedLowTemp = warning.new(msg: "AIR ENG 1+2 BLEED LO TEMP", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var engBleedLowTempAthr = warning.new(msg: " -A/THR..............OFF", colour: "c"),
var engBleedLowTempAdv = warning.new(msg: " -THR LEVERS.....ADVANCE", colour: "c"),
var engBleedLowTempSucc = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "c"),
var engBleedLowTempIce = warning.new(msg: " -WING A.ICE.........OFF", colour: "c"),
var engBleedLowTempIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var eng1BleedLowTemp = warning.new(msg: "AIR ENG 1 BLEED LO TEMP", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1BleedLowTempAthr = warning.new(msg: " -A/THR..............OFF", colour: "c"),
var eng1BleedLowTempAdv = warning.new(msg: " -THR LEVER 1....ADVANCE", colour: "c"),
var eng1BleedLowTempSucc = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "c"),
var eng1BleedLowTempXBld = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var eng1BleedLowTempOff = warning.new(msg: " -ENG 1 BLEED........OFF", colour: "c"),
var eng1BleedLowTempPack = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var eng1BleedLowTempIce = warning.new(msg: " -WING A.ICE.........OFF", colour: "c"),
var eng1BleedLowTempIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var eng2BleedLowTemp = warning.new(msg: "AIR ENG 2 BLEED LO TEMP", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2BleedLowTempAthr = warning.new(msg: " -A/THR..............OFF", colour: "c"),
var eng2BleedLowTempAdv = warning.new(msg: " -THR LEVER 2....ADVANCE", colour: "c"),
var eng2BleedLowTempSucc = warning.new(msg: " •IF UNSUCCESSFUL :", colour: "c"),
var eng2BleedLowTempXBld = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var eng2BleedLowTempOff = warning.new(msg: " -ENG 2 BLEED........OFF", colour: "c"),
var eng2BleedLowTempPack = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var eng2BleedLowTempIce = warning.new(msg: " -WING A.ICE.........OFF", colour: "c"),
var eng2BleedLowTempIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var eng1BleedAbPress = warning.new(msg: "AIR ENG 1 BLEED ABNORM PR", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1BleedAbPressPack = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var eng1BleedAbPressXBld = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var eng2BleedAbPress = warning.new(msg: "AIR ENG 2 BLEED ABNORM PR", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2BleedAbPressPack = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var eng2BleedAbPressXBld = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var eng1BleedNotClsd = warning.new(msg: "AIR ENG 1 BLEED NOT CLSD", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1BleedNotClsdOff = warning.new(msg: " -ENG 1 BLEED........OFF", colour: "c"),
var eng2BleedNotClsd = warning.new(msg: "AIR ENG 2 BLEED NOT CLSD", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2BleedNotClsdOff = warning.new(msg: " -ENG 2 BLEED........OFF", colour: "c"),
var bleedMonFault = warning.new(msg: "BLEED MONITORING FAULT", colour: "a", isMainMsg: 1),
var bleedMon1Fault = warning.new(msg: "BLEED MONIT SYS 1 FAULT", colour: "a", isMainMsg: 1),
var bleedMon2Fault = warning.new(msg: "BLEED MONIT SYS 2 FAULT", colour: "a", isMainMsg: 1),
# PACK
var pack12Fault = warning.new(msg: "AIR PACK 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var pack12FaultPackOff1 = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var pack12FaultPackOff2 = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var pack12FaultDescend = warning.new(msg: " -DESCENT TO FL 100/MEA ", colour: "c"),
var pack12FaultDiffPr = warning.new(msg: " •WHEN DIFF PR <1 PSI", colour: "w"),
var pack12FaultDiffPr2 = warning.new(msg: " AND FL BELOW 100 :", colour: "w"),
var pack12FaultRam = warning.new(msg: " -RAM AIR...........OPEN", colour: "c"),
var pack12FaultMax = warning.new(msg: " MAX FL..........100/MEA", colour: "c"),
var pack12FaultOvht = warning.new(msg: " •WHEN PACK OVHT OUT:", colour: "w"),
var pack12FaultPackOn1 = warning.new(msg: " -PACK 1..............ON", colour: "c"),
var pack12FaultPackOn2 = warning.new(msg: " -PACK 2..............ON", colour: "c"),
var pack1Ovht = warning.new(msg: "AIR PACK 1 OVHT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var pack1OvhtOff = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var pack1OvhtOut = warning.new(msg: " •WHEN PACK OVHT OUT:", colour: "w"),
var pack1OvhtPack = warning.new(msg: " -PACK 1..............ON", colour: "c"),
var pack2Ovht = warning.new(msg: "AIR PACK 2 OVHT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var pack2OvhtOff = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var pack2OvhtOut = warning.new(msg: " •WHEN PACK OVHT OUT:", colour: "w"),
var pack2OvhtPack = warning.new(msg: " -PACK 2..............ON", colour: "c"),
var pack1Fault = warning.new(msg: "AIR PACK 1 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var pack1FaultOff = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
var pack2Fault = warning.new(msg: "AIR PACK 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var pack2FaultOff = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
var pack1Off = warning.new(msg: "AIR PACK 1 OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var pack2Off = warning.new(msg: "AIR PACK 2 OFF", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var cabFanFault = warning.new(msg: "COND L+R CAB FAN FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var cabFanFaultFlow = warning.new(msg: " -PACK FLOW...........HI", colour: "c"),
var trimAirFault = warning.new(msg: "COND TRIM AIR SYS FAULT", colour: "a", isMainMsg: 1),
var trimAirFaultAft = warning.new(msg: " -AFT CAB TRIM VALVE", colour: "c"),
var trimAirFaultFwd = warning.new(msg: " -FWD CAB TRIM VALVE", colour: "c"),
var trimAirFaultCkpt = warning.new(msg: " -CKPT TRIM VALVE", colour: "c"),
# Eng AICE
var eng1IceClosed = warning.new(msg: "ANTI ICE ENG1 VALVE CLSD", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1IceClosedIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var eng2IceClosed = warning.new(msg: "ANTI ICE ENG2 VALVE CLSD", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2IceClosedIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var eng1IceOpen = warning.new(msg: "ANTI ICE ENG1 VALVE OPEN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1IceOpenThrust = warning.new(msg: " THRUST LIM PENALTY", colour: "c"),
var eng2IceOpen = warning.new(msg: "ANTI ICE ENG2 VALVE OPEN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng2IceOpenThrust = warning.new(msg: " THRUST LIM PENALTY", colour: "c"),
# Wing AICE
var wingIceSysFault = warning.new(msg: "WING A.ICE SYS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var wingIceSysFaultXbld = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
var wingIceSysFaultOff = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var wingIceSysFaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
var wingIceLOpen = warning.new(msg: "WING A.ICE L VALVE OPEN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var wingIceLOpenOff = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var wingIceLOpenEngOff = warning.new(msg: " -ENG1 BLEED.........OFF", colour: "c"),
var wingIceLOpenXbld = warning.new(msg: " -X BLEED...........SHUT", colour: "c"),
var wingIceLOpenApuOff = warning.new(msg: " -APU BLEED..........OFF", colour: "c"),
var wingIceLOpenSpacer = warning.new(msg: " ", colour: "c"),
var wingIceLOpenFlt = warning.new(msg: " WAI AVAIL IN FLT", colour: "c"),
var wingIceLOpenEngOn = warning.new(msg: " -ENG1 BLEED.........OFF", colour: "c"),
var wingIceLOpenIceReq = warning.new(msg: " -WING ANTI ICE..AS RQRD", colour: "c"),
var wingIceLOpenThrust = warning.new(msg: " THRUST LIM PENALTY", colour: "c"),
var wingIceROpen = warning.new(msg: "WING A.ICE R VALVE OPEN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var wingIceROpenOff = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var wingIceROpenEngOff = warning.new(msg: " -ENG2 BLEED.........OFF", colour: "c"),
var wingIceROpenXbld = warning.new(msg: " -X BLEED...........SHUT", colour: "c"),
var wingIceROpenApuOff = warning.new(msg: " -APU BLEED..........OFF", colour: "c"),
var wingIceROpenSpacer = warning.new(msg: " ", colour: "c"),
var wingIceROpenFlt = warning.new(msg: " WAI AVAIL IN FLT", colour: "c"),
var wingIceROpenEngOn = warning.new(msg: " -ENG2 BLEED.........OFF", colour: "c"),
var wingIceROpenIceReq = warning.new(msg: " -WING ANTI ICE..AS RQRD", colour: "c"),
var wingIceROpenThrust = warning.new(msg: " THRUST LIM PENALTY", colour: "c"),
var wingIceOpenGnd = warning.new(msg: "WING A.ICE OPEN ON GND", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var wingIceOpenGndShut = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var wingIceLHiPr = warning.new(msg: "WING A.ICE L HI PR", colour: "a", isMainMsg: 1),
var wingIceLHiPrThrust = warning.new(msg: " THRUST LIM PENTALTY", colour: "c"),
var wingIceRHiPr = warning.new(msg: "WING A.ICE R HI PR", colour: "a", isMainMsg: 1),
var wingIceRHiPrThrust = warning.new(msg: " THRUST LIM PENTALTY", colour: "c"),
# FIRE det fault
var eng1FireDetFault = warning.new(msg: "ENG 1 FIRE DET FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
var eng1LoopAFault = warning.new(msg: "ENG 1 FIRE LOOP A FAULT", colour: "a", isMainMsg: 1),
@ -329,7 +543,7 @@ var memos = std.Vector.new([
var terr_stby = memo.new(msg: "TERR STBY" ), # Not yet implemented
var tcas_stby = memo.new(msg: "TCAS STBY" ), # Not yet implemented
var acars_call = memo.new(msg: "ACARS CALL" ), # Not yet implemented
var company_call = memo.new(msg: "COMPANY CALL"), # Not yet implemented
var company_call = memo.new(msg: "COMPANY CALL"),
var satcom_alert = memo.new(msg: "SATCOM ALERT"), # Not yet implemented
var acars_msg = memo.new(msg: "ACARS MSG" ), # Not yet implemented
var company_msg = memo.new(msg: "COMPANY MSG" ), # Not yet implemented

View file

@ -2,10 +2,7 @@
# Copyright (c) 2019 Jonathan Redpath (legoboyvdlp)
var gnd = 0;
var twoEngOff = 0;
var gear_agl = nil;
var gear_comp = nil;
var myPhase = nil;
var eng = nil;
var eng1epr = nil;
@ -22,62 +19,63 @@ var gear_agl_cur = nil;
var FWC = {
Btn: {
clr: props.globals.initNode("ECAM/buttons/clear-btn", 0, "BOOL"),
recall: props.globals.initNode("ECAM/buttons/recall-btn", 0, "BOOL"),
recallStsNormal: props.globals.initNode("ECAM/buttons/recall-status-normal", 0, "BOOL"),
recallStsNormalOutput: props.globals.initNode("ECAM/buttons/recall-status-normal-output", 0, "BOOL"),
clr: props.globals.initNode("/ECAM/buttons/clear-btn", 0, "BOOL"),
recall: props.globals.initNode("/ECAM/buttons/recall-btn", 0, "BOOL"),
recallStsNormal: props.globals.initNode("/ECAM/buttons/recall-status-normal", 0, "BOOL"),
recallStsNormalOutput: props.globals.initNode("/ECAM/buttons/recall-status-normal-output", 0, "BOOL"),
},
Monostable: {
phase1: props.globals.initNode("ECAM/phases/monostable/phase-1-300", 0, "BOOL"),
phase5: props.globals.initNode("ECAM/phases/monostable/phase-5", 0, "BOOL"),
phase7: props.globals.initNode("ECAM/phases/monostable/phase-7", 0, "BOOL"),
phase9: props.globals.initNode("ECAM/phases/monostable/phase-9", 0, "BOOL"),
phase1Output: props.globals.initNode("ECAM/phases/monostable/phase-1-output"),
phase5Output: props.globals.initNode("ECAM/phases/monostable/phase-5-output"),
phase7Output: props.globals.initNode("ECAM/phases/monostable/phase-7-output"),
phase9Output: props.globals.initNode("ECAM/phases/monostable/phase-9-output"),
toPowerOutput: props.globals.getNode("ECAM/phases/monostable/to-power-set-output"),
m80kt: props.globals.getNode("ECAM/phases/monostable-80kt"),
altAlert1: props.globals.initNode("ECAM/altitude-alert-monostable-set", 0, "BOOL"),
altAlert1Output: props.globals.initNode("ECAM/altitude-alert-monostable-output"),
altAlert2: props.globals.initNode("ECAM/flipflop/altitude-alert-rs-set", 0, "BOOL"),
phase1: props.globals.initNode("/ECAM/phases/monostable/phase-1-300", 0, "BOOL"),
phase5: props.globals.initNode("/ECAM/phases/monostable/phase-5", 0, "BOOL"),
phase7: props.globals.initNode("/ECAM/phases/monostable/phase-7", 0, "BOOL"),
phase9: props.globals.initNode("/ECAM/phases/monostable/phase-9", 0, "BOOL"),
phase1Output: props.globals.initNode("/ECAM/phases/monostable/phase-1-output"),
phase5Output: props.globals.initNode("/ECAM/phases/monostable/phase-5-output"),
phase7Output: props.globals.initNode("/ECAM/phases/monostable/phase-7-output"),
phase9Output: props.globals.initNode("/ECAM/phases/monostable/phase-9-output"),
toPowerOutput: props.globals.getNode("/ECAM/phases/monostable/to-power-set-output"),
m80kt: props.globals.getNode("/ECAM/phases/monostable-80kt"),
altAlert1: props.globals.initNode("/ECAM/altitude-alert-monostable-set", 0, "BOOL"),
altAlert1Output: props.globals.initNode("/ECAM/altitude-alert-monostable-output"),
altAlert2: props.globals.initNode("/ECAM/flipflop/altitude-alert-rs-set", 0, "BOOL"),
},
Flipflop: {
gearSet: props.globals.initNode("ECAM/phases/flipflop/gear-set", 0, "BOOL"),
gearReset: props.globals.initNode("ECAM/phases/flipflop/gear-reset", 0, "BOOL"),
gearOutput: props.globals.initNode("ECAM/phases/flipflop/gear-output", 0, "BOOL"),
phase2Set: props.globals.initNode("ECAM/phases/flipflop/phase-2-set", 0, "BOOL"),
phase2Reset: props.globals.initNode("ECAM/phases/flipflop/phase-2-reset", 0, "BOOL"),
phase2Output: props.globals.initNode("ECAM/phases/flipflop/phase-2-output", 0, "BOOL"),
phase10Set: props.globals.initNode("ECAM/phases/flipflop/phase-10-set", 0, "BOOL"),
phase10Reset: props.globals.initNode("ECAM/phases/flipflop/phase-10-reset", 0, "BOOL"),
phase10Output: props.globals.initNode("ECAM/phases/flipflop/phase-10-output", 0, "BOOL"),
recallSet: props.globals.initNode("ECAM/flipflop/recall-set", 0, "BOOL"),
recallReset: props.globals.initNode("ECAM/flipflop/recall-reset", 0, "BOOL"),
recallOutput: props.globals.initNode("ECAM/flipflop/recall-output", 0, "BOOL"),
phase2Set: props.globals.initNode("/ECAM/phases/flipflop/phase-2-set", 0, "BOOL"),
phase2Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-2-reset", 0, "BOOL"),
phase2Output: props.globals.initNode("/ECAM/phases/flipflop/phase-2-output", 0, "BOOL"),
phase10Set: props.globals.initNode("/ECAM/phases/flipflop/phase-10-set", 0, "BOOL"),
phase10Reset: props.globals.initNode("/ECAM/phases/flipflop/phase-10-reset", 0, "BOOL"),
phase10Output: props.globals.initNode("/ECAM/phases/flipflop/phase-10-output", 0, "BOOL"),
recallSet: props.globals.initNode("/ECAM/flipflop/recall-set", 0, "BOOL"),
recallReset: props.globals.initNode("/ECAM/flipflop/recall-reset", 0, "BOOL"),
recallOutput: props.globals.initNode("/ECAM/flipflop/recall-output", 0, "BOOL"),
},
Logic: {
gnd: props.globals.getNode("/ECAM/ground-calc-immediate"),
IRSinAlign: props.globals.initNode("/ECAM/irs-in-align", 0, "BOOL"),
},
Timer: {
eng1idle: props.globals.initNode("ECAM/phases/timer/eng1idle", 0, "INT"),
eng2idle: props.globals.initNode("ECAM/phases/timer/eng2idle", 0, "INT"),
eng1or2: props.globals.initNode("ECAM/phases/timer/eng1or2", 0, "INT"),
toInhibit: props.globals.initNode("ECAM/phases/timer/to-inhibit", 0, "INT"),
ldgInhibit: props.globals.initNode("ECAM/phases/timer/ldg-inhibit", 0, "INT"),
eng1idleOutput: props.globals.getNode("ECAM/phases/timer/eng1idle-output"),
eng2idleOutput: props.globals.getNode("ECAM/phases/timer/eng2idle-output"),
eng1or2Output: props.globals.initNode("ECAM/phases/timer/eng1or2-output", 0, "INT"),
toInhibitOutput: props.globals.getNode("ECAM/phases/timer/to-inhibit-output"),
ldgInhibitOutput: props.globals.getNode("ECAM/phases/timer/ldg-inhibit-output"),
eng1idle: props.globals.initNode("/ECAM/phases/timer/eng1idle", 0, "INT"),
eng2idle: props.globals.initNode("/ECAM/phases/timer/eng2idle", 0, "INT"),
eng1or2: props.globals.initNode("/ECAM/phases/timer/eng1or2", 0, "INT"),
toInhibit: props.globals.initNode("/ECAM/phases/timer/to-inhibit", 0, "INT"),
ldgInhibit: props.globals.initNode("/ECAM/phases/timer/ldg-inhibit", 0, "INT"),
eng1idleOutput: props.globals.getNode("/ECAM/phases/timer/eng1idle-output"),
eng2idleOutput: props.globals.getNode("/ECAM/phases/timer/eng2idle-output"),
eng1or2Output: props.globals.initNode("/ECAM/phases/timer/eng1or2-output", 0, "INT"),
toInhibitOutput: props.globals.getNode("/ECAM/phases/timer/to-inhibit-output"),
ldgInhibitOutput: props.globals.getNode("/ECAM/phases/timer/ldg-inhibit-output"),
gnd: props.globals.getNode("/ECAM/timer/ground-calc"),
gnd2Sec: props.globals.getNode("/ECAM/phases/monostable/gnd-output"),
},
speed80: props.globals.initNode("ECAM/phases/speed-gt-80", 0, "BOOL"),
toPower: props.globals.initNode("ECAM/phases/to-power-set", 0, "BOOL"),
speed80: props.globals.initNode("/ECAM/phases/speed-gt-80", 0, "BOOL"),
toPower: props.globals.initNode("/ECAM/phases/to-power-set", 0, "BOOL"),
altChg: props.globals.getNode("it-autoflight/input/alt-is-changing", 1),
};
var phaseLoop = func() {
if (pts.Sim.Replay.replayActive.getBoolValue()) { return; }
gear_agl = pts.Position.gearAglFt.getValue();
gear_comp = pts.Gear.compression[1].getValue();
myPhase = pts.ECAM.fwcWarningPhase.getValue();
eng = pts.Options.eng.getValue();
eng1epr = pts.Engines.Engine.eprActual[0].getValue();
@ -92,31 +90,13 @@ var phaseLoop = func() {
FWC.Flipflop.recallReset.setValue(0);
# Various things
if (gear_agl < 5) {
FWC.Flipflop.gearSet.setBoolValue(1);
} else {
FWC.Flipflop.gearSet.setBoolValue(0);
}
if (!gear_comp) {
FWC.Flipflop.gearReset.setBoolValue(1);
} else {
FWC.Flipflop.gearReset.setBoolValue(0);
}
if ((gear_agl < 5 or FWC.Flipflop.gearOutput.getBoolValue()) and gear_comp > 0) {
gnd = 1;
} else {
gnd = 0;
}
if (eng1n2 < 59.4) {
if (eng1n2 >= 59.4 and !master1) {
FWC.Timer.eng1idle.setValue(1);
} else {
FWC.Timer.eng1idle.setValue(0);
}
if (eng2n2 < 59.4) {
if (eng2n2 >= 59.4 and !master2) {
FWC.Timer.eng2idle.setValue(1);
} else {
FWC.Timer.eng2idle.setValue(0);
@ -128,34 +108,28 @@ var phaseLoop = func() {
FWC.Timer.eng1or2.setValue(0);
}
if ((FWC.Timer.eng1idleOutput.getBoolValue() or master1) and (FWC.Timer.eng2idleOutput.getBoolValue() or master2)) {
if ((FWC.Timer.eng1idleOutput.getBoolValue() == 0 or master1) and (FWC.Timer.eng2idleOutput.getBoolValue() == 0 or master2)) {
twoEngOff = 1;
} else {
twoEngOff = 0;
}
if (eng == "IAE") {
eprlim = getprop("controls/engines/epr-limit");
if ((!getprop("controls/engines/engine[0]/reverser") and !getprop("controls/engines/engine[1]/reverser")) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.78) and fadec.Output.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() == 1.0 or pts.Controls.Engines.Engine.throttle[1].getValue() == 1.0))) {
eprlim = getprop("/controls/engines/epr-limit");
if ((!pts.Controls.Engines.Engine.reverser[0].getBoolValue() and !pts.Controls.Engines.Engine.reverser[1].getBoolValue()) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.779) and fadec.Thrust.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.99 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.99))) {
FWC.toPower.setBoolValue(1);
} else {
FWC.toPower.setBoolValue(0);
}
} else {
n1lim = getprop("controls/engines/n1-limit");
if ((!getprop("controls/engines/engine[0]/reverser") and !getprop("controls/engines/engine[1]/reverser")) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.78) and fadec.Output.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() == 1.0 or pts.Controls.Engines.Engine.throttle[1].getValue() == 1.0))) {
n1lim = getprop("/controls/engines/n1-limit");
if ((!pts.Controls.Engines.Engine.reverser[0].getBoolValue() and !pts.Controls.Engines.Engine.reverser[1].getBoolValue()) and (((pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.78 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.779) and fadec.Thrust.limFlex.getBoolValue()) or (pts.Controls.Engines.Engine.throttle[0].getValue() >= 0.99 or pts.Controls.Engines.Engine.throttle[1].getValue() >= 0.99))) {
FWC.toPower.setBoolValue(1);
} else {
FWC.toPower.setBoolValue(0);
}
}
if (pts.Instrumentation.AirspeedIndicator.indicatedSpdKt.getValue() > 80 and pts.Sim.Time.elapsedSec.getValue() > 5) {
FWC.speed80.setBoolValue(1);
} else {
FWC.speed80.setBoolValue(0);
}
if (myPhase == 9) {
FWC.Monostable.phase9.setBoolValue(1);
} else {
@ -169,13 +143,13 @@ var phaseLoop = func() {
FWC.Flipflop.phase10Set.setBoolValue(0);
}
if (gnd and pts.Controls.Engines.Engine.firePb[0].getBoolValue()) {
if (FWC.Timer.gnd.getValue() == 1 and pts.Controls.Engines.Engine.firePb[0].getBoolValue()) {
FWC.Flipflop.phase10Reset.setBoolValue(1);
} else {
FWC.Flipflop.phase10Reset.setBoolValue(0);
}
if ((gnd and twoEngOff and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) {
if ((FWC.Logic.gnd.getBoolValue() and twoEngOff and myPhase == 9) and FWC.Flipflop.phase10Output.getBoolValue()) {
FWC.Monostable.phase1.setBoolValue(1);
} else {
FWC.Monostable.phase1.setBoolValue(0);
@ -188,7 +162,7 @@ var phaseLoop = func() {
FWC.Flipflop.phase2Set.setBoolValue(0);
}
if (!FWC.Monostable.m80kt.getBoolValue() and myPhase != 9 and ((!FWC.Monostable.phase9Output.getBoolValue() and gnd) or (!FWC.Monostable.toPowerOutput.getBoolValue() and gnd))) {
if (!FWC.Monostable.m80kt.getBoolValue() and myPhase != 9 and ((!FWC.Monostable.phase9Output.getBoolValue() and FWC.Timer.gnd.getValue() == 1) or (!FWC.Monostable.toPowerOutput.getBoolValue() and FWC.Timer.gnd.getValue() == 1))) {
FWC.Flipflop.phase2Reset.setBoolValue(1);
} else {
FWC.Flipflop.phase2Reset.setBoolValue(0);
@ -197,33 +171,33 @@ var phaseLoop = func() {
gear_agl_cur = pts.Position.gearAglFt.getValue();
# Phase 5 monostable
if (FWC.toPower.getBoolValue() and (gear_agl_cur <= 1500 and !gnd)) {
if (FWC.toPower.getBoolValue() and (gear_agl_cur <= 1500 and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1)) {
FWC.Monostable.phase5.setBoolValue(1);
} else {
FWC.Monostable.phase5.setBoolValue(0);
}
# Phase 7 monostable
if (!FWC.toPower.getBoolValue() and gear_agl_cur <= 1500 and gear_agl_cur <= 800 and !gnd) {
if (!FWC.toPower.getBoolValue() and gear_agl_cur <= 1500 and gear_agl_cur <= 800 and !FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1) {
FWC.Monostable.phase7.setBoolValue(1);
} else {
FWC.Monostable.phase7.setBoolValue(0);
}
# Actual Phases
if ((gnd and twoEngOff and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
if ((!FWC.Logic.gnd.getBoolValue() and FWC.Timer.gnd2Sec.getValue() != 1 and twoEngOff and myPhase != 9) and !FWC.Monostable.phase1Output.getBoolValue()) {
setPhase(1);
}
if (FWC.Timer.eng1or2Output.getBoolValue() and (gnd and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and !FWC.Flipflop.phase2Output.getBoolValue()) {
if (FWC.Timer.eng1or2Output.getBoolValue() and (FWC.Logic.gnd.getBoolValue() and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and !FWC.Flipflop.phase2Output.getBoolValue()) {
setPhase(2);
}
if (FWC.Timer.eng1or2Output.getBoolValue() and (gnd and FWC.toPower.getBoolValue()) and !FWC.speed80.getBoolValue()) {
if (FWC.Timer.eng1or2Output.getBoolValue() and (FWC.Timer.gnd.getValue() == 1 and FWC.toPower.getBoolValue()) and !FWC.speed80.getBoolValue()) {
setPhase(3);
}
if ((gnd and FWC.toPower.getBoolValue()) and FWC.speed80.getBoolValue()) {
if ((FWC.Timer.gnd.getValue() == 1 and FWC.toPower.getBoolValue()) and FWC.speed80.getBoolValue()) {
setPhase(4);
}
@ -231,7 +205,7 @@ var phaseLoop = func() {
setPhase(5);
}
if (!gnd and !(FWC.Monostable.phase5.getBoolValue() and FWC.Monostable.phase5Output.getBoolValue()) and !(FWC.Monostable.phase7.getBoolValue() and FWC.Monostable.phase7Output.getBoolValue())) {
if (!FWC.Logic.gnd.getValue() and FWC.Timer.gnd2Sec.getValue() != 1 and !(FWC.Monostable.phase5.getBoolValue() and FWC.Monostable.phase5Output.getBoolValue()) and !(FWC.Monostable.phase7.getBoolValue() and FWC.Monostable.phase7Output.getBoolValue())) {
setPhase(6);
}
@ -239,15 +213,15 @@ var phaseLoop = func() {
setPhase(7);
}
if (!FWC.toPower.getBoolValue() and FWC.speed80.getBoolValue() and gnd) {
if (!FWC.toPower.getBoolValue() and FWC.speed80.getBoolValue() and (FWC.Logic.gnd.getBoolValue() or FWC.Timer.gnd2Sec.getValue == 1)) {
setPhase(8);
}
if (FWC.Flipflop.phase2Output.getBoolValue() and (gnd and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and FWC.Timer.eng1or2.getBoolValue()) {
if (FWC.Flipflop.phase2Output.getBoolValue() and (FWC.Logic.gnd.getBoolValue() and !FWC.toPower.getBoolValue() and !FWC.speed80.getBoolValue()) and FWC.Timer.eng1or2.getBoolValue()) {
setPhase(9);
}
if ((gnd and twoEngOff and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
if ((FWC.Logic.gnd.getBoolValue() and twoEngOff and myPhase == 9) and FWC.Monostable.phase1Output.getBoolValue()) {
setPhase(10);
}

View file

@ -1,4 +0,0 @@
#============================ Tyre Smoke ===================================
aircraft.tyresmoke_system.new(0, 1, 2);
aircraft.rain.init();

161
Nasal/Effects/icing.nas Normal file
View file

@ -0,0 +1,161 @@
# A3XX Icing System
# Jonathan Redpath (legoboyvdlp)
# Copyright (c) 2020 Josh Davidson (Octal450)
### 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 severity_factor_table = [
-0.00000166,
0.00000277,
0.00000277,
0.00000554,
0.00001108,
0.00002216,
];
var melt_factor = -0.00005;
var temperature = 0;
var spread = 0;
var icingCond = 0;
var severity = 0;
var icing_factor = func() {
temperature = environment.temperature.getValue();
# Do we create ice?
spread = temperature - environment.dewpoint.getValue();
# freezing fog or low temp and below dp or in advanced wx cloud
icingCond = ((spread < 0.1 or environment.visibility.getValue() < 1000 or environment.visibLclWx.getValue() < 5000)
and temperature < 0);
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 windowprobe = 0;
var wingBtn = 0;
var wingFault = 0;
var PSI = 0;
var wowl = 0;
var wowr = 0;
var PitotIcing = 0;
var PitotFailed = 0;
var lengBtn = 0;
var lengFault = 0;
var rengBtn = 0;
var rengFault = 0;
var WingHasBeenTurnedOff = 0;
var GroundModeFinished = 0;
var windowprb = 0;
var stateL = 0;
var stateR = 0;
var iceables = [];
var PitotIcing = [props.globals.getNode("/systems/pitot[0]/icing"),props.globals.getNode("/systems/pitot[1]/icing"),props.globals.getNode("/systems/pitot[2]/icing")];
var PitotServicable = [props.globals.getNode("/systems/pitot[0]/serviceable", 1),props.globals.getNode("/systems/pitot[1]/serviceable", 1),props.globals.getNode("/systems/pitot[2]/serviceable"), 1];
var icingInit = func {
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 {
var factor = icing_factor();
foreach(iceable; iceables) {
iceable.update(factor, melt_factor);
}
effects.frost_norm.setDoubleValue(effects.frost_inch.getValue() * 50);
for (var i = 0; i <= 2; i = i + 1) {
if (PitotIcing[i].getValue() > 0.03) {
if (PitotServicable[i].getBoolValue()) {
PitotServicable[i].setBoolValue(0);
}
} else {
if (!PitotServicable[i].getBoolValue()) {
PitotServicable[i].setBoolValue(1);
}
}
}
}
###################
# Update Function #
###################
var update_Icing = func {
icingModel();
}
var icing_timer = maketimer(0.2, update_Icing);
icing_timer.simulatedTime = 1;

View file

@ -3,7 +3,7 @@
# Thanks to BAWV12 / Thorsten
var als_on = props.globals.getNode("sim/rendering/shaders/skydome");
var als_on = props.globals.getNode("/sim/rendering/shaders/skydome");
var alt_agl = props.globals.getNode("position/gear-agl-ft");
var cur_alt = 0;
@ -67,30 +67,30 @@ var light_manager = {
flcpt: 0,
prev_view : 1,
nd_ref_light1_x: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-x-m", 1),
nd_ref_light1_y: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-y-m", 1),
nd_ref_light1_z: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-z-m", 1),
nd_ref_light1_dir: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/dir", 1),
nd_ref_light1_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m", 1),
nd_ref_light1_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m", 1),
nd_ref_light1_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m", 1),
nd_ref_light1_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir", 1),
nd_ref_light2_x: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[1]", 1),
nd_ref_light2_y: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[1]", 1),
nd_ref_light2_z: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[1]", 1),
nd_ref_light2_dir: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/dir[1]", 1),
nd_ref_light2_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[1]", 1),
nd_ref_light2_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[1]", 1),
nd_ref_light2_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[1]", 1),
nd_ref_light2_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[1]", 1),
nd_ref_light3_x: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[2]", 1),
nd_ref_light3_y: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[2]", 1),
nd_ref_light3_z: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[2]", 1),
nd_ref_light3_dir: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/dir[2]", 1),
nd_ref_light3_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[2]", 1),
nd_ref_light3_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[2]", 1),
nd_ref_light3_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[2]", 1),
nd_ref_light3_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[2]", 1),
nd_ref_light4_x: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[3]", 1),
nd_ref_light4_y: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[3]", 1),
nd_ref_light4_z: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[3]", 1),
nd_ref_light4_dir: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/dir[3]", 1),
nd_ref_light4_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[3]", 1),
nd_ref_light4_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[3]", 1),
nd_ref_light4_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[3]", 1),
nd_ref_light4_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[3]", 1),
nd_ref_light5_x: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[4]", 1),
nd_ref_light5_y: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[4]", 1),
nd_ref_light5_z: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[4]", 1),
nd_ref_light5_dir: props.globals.getNode("sim/rendering/als-secondary-lights/lightspot/dir[4]", 1),
nd_ref_light5_x: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-x-m[4]", 1),
nd_ref_light5_y: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-y-m[4]", 1),
nd_ref_light5_z: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/eyerel-z-m[4]", 1),
nd_ref_light5_dir: props.globals.getNode("/sim/rendering/als-secondary-lights/lightspot/dir[4]", 1),
init: func {
# define your lights here
@ -146,22 +146,22 @@ var light_manager = {
me.light5_size = 5;
setprop("sim/rendering/als-secondary-lights/flash-radius", 13);
setprop("/sim/rendering/als-secondary-lights/flash-radius", 13);
me.start();
},
start: func {
setprop("sim/rendering/als-secondary-lights/num-lightspots", 5);
setprop("/sim/rendering/als-secondary-lights/num-lightspots", 5);
setprop("sim/rendering/als-secondary-lights/lightspot/size", me.light1_size);
setprop("sim/rendering/als-secondary-lights/lightspot/size[1]", me.light2_size);
setprop("sim/rendering/als-secondary-lights/lightspot/size[2]", me.light3_size);
setprop("sim/rendering/als-secondary-lights/lightspot/size[3]", me.light4_size);
setprop("sim/rendering/als-secondary-lights/lightspot/size[4]", me.light5_size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size", me.light1_size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size[1]", me.light2_size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size[2]", me.light3_size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size[3]", me.light4_size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size[4]", me.light5_size);
setprop("sim/rendering/als-secondary-lights/lightspot/stretch", me.light1_stretch);
setprop("sim/rendering/als-secondary-lights/lightspot/stretch[1]", me.light2_stretch);
setprop("/sim/rendering/als-secondary-lights/lightspot/stretch", me.light1_stretch);
setprop("/sim/rendering/als-secondary-lights/lightspot/stretch[1]", me.light2_stretch);
me.run = 1;
me.update();
@ -178,10 +178,10 @@ var light_manager = {
cur_alt = alt_agl.getValue();
if (als_on.getValue() == 1 and alt_agl.getValue() < 100.0) {
ll1 = getprop("controls/lighting/landing-lights[1]");
ll2 = getprop("controls/lighting/landing-lights[2]");
ll3 = getprop("sim/model/lights/nose-lights");
nav = getprop("sim/model/lights/nav-lights");
ll1 = getprop("/controls/lighting/landing-lights[1]");
ll2 = getprop("/controls/lighting/landing-lights[2]");
ll3 = getprop("/sim/model/lights/nose-lights");
nav = getprop("/sim/model/lights/nav-lights");
var apos = geo.aircraft_position();
var vpos = geo.viewer_position();
@ -197,15 +197,15 @@ var light_manager = {
var sh = math.sin(heading);
var ch = math.cos(heading);
if ((ll1 == 1 and getprop("systems/electrical/bus/ac-1") != 0) and (ll2 == 1 and getprop("systems/electrical/bus/ac-2") !=0)) {
if ((ll1 == 1 and systems.ELEC.Bus.ac1.getValue() != 0) and (ll2 == 1 and systems.ELEC.Bus.ac2.getValue() != 0)) {
me.light1_ypos = 0.0;
me.light1_setSize(16);
me.light1_on();
} else if (ll1 == 1 and getprop("systems/electrical/bus/ac-1") != 0) {
} else if (ll1 == 1 and systems.ELEC.Bus.ac1.getValue() != 0) {
me.light1_ypos = 3.0;
me.light1_setSize(12);
me.light1_on();
} else if (ll2 == 1 and getprop("systems/electrical/bus/ac-2") !=0) {
} else if (ll2 == 1 and systems.ELEC.Bus.ac2.getValue() != 0) {
me.light1_ypos = -3.0;
me.light1_setSize(12);
me.light1_on();
@ -320,89 +320,89 @@ var light_manager = {
light1_on : func {
if (me.light1_is_on == 1) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r", me.light1_r);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g", me.light1_g);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b", me.light1_b);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r", me.light1_r);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g", me.light1_g);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b", me.light1_b);
me.light1_is_on = 1;
},
light1_off : func {
if (me.light1_is_on == 0) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b", 0.0);
me.light1_is_on = 0;
},
light1_setSize : func(size) {
setprop("sim/rendering/als-secondary-lights/lightspot/size[0]", size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size[0]", size);
},
light2_on : func {
if (me.light2_is_on == 1) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[1]", me.light2_r);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[1]", me.light2_g);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[1]", me.light2_b);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[1]", me.light2_r);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[1]", me.light2_g);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[1]", me.light2_b);
me.light2_is_on = 1;
},
light2_off : func {
if (me.light2_is_on == 0) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[1]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[1]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[1]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[1]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[1]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[1]", 0.0);
me.light2_is_on = 0;
},
light2_setSize : func(size) {
setprop("sim/rendering/als-secondary-lights/lightspot/size[1]", size);
setprop("/sim/rendering/als-secondary-lights/lightspot/size[1]", size);
},
light3_on : func {
if (me.light3_is_on == 1) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[2]", me.light3_r);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[2]", me.light3_g);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[2]", me.light3_b);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[2]", me.light3_r);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[2]", me.light3_g);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[2]", me.light3_b);
me.light3_is_on = 1;
},
light3_off : func {
if (me.light3_is_on == 0) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[2]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[2]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[2]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[2]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[2]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[2]", 0.0);
me.light3_is_on = 0;
},
light4_on : func {
if (me.light4_is_on == 1) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[3]", me.light4_r);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[3]", me.light4_g);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[3]", me.light4_b);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[3]", me.light4_r);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[3]", me.light4_g);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[3]", me.light4_b);
me.light4_is_on = 1;
},
light4_off : func {
if (me.light4_is_on == 0) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[3]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[3]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[3]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[3]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[3]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[3]", 0.0);
me.light4_is_on = 0;
},
light5_on : func {
if (me.light5_is_on == 1) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[4]", me.light5_r);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[4]", me.light5_g);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[4]", me.light5_b);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[4]", me.light5_r);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[4]", me.light5_g);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[4]", me.light5_b);
me.light5_is_on = 1;
},
light5_off : func {
if (me.light5_is_on == 0) {return;}
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-r[4]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-g[4]", 0.0);
setprop("sim/rendering/als-secondary-lights/lightspot/lightspot-b[4]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-r[4]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-g[4]", 0.0);
setprop("/sim/rendering/als-secondary-lights/lightspot/lightspot-b[4]", 0.0);
me.light5_is_on = 0;
},
};

View file

@ -38,26 +38,26 @@ var thunder_listener = func {
var lightning_distance_norm = std.min(1.0, 1 / math.pow(lightning_distance / 5000.0, 2));
settimer(func {
var thunder1 = getprop("sim/sound/thunder1");
var thunder2 = getprop("sim/sound/thunder2");
var thunder3 = getprop("sim/sound/thunder3");
var thunder4 = getprop("sim/sound/thunder4");
var vol = getprop("sim/current-view/internal");
var thunder1 = getprop("/sim/sound/thunder1");
var thunder2 = getprop("/sim/sound/thunder2");
var thunder3 = getprop("/sim/sound/thunder3");
var thunder4 = getprop("/sim/sound/thunder4");
var vol = getprop("/sim/current-view/internal");
if (!thunder1) {
thunderCalls = 1;
setprop("sim/sound/dist-thunder1", lightning_distance_norm * vol * 1.75);
setprop("/sim/sound/dist-thunder1", lightning_distance_norm * vol * 1.75);
}
else if (!thunder2) {
thunderCalls = 2;
setprop("sim/sound/dist-thunder2", lightning_distance_norm * vol * 1.75);
setprop("/sim/sound/dist-thunder2", lightning_distance_norm * vol * 1.75);
}
else if (!thunder3) {
thunderCalls = 3;
setprop("sim/sound/dist-thunder3", lightning_distance_norm * vol * 1.75);
setprop("/sim/sound/dist-thunder3", lightning_distance_norm * vol * 1.75);
}
else if (!thunder4) {
thunderCalls = 4;
setprop("sim/sound/dist-thunder4", lightning_distance_norm * vol * 1.75);
setprop("/sim/sound/dist-thunder4", lightning_distance_norm * vol * 1.75);
}
else
return;

View file

@ -3,90 +3,87 @@
# Copyright (c) 2020 Josh Davidson (Octal450)
# If All ELACs Fail, Alternate Law
var mmoIAS = 0;
var cas = 0;
var elac1_sw = 0;
var elac2_sw = 0;
var sec1_sw = 0;
var sec2_sw = 0;
var sec3_sw = 0;
var fac1_sw = 0;
var fac2_sw = 0;
var elac1 = 0;
var elac2 = 0;
var sec1 = 0;
var sec2 = 0;
var sec3 = 0;
var fac1 = 0;
var fac2 = 0;
var elac1_fail = 0;
var elac2_fail = 0;
var sec1_fail = 0;
var sec2_fail = 0;
var sec3_fail = 0;
var fac1_fail = 0;
var fac2_fail = 0;
var ac_ess = 0;
var dc_ess = 0;
var dc_ess_shed = 0;
var ac1 = 0;
var ac2 = 0;
var dc1 = 0;
var dc2 = 0;
var dcHot1 = 0;
var dcHot2 = 0;
var blue = 0;
var green = 0;
var yellow = 0;
var ail = 0;
var roll = 0;
var rollback = 0;
var battery1_sw = 0;
var battery2_sw = 0;
var law = 0;
var lawyaw = 0;
var FBW = {
degradeLaw: props.globals.getNode("it-fbw/degrade-law"),
activeLaw: props.globals.getNode("it-fbw/law"),
override: props.globals.getNode("it-fbw/override"),
rollBack: props.globals.getNode("it-fbw/roll-back"),
rollLim: props.globals.getNode("it-fbw/roll-lim"),
apOff: 0,
degradeLaw: props.globals.getNode("/it-fbw/degrade-law"),
degradeYawLaw: props.globals.getNode("/it-fbw/degrade-yaw-law"),
activeLaw: props.globals.getNode("/it-fbw/law"),
activeYawLaw: props.globals.getNode("/it-fbw/yaw-law"),
override: props.globals.getNode("/it-fbw/override"),
rollBack: props.globals.getNode("/it-fbw/roll-back"),
rollLim: props.globals.getNode("/it-fbw/roll-lim"),
yawdamper: props.globals.getNode("/systems/fctl/yawdamper-active"),
Computers: {
elac1: props.globals.getNode("systems/fctl/elac1"),
elac2: props.globals.getNode("systems/fctl/elac2"),
sec1: props.globals.getNode("systems/fctl/sec1"),
sec2: props.globals.getNode("systems/fctl/sec2"),
sec3: props.globals.getNode("systems/fctl/sec3"),
fac1: props.globals.getNode("systems/fctl/fac1"),
fac2: props.globals.getNode("systems/fctl/fac2"),
elac1: props.globals.getNode("/systems/fctl/elac1"),
elac2: props.globals.getNode("/systems/fctl/elac2"),
sec1: props.globals.getNode("/systems/fctl/sec1"),
sec2: props.globals.getNode("/systems/fctl/sec2"),
sec3: props.globals.getNode("/systems/fctl/sec3"),
fac1: props.globals.getNode("/systems/fctl/fac1-healthy-signal"),
fac2: props.globals.getNode("/systems/fctl/fac2-healthy-signal"),
},
Failures: {
elac1: props.globals.getNode("systems/failures/fctl/elac1"),
elac2: props.globals.getNode("systems/failures/fctl/elac2"),
sec1: props.globals.getNode("systems/failures/fctl/sec1"),
sec2: props.globals.getNode("systems/failures/fctl/sec2"),
sec3: props.globals.getNode("systems/failures/fctl/sec3"),
fac1: props.globals.getNode("systems/failures/fctl/fac1"),
fac2: props.globals.getNode("systems/failures/fctl/fac2"),
elac1: props.globals.getNode("/systems/failures/fctl/elac1"),
elac2: props.globals.getNode("/systems/failures/fctl/elac2"),
sec1: props.globals.getNode("/systems/failures/fctl/sec1"),
sec2: props.globals.getNode("/systems/failures/fctl/sec2"),
sec3: props.globals.getNode("/systems/failures/fctl/sec3"),
fac1: props.globals.getNode("/systems/failures/fctl/fac1"),
fac2: props.globals.getNode("/systems/failures/fctl/fac2"),
spoilerl1: props.globals.getNode("/systems/failures/spoilers/spoiler-l1"),
spoilerl2: props.globals.getNode("/systems/failures/spoilers/spoiler-l2"),
spoilerl3: props.globals.getNode("/systems/failures/spoilers/spoiler-l3"),
spoilerl4: props.globals.getNode("/systems/failures/spoilers/spoiler-l4"),
spoilerl5: props.globals.getNode("/systems/failures/spoilers/spoiler-l5"),
spoilerr1: props.globals.getNode("/systems/failures/spoilers/spoiler-r1"),
spoilerr2: props.globals.getNode("/systems/failures/spoilers/spoiler-r2"),
spoilerr3: props.globals.getNode("/systems/failures/spoilers/spoiler-r3"),
spoilerr4: props.globals.getNode("/systems/failures/spoilers/spoiler-r4"),
spoilerr5: props.globals.getNode("/systems/failures/spoilers/spoiler-r5"),
yawDamper1: props.globals.getNode("/systems/failures/fctl/yaw-damper-1"),
yawDamper2: props.globals.getNode("/systems/failures/fctl/yaw-damper-2"),
},
Lights: {
elac1: props.globals.getNode("controls/fctl/lights/elac1-fault"),
elac2: props.globals.getNode("controls/fctl/lights/elac2-fault"),
sec1: props.globals.getNode("controls/fctl/lights/sec1-fault"),
sec2: props.globals.getNode("controls/fctl/lights/sec2-fault"),
sec2: props.globals.getNode("controls/fctl/lights/sec3-fault"),
fac1: props.globals.getNode("controls/fctl/lights/fac1-fault"),
fac2: props.globals.getNode("controls/fctl/lights/fac2-fault"),
elac1: props.globals.getNode("/systems/fctl/lights/elac1-fault"),
elac2: props.globals.getNode("/systems/fctl/lights/elac2-fault"),
sec1: props.globals.getNode("/systems/fctl/lights/sec1-fault"),
sec2: props.globals.getNode("/systems/fctl/lights/sec2-fault"),
sec2: props.globals.getNode("/systems/fctl/lights/sec3-fault"),
fac1: props.globals.getNode("/systems/fctl/lights/fac1-fault"),
fac2: props.globals.getNode("/systems/fctl/lights/fac2-fault"),
},
Protections: {
overspeedRoll: props.globals.getNode("it-fbw/protections/overspeed-roll-back"),
overspeedRoll: props.globals.getNode("/it-fbw/protections/overspeed-roll-back"),
overspeed: props.globals.getNode("/it-fbw/protections/overspeed"),
},
Switches: {
elac1Sw: props.globals.getNode("controls/fctl/switches/elac1"),
elac2Sw: props.globals.getNode("controls/fctl/switches/elac2"),
sec1Sw: props.globals.getNode("controls/fctl/switches/sec1"),
sec2Sw: props.globals.getNode("controls/fctl/switches/sec2"),
sec3Sw: props.globals.getNode("controls/fctl/switches/sec3"),
fac1Sw: props.globals.getNode("controls/fctl/switches/fac1"),
fac2Sw: props.globals.getNode("controls/fctl/switches/fac2"),
elac1Sw: props.globals.getNode("/controls/fctl/switches/elac1"),
elac2Sw: props.globals.getNode("/controls/fctl/switches/elac2"),
sec1Sw: props.globals.getNode("/controls/fctl/switches/sec1"),
sec2Sw: props.globals.getNode("/controls/fctl/switches/sec2"),
sec3Sw: props.globals.getNode("/controls/fctl/switches/sec3"),
fac1Sw: props.globals.getNode("/controls/fctl/switches/fac1"),
fac2Sw: props.globals.getNode("/controls/fctl/switches/fac2"),
},
init: func() {
if (updatet.isRunning) {
@ -115,6 +112,7 @@ var FBW = {
me.degradeLaw.setValue(0);
me.activeLaw.setValue(0);
me.override.setValue(0);
me.apOff = 0;
if (!updatet.isRunning) {
updatet.start();
@ -131,170 +129,98 @@ var FBW = {
me.Failures.sec3.setBoolValue(0);
me.Failures.fac1.setBoolValue(0);
me.Failures.fac2.setBoolValue(0);
me.Failures.spoilerl1.setBoolValue(0);
me.Failures.spoilerl2.setBoolValue(0);
me.Failures.spoilerl3.setBoolValue(0);
me.Failures.spoilerl4.setBoolValue(0);
me.Failures.spoilerl5.setBoolValue(0);
me.Failures.spoilerr1.setBoolValue(0);
me.Failures.spoilerr2.setBoolValue(0);
me.Failures.spoilerr3.setBoolValue(0);
me.Failures.spoilerr4.setBoolValue(0);
me.Failures.spoilerr5.setBoolValue(0);
me.Failures.yawDamper1.setBoolValue(0);
me.Failures.yawDamper2.setBoolValue(0);
},
};
var update_loop = func {
elac1_sw = FBW.Switches.elac1Sw.getValue();
elac2_sw = FBW.Switches.elac2Sw.getValue();
sec1_sw = FBW.Switches.sec1Sw.getValue();
sec2_sw = FBW.Switches.sec2Sw.getValue();
sec3_sw = FBW.Switches.sec3Sw.getValue();
fac1_sw = FBW.Switches.fac1Sw.getValue();
fac2_sw = FBW.Switches.fac2Sw.getValue();
elac1_fail = FBW.Failures.elac1.getValue();
elac2_fail = FBW.Failures.elac2.getValue();
sec1_fail = FBW.Failures.sec1.getValue();
sec2_fail = FBW.Failures.sec2.getValue();
sec3_fail = FBW.Failures.sec3.getValue();
fac1_fail = FBW.Failures.fac1.getValue();
fac2_fail = FBW.Failures.fac2.getValue();
ac_ess = systems.ELEC.Bus.acEss.getValue();
dc_ess = systems.ELEC.Bus.dcEss.getValue();
dc_ess_shed = systems.ELEC.Bus.dcEssShed.getValue();
ac1 = systems.ELEC.Bus.ac1.getValue();
ac2 = systems.ELEC.Bus.ac2.getValue();
dc1 = systems.ELEC.Bus.dc1.getValue();
dc2 = systems.ELEC.Bus.dc2.getValue();
dcHot1 = systems.ELEC.Bus.dcHot1.getValue();
dcHot2 = systems.ELEC.Bus.dcHot2.getValue();
battery1_sw = systems.ELEC.Switch.bat1.getValue();
battery2_sw = systems.ELEC.Switch.bat2.getValue();
if (elac1_sw and !elac1_fail and (dc_ess >= 25 or dcHot1 >= 25)) {
FBW.Computers.elac1.setValue(1);
FBW.Lights.elac1.setValue(0);
} else if (elac1_sw and (elac1_fail or (dc_ess < 25 and dcHot1 < 25))) {
FBW.Computers.elac1.setValue(0);
FBW.Lights.elac1.setValue(1);
}
if (elac2_sw and !elac2_fail and (dc2 >= 25 or dcHot2 >= 25)) {
FBW.Computers.elac2.setValue(1);
FBW.Lights.elac2.setValue(0);
} else if (elac1_sw and (elac2_fail or (dc2 < 25 and dcHot2 < 25))) {
FBW.Computers.elac2.setValue(0);
FBW.Lights.elac2.setValue(1);
}
if (sec1_sw and !sec1_fail and dc_ess >= 25) {
setprop("systems/fctl/sec1", 1);
setprop("systems/failures/spoiler-l3", 0);
setprop("systems/failures/spoiler-r3", 0);
setprop("systems/failures/spoiler-l4", 0);
setprop("systems/failures/spoiler-r4", 0);
} else {
setprop("systems/fctl/sec1", 0);
setprop("systems/failures/spoiler-l3", 1);
setprop("systems/failures/spoiler-r3", 1);
setprop("systems/failures/spoiler-l4", 1);
setprop("systems/failures/spoiler-r4", 1);
}
if (sec2_sw and !sec2_fail and dc2 >= 25) {
setprop("systems/fctl/sec2", 1);
setprop("systems/failures/spoiler-l5", 0);
setprop("systems/failures/spoiler-r5", 0);
} else {
setprop("systems/fctl/sec2", 0);
setprop("systems/failures/spoiler-l5", 1);
setprop("systems/failures/spoiler-r5", 1);
}
if (sec3_sw and !sec3_fail and dc2 >= 25) {
setprop("systems/fctl/sec3", 1);
setprop("systems/failures/spoiler-l1", 0);
setprop("systems/failures/spoiler-r1", 0);
setprop("systems/failures/spoiler-l2", 0);
setprop("systems/failures/spoiler-r2", 0);
} else {
setprop("systems/fctl/sec3", 0);
setprop("systems/failures/spoiler-l1", 1);
setprop("systems/failures/spoiler-r1", 1);
setprop("systems/failures/spoiler-l2", 1);
setprop("systems/failures/spoiler-r2", 1);
}
if (fac1_sw and !fac1_fail and (ac_ess >= 110 or dc_ess_shed >= 25)) {
setprop("systems/fctl/fac1", 1);
setprop("systems/failures/rudder", 0);
setprop("systems/failures/fac1-fault", 0);
} else if (fac1_sw and (battery1_sw or battery2_sw) and (fac1_fail or ac_ess < 110 or dc_ess_shed < 25)) {
setprop("systems/failures/fac1-fault", 1);
setprop("systems/fctl/fac1", 0);
if (!fac2_sw or fac2_fail) {
setprop("systems/failures/rudder", 1);
}
} else {
setprop("systems/failures/fac1-fault", 0);
setprop("systems/fctl/fac1", 0);
if (!fac2_sw or fac2_fail) {
setprop("systems/failures/rudder", 1);
}
}
if (fac2_sw and !fac2_fail and (ac2 >= 110 or dc2 >= 25)) {
setprop("systems/fctl/fac2", 1);
setprop("systems/failures/fac2-fault", 0);
} else if (fac2_sw and (fac2_fail or ac2 < 110 or dc2 < 25)) {
setprop("systems/failures/fac2-fault", 1);
setprop("systems/fctl/fac2", 0);
if (!fac1_sw or fac1_fail) {
setprop("systems/failures/rudder", 1);
}
} else {
setprop("systems/fctl/fac2", 0);
setprop("systems/failures/fac2-fault", 0);
if (!fac1_sw or fac1_fail) {
setprop("systems/failures/rudder", 1);
}
}
var elac1 = getprop("systems/fctl/elac1");
var elac2 = getprop("systems/fctl/elac2");
var sec1 = getprop("systems/fctl/sec1");
var sec2 = getprop("systems/fctl/sec2");
var sec3 = getprop("systems/fctl/sec3");
var fac1 = getprop("systems/fctl/fac1");
var fac2 = getprop("systems/fctl/fac2");
elac1 = FBW.Computers.elac1.getBoolValue();
elac2 = FBW.Computers.elac2.getBoolValue();
sec1 = FBW.Computers.sec1.getBoolValue();
sec2 = FBW.Computers.sec2.getBoolValue();
sec3 = FBW.Computers.sec3.getBoolValue();
fac1 = FBW.Computers.fac1.getBoolValue();
fac2 = FBW.Computers.fac2.getBoolValue();
law = FBW.activeLaw.getValue();
lawyaw = FBW.activeYawLaw.getValue();
# Degrade logic, all failures which degrade FBW need to go here. -JD
blue = systems.HYD.Psi.blue.getValue();
green = systems.HYD.Psi.green.getValue();
yellow = systems.HYD.Psi.yellow.getValue();
if (getprop("gear/gear[1]/wow") == 0 and getprop("gear/gear[2]/wow") == 0) {
if (!pts.Gear.wow[1].getBoolValue() and !pts.Gear.wow[2].getBoolValue()) {
if (!elac1 and !elac2) {
if (lawyaw == 0) {
FBW.degradeYawLaw.setValue(1);
}
if (law == 0) {
FBW.degradeLaw.setValue(1);
fcu.apOff("hard", 0);
fcu.athrOff("hard");
FBW.apOff = 1;
}
}
if (getprop("systems/electrical/some-electric-thingie/emer-elec-config") == 1) {
if ((!elac1 and elac2 and ((green < 1500 and yellow >= 1500) or (green >= 1500 and yellow < 1500))) or (!elac2 and elac1 and blue < 1500)) {
if (lawyaw == 0) {
FBW.degradeYawLaw.setValue(1);
}
if (law == 0) {
FBW.degradeLaw.setValue(1);
fcu.apOff("hard", 0);
fcu.athrOff("hard");
FBW.apOff = 1;
}
}
if ((blue >= 1500 and green < 1500 and yellow < 1500) or (blue < 1500 and green < 1500 and yellow >= 1500)) {
if (law == 0 or law == 1) {
FBW.degradeLaw.setValue(2);
fcu.apOff("hard", 0);
fcu.athrOff("hard");
if (!sec1 and !sec2 and !sec3) {
if (lawyaw == 0) {
FBW.degradeYawLaw.setValue(1);
}
if (law == 0) {
FBW.degradeLaw.setValue(1);
}
}
if (dc_ess < 25 and dc2 < 25) {
if (systems.ELEC.EmerElec.getBoolValue()) {
if (lawyaw == 0 or lawyaw == 1) {
} elsif (fac1 and lawyaw == 2) {
FBW.degradeYawLaw.setValue(1);
}
if (law == 0) {
FBW.degradeLaw.setValue(1);
FBW.apOff = 1;
}
}
if (blue < 1500 and green < 1500 and yellow >= 1500) {
if (lawyaw == 0) {
FBW.degradeYawLaw.setValue(1);
}
if (law == 0) {
FBW.degradeLaw.setValue(1);
FBW.apOff = 1;
}
}
if ((!fac1 and !fac2) or !FBW.yawdamper.getValue() or (blue >= 1500 and green < 1500 and yellow < 1500)) {
if (lawyaw == 0 or lawyaw == 1) {
FBW.degradeYawLaw.setValue(2);
}
if (law == 0) {
FBW.degradeLaw.setValue(1);
FBW.apOff = 1;
}
}
if (!elac1 and !elac2 and !sec1 and !sec2 and !sec3 and !fac1 and !fac2) {
FBW.degradeLaw.setValue(3);
fcu.apOff("hard", 0);
fcu.athrOff("hard");
FBW.apOff = 1;
}
}
if (getprop("controls/gear/gear-down") == 1 and getprop("it-autoflight/output/ap1") == 0 and getprop("it-autoflight/output/ap2") == 0) {
if (pts.Controls.Gear.gearDown.getBoolValue() and !fmgc.Input.ap1.getBoolValue() and !fmgc.Input.ap2.getBoolValue()) {
if (law == 1) {
FBW.degradeLaw.setValue(2);
}
@ -304,27 +230,28 @@ var update_loop = func {
law = FBW.activeLaw.getValue();
# Mech Backup can always return to direct, if it can.
if (law == 3 and ac_ess >= 110 and (green >= 1500 or blue >= 1500 or yellow >= 1500)) {
if (law == 3 and (elac1 or elac2 or sec1 or sec2 or sec3 or fac1 or fac2) and systems.ELEC.Bus.acEss.getValue() >= 110 and (green >= 1500 or blue >= 1500 or yellow >= 1500)) {
FBW.degradeLaw.setValue(2);
}
mmoIAS = (getprop("instrumentation/airspeed-indicator/indicated-speed-kt") / getprop("instrumentation/airspeed-indicator/indicated-mach")) * 0.82;
cas = pts.Instrumentation.AirspeedIndicator.indicatedSpdKt.getValue();
mmoIAS = (cas / pts.Instrumentation.AirspeedIndicator.indicatedMach.getValue()) * 0.82;
if (mmoIAS < 350) {
setprop("it-fbw/speeds/vmo-mmo", mmoIAS);
fmgc.FMGCInternal.vmo_mmo = mmoIAS;
} else {
setprop("it-fbw/speeds/vmo-mmo", 350);
fmgc.FMGCInternal.vmo_mmo = 350;
}
if (getprop("instrumentation/airspeed-indicator/indicated-speed-kt") > getprop("it-fbw/speeds/vmo-mmo") + 6 and (law == 0 or law == 1)) {
if (getprop("it-autoflight/input/ap1") == 1 or getprop("it-autoflight/input/ap2") == 1) {
if (cas > (fmgc.FMGCInternal.vmo_mmo + 6) and (law == 0 or law == 1)) {
if (fmgc.Input.ap1.getBoolValue() or fmgc.Input.ap2.getBoolValue()) {
fcu.apOff("hard", 0);
}
if (getprop("it-fbw/protections/overspeed") != 1) {
setprop("it-fbw/protections/overspeed", 1);
if (!FBW.Protections.overspeed.getBoolValue()) {
FBW.Protections.overspeed.setBoolValue(1);
}
} else {
if (getprop("it-fbw/protections/overspeed") != 0) {
setprop("it-fbw/protections/overspeed", 0);
if (FBW.Protections.overspeed.getBoolValue()) {
FBW.Protections.overspeed.setBoolValue(0);
}
}
}
@ -361,7 +288,7 @@ var fbw_loop = func {
FBW.Protections.overspeedRoll.setValue(1);
}
if (getprop("it-fbw/override") == 0) {
if (!FBW.override.getBoolValue()) {
var active = FBW.activeLaw.getValue();
var degrade = FBW.degradeLaw.getValue();
if (degrade == 0) {
@ -381,15 +308,69 @@ var fbw_loop = func {
FBW.activeLaw.setValue(3);
}
}
active = FBW.activeYawLaw.getValue();
degrade = FBW.degradeYawLaw.getValue();
if (degrade == 0) {
if (active != 0) {
FBW.activeYawLaw.setValue(0);
}
} else if (degrade == 1) {
if (active != 1) {
FBW.activeYawLaw.setValue(1);
}
} else if (degrade == 2) {
if (active != 2) {
FBW.activeYawLaw.setValue(2);
}
}
}
if (FBW.activeLaw.getValue() != 0) {
if (getprop("it-autoflight/output/ap1") == 1 or getprop("it-autoflight/output/ap2") == 1) {
if (FBW.apOff) {
if (fmgc.Input.ap1.getBoolValue() or fmgc.Input.ap2.getBoolValue()) {
fcu.apOff("hard", 0);
fcu.athrOff("hard");
}
}
}
setlistener("systems/fctl/sec1", func() {
if (FBW.Computers.sec1.getBoolValue()) {
FBW.Failures.spoilerl3.setBoolValue(0);
FBW.Failures.spoilerr3.setBoolValue(0);
FBW.Failures.spoilerl4.setBoolValue(0);
FBW.Failures.spoilerr4.setBoolValue(0);
} else {
FBW.Failures.spoilerl3.setBoolValue(1);
FBW.Failures.spoilerr3.setBoolValue(1);
FBW.Failures.spoilerl4.setBoolValue(1);
FBW.Failures.spoilerr4.setBoolValue(1);
}
}, 0, 0);
setlistener("systems/fctl/sec2", func() {
if (FBW.Computers.sec2.getBoolValue()) {
FBW.Failures.spoilerl5.setBoolValue(0);
FBW.Failures.spoilerr5.setBoolValue(0);
} else {
FBW.Failures.spoilerl5.setBoolValue(1);
FBW.Failures.spoilerr5.setBoolValue(1);
}
}, 0, 0);
setlistener("systems/fctl/sec3", func() {
if (FBW.Computers.sec3.getBoolValue()) {
FBW.Failures.spoilerl1.setBoolValue(0);
FBW.Failures.spoilerr1.setBoolValue(0);
FBW.Failures.spoilerl2.setBoolValue(0);
FBW.Failures.spoilerr2.setBoolValue(0);
} else {
FBW.Failures.spoilerl1.setBoolValue(1);
FBW.Failures.spoilerr1.setBoolValue(1);
FBW.Failures.spoilerl2.setBoolValue(1);
FBW.Failures.spoilerr2.setBoolValue(1);
}
}, 0, 0);
var updatet = maketimer(0.1, update_loop);
var fbwt = maketimer(0.03, fbw_loop);

View file

@ -2,37 +2,37 @@
# Copyright (c) 2020 Josh Davidson (Octal450), Jonathan Redpath (legoboyvdlp)
# Nodes
var fd1 = props.globals.getNode("it-autoflight/output/fd1", 1);
var fd2 = props.globals.getNode("it-autoflight/output/fd2", 1);
var ap1 = props.globals.getNode("it-autoflight/output/ap1", 1);
var ap2 = props.globals.getNode("it-autoflight/output/ap2", 1);
var athr = props.globals.getNode("it-autoflight/output/athr", 1);
var fd1Input = props.globals.getNode("it-autoflight/input/fd1", 1);
var fd2Input = props.globals.getNode("it-autoflight/input/fd2", 1);
var ap1Input = props.globals.getNode("it-autoflight/input/ap1", 1);
var ap2Input = props.globals.getNode("it-autoflight/input/ap2", 1);
var athrInput = props.globals.getNode("it-autoflight/input/athr", 1);
var ktsMach = props.globals.getNode("it-autoflight/input/kts-mach", 1);
var iasSet = props.globals.getNode("it-autoflight/input/spd-kts", 1);
var machSet = props.globals.getNode("it-autoflight/input/spd-mach", 1);
var hdgSet = props.globals.getNode("it-autoflight/input/hdg", 1);
var altSet = props.globals.getNode("it-autoflight/input/alt", 1);
var altSetMode = props.globals.getNode("it-autoflight/config/altitude-dial-mode", 1);
var vsSet = props.globals.getNode("it-autoflight/input/vs", 1);
var fpaSet = props.globals.getNode("it-autoflight/input/fpa", 1);
var iasNow = props.globals.getNode("instrumentation/airspeed-indicator/indicated-speed-kt", 1);
var machNow = props.globals.getNode("instrumentation/airspeed-indicator/indicated-mach", 1);
var spdManaged = props.globals.getNode("it-autoflight/input/spd-managed", 1);
var showHDG = props.globals.getNode("it-autoflight/custom/show-hdg", 1);
var trkFpaSW = props.globals.getNode("it-autoflight/custom/trk-fpa", 1);
var latMode = props.globals.getNode("it-autoflight/output/lat", 1);
var vertMode = props.globals.getNode("it-autoflight/output/vert", 1);
var fpaModeInput = props.globals.getNode("it-autoflight/input/fpa", 1);
var latModeInput = props.globals.getNode("it-autoflight/input/lat", 1);
var vertModeInput = props.globals.getNode("it-autoflight/input/vert", 1);
var vsModeInput = props.globals.getNode("it-autoflight/input/vs", 1);
var locArm = props.globals.getNode("it-autoflight/output/loc-armed", 1);
var apprArm = props.globals.getNode("it-autoflight/output/appr-armed", 1);
var fd1 = props.globals.getNode("/it-autoflight/output/fd1", 1);
var fd2 = props.globals.getNode("/it-autoflight/output/fd2", 1);
var ap1 = props.globals.getNode("/it-autoflight/output/ap1", 1);
var ap2 = props.globals.getNode("/it-autoflight/output/ap2", 1);
var athr = props.globals.getNode("/it-autoflight/output/athr", 1);
var fd1Input = props.globals.getNode("/it-autoflight/input/fd1", 1);
var fd2Input = props.globals.getNode("/it-autoflight/input/fd2", 1);
var ap1Input = props.globals.getNode("/it-autoflight/input/ap1", 1);
var ap2Input = props.globals.getNode("/it-autoflight/input/ap2", 1);
var athrInput = props.globals.getNode("/it-autoflight/input/athr", 1);
var ktsMach = props.globals.getNode("/it-autoflight/input/kts-mach", 1);
var iasSet = props.globals.getNode("/it-autoflight/input/kts", 1);
var machSet = props.globals.getNode("/it-autoflight/input/mach", 1);
var hdgSet = props.globals.getNode("/it-autoflight/input/hdg", 1);
var altSet = props.globals.getNode("/it-autoflight/input/alt", 1);
var altSetMode = props.globals.getNode("/it-autoflight/config/altitude-dial-mode", 1);
var vsSet = props.globals.getNode("/it-autoflight/input/vs", 1);
var fpaSet = props.globals.getNode("/it-autoflight/input/fpa", 1);
var iasNow = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1);
var machNow = props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1);
var spdManaged = props.globals.getNode("/it-autoflight/input/spd-managed", 1);
var showHDG = props.globals.getNode("/it-autoflight/custom/show-hdg", 1);
var trkFpaSW = props.globals.getNode("/it-autoflight/custom/trk-fpa", 1);
var latMode = props.globals.getNode("/it-autoflight/output/lat", 1);
var vertMode = props.globals.getNode("/it-autoflight/output/vert", 1);
var fpaModeInput = props.globals.getNode("/it-autoflight/input/fpa", 1);
var latModeInput = props.globals.getNode("/it-autoflight/input/lat", 1);
var vertModeInput = props.globals.getNode("/it-autoflight/input/vert", 1);
var vsModeInput = props.globals.getNode("/it-autoflight/input/vs", 1);
var locArm = props.globals.getNode("/it-autoflight/output/loc-armed", 1);
var apprArm = props.globals.getNode("/it-autoflight/output/appr-armed", 1);
var FCUworkingNode = props.globals.initNode("/FMGC/FCU-working", 0, "BOOL");
var FCU = {
@ -103,6 +103,7 @@ var FCUController = {
if (!ap1.getBoolValue()) {
ap1Input.setValue(1);
ecam.apWarnNode.setValue(0);
pts.Controls.Flight.rudderTrim.setValue(0);
} else {
apOff("hard", 1);
}
@ -112,6 +113,7 @@ var FCUController = {
if (me.FCUworking and fbw.FBW.activeLaw.getValue() == 0) {
if (!ap2.getBoolValue()) {
ap2Input.setValue(1);
pts.Controls.Flight.rudderTrim.setValue(0);
} else {
apOff("hard", 2);
}
@ -155,13 +157,13 @@ var FCUController = {
if (ap1.getBoolValue() or ap2.getBoolValue()) {
apOff("soft", 0);
} else {
if (getprop("it-autoflight/sound/apoffsound") == 1 or getprop("it-autoflight/sound/apoffsound2") == 1) {
setprop("it-autoflight/sound/apoffsound", 0);
setprop("it-autoflight/sound/apoffsound2", 0);
if (getprop("/it-autoflight/sound/apoffsound") == 1 or getprop("/it-autoflight/sound/apoffsound2") == 1) {
setprop("/it-autoflight/sound/apoffsound", 0);
setprop("/it-autoflight/sound/apoffsound2", 0);
}
if (getprop("it-autoflight/output/ap-warning") != 0) {
setprop("it-autoflight/output/ap-warning", 0);
setprop("ECAM/warnings/master-warning-light", 0);
if (getprop("/it-autoflight/output/ap-warning") != 0) {
setprop("/it-autoflight/output/ap-warning", 0);
ecam.lights[0].setValue(0);
}
}
}
@ -176,11 +178,11 @@ var FCUController = {
if (me.FCUworking) {
if (athr.getBoolValue()) {
athrOff("soft");
setprop("ECAM/warnings/master-caution-light", 1);
ecam.lights[1].setValue(1);
} else {
if (getprop("it-autoflight/output/athr-warning") == 1) {
setprop("it-autoflight/output/athr-warning", 0);
setprop("ECAM/warnings/master-caution-light", 0);
if (getprop("/it-autoflight/output/athr-warning") == 1) {
setprop("/it-autoflight/output/athr-warning", 0);
ecam.lights[1].setValue(0);
}
}
}
@ -196,7 +198,7 @@ var FCUController = {
},
SPDPush: func() {
if (me.FCUworking) {
if (getprop("FMGC/internal/cruise-lvl-set") == 1 and getprop("FMGC/internal/cost-index-set") == 1) {
if (fmgc.FMGCInternal.crzSet and fmgc.FMGCInternal.costIndexSet) {
spdManaged.setBoolValue(1);
fmgc.ManagedSPD.start();
}
@ -329,6 +331,7 @@ var FCUController = {
fmgc.ITAF.disarmGS();
}
} else {
if (pts.Position.gearAglFt.getValue() >= 400 and vertTemp != 7) {
latModeInput.setValue(2);
if (vertTemp == 2 or vertTemp == 6) {
me.VSPull();
@ -337,6 +340,7 @@ var FCUController = {
}
}
}
}
},
TRKFPA: func() {
if (me.FCUworking) {
@ -345,7 +349,7 @@ var FCUController = {
},
ALTPush: func() {
if (me.FCUworking) {
# setprop("it-autoflight/input/vert", 8); # He don't work yet m8
# setprop("/it-autoflight/input/vert", 8); # He don't work yet m8
}
},
ALTPull: func() {
@ -465,9 +469,11 @@ var FCUController = {
fmgc.ITAF.disarmGS();
}
} else {
if (pts.Position.gearAglFt.getValue() >= 400 and vertTemp != 7) {
vertModeInput.setValue(2);
}
}
}
},
};
@ -517,7 +523,7 @@ var athrOff = func(type) {
var hdgInput = func {
if (latMode.getValue() != 0) {
showHDG.setBoolValue(1);
var hdgnow = getprop("it-autoflight/input/hdg");
setprop("modes/fcu/hdg-time", getprop("sim/time/elapsed-sec"));
var hdgnow = fmgc.Input.hdg.getValue();
fmgc.Custom.hdgTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
}

View file

@ -4,55 +4,18 @@
# Initialize all used variables and property nodes
# Sim
var Velocities = {
airspeedKt: props.globals.getNode("velocities/airspeed-kt", 1), # Only used for gain scheduling
groundspeedKt: props.globals.getNode("velocities/groundspeed-kt", 1),
groundspeedMps: 0,
indicatedAirspeedKt: props.globals.getNode("instrumentation/airspeed-indicator/indicated-speed-kt", 1),
indicatedMach: props.globals.getNode("instrumentation/airspeed-indicator/indicated-mach", 1),
trueAirspeedKt: props.globals.getNode("instrumentation/airspeed-indicator/true-speed-kt", 1),
trueAirspeedKtTemp: 0,
};
var Position = {
gearAglFtTemp: 0,
gearAglFt: props.globals.getNode("position/gear-agl-ft", 1),
indicatedAltitudeFt: props.globals.getNode("instrumentation/altimeter/indicated-altitude-ft", 1),
indicatedAltitudeFtTemp: 0,
};
var Gear = {
wow0: props.globals.getNode("gear/gear[0]/wow", 1),
wow1: props.globals.getNode("gear/gear[1]/wow", 1),
wow1Temp: 1,
wow2: props.globals.getNode("gear/gear[2]/wow", 1),
wow2Temp: 1,
};
var Control = {
aileron: props.globals.getNode("controls/flight/aileron", 1),
elevator: props.globals.getNode("controls/flight/elevator", 1),
rudder: props.globals.getNode("controls/flight/rudder", 1),
};
var Radio = {
gsDefl: [props.globals.getNode("instrumentation/nav[0]/gs-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/gs-needle-deflection-norm", 1)],
gsDeflTemp: 0,
inRange: [props.globals.getNode("instrumentation/nav[0]/in-range", 1), props.globals.getNode("instrumentation/nav[1]/in-range", 1)],
inRangeTemp: 0,
locDefl: [props.globals.getNode("instrumentation/nav[0]/heading-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/heading-needle-deflection-norm", 1)],
locDeflTemp: 0,
radioSel: 0,
signalQuality: [props.globals.getNode("instrumentation/nav[0]/signal-quality-norm", 1), props.globals.getNode("instrumentation/nav[1]/signal-quality-norm", 1)],
signalQualityTemp: 0,
var Controls = {
aileron: props.globals.getNode("/controls/flight/aileron", 1),
elevator: props.globals.getNode("/controls/flight/elevator", 1),
rudder: props.globals.getNode("/controls/flight/rudder", 1),
};
var FPLN = {
active: props.globals.getNode("/FMGC/flightplan[2]/active", 1),
activeTemp: 0,
currentCourse: 0,
currentWP: props.globals.getNode("/FMGC/flightplan[2]/current-wp", 1),
currentWPTemp: 0,
currentWp: props.globals.getNode("/FMGC/flightplan[2]/current-wp", 1),
currentWpTemp: 0,
deltaAngle: 0,
deltaAngleRad: 0,
distCoeff: 0,
@ -67,12 +30,48 @@ var FPLN = {
wpFlyTo: 0,
};
var Gear = {
wow0: props.globals.getNode("/gear/gear[0]/wow", 1),
wow1: props.globals.getNode("/gear/gear[1]/wow", 1),
wow1Temp: 1,
wow2: props.globals.getNode("/gear/gear[2]/wow", 1),
wow2Temp: 1,
};
var Misc = {
acEss: props.globals.getNode("systems/electrical/bus/ac-ess", 1),
elapsedSec: props.globals.getNode("sim/time/elapsed-sec", 1),
fbwLaw: props.globals.getNode("it-fbw/law", 1),
flapNorm: props.globals.getNode("surface-positions/flap-pos-norm", 1),
pfdHeadingScale: props.globals.getNode("instrumentation/pfd/heading-scale", 1),
elapsedSec: props.globals.getNode("/sim/time/elapsed-sec", 1),
fbwLaw: props.globals.getNode("/it-fbw/law", 1),
flapNorm: props.globals.getNode("/surface-positions/flap-pos-norm", 1),
pfdHeadingScale: props.globals.getNode("/instrumentation/pfd/heading-scale", 1),
};
var Position = {
gearAglFtTemp: 0,
gearAglFt: props.globals.getNode("/position/gear-agl-ft", 1),
indicatedAltitudeFt: props.globals.getNode("/instrumentation/altimeter/indicated-altitude-ft", 1),
indicatedAltitudeFtTemp: 0,
};
var Radio = {
gsDefl: [props.globals.getNode("/instrumentation/nav[0]/gs-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/gs-needle-deflection-norm", 1)],
gsDeflTemp: 0,
inRange: [props.globals.getNode("/instrumentation/nav[0]/in-range", 1), props.globals.getNode("instrumentation/nav[1]/in-range", 1)],
inRangeTemp: 0,
locDefl: [props.globals.getNode("/instrumentation/nav[0]/heading-needle-deflection-norm", 1), props.globals.getNode("instrumentation/nav[1]/heading-needle-deflection-norm", 1)],
locDeflTemp: 0,
radioSel: 0,
signalQuality: [props.globals.getNode("/instrumentation/nav[0]/signal-quality-norm", 1), props.globals.getNode("instrumentation/nav[1]/signal-quality-norm", 1)],
signalQualityTemp: 0,
};
var Velocities = {
airspeedKt: props.globals.getNode("/velocities/airspeed-kt", 1), # Only used for gain scheduling
groundspeedKt: props.globals.getNode("/velocities/groundspeed-kt", 1),
groundspeedMps: 0,
indicatedAirspeedKt: props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt", 1),
indicatedMach: props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach", 1),
trueAirspeedKt: props.globals.getNode("/instrumentation/airspeed-indicator/true-speed-kt", 1),
trueAirspeedKtTemp: 0,
};
# IT-AUTOFLIGHT
@ -87,17 +86,19 @@ var Input = {
fd1: props.globals.initNode("/it-autoflight/input/fd1", 1, "BOOL"),
fd2: props.globals.initNode("/it-autoflight/input/fd2", 1, "BOOL"),
fpa: props.globals.initNode("/it-autoflight/input/fpa", 0, "DOUBLE"),
fpaAbs: props.globals.initNode("/it-autoflight/input/fpa-abs", 0, "DOUBLE"), # Set by property rule
hdg: props.globals.initNode("/it-autoflight/input/hdg", 0, "INT"),
hdgCalc: 0,
ias: props.globals.initNode("/it-autoflight/input/spd-kts", 250, "INT"),
kts: props.globals.initNode("/it-autoflight/input/kts", 100, "INT"),
ktsMach: props.globals.initNode("/it-autoflight/input/kts-mach", 0, "BOOL"),
lat: props.globals.initNode("/it-autoflight/input/lat", 5, "INT"),
latTemp: 5,
mach: props.globals.initNode("/it-autoflight/input/spd-mach", 0.5, "DOUBLE"),
mach: props.globals.initNode("/it-autoflight/input/mach", 0.5, "DOUBLE"),
toga: props.globals.initNode("/it-autoflight/input/toga", 0, "BOOL"),
trk: props.globals.initNode("/it-autoflight/input/trk", 0, "BOOL"),
trueCourse: props.globals.initNode("/it-autoflight/input/true-course", 0, "BOOL"),
vs: props.globals.initNode("/it-autoflight/input/vs", 0, "INT"),
vsAbs: props.globals.initNode("/it-autoflight/input/vs-abs", 0, "INT"), # Set by property rule
vert: props.globals.initNode("/it-autoflight/input/vert", 7, "INT"),
vertTemp: 7,
};
@ -110,17 +111,15 @@ var Internal = {
altPredicted: props.globals.initNode("/it-autoflight/internal/altitude-predicted", 0, "DOUBLE"),
bankLimit: props.globals.initNode("/it-autoflight/internal/bank-limit", 30, "INT"),
bankLimitAuto: 30,
captVS: 0,
captVs: 0,
driftAngle: props.globals.initNode("/it-autoflight/internal/drift-angle-deg", 0, "DOUBLE"),
flchActive: 0,
fpa: props.globals.initNode("/it-autoflight/internal/fpa", 0, "DOUBLE"),
hdg: props.globals.initNode("/it-autoflight/internal/heading-deg", 0, "DOUBLE"),
hdgErrorDeg: props.globals.initNode("/it-autoflight/internal/heading-error-deg", 0, "DOUBLE"),
hdgPredicted: props.globals.initNode("/it-autoflight/internal/heading-predicted", 0, "DOUBLE"),
lnavAdvanceNm: props.globals.initNode("/it-autoflight/internal/lnav-advance-nm", 0, "DOUBLE"),
minVS: props.globals.initNode("/it-autoflight/internal/min-vs", -500, "INT"),
maxVS: props.globals.initNode("/it-autoflight/internal/max-vs", 500, "INT"),
trk: props.globals.initNode("/it-autoflight/internal/track-deg", 0, "DOUBLE"),
minVs: props.globals.initNode("/it-autoflight/internal/min-vs", -500, "INT"),
maxVs: props.globals.initNode("/it-autoflight/internal/max-vs", 500, "INT"),
vs: props.globals.initNode("/it-autoflight/internal/vert-speed-fpm", 0, "DOUBLE"),
vsTemp: 0,
};
@ -155,7 +154,7 @@ var Text = {
};
var Setting = {
reducAglFt: props.globals.initNode("/it-autoflight/settings/accel-agl-ft", 1500, "INT"), # Changable from MCDU #eventually set to 1500 above runway
reducAglFt: props.globals.initNode("/it-autoflight/settings/accel-agl-ft", 1500, "INT"), # Changable from MCDU, eventually set to 1500 above runway
};
var Sound = {
@ -166,12 +165,12 @@ var Sound = {
# A3XX Custom
var Custom = {
apFdOn: 0,
hdgTime: props.globals.getNode("modes/fcu/hdg-time", 1),
ndTrkSel: [props.globals.getNode("instrumentation/efis[0]/trk-selected", 1), props.globals.getNode("instrumentation/efis[1]/trk-selected", 1)],
hdgTime: props.globals.getNode("/modes/fcu/hdg-time", 1),
ndTrkSel: [props.globals.getNode("/instrumentation/efis[0]/trk-selected", 1), props.globals.getNode("/instrumentation/efis[1]/trk-selected", 1)],
showHdg: props.globals.initNode("/it-autoflight/custom/show-hdg", 1, "BOOL"),
trkFpa: props.globals.initNode("/it-autoflight/custom/trk-fpa", 0, "BOOL"),
Input: {
spdManaged: props.globals.getNode("it-autoflight/input/spd-managed", 1),
spdManaged: props.globals.getNode("/it-autoflight/input/spd-managed", 1),
},
Output: {
fmaPower: props.globals.initNode("/it-autoflight/output/fma-pwr", 0, "BOOL"),
@ -180,7 +179,7 @@ var Custom = {
athrOff: props.globals.initNode("/it-autoflight/sound/athrsound", 0, "BOOL"),
enableAthrOff: 0,
},
ThrLock: props.globals.getNode("systems/thrust/thr-locked", 1)
ThrLock: props.globals.getNode("/systems/thrust/thr-locked", 1)
};
var ITAF = {
@ -215,13 +214,13 @@ var ITAF = {
Output.thrMode.setValue(0);
Output.lat.setValue(9);
Output.vert.setValue(9);
Internal.minVS.setValue(-500);
Internal.maxVS.setValue(500);
Internal.minVs.setValue(-500);
Internal.maxVs.setValue(500);
Internal.bankLimit.setValue(30);
Internal.bankLimitAuto = 30;
Internal.alt.setValue(10000);
Internal.altCaptureActive = 0;
Input.ias.setValue(100);
Input.kts.setValue(100);
Input.mach.setValue(0.5);
Text.thr.setValue("THRUST");
Text.arm.setValue(" ");
@ -270,17 +269,18 @@ var ITAF = {
# Autoland Logic
if (Output.latTemp == 2) {
if (Position.gearAglFtTemp <= 150) {
if (Position.gearAglFtTemp <= 50) { # ALIGN
me.setLatMode(4);
}
}
if (Output.vertTemp == 2) {
if (Position.gearAglFtTemp <= 300 and Position.gearAglFtTemp >= 5) {
if (Position.gearAglFtTemp <= 400 and Position.gearAglFtTemp >= 5) {
Text.vert.setValue("LAND");
}
if (Position.gearAglFtTemp <= 100 and Position.gearAglFtTemp >= 5) {
if (Position.gearAglFtTemp <= 100) { # switch to internal flare logic at 100 feet -- but on FMA at 50!
me.setVertMode(6);
}
}
} else if (Output.vertTemp == 6) {
if (Position.gearAglFtTemp <= 50 and Position.gearAglFtTemp >= 5) {
Text.vert.setValue("FLARE");
@ -304,9 +304,9 @@ var ITAF = {
Internal.altDiff = Internal.altTemp - Position.indicatedAltitudeFtTemp;
if (Output.vertTemp != 0 and Output.vertTemp != 2 and Output.vertTemp != 6 and Output.vertTemp != 9) {
Internal.captVS = math.clamp(math.round(abs(Internal.vs.getValue()) / 5, 100), 50, 2500); # Capture limits
Internal.captVs = math.clamp(math.round(abs(Internal.vs.getValue()) / 5, 100), 50, 2500); # Capture limits
Custom.apFdOn = Output.ap1Temp or Output.ap2Temp or Output.fd1.getBoolValue() or Output.fd2.getBoolValue();
if (abs(Internal.altDiff) <= Internal.captVS and !Gear.wow1Temp and !Gear.wow2Temp and Custom.apFdOn) {
if (abs(Internal.altDiff) <= Internal.captVs and !Gear.wow1Temp and !Gear.wow2Temp and Custom.apFdOn) {
if (Internal.altTemp >= Position.indicatedAltitudeFtTemp and Internal.vsTemp >= -25) { # Don't capture if we are going the wrong way
me.setVertMode(3);
} else if (Internal.altTemp < Position.indicatedAltitudeFtTemp and Internal.vsTemp <= 25) { # Don't capture if we are going the wrong way
@ -317,14 +317,15 @@ var ITAF = {
# Altitude Hold Min/Max Reset
if (Internal.altCaptureActive) {
if (abs(Internal.altDiff) <= 25) {
if (abs(Internal.altDiff) <= 20) {
me.resetClimbRateLim();
Text.vert.setValue("ALT HLD");
}
}
# Thrust Mode Selector
if (Output.athr.getBoolValue() and Output.vertTemp != 7 and (Output.ap1Temp or Output.ap2Temp) and Position.gearAglFt.getValue() <= 18 and (Output.vertTemp == 2 or Output.vertTemp == 6)) {
if (Output.athr.getBoolValue() and Output.vertTemp != 7 and (Output.ap1Temp or Output.ap2Temp) and Position.gearAglFt.getValue() <= 30 and (Output.vertTemp == 2 or Output.vertTemp == 6)) {
# Manual says 40 feet -- but video reference shows 30!
Output.thrMode.setValue(1);
Text.thr.setValue("RETARD");
} else if (Output.vertTemp == 4) {
@ -366,16 +367,15 @@ var ITAF = {
# Misc
if (Output.ap1Temp == 1 or Output.ap2Temp == 1) { # Trip AP off
if (abs(Control.aileron.getValue()) >= 0.2 or abs(Control.elevator.getValue()) >= 0.2 or abs(Control.rudder.getValue()) >= 0.2) {
if (abs(Controls.aileron.getValue()) >= 0.2 or abs(Controls.elevator.getValue()) >= 0.2 or abs(Controls.rudder.getValue()) >= 0.2) {
fcu.apOff("hard", 0);
}
}
},
slowLoop: func() {
Input.bankLimitSWTemp = Input.bankLimitSW.getValue();
Velocities.trueAirspeedKtTemp = Velocities.trueAirspeedKt.getValue();
FPLN.activeTemp = FPLN.active.getValue();
FPLN.currentWPTemp = FPLN.currentWP.getValue();
FPLN.currentWpTemp = FPLN.currentWp.getValue();
# Bank Limit
if (Velocities.trueAirspeedKtTemp >= 420) {
@ -383,7 +383,7 @@ var ITAF = {
} else if (Velocities.trueAirspeedKtTemp >= 340) {
Internal.bankLimitAuto = 20;
} else {
Internal.bankLimitAuto = 25;
Internal.bankLimitAuto = 30;
}
Internal.bankLimit.setValue(Internal.bankLimitAuto);
@ -397,14 +397,14 @@ var ITAF = {
# Waypoint Advance Logic
if (flightPlanController.num[2].getValue() > 0 and FPLN.activeTemp == 1) {
if ((FPLN.currentWPTemp + 1) < flightPlanController.num[2].getValue()) {
if ((FPLN.currentWpTemp + 1) < flightPlanController.num[2].getValue()) {
Velocities.groundspeedMps = Velocities.groundspeedKt.getValue() * 0.5144444444444;
FPLN.wpFlyFrom = FPLN.currentWPTemp;
FPLN.wpFlyFrom = FPLN.currentWpTemp;
if (FPLN.wpFlyFrom < 0) {
FPLN.wpFlyFrom = 0;
}
FPLN.currentCourse = fmgc.wpCourse[2][FPLN.wpFlyFrom].getValue();
FPLN.wpFlyTo = FPLN.currentWPTemp + 1;
FPLN.wpFlyTo = FPLN.currentWpTemp + 1;
FPLN.nextCourse = fmgc.wpCourse[2][FPLN.wpFlyTo].getValue();
FPLN.maxBankLimit = Internal.bankLimit.getValue();
@ -430,12 +430,18 @@ var ITAF = {
if (FPLN.wp0Dist.getValue() <= FPLN.turnDist and !Gear.wow1.getBoolValue()) {
flightPlanController.autoSequencing();
}
#if (FPLN.wp0Dist.getValue() <= FPLN.turnDist and !Gear.wow1.getBoolValue() and fmgc.flightPlanController.flightplans[2].getWP(FPLN.currentWpTemp).fly_type == "flyBy") {
# flightPlanController.autoSequencing();
#} elsif (FPLN.wp0Dist.getValue() <= 0.1) {
# flightPlanController.autoSequencing();
#}
}
}
},
ap1Master: func(s) {
if (s == 1) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and Misc.acEss.getValue() >= 110 and Misc.fbwLaw.getValue() == 0 and Position.gearAglFt.getValue() >= 100) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and systems.ELEC.Bus.acEss.getValue() >= 110 and Misc.fbwLaw.getValue() == 0 and Position.gearAglFt.getValue() >= 100) {
me.revertBasicMode();
Output.ap1.setBoolValue(1);
Output.latTemp = Output.lat.getValue();
@ -456,7 +462,7 @@ var ITAF = {
},
ap2Master: func(s) {
if (s == 1) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and Misc.acEss.getValue() >= 110 and Misc.fbwLaw.getValue() == 0 and Position.gearAglFt.getValue() >= 100) {
if (Output.vert.getValue() != 6 and !Gear.wow1.getBoolValue() and !Gear.wow2.getBoolValue() and systems.ELEC.Bus.acEss.getValue() >= 110 and Misc.fbwLaw.getValue() == 0 and Position.gearAglFt.getValue() >= 100) {
me.revertBasicMode();
Output.ap2.setBoolValue(1);
Output.latTemp = Output.lat.getValue();
@ -486,7 +492,7 @@ var ITAF = {
},
athrMaster: func(s) {
if (s == 1) {
if (Misc.acEss.getValue() >= 110) {
if (systems.ELEC.Bus.acEss.getValue() >= 110) {
Output.athr.setBoolValue(1);
Custom.ThrLock.setValue(0);
Custom.Sound.enableAthrOff = 1;
@ -558,7 +564,7 @@ var ITAF = {
Output.lnavArm.setBoolValue(0);
Output.locArm.setBoolValue(0);
Output.apprArm.setBoolValue(0);
me.syncHDG();
me.syncHdg();
Output.lat.setValue(0);
Custom.showHdg.setBoolValue(1);
Text.lat.setValue("HDG");
@ -603,7 +609,7 @@ var ITAF = {
me.armTextCheck();
}
} else if (n == 3) {
me.syncHDG();
me.syncHdg();
Output.lnavArm.setBoolValue(0);
Custom.showHdg.setBoolValue(1);
me.armTextCheck();
@ -618,7 +624,7 @@ var ITAF = {
Output.vert.setValue(0);
me.resetClimbRateLim();
Text.vert.setValue("ALT HLD");
me.syncALT();
me.syncAlt();
me.armTextCheck();
} else if (n == 1) { # V/S
if (abs(Input.altDiff) >= 25) {
@ -627,7 +633,7 @@ var ITAF = {
Output.apprArm.setBoolValue(0);
Output.vert.setValue(1);
Text.vert.setValue("V/S");
me.syncVS();
me.syncVs();
me.armTextCheck();
} else {
Output.apprArm.setBoolValue(0);
@ -671,7 +677,7 @@ var ITAF = {
Output.apprArm.setBoolValue(0);
Output.vert.setValue(5);
Text.vert.setValue("FPA");
me.syncFPA();
me.syncFpa();
me.armTextCheck();
} else {
Output.apprArm.setBoolValue(0);
@ -796,29 +802,29 @@ var ITAF = {
setClimbRateLim: func() {
Internal.vsTemp = Internal.vs.getValue();
if (Internal.alt.getValue() >= Position.indicatedAltitudeFt.getValue()) {
Internal.maxVS.setValue(math.round(Internal.vsTemp));
Internal.minVS.setValue(-500);
Internal.maxVs.setValue(math.round(Internal.vsTemp));
Internal.minVs.setValue(-500);
} else {
Internal.maxVS.setValue(500);
Internal.minVS.setValue(math.round(Internal.vsTemp));
Internal.maxVs.setValue(500);
Internal.minVs.setValue(math.round(Internal.vsTemp));
}
},
resetClimbRateLim: func() {
Internal.minVS.setValue(-500);
Internal.maxVS.setValue(500);
Internal.minVs.setValue(-500);
Internal.maxVs.setValue(500);
},
takeoffGoAround: func() {
Output.vertTemp = Output.vert.getValue();
if ((Output.vertTemp == 2 or Output.vertTemp == 6) and Velocities.indicatedAirspeedKt.getValue() >= 80) {
me.setLatMode(3);
me.setVertMode(7); # Must be before kicking AP off
Text.vert.setValue("G/A CLB");
Input.ktsMach.setBoolValue(0);
me.syncKtsGa();
if (Gear.wow1.getBoolValue() or Gear.wow2.getBoolValue()) {
me.ap1Master(0);
me.ap2Master(0);
}
me.setLatMode(3);
me.setVertMode(7);
Text.vert.setValue("G/A CLB");
Input.ktsMach.setBoolValue(0);
me.syncIAS();
} else if (Gear.wow1Temp or Gear.wow2Temp) {
me.athrMaster(1);
if (Output.lat.getValue() != 5) { # Don't accidently disarm LNAV
@ -839,23 +845,26 @@ var ITAF = {
Text.arm.setValue(" ");
}
},
syncIAS: func() {
Input.ias.setValue(math.clamp(math.round(Velocities.indicatedAirspeedKt.getValue()), 100, 350));
syncKts: func() {
Input.kts.setValue(math.clamp(math.round(Velocities.indicatedAirspeedKt.getValue()), 100, 350));
},
syncKtsGa: func() { # Same as syncKts, except doesn't go below V2
Input.kts.setValue(math.clamp(math.round(Velocities.indicatedAirspeedKt.getValue()), FMGCInternal.v2, 350));
},
syncMach: func() {
Input.mach.setValue(math.clamp(math.round(Velocities.indicatedMach.getValue(), 0.001), 0.5, 0.82));
},
syncHDG: func() {
syncHdg: func() {
Input.hdg.setValue(math.round(Internal.hdgPredicted.getValue())); # Switches to track automatically
},
syncALT: func() {
syncAlt: func() {
Input.alt.setValue(math.clamp(math.round(Internal.altPredicted.getValue(), 100), 0, 50000));
Internal.alt.setValue(math.clamp(math.round(Internal.altPredicted.getValue(), 100), 0, 50000));
},
syncVS: func() {
syncVs: func() {
Input.vs.setValue(math.clamp(math.round(Internal.vs.getValue(), 100), -6000, 6000));
},
syncFPA: func() {
syncFpa: func() {
Input.fpa.setValue(math.clamp(math.round(Internal.fpa.getValue(), 0.1), -9.9, 9.9));
},
# Custom Stuff Below
@ -972,7 +981,7 @@ setlistener("/it-autoflight/input/kts-mach", func {
if (Input.ktsMach.getBoolValue()) {
ITAF.syncMach();
} else {
ITAF.syncIAS();
ITAF.syncKts();
}
}, 0, 0);
@ -1018,12 +1027,12 @@ setlistener("/sim/signals/fdm-initialized", func {
# For Canvas Nav Display.
setlistener("/it-autoflight/input/hdg", func {
setprop("autopilot/settings/heading-bug-deg", getprop("it-autoflight/input/hdg"));
});
setprop("/autopilot/settings/heading-bug-deg", Input.hdg.getValue());
}, 0, 0);
setlistener("/it-autoflight/internal/alt", func {
setprop("autopilot/settings/target-altitude-ft", getprop("it-autoflight/internal/alt"));
});
setprop("/autopilot/settings/target-altitude-ft", Internal.alt.getValue());
}, 0, 0);
var loopTimer = maketimer(0.1, ITAF, ITAF.loop);
var slowLoopTimer = maketimer(1, ITAF, ITAF.slowLoop);

View file

@ -3,92 +3,166 @@
# Copyright (c) 2020 Josh Davidson (Octal450)
setprop("FMGC/internal/cruise-ft", 10000);
setprop("it-autoflight/internal/alt", 10000);
setprop("modes/pfd/fma/throttle-mode", " ");
setprop("modes/pfd/fma/pitch-mode", " ");
setprop("modes/pfd/fma/pitch-mode-armed", " ");
setprop("modes/pfd/fma/pitch-mode2-armed", " ");
setprop("modes/pfd/fma/roll-mode", " ");
setprop("modes/pfd/fma/roll-mode-armed", " ");
setprop("modes/pfd/fma/ap-mode", " ");
setprop("modes/pfd/fma/fd-mode", " ");
setprop("modes/pfd/fma/at-mode", " ");
setprop("modes/pfd/fma/athr-armed", 0);
setprop("modes/pfd/fma/throttle-mode-box", 0);
setprop("modes/pfd/fma/pitch-mode-box", 0);
setprop("modes/pfd/fma/pitch-mode-armed-box", 0);
setprop("modes/pfd/fma/pitch-mode2-armed-box", 0);
setprop("modes/pfd/fma/roll-mode-box", 0);
setprop("modes/pfd/fma/roll-mode-armed-box", 0);
setprop("modes/pfd/fma/ap-mode-box", 0);
setprop("modes/pfd/fma/fd-mode-box", 0);
setprop("modes/pfd/fma/athr-mode-box", 0);
setprop("modes/pfd/fma/throttle-mode-time", 0);
setprop("modes/pfd/fma/pitch-mode-time", 0);
setprop("modes/pfd/fma/pitch-mode-armed-time", 0);
setprop("modes/pfd/fma/pitch-mode2-armed-time", 0);
setprop("modes/pfd/fma/roll-mode-time", 0);
setprop("modes/pfd/fma/roll-mode-armed-time", 0);
setprop("modes/pfd/fma/ap-mode-time", 0);
setprop("modes/pfd/fma/fd-mode-time", 0);
setprop("modes/pfd/fma/athr-mode-time", 0);
setprop("modes/fcu/hdg-time", -45);
var at = nil;
var athr = nil;
var ap1 = nil;
var ap2 = nil;
var elapsedtime = nil;
var engout = nil;
var engstate1 = nil;
var engstate2 = nil;
var fd1 = nil;
var fd2 = nil;
var flx = nil;
var gear1 = nil;
var gear2 = nil;
var gs_defl = nil;
var latText = nil;
var MCPalt = nil;
var nav_defl = nil;
var newfd = nil;
var newarm = nil;
var newap = nil;
var newlat = nil;
var newvert = nil;
var newvert2arm = nil;
var newvertarm = nil;
var newthr = nil;
var state1 = nil;
var state2 = nil;
var thr = nil;
var thr1 = nil;
var thr2 = nil;
var trk = nil;
var vert = nil;
var vertText = nil;
setlistener("sim/signals/fdm-initialized", func {
var Modes = {
FCU: {
hdgTime: props.globals.initNode("/modes/fcu/hdg-time", -45, "DOUBLE")
},
PFD: {
FMA: {
athr: props.globals.initNode("/modes/pfd/fma/athr-armed", 0, "BOOL"),
athrBox: props.globals.initNode("/modes/pfd/fma/athr-armed-box", 0, "BOOL"),
athrMode: props.globals.initNode("/modes/pfd/fma/at-mode", " ", "STRING"),
athrModeBox: props.globals.initNode("/modes/pfd/fma/athr-mode-box", 0, "BOOL"),
apMode: props.globals.initNode("/modes/pfd/fma/ap-mode", " ", "STRING"),
apModeBox: props.globals.initNode("/modes/pfd/fma/ap-mode-box", 0, "BOOL"),
apModeTime: props.globals.initNode("/modes/pfd/fma/ap-mode-time", 0, "DOUBLE"),
athrModeTime: props.globals.initNode("/modes/pfd/fma/athr-mode-time", 0, "DOUBLE"),
fdMode: props.globals.initNode("/modes/pfd/fma/fd-mode", " ", "STRING"),
fdModeBox: props.globals.initNode("/modes/pfd/fma/fd-mode-box", 0, "BOOL"),
fdModeTime: props.globals.initNode("/modes/pfd/fma/fd-mode-time", 0, "DOUBLE"),
rollMode: props.globals.initNode("/modes/pfd/fma/roll-mode", " ", "STRING"),
rollModeBox: props.globals.initNode("/modes/pfd/fma/roll-mode-box", 0, "BOOL"),
rollModeArmed: props.globals.initNode("/modes/pfd/fma/roll-mode-armed", " ", "STRING"),
rollModeArmedBox: props.globals.initNode("/modes/pfd/fma/roll-mode-armed-box", 0, "BOOL"),
rollModeTime: props.globals.initNode("/modes/pfd/fma/roll-mode-time", 0, "DOUBLE"),
rollModeArmedTime: props.globals.initNode("/modes/pfd/fma/roll-mode-armed-time", 0, "DOUBLE"),
pitchMode: props.globals.initNode("/modes/pfd/fma/pitch-mode", " ", "STRING"),
pitchModeBox: props.globals.initNode("/modes/pfd/fma/pitch-mode-box", 0, "BOOL"),
pitchModeArmed: props.globals.initNode("/modes/pfd/fma/pitch-mode-armed", " ", "STRING"),
pitchModeArmedBox: props.globals.initNode("/modes/pfd/fma/pitch-mode-armed-box", 0, "BOOL"),
pitchMode2Armed: props.globals.initNode("/modes/pfd/fma/pitch-mode2-armed", " ", "STRING"),
pitchModeTime: props.globals.initNode("/modes/pfd/fma/pitch-mode-time", 0, "DOUBLE"),
pitchModeArmedTime: props.globals.initNode("/modes/pfd/fma/pitch-mode-armed-time", 0, "DOUBLE"),
pitchMode2ArmedTime: props.globals.initNode("/modes/pfd/fma/pitch-mode2-armed-time", 0, "DOUBLE"),
pitchMode2ArmedBox: props.globals.initNode("/modes/pfd/fma/pitch-mode2-armed-box", 0, "BOOL"),
throttle: props.globals.initNode("/modes/pfd/fma/throttle-mode", " ", "STRING"),
throttleModeBox: props.globals.initNode("/modes/pfd/fma/throttle-mode-box", 0, "BOOL"),
throttleModeTime: props.globals.initNode("/modes/pfd/fma/throttle-mode-time", 0, "DOUBLE"),
},
},
};
var init = func() {
Internal.alt.setValue(10000);
Modes.PFD.FMA.throttle.setValue(" ");
Modes.PFD.FMA.pitchMode.setValue(" ");
Modes.PFD.FMA.pitchModeArmed.setValue(" ");
Modes.PFD.FMA.pitchMode2Armed.setValue(" ");
Modes.PFD.FMA.rollMode.setValue(" ");
Modes.PFD.FMA.rollModeArmed.setValue(" ");
Modes.PFD.FMA.apMode.setValue(" ");
Modes.PFD.FMA.fdMode.setValue(" ");
Modes.PFD.FMA.athrMode.setValue(" ");
Modes.PFD.FMA.athr.setValue(0);
Modes.PFD.FMA.throttleModeBox.setValue(0);
Modes.PFD.FMA.pitchModeBox.setValue(0);
Modes.PFD.FMA.pitchModeArmedBox.setValue(0);
Modes.PFD.FMA.pitchMode2ArmedBox.setValue(0);
Modes.PFD.FMA.rollModeBox.setValue(0);
Modes.PFD.FMA.rollModeArmedBox.setValue(0);
Modes.PFD.FMA.apModeBox.setValue(0);
Modes.PFD.FMA.fdModeBox.setValue(0);
Modes.PFD.FMA.athrModeBox.setValue(0);
Modes.PFD.FMA.throttleModeTime.setValue(0);
Modes.PFD.FMA.pitchModeTime.setValue(0);
Modes.PFD.FMA.pitchModeArmedTime.setValue(0);
Modes.PFD.FMA.pitchMode2ArmedTime.setValue(0);
Modes.PFD.FMA.rollModeTime.setValue(0);
Modes.PFD.FMA.rollModeArmedTime.setValue(0);
Modes.PFD.FMA.apModeTime.setValue(0);
Modes.PFD.FMA.fdModeTime.setValue(0);
Modes.PFD.FMA.athrModeTime.setValue(0);
loopFMA.start();
});
};
# Master Thrust
var loopFMA = maketimer(0.05, func {
var state1 = getprop("systems/thrust/state1");
var state2 = getprop("systems/thrust/state2");
var newthr = getprop("modes/pfd/fma/throttle-mode");
var thr1 = getprop("controls/engines/engine[0]/throttle-pos");
var thr2 = getprop("controls/engines/engine[1]/throttle-pos");
state1 = pts.Systems.Thrust.state[0].getValue();
state2 = pts.Systems.Thrust.state[1].getValue();
thr1 = pts.Controls.Engines.Engine.throttlePos[0].getValue();
thr2 = pts.Controls.Engines.Engine.throttlePos[1].getValue();
newthr = Modes.PFD.FMA.throttle.getValue();
engout = pts.Systems.Thrust.engOut.getValue();
if (state1 == "TOGA" or state2 == "TOGA") {
if (newthr != " ") {
setprop("modes/pfd/fma/throttle-mode", " ");
Modes.PFD.FMA.throttle.setValue(" ");
}
} else if ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83)) {
if (newthr != " ") {
setprop("modes/pfd/fma/throttle-mode", " ");
Modes.PFD.FMA.throttle.setValue(" ");
}
} else if ((state1 == "MCT" or state2 == "MCT") and getprop("systems/thrust/eng-out") != 1) {
} else if ((state1 == "MCT" or state2 == "MCT") and !engout) {
if (newthr != " ") {
setprop("modes/pfd/fma/throttle-mode", " ");
Modes.PFD.FMA.throttle.setValue(" ");
}
} else if (((state1 == "MAN THR" and thr1 < 0.83) or (state2 == "MAN THR" and thr2 < 0.83)) and getprop("systems/thrust/eng-out") != 1) {
} else if (((state1 == "MAN THR" and thr1 < 0.83) or (state2 == "MAN THR" and thr2 < 0.83)) and !engout) {
if (newthr != " ") {
setprop("modes/pfd/fma/throttle-mode", " ");
Modes.PFD.FMA.throttle.setValue(" ");
}
} else {
if ((getprop("it-autoflight/output/vert") == 4) or (getprop("it-autoflight/output/vert") == 6) or (getprop("it-autoflight/output/vert") == 7) or (getprop("it-autoflight/output/vert") == 8)) {
if (getprop("it-autoflight/output/fd1") == 0 and getprop("it-autoflight/output/fd2") == 0 and getprop("it-autoflight/output/ap1") == 0 and getprop("it-autoflight/output/ap2") == 0) {
loopFMA_b();
} else {
var thr = getprop("it-autoflight/output/thr-mode");
vert = Output.vert.getValue();
if (vert == 4 or vert >= 6 or vert <= 8) {
if (Output.ap1.getBoolValue() or Output.ap2.getBoolValue() or Output.fd1.getBoolValue() or Output.fd2.getBoolValue()) {
thr = Output.thrMode.getValue();
if (thr == 0) {
loopFMA_b();
} else if (thr == 1) {
if (newthr != "THR IDLE") {
setprop("modes/pfd/fma/throttle-mode", "THR IDLE");
Modes.PFD.FMA.throttle.setValue("THR IDLE");
}
} else if (thr == 2) {
if (state1 == "MCT" or state2 == "MCT" and getprop("systems/thrust/eng-out") == 1) {
if (state1 == "MCT" or state2 == "MCT" and engout) {
if (newthr != "THR MCT") {
setprop("modes/pfd/fma/throttle-mode", "THR MCT");
Modes.PFD.FMA.throttle.setValue("THR MCT");
}
} else if (state1 == "CL" or state2 == "CL") {
if (newthr != "THR CLB") {
setprop("modes/pfd/fma/throttle-mode", "THR CLB");
Modes.PFD.FMA.throttle.setValue("THR CLB");
}
} else {
if (newthr != "THR LVR") {
setprop("modes/pfd/fma/throttle-mode", "THR LVR");
Modes.PFD.FMA.throttle.setValue("THR LVR");
}
}
}
} else {
loopFMA_b();
}
} else {
loopFMA_b();
@ -96,164 +170,161 @@ var loopFMA = maketimer(0.05, func {
}
# A/THR Armed/Active
if (getprop("it-autoflight/output/athr") == 1 and (state1 == "MAN THR" or state2 == "MAN THR" or state1 == "MCT" or state2 == "MCT" or state1 == "TOGA" or state2 == "TOGA") and getprop("systems/thrust/eng-out") != 1) {
if (getprop("modes/pfd/fma/athr-armed") != 1) {
setprop("modes/pfd/fma/athr-armed", 1);
athr = Output.athr.getValue();
if (athr and (state1 == "MAN THR" or state2 == "MAN THR" or state1 == "MCT" or state2 == "MCT" or state1 == "TOGA" or state2 == "TOGA") and engout != 1) {
if (!Modes.PFD.FMA.athr.getValue()) {
Modes.PFD.FMA.athr.setValue(1);
}
} else if (getprop("it-autoflight/output/athr") == 1 and ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83) or (state1 == "MCT" and getprop("controls/engines/thrust-limit") == "FLX") or
(state2 == "MCT" and getprop("controls/engines/thrust-limit") == "FLX") or state1 == "TOGA" or state2 == "TOGA") and getprop("systems/thrust/eng-out") == 1) {
if (getprop("modes/pfd/fma/athr-armed") != 1) {
setprop("modes/pfd/fma/athr-armed", 1);
} else if (athr and ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83) or (fadec.Thrust.thrustLimit.getValue() == "FLX" and (state1 == "MCT" or state2 == "MCT"))
or state1 == "TOGA" or state2 == "TOGA") and engout) {
if (!Modes.PFD.FMA.athr.getValue()) {
Modes.PFD.FMA.athr.setValue(1);
}
} else {
if (getprop("modes/pfd/fma/athr-armed") != 0) {
setprop("modes/pfd/fma/athr-armed", 0);
if (Modes.PFD.FMA.athr.getValue()) {
Modes.PFD.FMA.athr.setValue(0);
}
}
# SRS RWY Engagement
var flx = getprop("systems/thrust/lim-flex");
var lat = getprop("it-autoflight/mode/lat");
var newlat = getprop("modes/pfd/fma/roll-mode");
var vert = getprop("it-autoflight/mode/vert");
var newvert = getprop("modes/pfd/fma/pitch-mode");
var newvertarm = getprop("modes/pfd/fma/pitch-mode2-armed");
var thr1 = getprop("controls/engines/engine[0]/throttle-pos");
var thr2 = getprop("controls/engines/engine[1]/throttle-pos");
var wow = getprop("gear/gear[0]/wow");
var engstate1 = getprop("engines/engine[0]/state");
var engstate2 = getprop("engines/engine[1]/state");
flx = fadec.Thrust.limFlex.getValue();
newlat = Modes.PFD.FMA.rollMode.getValue();
engstate1 = pts.Engines.Engine.state[0].getValue();
engstate2 = pts.Engines.Engine.state[1].getValue();
if (((state1 == "TOGA" or state2 == "TOGA") or (flx == 1 and (state1 == "MCT" or state2 == "MCT")) or (flx == 1 and ((state1 == "MAN THR" and thr1 >= 0.83) or (state2 == "MAN THR" and thr2 >= 0.83)))) and (engstate1 == 3 or engstate2 == 3)) {
# RWY Engagement would go here, but automatic ILS selection is not simulated yet.
if (wow and getprop("FMGC/internal/v2-set") == 1 and getprop("it-autoflight/output/vert") != 7) {
gear1 = pts.Gear.wow[0].getValue();
if (gear1 and FMGCInternal.v2set and Output.vert.getValue() != 7) {
ITAF.setVertMode(7);
setprop("it-autoflight/mode/vert", "T/O CLB");
Text.vert.setValue("T/O CLB");
}
} else {
var gear1 = getprop("gear/gear[1]/wow");
var gear2 = getprop("gear/gear[2]/wow");
if (getprop("it-autoflight/input/lat") == 5 and (gear1 or gear2)) {
gear1 = pts.Gear.wow[0].getValue();
gear2 = pts.Gear.wow[2].getValue();
if (Input.lat.getValue() == 5 and (gear1 or gear2)) {
ITAF.setLatMode(9);
}
if (getprop("it-autoflight/output/vert") == 7 and (gear1 or gear2)) {
if (Input.vert.getValue() == 7 and (gear1 or gear2)) {
ITAF.setVertMode(9);
}
}
var trk = getprop("it-autoflight/custom/trk-fpa");
if (lat == "HDG" and trk == 0) {
trk = Custom.trkFpa.getValue();
latText = Text.lat.getValue();
if (latText == "HDG" and trk == 0) {
if (newlat != "HDG") {
setprop("modes/pfd/fma/roll-mode", "HDG");
Modes.PFD.FMA.rollMode.setValue("HDG");
}
} else if (lat == "HDG" and trk == 1) {
} else if (latText == "HDG" and trk == 1) {
if (newlat != "TRACK") {
setprop("modes/pfd/fma/roll-mode", "TRACK");
Modes.PFD.FMA.rollMode.setValue("TRACK");
}
}
# Boxes
var elapsedtime = getprop("sim/time/elapsed-sec");
if (getprop("modes/pfd/fma/ap-mode-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/ap-mode-box", 1);
elapsedtime = pts.Sim.Time.elapsedSec.getValue();
if (Modes.PFD.FMA.apModeTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.apModeBox.setValue(1);
} else {
setprop("modes/pfd/fma/ap-mode-box", 0);
Modes.PFD.FMA.apModeBox.setValue(0);
}
if (getprop("modes/pfd/fma/fd-mode-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/fd-mode-box", 1);
if (Modes.PFD.FMA.fdModeTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.fdModeBox.setValue(1);
} else {
setprop("modes/pfd/fma/fd-mode-box", 0);
Modes.PFD.FMA.fdModeBox.setValue(0);
}
if (getprop("modes/pfd/fma/athr-mode-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/athr-mode-box", 1);
if (Modes.PFD.FMA.athrModeTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.athrModeBox.setValue(1);
} else {
setprop("modes/pfd/fma/athr-mode-box", 0);
Modes.PFD.FMA.athrModeBox.setValue(0);
}
if (getprop("modes/pfd/fma/throttle-mode-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/throttle-mode-box", 1);
if (Modes.PFD.FMA.throttleModeTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.throttleModeBox.setValue(1);
} else {
setprop("modes/pfd/fma/throttle-mode-box", 0);
Modes.PFD.FMA.throttleModeBox.setValue(0);
}
if (getprop("modes/pfd/fma/roll-mode-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/roll-mode-box", 1);
if (Modes.PFD.FMA.rollModeTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.rollModeBox.setValue(1);
} else {
setprop("modes/pfd/fma/roll-mode-box", 0);
Modes.PFD.FMA.rollModeBox.setValue(0);
}
if (getprop("modes/pfd/fma/pitch-mode-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/pitch-mode-box", 1);
if (Modes.PFD.FMA.pitchModeTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.pitchModeBox.setValue(1);
} else {
setprop("modes/pfd/fma/pitch-mode-box", 0);
Modes.PFD.FMA.pitchModeBox.setValue(0);
}
if (getprop("modes/pfd/fma/roll-mode-armed-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/roll-mode-armed-box", 1);
if (Modes.PFD.FMA.rollModeArmedTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.rollModeArmedBox.setValue(1);
} else {
setprop("modes/pfd/fma/roll-mode-armed-box", 0);
Modes.PFD.FMA.rollModeArmedBox.setValue(0);
}
if (getprop("modes/pfd/fma/pitch-mode-armed-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/pitch-mode-armed-box", 1);
if (Modes.PFD.FMA.pitchModeArmedTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.pitchModeArmedBox.setValue(1);
} else {
setprop("modes/pfd/fma/pitch-mode-armed-box", 0);
Modes.PFD.FMA.pitchModeArmedBox.setValue(0);
}
if (getprop("modes/pfd/fma/pitch-mode2-armed-time") + 10 >= elapsedtime) {
setprop("modes/pfd/fma/pitch-mode2-armed-box", 1);
if (Modes.PFD.FMA.pitchMode2ArmedTime.getValue() + 10 >= elapsedtime) {
Modes.PFD.FMA.pitchMode2ArmedBox.setValue(1);
} else {
setprop("modes/pfd/fma/pitch-mode2-armed-box", 0);
Modes.PFD.FMA.pitchMode2ArmedBox.setValue(0);
}
});
var loopFMA_b = func {
var newthr = getprop("modes/pfd/fma/throttle-mode");
if (getprop("it-autoflight/input/kts-mach") == 0) {
newthr = Modes.PFD.FMA.throttle.getValue();
if (!Input.ktsMach.getValue()) {
if (newthr != "SPEED") {
setprop("modes/pfd/fma/throttle-mode", "SPEED");
Modes.PFD.FMA.throttle.setValue("SPEED");
}
} else if (getprop("it-autoflight/input/kts-mach") == 1) {
} else {
if (newthr != "MACH") {
setprop("modes/pfd/fma/throttle-mode", "MACH");
Modes.PFD.FMA.throttle.setValue("MACH");
}
}
}
# Master Lateral
setlistener("/it-autoflight/mode/lat", func {
var lat = getprop("it-autoflight/mode/lat");
var newlat = getprop("modes/pfd/fma/roll-mode");
if (lat == "LNAV") {
latText = Text.lat.getValue();
newlat = Modes.PFD.FMA.rollMode.getValue();
if (latText == "LNAV") {
if (newlat != "NAV") {
setprop("modes/pfd/fma/roll-mode", "NAV");
Modes.PFD.FMA.rollMode.setValue("NAV");
}
} else if (lat == "LOC") {
} else if (latText == "LOC") {
if (newlat != "LOC*" and newlat != "LOC") {
setprop("modes/pfd/fma/roll-mode", "LOC*");
Modes.PFD.FMA.rollMode.setValue("LOC*");
locupdate.start();
}
} else if (lat == "ALGN") {
} else if (latText == "ALGN") {
if (newlat != " ") {
setprop("modes/pfd/fma/roll-mode", " ");
Modes.PFD.FMA.rollMode.setValue(" ");
}
} else if (lat == "RLOU") {
} else if (latText == "RLOU") {
if (newlat != " ") {
setprop("modes/pfd/fma/roll-mode", " ");
Modes.PFD.FMA.rollMode.setValue(" ");
}
} else if (lat == "T/O") {
} else if (latText == "T/O") {
if (newlat != "RWY") {
setprop("modes/pfd/fma/roll-mode", "RWY");
Modes.PFD.FMA.rollMode.setValue("RWY");
}
} else if (lat == " ") {
} else if (latText == " ") {
if (newlat != " ") {
setprop("modes/pfd/fma/roll-mode", " ");
Modes.PFD.FMA.rollMode.setValue(" ");
}
}
});
var locupdate = maketimer(0.5, func {
var lat = getprop("it-autoflight/mode/lat");
var newlat = getprop("modes/pfd/fma/roll-mode");
var nav_defl = getprop("instrumentation/nav[0]/heading-needle-deflection-norm");
if (lat == "LOC") {
latText = Text.lat.getValue();
newlat = Modes.PFD.FMA.rollMode.getValue();
nav_defl = pts.Instrumentation.Nav.locDeflection.getValue();
if (latText == "LOC") {
if (nav_defl > -0.06 and nav_defl < 0.06) {
locupdate.stop();
if (newlat != "LOC") {
setprop("modes/pfd/fma/roll-mode", "LOC");
Modes.PFD.FMA.rollMode.setValue("LOC");
}
}
}
@ -261,265 +332,250 @@ var locupdate = maketimer(0.5, func {
# Master Vertical
setlistener("/it-autoflight/mode/vert", func {
var vert = getprop("it-autoflight/mode/vert");
var newvert = getprop("modes/pfd/fma/pitch-mode");
var newvertarm = getprop("modes/pfd/fma/pitch-mode2-armed");
if (vert == "ALT HLD") {
vertText = Text.vert.getValue();
newvert = Modes.PFD.FMA.pitchMode.getValue();
newvertarm = Modes.PFD.FMA.pitchMode2Armed.getValue();
if (vertText == "ALT HLD") {
altvert();
if (newvertarm != " ") {
setprop("modes/pfd/fma/pitch-mode2-armed", " ");
Modes.PFD.FMA.pitchMode2Armed.setValue(" ");
}
} else if (vert == "ALT CAP") {
} else if (vertText == "ALT CAP") {
altvert();
if (newvertarm != " ") {
setprop("modes/pfd/fma/pitch-mode2-armed", " ");
Modes.PFD.FMA.pitchMode2Armed.setValue(" ");
}
} else if (vert == "V/S") {
} else if (vertText == "V/S") {
if (newvert != "V/S") {
setprop("modes/pfd/fma/pitch-mode", "V/S");
Modes.PFD.FMA.pitchMode.setValue("V/S");
}
if (newvertarm != "ALT") {
setprop("modes/pfd/fma/pitch-mode2-armed", "ALT");
Modes.PFD.FMA.pitchMode2Armed.setValue("ALT");
}
} else if (vert == "G/S") {
} else if (vertText == "G/S") {
if (newvert != "G/S*" and newvert != "G/S") {
setprop("modes/pfd/fma/pitch-mode", "G/S*");
Modes.PFD.FMA.pitchMode.setValue("G/S*");
gsupdate.start();
}
if (newvertarm != " ") {
setprop("modes/pfd/fma/pitch-mode2-armed", " ");
Modes.PFD.FMA.pitchMode2Armed.setValue(" ");
}
} else if (vert == "SPD CLB") {
} else if (vertText == "SPD CLB") {
if (newvert != "OP CLB") {
setprop("modes/pfd/fma/pitch-mode", "OP CLB");
Modes.PFD.FMA.pitchMode.setValue("OP CLB");
}
if (newvertarm != "ALT") {
setprop("modes/pfd/fma/pitch-mode2-armed", "ALT");
Modes.PFD.FMA.pitchMode2Armed.setValue("ALT");
}
} else if (vert == "SPD DES") {
} else if (vertText == "SPD DES") {
if (newvert != "OP DES") {
setprop("modes/pfd/fma/pitch-mode", "OP DES");
Modes.PFD.FMA.pitchMode.setValue("OP DES");
}
if (newvertarm != "ALT") {
setprop("modes/pfd/fma/pitch-mode2-armed", "ALT");
Modes.PFD.FMA.pitchMode2Armed.setValue("ALT");
}
} else if (vert == "FPA") {
} else if (vertText == "FPA") {
if (newvert != "FPA") {
setprop("modes/pfd/fma/pitch-mode", "FPA");
Modes.PFD.FMA.pitchMode.setValue("FPA");
}
if (newvertarm != "ALT") {
setprop("modes/pfd/fma/pitch-mode2-armed", "ALT");
Modes.PFD.FMA.pitchMode2Armed.setValue("ALT");
}
} else if (vert == "LAND") {
} else if (vertText == "LAND") {
if (newvert != "LAND") {
setprop("modes/pfd/fma/pitch-mode", "LAND");
Modes.PFD.FMA.pitchMode.setValue("LAND");
}
} else if (vert == "FLARE") {
} else if (vertText == "FLARE") {
if (newvert != "FLARE") {
setprop("modes/pfd/fma/pitch-mode", "FLARE");
Modes.PFD.FMA.pitchMode.setValue("FLARE");
}
} else if (vert == "ROLLOUT") {
} else if (vertText == "ROLLOUT") {
if (newvert != "ROLL OUT") {
setprop("modes/pfd/fma/pitch-mode", "ROLL OUT");
Modes.PFD.FMA.pitchMode.setValue("ROLL OUT");
}
} else if (vert == "T/O CLB") {
} else if (vertText == "T/O CLB") {
if (newvert != "SRS") {
setprop("modes/pfd/fma/pitch-mode", "SRS");
Modes.PFD.FMA.pitchMode.setValue("SRS");
}
updatePitchArm2();
} else if (vert == "G/A CLB") {
} else if (vertText == "G/A CLB") {
if (newvert != "SRS") {
setprop("modes/pfd/fma/pitch-mode", "SRS");
Modes.PFD.FMA.pitchMode.setValue("SRS");
}
if (newvertarm != "ALT") {
setprop("modes/pfd/fma/pitch-mode2-armed", "ALT");
Modes.PFD.FMA.pitchMode2Armed.setValue("ALT");
}
} else if (vert == " ") {
} else if (vertText == " ") {
if (newvert != " ") {
setprop("modes/pfd/fma/pitch-mode", " ");
Modes.PFD.FMA.pitchMode.setValue(" ");
}
updatePitchArm2();
}
altvert();
});
setlistener("/FMGC/internal/v2-set", func {
updatePitchArm2();
});
var updatePitchArm2 = func {
var newvertarm = getprop("modes/pfd/fma/pitch-mode2-armed");
if (newvertarm != "CLB" and getprop("FMGC/internal/v2-set") == 1) {
setprop("modes/pfd/fma/pitch-mode2-armed", "CLB");
} else if (newvertarm != " " and getprop("FMGC/internal/v2-set") != 1) {
setprop("modes/pfd/fma/pitch-mode2-armed", " ");
newvertarm = Modes.PFD.FMA.pitchMode2Armed.getValue();
if (newvertarm != "CLB" and FMGCInternal.v2set) {
Modes.PFD.FMA.pitchMode2Armed.setValue("CLB");
} else if (newvertarm != " " and !FMGCInternal.v2set) {
Modes.PFD.FMA.pitchMode2Armed.setValue(" ");
}
}
var gsupdate = maketimer(0.5, func {
var vert = getprop("it-autoflight/mode/vert");
var newvert = getprop("modes/pfd/fma/pitch-mode");
var gs_defl = getprop("instrumentation/nav[0]/gs-needle-deflection-norm");
if (vert == "G/S") {
vertText = Text.vert.getValue();
newvert = Modes.PFD.FMA.pitchMode.getValue();
gs_defl = pts.Instrumentation.Nav.gsDeflection.getValue();
if (vertText == "G/S") {
if (gs_defl > -0.06 and gs_defl < 0.06) {
gsupdate.stop();
if (newvert != "G/S") {
setprop("modes/pfd/fma/pitch-mode", "G/S");
Modes.PFD.FMA.pitchMode.setValue("G/S");
}
}
}
});
var altvert = func {
var FMGCalt = getprop("FMGC/internal/cruise-ft");
var MCPalt = getprop("it-autoflight/internal/alt");
var ALTdif = abs(FMGCalt - MCPalt);
var vert = getprop("it-autoflight/mode/vert");
var newvert = getprop("modes/pfd/fma/pitch-mode");
if (ALTdif <= 20) {
if (vert == "ALT HLD") {
MCPalt = Internal.alt.getValue();
vertText = Text.vert.getValue();
newvert = Modes.PFD.FMA.pitchMode.getValue();
if (abs(fmgc.FMGCInternal.crzFt - MCPalt) <= 20) {
if (vertText == "ALT HLD") {
if (newvert != "ALT CRZ") {
setprop("modes/pfd/fma/pitch-mode", "ALT CRZ");
Modes.PFD.FMA.pitchMode.setValue("ALT CRZ");
}
} else if (vert == "ALT CAP") {
} else if (vertText == "ALT CAP") {
if (newvert != "ALT CRZ*") {
setprop("modes/pfd/fma/pitch-mode", "ALT CRZ*");
Modes.PFD.FMA.pitchMode.setValue("ALT CRZ*");
}
}
} else {
if (vert == "ALT HLD") {
if (vertText == "ALT HLD") {
if (newvert != "ALT") {
setprop("modes/pfd/fma/pitch-mode", "ALT");
Modes.PFD.FMA.pitchMode.setValue("ALT");
}
} else if (vert == "ALT CAP") {
} else if (vertText == "ALT CAP") {
if (newvert != "ALT*") {
setprop("modes/pfd/fma/pitch-mode", "ALT*");
Modes.PFD.FMA.pitchMode.setValue("ALT*");
}
}
}
}
setlistener("/FMGC/internal/cruise-ft", altvert);
# Arm HDG or NAV
setlistener("/it-autoflight/mode/arm", func {
var arm = getprop("it-autoflight/mode/arm");
var newarm = getprop("modes/pfd/fma/roll-mode-armed");
arm = Text.arm.getValue();
newarm = Modes.PFD.FMA.rollModeArmed.getValue();
if (arm == "HDG") {
if (newarm != "HDG") {
setprop("modes/pfd/fma/roll-mode-armed", " ");
Modes.PFD.FMA.rollModeArmed.setValue(" ");
}
} else if (arm == "LNV") {
if (newarm != "NAV") {
setprop("modes/pfd/fma/roll-mode-armed", "NAV");
Modes.PFD.FMA.rollModeArmed.setValue("NAV");
}
} else if (arm == " ") {
if (newarm != " ") {
setprop("modes/pfd/fma/roll-mode-armed", " ");
Modes.PFD.FMA.rollModeArmed.setValue(" ");
}
}
});
# Arm LOC
setlistener("/it-autoflight/output/loc-armed", func {
var loca = getprop("it-autoflight/output/loc-armed");
var newarm = getprop("modes/pfd/fma/roll-mode-armed");
if (loca) {
newarm = Modes.PFD.FMA.rollModeArmed.getValue();
if (Output.locArm.getValue()) {
if (newarm != "LOC") {
setprop("modes/pfd/fma/roll-mode-armed", "LOC");
Modes.PFD.FMA.rollModeArmed.setValue("LOC");
}
} else {
if (newarm != " ") {
setprop("modes/pfd/fma/roll-mode-armed", " ");
Modes.PFD.FMA.rollModeArmed.setValue(" ");
}
}
});
# Arm G/S
setlistener("/it-autoflight/output/appr-armed", func {
var appa = getprop("it-autoflight/output/appr-armed");
var newvert2arm = getprop("modes/pfd/fma/pitch-mode-armed");
if (appa) {
newvert2arm = Modes.PFD.FMA.pitchModeArmed.getValue();
if (Output.apprArm.getValue()) {
if (newvert2arm != "G/S") {
setprop("modes/pfd/fma/pitch-mode-armed", "G/S");
Modes.PFD.FMA.pitchModeArmed.setValue("G/S");
}
} else {
if (newvert2arm != " ") {
setprop("modes/pfd/fma/pitch-mode-armed", " ");
Modes.PFD.FMA.pitchModeArmed.setValue(" ");
}
}
});
# AP
var ap = func {
var ap1 = getprop("it-autoflight/output/ap1");
var ap2 = getprop("it-autoflight/output/ap2");
var newap = getprop("modes/pfd/fma/ap-mode");
ap1 = Output.ap1.getValue();
ap2 = Output.ap2.getValue();
newap = Modes.PFD.FMA.apMode.getValue();
if (ap1 and ap2 and newap != "AP1+2") {
setprop("modes/pfd/fma/ap-mode", "AP 1+2");
Modes.PFD.FMA.apMode.setValue("AP 1+2");
} else if (ap1 and !ap2 and newap != "AP 1") {
setprop("modes/pfd/fma/ap-mode", "AP 1");
Modes.PFD.FMA.apMode.setValue("AP 1");
} else if (ap2 and !ap1 and newap != "AP 2") {
setprop("modes/pfd/fma/ap-mode", "AP 2");
Modes.PFD.FMA.apMode.setValue("AP 2");
} else if (!ap1 and !ap2) {
setprop("modes/pfd/fma/ap-mode", " ");
Modes.PFD.FMA.apMode.setValue(" ");
}
}
# FD
var fd = func {
var fd1 = getprop("it-autoflight/output/fd1");
var fd2 = getprop("it-autoflight/output/fd2");
var newfd = getprop("modes/pfd/fma/fd-mode");
fd1 = Output.fd1.getValue();
fd2 = Output.fd2.getValue();
newfd = Modes.PFD.FMA.fdMode.getValue();
if (fd1 and fd2 and newfd != "1FD2") {
setprop("modes/pfd/fma/fd-mode", "1 FD 2");
Modes.PFD.FMA.fdMode.setValue("1 FD 2");
} else if (fd1 and !fd2 and newfd != "1 FD -") {
setprop("modes/pfd/fma/fd-mode", "1 FD -");
Modes.PFD.FMA.fdMode.setValue("1 FD -");
} else if (fd2 and !fd1 and newfd != "- FD 2") {
setprop("modes/pfd/fma/fd-mode", "- FD 2");
Modes.PFD.FMA.fdMode.setValue("- FD 2");
} else if (!fd1 and !fd2) {
setprop("modes/pfd/fma/fd-mode", " ");
Modes.PFD.FMA.fdMode.setValue(" ");
}
}
# AT
var at = func {
var at = getprop("it-autoflight/output/athr");
var newat = getprop("modes/pfd/fma/at-mode");
if (at and newat != "A/THR") {
setprop("modes/pfd/fma/at-mode", "A/THR");
var atMode = func {
at = Output.athr.getValue();
if (at and Modes.PFD.FMA.athrMode.getValue() != "A/THR") {
Modes.PFD.FMA.athrMode.setValue("A/THR");
} else if (!at) {
setprop("modes/pfd/fma/at-mode", " ");
Modes.PFD.FMA.athrMode.setValue(" ");
}
}
var boxchk = func {
if ((getprop("it-autoflight/output/ap1") or getprop("it-autoflight/output/ap2") or getprop("it-autoflight/output/fd1") or getprop("it-autoflight/output/fd2")) and getprop("it-autoflight/output/fma-pwr") == 0) {
setprop("it-autoflight/input/lat", 3);
if ((Output.ap1.getValue() or Output.ap2.getValue() or Output.fd1.getValue() or Output.fd2.getValue()) and !Custom.Output.fmaPower.getValue()) {
Input.lat.setValue(3);
boxchk_b();
}
}
var boxchk_b = func {
var newlat = getprop("modes/pfd/fma/roll-mode");
if (newlat != " ") {
setprop("modes/pfd/fma/roll-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.rollMode.getValue() != " ") {
Modes.PFD.FMA.rollModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
var newvert = getprop("modes/pfd/fma/pitch-mode");
if (newvert != " ") {
setprop("modes/pfd/fma/pitch-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.pitchMode.getValue() != " ") {
Modes.PFD.FMA.pitchModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
var newarmr = getprop("modes/pfd/fma/roll-mode-armed");
if (newarmr != " ") {
setprop("modes/pfd/fma/roll-mode-armed-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.rollModeArmed.getValue() != " ") {
Modes.PFD.FMA.rollModeArmedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
var newarmp = getprop("modes/pfd/fma/pitch-mode-armed");
if (newarmp != " ") {
setprop("modes/pfd/fma/pitch-mode-armed-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.pitchModeArmed.getValue() != " ") {
Modes.PFD.FMA.pitchModeArmedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
var newarmp2 = getprop("modes/pfd/fma/pitch-mode2-armed");
if (newarmp2 != " ") {
setprop("modes/pfd/fma/pitch-mode2-armed-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.pitchMode2Armed.getValue() != " ") {
Modes.PFD.FMA.pitchMode2ArmedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
}
@ -541,79 +597,79 @@ setlistener("/it-autoflight/output/fd2", func {
boxchk();
});
setlistener("/it-autoflight/output/athr", func {
at();
atMode();
});
# Boxes
setlistener("/modes/pfd/fma/ap-mode", func {
if (getprop("modes/pfd/fma/ap-mode") != " ") {
setprop("modes/pfd/fma/ap-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.apMode.getValue() != " ") {
Modes.PFD.FMA.apModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/fd-mode", func {
if (getprop("modes/pfd/fma/fd-mode") != " ") {
setprop("modes/pfd/fma/fd-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.fdMode.getValue() != " ") {
Modes.PFD.FMA.fdModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/at-mode", func {
if (getprop("modes/pfd/fma/at-mode") != " ") {
setprop("modes/pfd/fma/throttle-mode-time", getprop("sim/time/elapsed-sec"));
setprop("modes/pfd/fma/athr-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.athrMode.getValue() != " ") {
Modes.PFD.FMA.throttleModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
Modes.PFD.FMA.athrModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/athr-armed", func {
if (getprop("modes/pfd/fma/at-mode") != " ") {
setprop("modes/pfd/fma/athr-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.athrMode.getValue() != " ") {
Modes.PFD.FMA.athrModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/throttle-mode", func {
var state1 = getprop("systems/thrust/state1");
var state2 = getprop("systems/thrust/state2");
if (getprop("it-autoflight/output/athr") == 1 and state1 != "MCT" and state2 != "MCT" and state1 != "MAN THR" and state2 != "MAN THR" and state1 != "TOGA" and state2 != "TOGA" and state1 != "IDLE" and state2 != "IDLE" and
getprop("systems/thrust/eng-out") != 1) {
setprop("modes/pfd/fma/throttle-mode-time", getprop("sim/time/elapsed-sec"));
} else if (getprop("it-autoflight/output/athr") == 1 and state1 != "TOGA" and state2 != "TOGA" and state1 != "IDLE" and state2 != "IDLE" and getprop("systems/thrust/eng-out") == 1) {
if (getprop("controls/engines/engine[0]/throttle-pos") < 0.83 and getprop("controls/engines/engine[1]/throttle-pos") < 0.83) {
setprop("modes/pfd/fma/throttle-mode-time", getprop("sim/time/elapsed-sec"));
state1 = pts.Systems.Thrust.state[0].getValue();
state2 = pts.Systems.Thrust.state[1].getValue();
athr = Output.athr.getValue();
if (athr == 1 and state1 != "MCT" and state2 != "MCT" and state1 != "MAN THR" and state2 != "MAN THR" and state1 != "TOGA" and state2 != "TOGA" and state1 != "IDLE" and state2 != "IDLE" and
!pts.Systems.Thrust.engOut.getValue()) {
Modes.PFD.FMA.throttleModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
} else if (athr == 1 and state1 != "TOGA" and state2 != "TOGA" and state1 != "IDLE" and state2 != "IDLE" and pts.Systems.Thrust.engOut.getValue()) {
if (pts.Controls.Engines.Engine.throttlePos[0].getValue() < 0.83 and pts.Controls.Engines.Engine.throttlePos[1].getValue() < 0.83) {
Modes.PFD.FMA.throttleModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
}
});
setlistener("/modes/pfd/fma/roll-mode", func {
var newlat = getprop("modes/pfd/fma/roll-mode");
if (newlat != " ") {
setprop("modes/pfd/fma/roll-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.rollMode.getValue() != " ") {
Modes.PFD.FMA.rollModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/pitch-mode", func {
var newvert = getprop("modes/pfd/fma/pitch-mode");
if (newvert != " ") {
setprop("modes/pfd/fma/pitch-mode-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.pitchMode.getValue() != " ") {
Modes.PFD.FMA.pitchModeTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/roll-mode-armed", func {
var newarm = getprop("modes/pfd/fma/roll-mode-armed");
if (newarm != " ") {
setprop("modes/pfd/fma/roll-mode-armed-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.rollModeArmed.getValue() != " ") {
Modes.PFD.FMA.rollModeArmedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/pitch-mode-armed", func {
var newarm = getprop("modes/pfd/fma/pitch-mode-armed");
if (newarm != " ") {
setprop("modes/pfd/fma/pitch-mode-armed-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.pitchModeArmed.getValue() != " ") {
Modes.PFD.FMA.pitchModeArmedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("/modes/pfd/fma/pitch-mode2-armed", func {
var newarm = getprop("modes/pfd/fma/pitch-mode2-armed");
if (newarm != " ") {
setprop("modes/pfd/fma/pitch-mode2-armed-time", getprop("sim/time/elapsed-sec"));
if (Modes.PFD.FMA.pitchMode2Armed != " ") {
Modes.PFD.FMA.pitchMode2ArmedTime.setValue(pts.Sim.Time.elapsedSec.getValue());
}
});
setlistener("sim/signals/fdm-initialized", func {
init();
});

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,210 @@
# A3XX Simbrief Parser
# Copyright (c) 2020 Jonathan Redpath (legoboyvdlp)
var LBS2KGS = 0.4535924;
var SimbriefParser = {
node: nil,
OFP: nil,
store1: nil,
store2: nil,
inhibit: 0,
fetch: func(username, i) {
me.inhibit = 1;
var stamp = systime();
http.save("https://www.simbrief.com/api/xml.fetcher.php?username=" ~ username, getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml")
.fail(func me.failure(i))
.done(func me.read(getprop('/sim/fg-home') ~ "/Export/A320-family-simbrief.xml", i));
},
failure: func(i) {
mcdu.mcdu_message(i, "SIMBRIEF DOWNLOAD FAILED");
me.inhibit = 0;
},
read: func(xml, i) {
var data = io.readxml(xml);
if (data != nil) {
if (data.getChild("OFP") == nil) {
print("XML file " ~ xml ~ " not a valid Simbrief file");
} else {
me.node = data;
me.parseOFP();
mcdu.mcdu_message(i, "AOC ACT F-PLN UPLINK");
}
} else {
print("Error reading " ~ xml);
}
},
parseOFP: func() {
me.OFP = me.node.getChild("OFP");
me.store1 = nil;
me.store2 = nil;
me.store1 = me.OFP.getChild("params");
var units = me.store1.getChild("units").getValue();
me.store1 = me.OFP.getChild("general");
me.store2 = me.OFP.getChild("alternate");
fmgc.FMGCInternal.flightNum = (me.store1.getChild("icao_airline").getValue() or "") ~ (me.store1.getChild("flight_number").getValue() or "");
fmgc.FMGCInternal.flightNumSet = 1;
fmgc.FMGCInternal.costIndex = me.store1.getChild("costindex").getValue();
fmgc.FMGCInternal.costIndexSet = 1;
fmgc.FMGCNodes.costIndex.setValue(fmgc.FMGCInternal.costIndex);
fmgc.FMGCInternal.tropo = me.store1.getChild("avg_tropopause").getValue();
fmgc.FMGCInternal.tropoSet = 1;
fmgc.FMGCInternal.crzFt = me.store1.getChild("initial_altitude").getValue();
fmgc.FMGCInternal.crzFl = me.store1.getChild("initial_altitude").getValue() / 100;
fmgc.altvert();
fmgc.FMGCInternal.crzSet = 1;
mcdu.updateCrzLvlCallback();
fmgc.FMGCInternal.crzTemp = (((me.store1.getChild("initial_altitude").getValue() / 1000) * -2) + 15) + me.store1.getChild("avg_temp_dev").getValue();
fmgc.FMGCInternal.crzTempSet = 1;
fmgc.FMGCInternal.crzProg = me.store1.getChild("initial_altitude").getValue() / 100;
if (num(me.store1.getChild("avg_wind_comp").getValue()) >= 0) {
fmgc.FMGCInternal.tripWind = "TL" ~ abs(me.store1.getChild("avg_wind_comp").getValue());
} else {
fmgc.FMGCInternal.tripWind = "HD" ~ abs(me.store1.getChild("avg_wind_comp").getValue());
}
fmgc.FMGCInternal.tripWindValue = abs(me.store1.getChild("avg_wind_comp").getValue());
fmgc.FMGCInternal.altAirport = me.store2.getChild("icao_code").getValue();
fmgc.FMGCInternal.altAirportSet = 1;
# Flightplan stuff
fmgc.flightPlanController.flightplans[3] = createFlightplan();
# INITA
me.store1 = me.OFP.getChild("origin");
me.store2 = me.OFP.getChild("destination");
fmgc.FMGCInternal.depApt = me.store1.getChild("icao_code").getValue();
fmgc.FMGCInternal.arrApt = me.store2.getChild("icao_code").getValue();
fmgc.FMGCInternal.toFromSet = 1;
fmgc.FMGCNodes.toFromSet.setValue(1);
fmgc.flightPlanController.flightplans[3].departure = airportinfo(fmgc.FMGCInternal.depApt);
fmgc.flightPlanController.flightplans[3].destination = airportinfo(fmgc.FMGCInternal.arrApt);
fmgc.FMGCInternal.altSelected = 0;
fmgc.updateArptLatLon();
fmgc.updateARPT();
call(func() {
fmgc.flightPlanController.flightplans[3].departure_runway = airportinfo(fmgc.FMGCInternal.depApt).runways[me.store1.getChild("plan_rwy").getValue()];
fmgc.flightPlanController.flightplans[3].destination_runway = airportinfo(fmgc.FMGCInternal.arrApt).runways[me.store2.getChild("plan_rwy").getValue()];
});
me.store1 = me.OFP.getChild("navlog").getChildren();
if (size(me.store1) != 0) {
var firstIsSID = 0;
var SIDID = "";
if (me.store1[0].getChild("is_sid_star").getValue() == 1) {
if (fmgc.flightPlanController.flightplans[3].departure.getSid(me.store1[0].getChild("via_airway").getValue()) != nil) {
firstIsSID = 1;
SIDID = me.store1[0].getChild("via_airway").getValue();
}
}
var lastIsSTAR = 0;
var STARID = "";
if (me.store1[-1].getChild("is_sid_star").getValue() == 1) {
if (fmgc.flightPlanController.flightplans[3].destination.getStar(me.store1[-1].getChild("via_airway").getValue()) != nil) {
lastIsSTAR = 1;
STARID = me.store1[-1].getChild("via_airway").getValue();
}
}
var lastSIDIndex = -999;
var firstSTARIndex = -999;
var TOCinSIDflag = 0;
var TODinSTARflag = 0;
for (var i = 0; i < size(me.store1); i = i + 1) {
if (firstIsSID) {
if (me.store1[i].getChild("is_sid_star").getValue() == 0 or me.store1[i].getChild("via_airway").getValue() != SIDID) {
lastSIDIndex = i - 1;
break;
}
}
}
for (var i = lastSIDIndex == -999 ? 0 : lastSIDIndex; i < size(me.store1); i = i + 1) {
if (STARID != "") {
if (me.store1[i].getChild("is_sid_star").getValue() == 1 and me.store1[i].getChild("via_airway").getValue() == STARID) {
firstSTARIndex = i;
break;
}
}
}
var max = firstSTARIndex == -999 ? size(me.store1) - 1 : firstSTARIndex - 1;
for (var i = lastSIDIndex == -999 ? 0 : lastSIDIndex + 2; i < max; i = i + 1) {
if (me.store1[i].getChild("ident").getValue() == "TOC" or me.store1[i].getChild("ident").getValue() == "TOD") { continue; }
var coord = geo.Coord.new();
coord.set_latlon(me.store1[i].getChild("pos_lat").getValue(), me.store1[i].getChild("pos_long").getValue());
var fixes = findFixesByID(coord, me.store1[i].getChild("ident").getValue());
var navaids = findNavaidsByID(coord, me.store1[i].getChild("ident").getValue());
if (size(fixes) > 0) {
fmgc.flightPlanController.flightplans[3].appendWP(createWPFrom(fixes[0]));
} else if (size(navaids) > 0) {
fmgc.flightPlanController.flightplans[3].appendWP(createWPFrom(navaids[0]));
} else {
var WP = createWP(coord, me.store1[i].getChild("ident").getValue());
fmgc.flightPlanController.flightplans[3].appendWP(WP);
}
}
fmgc.flightPlanController.flightplans[3].sid = fmgc.flightPlanController.flightplans[3].departure.getSid(SIDID);
fmgc.flightPlanController.flightplans[3].star = fmgc.flightPlanController.flightplans[3].destination.getStar(STARID);
}
fmgc.flightPlanController.destroyTemporaryFlightPlan(3, 1);
fmgc.windController.updatePlans();
fmgc.updateRouteManagerAlt();
# INITB
me.store1 = me.OFP.getChild("fuel");
me.store2 = me.OFP.getChild("weights");
if (units == "lbs") {
fmgc.FMGCInternal.taxiFuel = me.store1.getChild("taxi").getValue() / 1000;
fmgc.FMGCInternal.taxiFuelSet = 1;
fmgc.FMGCInternal.altFuel = me.store1.getChild("alternate_burn").getValue() / 1000;
fmgc.FMGCInternal.altFuelSet = 1;
fmgc.FMGCInternal.finalFuel = me.store1.getChild("reserve").getValue() / 1000;
fmgc.FMGCInternal.finalFuelSet = 1;
fmgc.FMGCInternal.rteRsv = me.store1.getChild("contingency").getValue() / 1000;
fmgc.FMGCInternal.rteRsvSet = 1;
if ((me.store1.getChild("contingency").getValue() / 1000) / num(fmgc.FMGCInternal.tripFuel) * 100 <= 15.0) {
fmgc.FMGCInternal.rtePercent = (me.store1.getChild("contingency").getValue() / 1000) / num(fmgc.FMGCInternal.tripFuel) * 100;
} else {
fmgc.FMGCInternal.rtePercent = 15.0
}
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.block = me.store1.getChild("plan_ramp").getValue() / 1000;
fmgc.FMGCInternal.blockSet = 1;
fmgc.FMGCInternal.zfw = me.store2.getChild("est_zfw").getValue() / 1000;
fmgc.FMGCInternal.zfwSet = 1;
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
} else {
fmgc.FMGCInternal.taxiFuel = (me.store1.getChild("taxi").getValue() / LBS2KGS) / 1000;
fmgc.FMGCInternal.taxiFuelSet = 1;
fmgc.FMGCInternal.altFuel = (me.store1.getChild("alternate_burn").getValue() / LBS2KGS) / 1000;
fmgc.FMGCInternal.altFuelSet = 1;
fmgc.FMGCInternal.finalFuel = (me.store1.getChild("reserve").getValue() / LBS2KGS) / 1000;
fmgc.FMGCInternal.finalFuelSet = 1;
fmgc.FMGCInternal.rteRsv = (me.store1.getChild("contingency").getValue() / LBS2KGS) / 1000;
fmgc.FMGCInternal.rteRsvSet = 1;
if (((me.store1.getChild("contingency").getValue() / LBS2KGS) / 1000) / num(fmgc.FMGCInternal.tripFuel) * 100 <= 15.0) {
fmgc.FMGCInternal.rtePercent = ((me.store1.getChild("contingency").getValue() / LBS2KGS) / 1000) / num(fmgc.FMGCInternal.tripFuel) * 100;
} else {
fmgc.FMGCInternal.rtePercent = 15.0
}
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.block = (me.store1.getChild("plan_ramp").getValue() / LBS2KGS) / 1000;
fmgc.FMGCInternal.blockSet = 1;
fmgc.FMGCInternal.zfw = (me.store2.getChild("est_zfw").getValue() / LBS2KGS) / 1000;
fmgc.FMGCInternal.zfwSet = 1;
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
}
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
},
};

View file

@ -7,7 +7,6 @@ var pos = nil;
var geoPosPrev = geo.Coord.new();
var currentLegCourseDist = nil;
var courseDistanceFrom = nil;
var courseDistanceFromPrev = nil;
var sizeWP = nil;
var magTrueError = 0;
var storeCourse = nil;
@ -17,9 +16,6 @@ var DEBUG_DISCONT = 0;
# Props.getNode
var magHDG = props.globals.getNode("/orientation/heading-magnetic-deg", 1);
var trueHDG = props.globals.getNode("/orientation/heading-deg", 1);
var FMGCdep = props.globals.getNode("/FMGC/internal/dep-arpt", 1);
var FMGCarr = props.globals.getNode("/FMGC/internal/arr-arpt", 1);
var toFromSet = props.globals.getNode("/FMGC/internal/tofrom-set", 1);
# Props.initNode
var wpID = [[props.globals.initNode("/FMGC/flightplan[0]/wp[0]/id", "", "STRING")], [props.globals.initNode("/FMGC/flightplan[1]/wp[0]/id", "", "STRING")], [props.globals.initNode("/FMGC/flightplan[2]/wp[0]/id", "", "STRING")]];
@ -77,6 +73,11 @@ var flightPlanController = {
me.flightplans[n].cleanPlan();
me.flightplans[n].departure = nil;
me.flightplans[n].destination = nil;
mcdu.isNoTransArr[n] = 0;
mcdu.isNoTransDep[n] = 0;
mcdu.isNoSid[n] = 0;
mcdu.isNoStar[n] = 0;
mcdu.isNoVia[n] = 0;
},
createTemporaryFlightPlan: func(n) {
@ -92,6 +93,7 @@ var flightPlanController = {
if (canvas_mcdu.myAirways[n] != nil) {
canvas_mcdu.myAirways[n].updateTmpy();
}
fmgc.windController.createTemporaryWinds(n);
me.flightPlanChanged(n);
},
@ -101,8 +103,6 @@ var flightPlanController = {
print(err[0]);
print("Load failed.");
}
# try to fix fgfp
me.flightplans[3].destination = airportinfo(getprop("/FMGC/internal/arr-arpt"));
me.destroyTemporaryFlightPlan(3, 1);
},
@ -111,6 +111,39 @@ var flightPlanController = {
flightPlanTimer.stop();
me.resetFlightplan(2);
me.flightplans[2] = me.flightplans[n].clone();
if (n != 3) {
if (mcdu.isNoSid[n] == 1) {
mcdu.isNoSid[2] = 1;
} else {
mcdu.isNoSid[2] = 0;
}
if (mcdu.isNoStar[n] == 1) {
mcdu.isNoStar[2] = 1;
} else {
mcdu.isNoStar[2] = 0;
}
if (mcdu.isNoVia[n] == 1) {
mcdu.isNoVia[2] = 1;
} else {
mcdu.isNoVia[2] = 0;
}
if (mcdu.isNoTransDep[n] == 1) {
mcdu.isNoTransDep[2] = 1;
} else {
mcdu.isNoTransDep[2] = 0;
}
if (mcdu.isNoTransArr[n] == 1) {
mcdu.isNoTransArr[2] = 1;
} else {
mcdu.isNoTransArr[2] = 0;
}
}
me.flightPlanChanged(2);
flightPlanTimer.start();
}
@ -120,6 +153,8 @@ var flightPlanController = {
if (canvas_mcdu.myDirTo[n] != nil) {
canvas_mcdu.myDirTo[n].updateTmpy();
}
fmgc.windController.destroyTemporaryWinds(n, a);
me.flightPlanChanged(n);
},
updateAirports: func(dep, arr, plan) {
@ -130,8 +165,8 @@ var flightPlanController = {
me.destroyTemporaryFlightPlan(0, 0);
me.destroyTemporaryFlightPlan(1, 0);
me.currentToWptIndex.setValue(0);
me.arrivalIndex = [0, 0, 0]; # reset arrival index calculations
}
me.addDiscontinuity(1, plan);
# reset mcdu if it exists
if (canvas_mcdu.myFpln[0] != nil) { canvas_mcdu.myFpln[0].scroll = 0; }
@ -222,15 +257,25 @@ var flightPlanController = {
if (force) {
me.flightplans[plan].insertWP(createDiscontinuity(), index);
}
if (index > 0) {
if (me.flightplans[plan].getWP(index) != nil) { # index is not nil
if (me.flightplans[plan].getWP(index - 1) != nil) { # index -1 is also not nil
if (me.flightplans[plan].getWP(index).wp_name != "DISCONTINUITY" and me.flightplans[plan].getWP(index - 1).wp_name != "DISCONTINUITY") {
me.flightplans[plan].insertWP(createDiscontinuity(), index);
}
} else {
} else { # -1 is nil
if (me.flightplans[plan].getWP(index).wp_name != "DISCONTINUITY") {
me.flightplans[plan].insertWP(createDiscontinuity(), index);
}
}
} elsif (me.flightplans[plan].getWP(index - 1) != nil) { # index is nil, -1 is not
if (me.flightplans[plan].getWP(index - 1).wp_name != "DISCONTINUITY") {
me.flightplans[plan].insertWP(createDiscontinuity(), index);
}
} else { # both are nil??
print("Possible error in discontinuities!");
me.flightplans[plan].insertWP(createDiscontinuity(), index);
}
},
# insertTP - insert PPOS waypoint denoted "T-P" at specified index
@ -241,10 +286,12 @@ var flightPlanController = {
insertTP: func(n, index = 1) {
me.flightplans[n].insertWP(createWP(geo.aircraft_position(), "T-P"), index);
fmgc.windController.insertWind(n, index, 0, "T-P");
},
insertPPOS: func(n, index = 0) {
me.flightplans[n].insertWP(createWP(geo.aircraft_position(), "PPOS"), index);
fmgc.windController.insertWind(n, index, 0, "PPOS");
},
# childWPBearingDistance - return waypoint at bearing and distance from specified waypoint ghost
@ -274,6 +321,7 @@ var flightPlanController = {
# fudge the altitude since we cannot create a hdgtoAlt from nasal. Assume 600 feet per mile - 2.5 miles
me.flightplans[n].insertWP(createWP(me.childWPBearingDistance(wptStore, me.flightplans[n].departure_runway.heading, 2.5), "1500", "sid"), 1);
fmgc.windController.insertWind(n, 1, 0, "1500");
}
me.flightPlanChanged(n);
},
@ -294,6 +342,7 @@ var flightPlanController = {
hdg = hdg - 360;
}
me.flightplans[n].insertWP(createWP(me.childWPBearingDistance(wptStore, hdg, 5), "CF", "star"), me.arrivalIndex[n]);
fmgc.windController.insertWind(n, me.arrivalIndex[n], 0, "CF");
}
me.flightPlanChanged(n);
},
@ -315,7 +364,8 @@ var flightPlanController = {
# use createWP here as createWPFrom doesn't accept waypoints
# createWPFrom worked before... but be sure!
me.flightplans[plan].insertWP(createWP(waypointGhost, waypointGhost.wp_name), 2);
me.flightplans[plan].insertWP(createWP(waypointGhost, waypointGhost.id), 2);
fmgc.windController.insertWind(plan, 2, 0, waypointGhost.id);
me.addDiscontinuity(3, plan);
} else {
# we want to delete the intermediate waypoints up to but not including the waypoint. Leave index 0, we delete it later.
@ -338,9 +388,10 @@ var flightPlanController = {
deleteWP: func(index, n, a = 0, s = 0) { # a = 1, means adding a waypoint via deleting intermediate. s = 1, means autosequencing
var wp = wpID[n][index].getValue();
if (((s == 0 and left(wp, 4) != FMGCdep.getValue() and left(wp, 4) != FMGCarr.getValue()) or (s == 1)) and me.flightplans[n].getPlanSize() > 2) {
if (((s == 0 and left(wp, 4) != FMGCInternal.depApt and left(wp, 4) != FMGCInternal.arrApt) or (s == 1)) and me.flightplans[n].getPlanSize() > 2) {
if (me.flightplans[n].getWP(index).id != "DISCONTINUITY" and a == 0) { # if it is a discont, don't make a new one
me.flightplans[n].deleteWP(index);
fmgc.windController.deleteWind(n, index);
if (me.flightplans[n].getWP(index) != nil and s == 0) {
if (me.flightplans[n].getWP(index).id != "DISCONTINUITY") { # else, if the next one isn't a discont, add one
me.addDiscontinuity(index, n);
@ -348,6 +399,7 @@ var flightPlanController = {
}
} else {
me.flightplans[n].deleteWP(index);
fmgc.windController.deleteWind(n, index);
}
me.flightPlanChanged(n);
canvas_nd.A3XXRouteDriver.triggerSignal("fp-removed");
@ -407,6 +459,7 @@ var flightPlanController = {
var indexPresent = me.flightplans[plan].indexOfWP(airport[indexToInsert]);
if (me.flightplans[plan].indexOfWP(airport[indexToInsert]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(airport[indexToInsert]), index);
fmgc.windController.insertWind(plan, index, 0, text);
me.addDiscontinuity(index + 1, plan);
me.flightPlanChanged(plan);
return 2;
@ -440,6 +493,7 @@ var flightPlanController = {
var indexPresent = me.flightplans[plan].indexOfWP(fix[indexToInsert]);
if (me.flightplans[plan].indexOfWP(fix[indexToInsert]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(fix[indexToInsert]), index);
fmgc.windController.insertWind(plan, index, 1, text);
me.addDiscontinuity(index + 1, plan);
me.flightPlanChanged(plan);
return 2;
@ -473,6 +527,7 @@ var flightPlanController = {
var indexPresent = me.flightplans[plan].indexOfWP(navaid[indexToInsert]);
if (me.flightplans[plan].indexOfWP(navaid[indexToInsert]) == -1) {
me.flightplans[plan].insertWP(createWPFrom(navaid[indexToInsert]), index);
fmgc.windController.insertWind(plan, index, 1, text);
me.addDiscontinuity(index + 1, plan);
me.flightPlanChanged(plan);
return 2;
@ -493,6 +548,7 @@ var flightPlanController = {
if (me.flightplans[plan].indexOfWP(wpGhost) == -1) {
# use createWP here as createWPFrom doesn't accept waypoints
me.flightplans[plan].insertWP(createWP(wpGhost, wpGhost.wp_name), index);
fmgc.windController.insertWind(plan, index, 1, wpGhost.wp_name);
me.addDiscontinuity(index + 1, plan);
me.flightPlanChanged(plan);
return 2;
@ -522,6 +578,7 @@ var flightPlanController = {
}
me.flightplans[plan].insertWP(waypoint.wpGhost, index);
fmgc.windController.insertWind(plan, index, 1, "LL");
me.addDiscontinuity(index + 1, plan);
me.flightPlanChanged(plan);
return 2;
@ -593,6 +650,37 @@ var flightPlanController = {
return me.insertPlaceBearingDistance(wpGhost, textSplit[1] + localMagvar, textSplit[2], index, plan); # magnetic to true? I don't know. But this works!
},
getNavCount: func(plan) {
var count = 0;
for (var wpt = 0; wpt < me.flightplans[plan].getPlanSize(); wpt += 1) {
#print(me.flightplans[plan].getWP(wpt).wp_type);
if (me.flightplans[plan].getWP(wpt).wp_type == "navaid") {
count += 1;
}
}
return count;
},
getDepartureCount: func(plan) {
var count = 0;
for (var wpt = 0; wpt < me.flightplans[plan].getPlanSize(); wpt += 1) {
#print(me.flightplans[plan].getWP(wpt).wp_role);
if (me.flightplans[plan].getWP(wpt).wp_role == "sid") {
count += 1;
}
}
return count;
},
getArrivalCount: func(plan) {
var count = 0;
for (var wpt = 0; wpt < me.flightplans[plan].getPlanSize(); wpt += 1) {
if (me.flightplans[plan].getWP(wpt).wp_role == "star" or me.flightplans[plan].getWP(wpt).wp_role == "approach" or me.flightplans[plan].getWP(wpt).wp_role == "missed") {
count += 1;
}
}
return count;
},
# insertPlaceBearingDistance - insert PBD waypoint at specified index,
# at some specified bearing, distance from a specified location
@ -609,6 +697,7 @@ var flightPlanController = {
}
me.flightplans[plan].insertWP(waypoint.wpGhost, index);
fmgc.windController.insertWind(plan, index, 0, "PBD");
me.addDiscontinuity(index + 1, plan);
me.flightPlanChanged(plan);
return 2;
@ -664,11 +753,16 @@ var flightPlanController = {
append(wpCoursePrev[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/course-from-prev", 0, "DOUBLE"));
append(wpDistancePrev[n], props.globals.initNode("/FMGC/flightplan[" ~ n ~ "]/wp[" ~ counter ~ "]/distance-from-prev", 0, "DOUBLE"));
}
me.updatePlans();
fmgc.windController.updatePlans();
# push update to fuel
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
canvas_nd.A3XXRouteDriver.triggerSignal("fp-added");
},
@ -696,32 +790,24 @@ var flightPlanController = {
}
}
if (left(wpID[n][wpt].getValue(), 4) == FMGCarr.getValue() and wpt != 0) {
if (me.arrivalIndex[n] != wpt) {
me.arrivalIndex[n] = wpt;
}
}
if (wpt > 0) {
geoPosPrev.set_latlon(me.flightplans[n].getWP(wpt - 1).lat, me.flightplans[n].getWP(wpt - 1).lon);
courseDistanceFromPrev = waypointHashStore.courseAndDistanceFrom(geoPosPrev);
wpCoursePrev[n][wpt].setValue(courseDistanceFromPrev[0]);
wpDistancePrev[n][wpt].setValue(courseDistanceFromPrev[1]);
if (wpt > 1) {
if (me.flightplans[n].getWP(wpt - 1).wp_name != "DISCONTINUITY" and me.flightplans[n].getWP(wpt).wp_name != "DISCONTINUITY" and me.flightplans[n].getWP(wpt - 1).wp_type != "vectors" and me.flightplans[n].getWP(wpt - 1).wp_type != "hdgToAlt" and me.flightplans[n].getWP(wpt).wp_type != "vectors" and me.flightplans[n].getWP(wpt).wp_type != "hdgToAlt" and wpt <= me.arrivalIndex[n]) {
# print("Adding " ~ courseDistanceFromPrev[1] ~ " miles for waypoint " ~ me.flightplans[n].getWP(wpt).wp_name);
me._arrivalDist += courseDistanceFromPrev[1];
}
}
wpCoursePrev[n][wpt].setValue(me.flightplans[n].getWP(wpt).leg_bearing);
wpDistancePrev[n][wpt].setValue(me.flightplans[n].getWP(wpt).leg_distance);
#if (wpt > 1) {
# if (me.flightplans[n].getWP(wpt - 1).wp_name != "DISCONTINUITY" and me.flightplans[n].getWP(wpt).wp_name != "DISCONTINUITY" and me.flightplans[n].getWP(wpt - 1).wp_type != "vectors" and me.flightplans[n].getWP(wpt - 1).wp_type != "hdgToAlt" and me.flightplans[n].getWP(wpt).wp_type != "vectors" and me.flightplans[n].getWP(wpt).wp_type != "hdgToAlt" and wpt <= me.arrivalIndex[n]) {
# me._arrivalDist += courseDistanceFromPrev[1];
# }
#}
} else {
# use PPOS for the first waypoint
wpCoursePrev[n][wpt].setValue(courseDistanceFrom[0]);
wpDistancePrev[n][wpt].setValue(courseDistanceFrom[1]);
}
if (left(wpID[n][wpt].getValue(), 4) == FMGCarr.getValue() and wpt != 0) {
if (me.arrivalIndex[n] != wpt) { # don't merge line 397 and 398 if statements
if (left(wpID[n][wpt].getValue(), 4) == fmgc.FMGCInternal.arrApt and wpt != 0) {
if (me.arrivalIndex[n] != wpt) {
me.arrivalIndex[n] = wpt;
if (canvas_mcdu.myFpln[0] != nil) {
canvas_mcdu.myFpln[0].destInfo();
}
@ -732,14 +818,20 @@ var flightPlanController = {
}
}
}
# print("Total: " ~ me._arrivalDist);
me.arrivalDist = me._arrivalDist;
if (me.flightplans[2].getWP(me.arrivalIndex[2]) == nil or me.flightplans[2].getWP(1) == nil) {
me.arrivalDist = 9999;
#print(me.arrivalIndex[2]);
} else {
me.arrivalDist = me.flightplans[2].getWP(me.arrivalIndex[2]).distance_along_route - me.flightplans[2].getWP(1).leg_distance + me._arrivalDist;
}
me.updateMCDUDriver(n);
},
updateCurrentWaypoint: func() {
for (var india = 0; india <= 2; india += 1) {
if (toFromSet.getBoolValue() and me.flightplans[india].departure != nil and me.flightplans[india].destination != nil) { # check if flightplan exists
if (FMGCInternal.toFromSet and me.flightplans[india].departure != nil and me.flightplans[india].destination != nil) { # check if flightplan exists
var curAircraftPos = geo.aircraft_position(); # don't want to get this corrupted so make sure it is a local variable
if (india == 2) { # main plan

View file

@ -170,13 +170,18 @@ var MessageController = {
TypeIMessage.new("LIST OF 20 IN USE"),TypeIMessage.new("PILOT ELEMENT RETAINED"),TypeIMessage.new("NOT ALLOWED"),
TypeIMessage.new("NOT IN DATA BASE"),TypeIMessage.new("ONLY SPD ENTRY ALLOWED"),TypeIMessage.new("REVISION IN PROGRESS"),
TypeIMessage.new("TMPY F-PLN EXISTS", 1),TypeIMessage.new("SELECT DESIRED SYSTEM"),TypeIMessage.new("SELECT HDG/TRK FIRST"),
TypeIMessage.new("USING COST INDEX N", 1),TypeIMessage.new("WAIT FOR SYSTEM RESPONSE"),
TypeIMessage.new("USING COST INDEX N", 1),TypeIMessage.new("WAIT FOR SYSTEM RESPONSE"),TypeIMessage.new("RWY/LS MISMATCH"),
TypeIMessage.new("VHF3 VOICE MSG NOT GEN"),TypeIMessage.new("NO COMM MSG NOT GEN"),TypeIMessage.new("WX UPLINK"),
TypeIMessage.new("SIMBRIEF DOWNLOAD FAILED"),TypeIMessage.new("MISSING USERNAME"),TypeIMessage.new("AOC ACT F-PLN UPLINK"),
]),
typeIIMessages: std.Vector.new([
TypeIIMessage.new("LAT DISCONT AHEAD", "amb", 0),TypeIIMessage.new("MORE DRAG"),TypeIIMessage.new("RWY/LS MISMATCH", "amb", 0),TypeIIMessage.new("STEP DELETED"),
TypeIIMessage.new("STEP NOW"),TypeIIMessage.new("TIME TO EXIT", "amb", 0),
TypeIIMessage.new("STEP NOW"),TypeIIMessage.new("TIME TO EXIT", "amb", 0),TypeIIMessage.new("V1/VR/V2 DISAGREE", "amb", 0),
TypeIIMessage.new("TO SPEED TOO LOW", "amb", 0),
]),
# to speed to low - new on a320, margin against vmcg / vs1g
getTypeIMsgByText: func(text) {
return me.getMsgByText(text, me.typeIMessages.vector);
},

486
Nasal/FMGC/winds.nas Normal file
View file

@ -0,0 +1,486 @@
# A3XX FMGC Wind Driver
# Copyright (c) 2020 Matthew Maring (mattmaring)
var wind = {
new: func() {
var w = {parents: [wind]};
w.heading = -1;
w.magnitude = -1;
w.altitude = "";
w.set = 0;
return w;
},
newcopy: func(heading, magnitude, altitude, set) {
var w = {parents: [wind]};
w.heading = heading;
w.magnitude = magnitude;
w.altitude = altitude;
w.set = set;
return w;
}
};
var alt_wind = {
new: func() {
var aw = {parents: [alt_wind]};
aw.heading = -1;
aw.magnitude = -1;
aw.set = 0;
return aw;
},
newcopy: func(heading, magnitude, set) {
var aw = {parents: [alt_wind]};
aw.heading = heading;
aw.magnitude = magnitude;
aw.set = set;
return aw;
}
};
var sat_temp = {
new: func() {
var st = {parents: [sat_temp]};
st.temp = -999;
st.altitude = "";
st.set = 0;
return st;
},
newcopy: func(temp, altitude, set) {
var st = {parents: [sat_temp]};
st.temp = temp;
st.altitude = altitude;
st.set = set;
return st;
}
};
var waypoint_winds = {
new: func(id, type, includeWind) {
var ww = {parents: [waypoint_winds]};
ww.id = id;
ww.type = type; #departure, waypoint, arrival
ww.includeWind = includeWind;
ww.wind1 = wind.new();
ww.wind2 = wind.new();
ww.wind3 = wind.new();
ww.wind4 = wind.new();
ww.wind5 = wind.new();
ww.sat1 = sat_temp.new();
ww.alt1 = alt_wind.new();
return ww;
},
newcopy: func(id, type, includeWind, wind1, wind2, wind3, wind4, wind5, sat1, alt1) {
var ww = {parents: [waypoint_winds]};
ww.id = id;
ww.type = type; #departure, waypoint, arrival
ww.includeWind = includeWind;
ww.wind1 = wind1;
ww.wind2 = wind2;
ww.wind3 = wind3;
ww.wind4 = wind4;
ww.wind5 = wind5;
ww.sat1 = sat1;
ww.alt1 = alt1;
return ww;
}
};
var windController = {
clb_winds: [0, 0, 0],
crz_winds: [0, 0, 0],
des_winds: [0, 0, 0],
hist_winds: 0,
fl50_wind: [-1, -1, ""],
fl150_wind: [-1, -1, ""],
fl250_wind: [-1, -1, ""],
flcrz_wind: [-1, -1, ""],
winds: [[], [], []], #waypoint winds used if route includes navaids
nav_indicies: [[], [], []],
windSizes: [0, 0, 0],
accessPage: ["", ""],
#temporaryFlag: [0, 0],
init: func() {
me.resetWind(2);
me.clb_winds[2] = waypoint_winds.new("climb", "waypoint", 1);
me.crz_winds[2] = waypoint_winds.new("cruize", "waypoint", 1);
me.des_winds[2] = waypoint_winds.new("descent", "waypoint", 1);
me.hist_winds = waypoint_winds.new("history", "waypoint", 1);
me.read();
},
reset: func() {
#me.temporaryFlag[0] = 0;
#me.temporaryFlag[1] = 0;
me.resetWind(0);
me.resetWind(1);
me.resetWind(2);
},
resetWind: func(n) {
me.clb_winds[n] = 0;
me.crz_winds[n] = 0;
me.des_winds[n] = 0;
me.winds[n] = [];
me.nav_indicies[n] = [];
me.windSizes[n] = 0;
},
resetDesWinds: func() {
me.des_winds[0] = 0;
me.des_winds[1] = 0;
me.des_winds[2] = waypoint_winds.new("descent", "waypoint", 1);
},
copyClbWind: func(n) {
var id = me.clb_winds[n].id;
var type = me.clb_winds[n].type;
var includeWind = me.clb_winds[n].includeWind;
var wind1 = wind.newcopy(me.clb_winds[n].wind1.heading, me.clb_winds[n].wind1.magnitude, me.clb_winds[n].wind1.altitude, me.clb_winds[n].wind1.set);
var wind2 = wind.newcopy(me.clb_winds[n].wind2.heading, me.clb_winds[n].wind2.magnitude, me.clb_winds[n].wind2.altitude, me.clb_winds[n].wind2.set);
var wind3 = wind.newcopy(me.clb_winds[n].wind3.heading, me.clb_winds[n].wind3.magnitude, me.clb_winds[n].wind3.altitude, me.clb_winds[n].wind3.set);
var wind4 = wind.newcopy(me.clb_winds[n].wind4.heading, me.clb_winds[n].wind4.magnitude, me.clb_winds[n].wind4.altitude, me.clb_winds[n].wind4.set);
var wind5 = wind.newcopy(me.clb_winds[n].wind5.heading, me.clb_winds[n].wind5.magnitude, me.clb_winds[n].wind5.altitude, me.clb_winds[n].wind5.set);
var sat1 = sat_temp.newcopy(me.clb_winds[n].sat1.temp, me.clb_winds[n].sat1.altitude, me.clb_winds[n].sat1.set);
var alt1 = alt_wind.newcopy(me.clb_winds[n].alt1.heading, me.clb_winds[n].alt1.magnitude, me.clb_winds[n].alt1.set);
return waypoint_winds.newcopy(id, type, includeWind, wind1, wind2, wind3, wind4, wind5, sat1, alt1);
},
copyCrzWind: func(n) {
var id = me.crz_winds[n].id;
var type = me.crz_winds[n].type;
var includeWind = me.crz_winds[n].includeWind;
var wind1 = wind.newcopy(me.crz_winds[n].wind1.heading, me.crz_winds[n].wind1.magnitude, me.crz_winds[n].wind1.altitude, me.crz_winds[n].wind1.set);
var wind2 = wind.newcopy(me.crz_winds[n].wind2.heading, me.crz_winds[n].wind2.magnitude, me.crz_winds[n].wind2.altitude, me.crz_winds[n].wind2.set);
var wind3 = wind.newcopy(me.crz_winds[n].wind3.heading, me.crz_winds[n].wind3.magnitude, me.crz_winds[n].wind3.altitude, me.crz_winds[n].wind3.set);
var wind4 = wind.newcopy(me.crz_winds[n].wind4.heading, me.crz_winds[n].wind4.magnitude, me.crz_winds[n].wind4.altitude, me.crz_winds[n].wind4.set);
var wind5 = wind.newcopy(me.crz_winds[n].wind5.heading, me.crz_winds[n].wind5.magnitude, me.crz_winds[n].wind5.altitude, me.crz_winds[n].wind5.set);
var sat1 = sat_temp.newcopy(me.crz_winds[n].sat1.temp, me.crz_winds[n].sat1.altitude, me.crz_winds[n].sat1.set);
var alt1 = alt_wind.newcopy(me.crz_winds[n].alt1.heading, me.crz_winds[n].alt1.magnitude, me.crz_winds[n].alt1.set);
return waypoint_winds.newcopy(id, type, includeWind, wind1, wind2, wind3, wind4, wind5, sat1, alt1);
},
copyDesWind: func(n) {
var id = me.des_winds[n].id;
var type = me.des_winds[n].type;
var includeWind = me.des_winds[n].includeWind;
var wind1 = wind.newcopy(me.des_winds[n].wind1.heading, me.des_winds[n].wind1.magnitude, me.des_winds[n].wind1.altitude, me.des_winds[n].wind1.set);
var wind2 = wind.newcopy(me.des_winds[n].wind2.heading, me.des_winds[n].wind2.magnitude, me.des_winds[n].wind2.altitude, me.des_winds[n].wind2.set);
var wind3 = wind.newcopy(me.des_winds[n].wind3.heading, me.des_winds[n].wind3.magnitude, me.des_winds[n].wind3.altitude, me.des_winds[n].wind3.set);
var wind4 = wind.newcopy(me.des_winds[n].wind4.heading, me.des_winds[n].wind4.magnitude, me.des_winds[n].wind4.altitude, me.des_winds[n].wind4.set);
var wind5 = wind.newcopy(me.des_winds[n].wind5.heading, me.des_winds[n].wind5.magnitude, me.des_winds[n].wind5.altitude, me.des_winds[n].wind5.set);
var sat1 = sat_temp.newcopy(me.des_winds[n].sat1.temp, me.des_winds[n].sat1.altitude, me.des_winds[n].sat1.set);
var alt1 = alt_wind.newcopy(me.des_winds[n].alt1.heading, me.des_winds[n].alt1.magnitude, me.des_winds[n].alt1.set);
return waypoint_winds.newcopy(id, type, includeWind, wind1, wind2, wind3, wind4, wind5, sat1, alt1);
},
copyWinds: func(n) {
var tempWind = [];
for (i = 0; i < size(me.winds[n]); i += 1) {
var id = me.winds[n][i].id;
var type = me.winds[n][i].type;
var includeWind = me.winds[n][i].includeWind;
var wind1 = wind.newcopy(me.winds[n][i].wind1.heading, me.winds[n][i].wind1.magnitude, me.winds[n][i].wind1.altitude, me.winds[n][i].wind1.set);
var wind2 = wind.newcopy(me.winds[n][i].wind2.heading, me.winds[n][i].wind2.magnitude, me.winds[n][i].wind2.altitude, me.winds[n][i].wind2.set);
var wind3 = wind.newcopy(me.winds[n][i].wind3.heading, me.winds[n][i].wind3.magnitude, me.winds[n][i].wind3.altitude, me.winds[n][i].wind3.set);
var wind4 = wind.newcopy(me.winds[n][i].wind4.heading, me.winds[n][i].wind4.magnitude, me.winds[n][i].wind4.altitude, me.winds[n][i].wind4.set);
var wind5 = wind.newcopy(me.winds[n][i].wind5.heading, me.winds[n][i].wind5.magnitude, me.winds[n][i].wind5.altitude, me.winds[n][i].wind5.set);
var sat1 = sat_temp.newcopy(me.winds[n][i].sat1.temp, me.winds[n][i].sat1.altitude, me.winds[n][i].sat1.set);
var alt1 = alt_wind.newcopy(me.winds[n][i].alt1.heading, me.winds[n][i].alt1.magnitude, me.winds[n][i].alt1.set);
append(tempWind, waypoint_winds.newcopy(id, type, includeWind, wind1, wind2, wind3, wind4, wind5, sat1, alt1));
}
return tempWind;
},
createTemporaryWinds: func(n) {
me.resetWind(n);
me.clb_winds[n] = me.copyClbWind(2);
me.crz_winds[n] = me.copyCrzWind(2);
me.des_winds[n] = me.copyDesWind(2);
me.winds[n] = me.copyWinds(2);
me.nav_indicies[n] = me.nav_indicies[2];
me.windSizes[n] = me.windSizes[2];
#me.waypointsChanged();
#me.temporaryFlag[n] = 1;
},
destroyTemporaryWinds: func(n, a) { # a = 1 activate, a = 0 erase
#print("destroying temporary ", n);
if (a == 1) {
me.resetWind(2);
me.clb_winds[2] = me.copyClbWind(n);
me.crz_winds[2] = me.copyCrzWind(n);
me.des_winds[2] = me.copyDesWind(n);
me.winds[2] = me.copyWinds(n);
me.nav_indicies[2] = me.nav_indicies[n];
me.windSizes[2] = me.windSizes[n];
}
if (n == 3) { return; }
me.resetWind(n);
me.waypointsChanged();
#me.temporaryFlag[n] = 0;
},
# read - read from hist wind file, create one if it doesn't exist
read: func() {
var path = getprop("/sim/fg-home") ~ "/Export/A320SavedWinds.txt";
# create file if it doesn't exist
if (io.stat(path) == nil) {
me.write();
}
var file = io.open(path);
if (file != nil) {
var line = io.readln(file);
var temp_line = split(",", line);
me.hist_winds.wind1.heading = temp_line[0];
me.hist_winds.wind1.magnitude = temp_line[1];
me.hist_winds.wind1.altitude = temp_line[2];
line = io.readln(file);
temp_line = split(",", line);
me.hist_winds.wind2.heading = temp_line[0];
me.hist_winds.wind2.magnitude = temp_line[1];
me.hist_winds.wind2.altitude = temp_line[2];
line = io.readln(file);
temp_line = split(",", line);
me.hist_winds.wind3.heading = temp_line[0];
me.hist_winds.wind3.magnitude = temp_line[1];
me.hist_winds.wind3.altitude = temp_line[2];
line = io.readln(file);
temp_line = split(",", line);
me.hist_winds.wind4.heading = temp_line[0];
me.hist_winds.wind4.magnitude = temp_line[1];
me.hist_winds.wind4.altitude = temp_line[2];
line = io.readln(file);
temp_line = split(",", line);
me.hist_winds.wind5.heading = temp_line[0];
me.hist_winds.wind5.magnitude = temp_line[1];
me.hist_winds.wind5.altitude = temp_line[2];
}
},
# write - write to hist wind file, called whenever winds changed
write: func() {
if (me.des_winds[2] != 0) {
var path = getprop("/sim/fg-home") ~ "/Export/A320SavedWinds.txt";
var file = io.open(path, "wb");
var winds_added = 0;
if (me.fl50_wind[2] != "") {
io.write(file, me.fl50_wind[0] ~ "," ~ me.fl50_wind[1] ~ "," ~ me.fl50_wind[2] ~ "\n");
winds_added += 1;
}
if (me.fl150_wind[2] != "") {
io.write(file, me.fl150_wind[0] ~ "," ~ me.fl150_wind[1] ~ "," ~ me.fl150_wind[2] ~ "\n");
winds_added += 1;
}
if (me.fl250_wind[2] != "") {
io.write(file, me.fl250_wind[0] ~ "," ~ me.fl250_wind[1] ~ "," ~ me.fl250_wind[2] ~ "\n");
winds_added += 1;
}
if (me.flcrz_wind[2] != "") {
io.write(file, me.flcrz_wind[0] ~ "," ~ me.flcrz_wind[1] ~ "," ~ me.flcrz_wind[2] ~ "\n");
winds_added += 1;
}
while (winds_added < 5) {
io.write(file, "-1,-1,\n");
winds_added += 1;
}
io.close(file);
} else {
print("no wind data");
}
},
insertWind: func(plan, index, value, id) {
if (me.windSizes[plan] == index) {
if (value == 3) {
append(me.winds[plan], waypoint_winds.new(id, "arrival", 0));
} else if (value == 2) {
append(me.winds[plan], waypoint_winds.new(id, "departure", 0));
} else if (value == 1) {
append(me.winds[plan], waypoint_winds.new(id, "waypoint", 1));
} else {
append(me.winds[plan], waypoint_winds.new(id, "waypoint", 0));
}
me.windSizes[plan] += 1;
} else if (me.windSizes[plan] > index and index >= 0) {
append(me.winds[plan], waypoint_winds.new(id, "waypoint", 0));
me.windSizes[plan] += 1;
for (i = me.windSizes[plan] - 1; i > index; i -= 1) {
me.winds[plan][i] = me.winds[plan][i - 1];
}
if (value == 3) {
me.winds[plan][index] = waypoint_winds.new(id, "arrival", 0);
} else if (value == 2) {
me.winds[plan][index] = waypoint_winds.new(id, "departure", 0);
} else if (value == 1) {
me.winds[plan][index] = waypoint_winds.new(id, "waypoint", 1);
} else {
me.winds[plan][index] = waypoint_winds.new(id, "waypoint", 0);
}
} else {
#print("insert invalid id: ", id, ", plan: ", plan, ", index: ", index, ", size: ", me.windSizes[plan]);
#debug.dump(me.winds);
#debug.dump(me.windSizes);
return;
}
#print("insert plan: ", plan, ", index: ", index);
#debug.dump(me.winds);
#debug.dump(me.windSizes);
me.waypointsChanged();
},
deleteWind: func(plan, index) {
if (me.windSizes[plan] == index) {
pop(me.winds[plan]);
me.windSizes[plan] -= 1;
} else if (me.windSizes[plan] > index and index >= 0) {
for (i = index; i < me.windSizes[plan] - 1; i += 1) {
me.winds[plan][i] = me.winds[plan][i + 1];
}
pop(me.winds[plan]);
me.windSizes[plan] -= 1;
} else {
#print("delete invalid plan: ", plan, ", index: ", index, ", size: ", me.windSizes[plan]);
#debug.dump(me.winds);
#debug.dump(me.windSizes);
return;
}
#print("delete plan: ", plan, ", index: ", index);
#debug.dump(me.winds);
#debug.dump(me.windSizes);
me.waypointsChanged();
},
waypointsChanged: func() {
if (canvas_mcdu.myCRZWIND[1] != nil) {
if (!fmgc.flightPlanController.temporaryFlag[1]) {
if (fmgc.FMGCInternal.toFromSet and size(fmgc.windController.nav_indicies[2]) > 0) {
canvas_mcdu.myCRZWIND[1].waypoint = fmgc.flightPlanController.flightplans[2].getWP(me.nav_indicies[2][0]);
canvas_mcdu.myCRZWIND[1].singleCRZ = 0;
canvas_mcdu.myCRZWIND[1].cur_location = 0;
} else {
canvas_mcdu.myCRZWIND[1].waypoint = nil;
canvas_mcdu.myCRZWIND[1].singleCRZ = 1;
canvas_mcdu.myCRZWIND[1].cur_location = 0;
}
} else {
if (fmgc.FMGCInternal.toFromSet and size(fmgc.windController.nav_indicies[1]) > 0) {
canvas_mcdu.myCRZWIND[1].waypoint = fmgc.flightPlanController.flightplans[1].getWP(me.nav_indicies[1][0]);
canvas_mcdu.myCRZWIND[1].singleCRZ = 0;
canvas_mcdu.myCRZWIND[1].cur_location = 0;
} else {
canvas_mcdu.myCRZWIND[1].waypoint = nil;
canvas_mcdu.myCRZWIND[1].singleCRZ = 1;
canvas_mcdu.myCRZWIND[1].cur_location = 0;
}
}
canvas_mcdu.myCRZWIND[1].reload();
}
if (canvas_mcdu.myCRZWIND[0] != nil) {
if (!fmgc.flightPlanController.temporaryFlag[0]) {
if (fmgc.FMGCInternal.toFromSet and size(fmgc.windController.nav_indicies[2]) > 0) {
canvas_mcdu.myCRZWIND[0].waypoint = fmgc.flightPlanController.flightplans[2].getWP(me.nav_indicies[2][0]);
canvas_mcdu.myCRZWIND[0].singleCRZ = 0;
canvas_mcdu.myCRZWIND[0].cur_location = 0;
} else {
canvas_mcdu.myCRZWIND[0].waypoint = nil;
canvas_mcdu.myCRZWIND[0].singleCRZ = 1;
canvas_mcdu.myCRZWIND[0].cur_location = 0;
}
} else {
if (fmgc.FMGCInternal.toFromSet and size(fmgc.windController.nav_indicies[0]) > 0) {
canvas_mcdu.myCRZWIND[0].waypoint = fmgc.flightPlanController.flightplans[0].getWP(me.nav_indicies[0][0]);
canvas_mcdu.myCRZWIND[0].singleCRZ = 0;
canvas_mcdu.myCRZWIND[0].cur_location = 0;
} else {
canvas_mcdu.myCRZWIND[0].waypoint = nil;
canvas_mcdu.myCRZWIND[0].singleCRZ = 1;
canvas_mcdu.myCRZWIND[0].cur_location = 0;
}
}
canvas_mcdu.myCRZWIND[0].reload();
}
},
updatePlans: func() {
var winds_copy = me.winds;
var windSizes_copy = me.windSizes;
me.winds = [[], [], []];
me.nav_indicies = [[], [], []];
me.windSizes = [0, 0, 0];
# loop through waypoints
for (plan = 0; plan <= 2; plan += 1) {
for (i = 0; i < fmgc.flightPlanController.flightplans[plan].getPlanSize(); i += 1) {
var waypoint = fmgc.flightPlanController.flightplans[plan].getWP(i);
#print(waypoint.wp_role, "| : |", waypoint.wp_type);
if (waypoint.wp_role == "sid") {
append(me.winds[plan], waypoint_winds.new(waypoint.id, "departure", 0));
me.windSizes[plan] += 1;
} else if (waypoint.wp_role == "star" or waypoint.wp_role == "approach" or waypoint.wp_role == "missed") {
append(me.winds[plan], waypoint_winds.new(waypoint.id, "arrival", 0));
me.windSizes[plan] += 1;
} else if (waypoint.wp_role == nil and waypoint.wp_type == "navaid") {
var found = 0;
for (index = 0; index < windSizes_copy[plan]; index += 1) {
#print(waypoint.id, " : ", winds_copy[plan][index].id);
if (waypoint.id == winds_copy[plan][index].id) {
append(me.winds[plan], winds_copy[plan][index]);
append(me.nav_indicies[plan], i);
me.windSizes[plan] += 1;
found = 1;
}
}
if (found != 1) {
append(me.winds[plan], waypoint_winds.new(waypoint.id, "waypoint", 0));
me.windSizes[plan] += 1;
}
} else {
append(me.winds[plan], waypoint_winds.new(waypoint.id, "waypoint", 0));
me.windSizes[plan] += 1;
}
#print("insert plan: ", plan, ", index: ", i);
#debug.dump(me.winds);
#debug.dump(me.nav_indicies);
#debug.dump(me.windSizes);
}
}
if (canvas_mcdu.myCLBWIND[1] != nil) {
canvas_mcdu.myCLBWIND[1].reload();
}
if (canvas_mcdu.myCLBWIND[0] != nil) {
canvas_mcdu.myCLBWIND[0].reload();
}
if (canvas_mcdu.myCRZWIND[1] != nil) {
canvas_mcdu.myCRZWIND[1].reload();
}
if (canvas_mcdu.myCRZWIND[0] != nil) {
canvas_mcdu.myCRZWIND[0].reload();
}
if (canvas_mcdu.myDESWIND[1] != nil) {
canvas_mcdu.myDESWIND[1].reload();
}
if (canvas_mcdu.myDESWIND[0] != nil) {
canvas_mcdu.myDESWIND[0].reload();
}
if (canvas_mcdu.myHISTWIND[1] != nil) {
canvas_mcdu.myHISTWIND[1].reload();
}
if (canvas_mcdu.myHISTWIND[0] != nil) {
canvas_mcdu.myHISTWIND[0].reload();
}
}
};

View file

@ -1,201 +0,0 @@
#
# Chrono - Clock - ET
#
var chr = aircraft.timer.new("instrumentation/chrono[0]/elapsetime-sec",1);
var clk = aircraft.timer.new("instrumentation/clock/elapsetime-sec",1);
setlistener("sim/signals/fdm-initialized", func {
chr.stop();
chr.reset();
clk.stop();
clk.reset();
props.globals.initNode("instrumentation/clock/clock_hh_mm", 0,"STRING");
props.globals.initNode("instrumentation/clock/indicated-string",0,"STRING");
props.globals.initNode("instrumentation/clock/elapsed-string",0,"STRING");
props.globals.initNode("instrumentation/clock/elapsetime-sec",0,"INT");
props.globals.initNode("instrumentation/clock/et-selector",1,"INT");
props.globals.initNode("instrumentation/clock/utc-selector",0,"INT");
props.globals.initNode("instrumentation/clock/set-knob",0,"INT");
props.globals.initNode("instrumentation/clock/et-hr",0,"INT");
props.globals.initNode("instrumentation/clock/et-min",0,"INT");
props.globals.initNode("instrumentation/chrono[0]/chr-et-string",0,"STRING");
props.globals.initNode("instrumentation/chrono[0]/elapsetime-sec",0,"INT");
props.globals.initNode("instrumentation/chrono[0]/chrono-reset",1,"INT");
props.globals.initNode("instrumentation/chrono[0]/chr-et-min",0,"INT");
props.globals.initNode("instrumentation/chrono[0]/chr-et-sec",0,"INT");
props.globals.initNode("controls/flight/rudder-trim-display",0,"STRING");
setprop("controls/flight/rudder-trim-display", sprintf("%2.1f", getprop("fdm/jsbsim/hydraulics/rudder/trim-cmd-deg")));
start_loop.start();
});
setlistener("instrumentation/chrono[0]/chrono-reset", func(et){
var tmp = et.getValue();
if (tmp == 2) {
if (getprop("instrumentation/chrono[0]/started") == 1) {
if (getprop("instrumentation/chrono[0]/paused") == 0) {
setprop("instrumentation/chrono[0]/elapsetime-sec", 0);
setprop("instrumentation/chrono[0]/chrono-reset", 0);
} else {
chr.stop();
chr.reset();
setprop("instrumentation/chrono[0]/chrono-reset", 1);
setprop("instrumentation/chrono[0]/started", 0);
setprop("instrumentation/chrono[0]/paused", 0);
};
} else {
if (getprop("instrumentation/chrono[0]/paused") == 0) {
# No action required
} else {
setprop("instrumentation/chrono[0]/paused", 0);
};
};
} elsif (tmp == 1) {
if (getprop("instrumentation/chrono[0]/started") == 1) {
if (getprop("instrumentation/chrono[0]/paused") == 0) {
chr.stop();
setprop("instrumentation/chrono[0]/paused", 1);
} else {
chr.stop();
};
} else {
if (getprop("instrumentation/chrono[0]/paused") == 0) {
chr.stop();
} else {
chr.stop();
setprop("instrumentation/chrono[0]/paused", 0);
};
};
} elsif (tmp == 0) {
if (getprop("instrumentation/chrono[0]/started") == 0) {
if (getprop("instrumentation/chrono[0]/paused") == 0) {
chr.start();
setprop("instrumentation/chrono[0]/started", 1);
} else {
chr.start();
setprop("instrumentation/chrono[0]/paused", 0);
};
} else {
if (getprop("instrumentation/chrono[0]/paused") == 0) {
# No action required
} else {
chr.start();
setprop("instrumentation/chrono[0]/paused", 0);
};
};
};
},0,0);
setlistener("instrumentation/clock/et-selector", func(et){
var tmp1 = et.getValue();
if(tmp1 == 2){
clk.reset();
}elsif(tmp1==1){
clk.stop();
}elsif(tmp1==0){
clk.start();
}
},0,0);
var start_loop = maketimer(0.1, func {
if (systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
# Annun-test
if (getprop("controls/switches/annun-test") == 1) {
var UTC_date = sprintf("%02d %02d %02d", "88", "88", "88");
var UTC_date1 = sprintf("%02d", "88");
var UTC_date2 = sprintf("%02d", "88");
var UTC_date3 = sprintf("%02d", "88");
var clock2_1 = "88:88";
var clock2_2 = sprintf("%02d", 88);
setprop("instrumentation/clock/clock_hh_mm", clock2_1);
setprop("instrumentation/clock/indicated-seconds", clock2_2);
setprop("instrumentation/clock/utc-date", UTC_date);
setprop("instrumentation/clock/utc-date1", UTC_date1);
setprop("instrumentation/clock/utc-date2", UTC_date2);
setprop("instrumentation/clock/utc-date3", UTC_date3);
setprop("instrumentation/chrono[0]/chr-et-string", "88 88");
setprop("instrumentation/clock/elapsed-string", "88:88");
} else {
# Clock
var UTC_date = sprintf("%02d %02d %02d", getprop("sim/time/utc/month"), getprop("sim/time/utc/day"), substr(sprintf("%2d", getprop("sim/time/utc/year")),1,2));
setprop("instrumentation/clock/utc-date", UTC_date);
var UTC_date1 = sprintf("%02d", getprop("sim/time/utc/month"));
var UTC_date2 = sprintf("%02d", getprop("sim/time/utc/day"));
var UTC_date3 = substr(sprintf("%2d", getprop("sim/time/utc/year")),2,2);
var clock2_1 = getprop("instrumentation/clock/indicated-short-string");
var clock2_2 = sprintf("%02d", substr(getprop("instrumentation/clock/indicated-string"),6,2));
setprop("instrumentation/clock/clock_hh_mm", clock2_1);
setprop("instrumentation/clock/indicated-seconds", clock2_2);
setprop("instrumentation/clock/utc-date", UTC_date);
setprop("instrumentation/clock/utc-date1", UTC_date1);
setprop("instrumentation/clock/utc-date2", UTC_date2);
setprop("instrumentation/clock/utc-date3", UTC_date3);
if (getprop("instrumentation/clock/set-knob") == "") {
setprop("instrumentation/clock/set-knob", 0);
};
if (getprop("instrumentation/clock/utc-selector") == "") {
setprop("instrumentation/clock/utc-selector", 0);
};
# if (getprop("instrumentation/clock/utc-selector") == 0) {
# # To do - GPS mode
# };
# if (getprop("instrumentation/clock/utc-selector") == 1) {
# # To do - INT mode
# };
# if (getprop("instrumentation/clock/utc-selector") == 2) {
# # To do - SET mode
# };
# Chrono
var chr_tmp = getprop("instrumentation/chrono[0]/elapsetime-sec");
if (chr_tmp >= 6000) {
setprop("instrumentation/chrono[0]/elapsetime-sec", chr_tmp-6000);
};
var chr_min = int(chr_tmp * 0.0166666666667);
if (chr_tmp >= 60) {
var chr_sec = int(chr_tmp - (chr_min * 60));
} else {
var chr_sec = int(chr_tmp);
};
setprop("instrumentation/chrono[0]/chr-et-min",chr_min);
setprop("instrumentation/chrono[0]/chr-et-sec",chr_sec);
chr_tmp = sprintf("%02d:%02d", chr_min, chr_sec);
setprop("instrumentation/chrono[0]/chr-et-string", chr_tmp);
# ET clock
var et_tmp = getprop("instrumentation/clock/elapsetime-sec");
if (et_tmp >= 360000) {
setprop("instrumentation/clock/elapsetime-sec", et_tmp-360000);
};
var et_min = int(et_tmp * 0.0166666666667);
var et_hr = int(et_min * 0.0166666666667);
et_min = et_min - (et_hr * 60);
setprop("instrumentation/clock/et-hr",et_hr);
setprop("instrumentation/clock/et-min",et_min);
et_tmp = sprintf("%02d:%02d", et_hr, et_min);
setprop("instrumentation/clock/elapsed-string", et_tmp);
};
});
setlistener("fdm/jsbsim/hydraulics/rudder/trim-cmd-deg", func() {
if (systems.ELEC.Bus.dcEss.getValue() < 25 and systems.ELEC.Bus.dc2.getValue() < 25) { return; }
var rudder_val = getprop("fdm/jsbsim/hydraulics/rudder/trim-cmd-deg");
if (getprop("controls/switches/annun-test") == 1) {
setprop("controls/flight/rudder-trim-display", "88.8");
setprop("controls/flight/rudder-trim-letter-display", "8");
} else {
if (rudder_val > -0.05 and rudder_val < 0.05) {
setprop("controls/flight/rudder-trim-display", sprintf("%2.1f", abs(rudder_val)));
setprop("controls/flight/rudder-trim-letter-display", "");
} else {
if (rudder_val >= 0.05) {
setprop("controls/flight/rudder-trim-display", sprintf("%2.1f", abs(rudder_val)));
setprop("controls/flight/rudder-trim-letter-display", "R");
} else {
if (rudder_val <= -0.05) {
setprop("controls/flight/rudder-trim-display", sprintf("%2.1f", abs(rudder_val)));
setprop("controls/flight/rudder-trim-letter-display", "L");
};
};
};
};
},0, 0);

View file

@ -1 +0,0 @@
aircraft.livery.init("Aircraft/A320-family/Models/Liveries/A320/CFM-100");

View file

@ -1 +0,0 @@
aircraft.livery.init("Aircraft/A320-family/Models/Liveries/A320/CFM");

View file

@ -1 +0,0 @@
aircraft.livery.init("Aircraft/A320-family/Models/Liveries/A320/IAE");

View file

@ -1 +0,0 @@
aircraft.livery.init("Aircraft/A320-family/Models/Liveries/A320/CFM-NEO");

View file

@ -1 +0,0 @@
aircraft.livery.init("Aircraft/A320-family/Models/Liveries/A320/PW-NEO");

View file

@ -5,77 +5,71 @@
var wow = nil;
var wowr = nil;
var Lrain = props.globals.getNode("/controls/switches/LrainRpt");
var Rrain = props.globals.getNode("/controls/switches/RrainRpt");
var OnLt = props.globals.getNode("/controls/switches/emerCallLtO");
var CallLt = props.globals.getNode("/controls/switches/emerCallLtC");
var EmerCall = props.globals.getNode("/controls/switches/emerCall");
var CabinCall = props.globals.getNode("/controls/switches/cabinCall");
var MechCall = props.globals.getNode("/controls/switches/mechCall");
var cvr_gndCtl = props.globals.getNode("/controls/CVR/gndctl");
var cvr_power = props.globals.getNode("/controls/CVR/power");
var cvr_tone = props.globals.getNode("/controls/CVR/tone");
# Resets buttons to the default values
var variousReset = func {
setprop("modes/cpt-du-xfr", 0);
setprop("modes/fo-du-xfr", 0);
setprop("controls/fadec/n1mode1", 0);
setprop("controls/fadec/n1mode2", 0);
setprop("/controls/fadec/n1mode1", 0);
setprop("/controls/fadec/n1mode2", 0);
setprop("instrumentation/mk-viii/serviceable", 1);
setprop("instrumentation/mk-viii/inputs/discretes/terr-inhibit", 0);
setprop("instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", 0);
setprop("instrumentation/mk-viii/inputs/discretes/gpws-inhibit", 0);
setprop("instrumentation/mk-viii/inputs/discretes/glideslope-cancel", 0);
setprop("instrumentation/mk-viii/inputs/discretes/glideslope-inhibit", 0);
setprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override", 0);
setprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", 0);
setprop("controls/switches/cabinCall", 0);
setprop("controls/switches/mechCall", 0);
setprop("controls/switches/emer-lights", 0.5);
setprop("/controls/switches/cabinCall", 0);
setprop("/controls/switches/mechCall", 0);
setprop("/controls/switches/emer-lights", 0.5);
# cockpit voice recorder stuff
setprop("controls/CVR/power", 0);
setprop("controls/CVR/test", 0);
setprop("controls/CVR/tone", 0);
setprop("controls/CVR/gndctl", 0);
setprop("controls/CVR/erase", 0);
setprop("controls/switches/cabinfan", 1);
setprop("controls/oxygen/crewOxyPB", 1); # 0 = OFF 1 = AUTO
setprop("controls/switches/emerCallLtO", 0); # ON light, flashes white for 10s
setprop("controls/switches/emerCallLtC", 0); # CALL light, flashes amber for 10s
setprop("controls/switches/emerCall", 0);
setprop("controls/switches/LrainRpt", 0);
setprop("controls/switches/RrainRpt", 0);
setprop("controls/switches/wiperLspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
setprop("controls/switches/wiperRspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
setprop("controls/lighting/strobe", 0);
setprop("controls/lighting/beacon", 0);
setprop("controls/switches/beacon", 0);
setprop("controls/switches/wing-lights", 0);
setprop("controls/switches/landing-lights-l", 0);
setprop("controls/switches/landing-lights-r", 0);
setprop("controls/lighting/wing-lights", 0);
setprop("controls/lighting/nav-lights-switch", 0);
setprop("controls/lighting/landing-lights[1]", 0);
setprop("controls/lighting/landing-lights[2]", 0);
setprop("controls/lighting/taxi-light-switch", 0);
setprop("controls/lighting/DU/du1", 1);
setprop("controls/lighting/DU/du2", 1);
setprop("controls/lighting/DU/du3", 1);
setprop("controls/lighting/DU/du4", 1);
setprop("controls/lighting/DU/du5", 1);
setprop("controls/lighting/DU/du6", 1);
setprop("controls/lighting/DU/mcdu1", 1);
setprop("controls/lighting/DU/mcdu2", 1);
setprop("/controls/CVR/power", 0);
setprop("/controls/CVR/test", 0);
setprop("/controls/CVR/tone", 0);
setprop("/controls/CVR/gndctl", 0);
setprop("/controls/CVR/erase", 0);
setprop("/controls/switches/pneumatics/cabin-fans", 1);
setprop("/controls/oxygen/crewOxyPB", 1); # 0 = OFF 1 = AUTO
setprop("/controls/switches/emerCallLtO", 0); # ON light, flashes white for 10s
setprop("/controls/switches/emerCallLtC", 0); # CALL light, flashes amber for 10s
setprop("/controls/switches/emerCall", 0);
setprop("/controls/switches/LrainRpt", 0);
setprop("/controls/switches/RrainRpt", 0);
setprop("/controls/switches/wiperLspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
setprop("/controls/switches/wiperRspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
setprop("/controls/lighting/strobe", 0);
setprop("/controls/lighting/beacon", 0);
setprop("/controls/switches/beacon", 0);
setprop("/controls/switches/wing-lights", 0);
setprop("/controls/switches/landing-lights-l", 0);
setprop("/controls/switches/landing-lights-r", 0);
setprop("/controls/lighting/wing-lights", 0);
setprop("/controls/lighting/nav-lights-switch", 0);
setprop("/controls/lighting/landing-lights[1]", 0);
setprop("/controls/lighting/landing-lights[2]", 0);
setprop("/controls/lighting/taxi-light-switch", 0);
setprop("/controls/lighting/DU/du1", 1);
setprop("/controls/lighting/DU/du2", 1);
setprop("/controls/lighting/DU/du3", 1);
setprop("/controls/lighting/DU/du4", 1);
setprop("/controls/lighting/DU/du5", 1);
setprop("/controls/lighting/DU/du6", 1);
setprop("/controls/lighting/DU/mcdu1", 1);
setprop("/controls/lighting/DU/mcdu2", 1);
setprop("modes/fcu/hdg-time", -45);
setprop("controls/switching/ATTHDG", 0);
setprop("controls/switching/AIRDATA", 0);
setprop("controls/switches/no-smoking-sign", 1);
setprop("controls/switches/seatbelt-sign", 1);
setprop("/controls/switching/ATTHDG", 0);
setprop("/controls/switching/AIRDATA", 0);
setprop("/controls/switches/no-smoking-sign", 1);
setprop("/controls/switches/seatbelt-sign", 1);
}
var BUTTONS = {
update: func() {
rainRepel();
CVR_master();
if (EmerCall.getValue()) {
EmerCallOnLight();
EmerCallLight();
@ -83,17 +77,6 @@ var BUTTONS = {
},
};
var rainRepel = func() {
if (pts.Engines.Engine.state[0].getValue() != 3 and pts.Engines.Engine.state[1].getValue() != 3 and pts.Gear.wow[0].getValue()) {
if (Lrain.getValue()) {
Lrain.setValue(0);
}
if (Rrain.getValue()) {
Rrain.setValue(0);
}
}
}
var _OnLt = nil;
var _EmerCall = nil;
@ -120,18 +103,6 @@ var EmerCallLight = func() {
}
}
var CVR_master = func() {
wow = pts.Gear.wow[0].getValue();
wowr = pts.Gear.wow[1].getValue();
if (systems.ELEC.Bus.acEss.getValue() > 0 and wow and wowr and (cvr_gndCtl.getValue() or (pts.Engines.Engine.state[0].getValue() == 3 or pts.Engines.Engine.state[1].getValue() == 3))) {
cvr_power.setValue(1);
} else if (!wow and !wowr and systems.ELEC.Bus.acEss.getValue() > 0) {
cvr_power.setValue(1);
} else {
cvr_power.setValue(0);
}
}
var EmerCallFunc = func {
EmerCall.setValue(1);
settimer(func() {
@ -179,3 +150,9 @@ var toggleSTD = func {
pts.Instrumentation.Altimeter.std.setBoolValue(1);
}
}
var pushbuttonSound = props.globals.getNode("/sim/sounde/pushbutton");
var pushbutton = func {
pushbuttonSound.setValue(1);
settimer(func {pushbuttonSound.setValue(0);},0.20);
}

View file

@ -0,0 +1,150 @@
# Custom view positions
# Copyright (c) 2020 Josh Davidson (Octal450)
#########
# Views #
#########
var resetView = 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 = 360;
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", -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);
if (_shakeFlag) {
setprop("/sim/rendering/headshake/enabled", 1);
}
}
}

View file

@ -7,8 +7,6 @@ print("------------------------------------------------");
print("Copyright (c) 2016-2020 Josh Davidson (Octal450)");
print("------------------------------------------------");
setprop("/sim/replay/was-active", 0);
setprop("/sim/menubar/default/menu[0]/item[0]/enabled", 0);
setprop("/sim/menubar/default/menu[2]/item[0]/enabled", 0);
setprop("/sim/menubar/default/menu[2]/item[2]/enabled", 0);
@ -17,18 +15,6 @@ setprop("/sim/menubar/default/menu[5]/item[9]/enabled", 0);
setprop("/sim/menubar/default/menu[5]/item[10]/enabled", 0);
setprop("/sim/menubar/default/menu[5]/item[11]/enabled", 0);
# Dimmers
setprop("/controls/lighting/ndl-norm", 1);
setprop("/controls/lighting/ndr-norm", 1);
setprop("/controls/lighting/upper-norm", 1);
# Lights
setprop("/sim/model/lights/nose-lights", 0);
setprop("/sim/model/lights/turnoffsw", 0);
setprop("/controls/lighting/turnoff-light-switch", 0);
setprop("/controls/lighting/leftturnoff", 0);
setprop("/controls/lighting/rightturnoff", 0);
# Oil Qty
var qty1 = math.round((rand() * 5 ) + 20, 0.1);
var qty2 = math.round((rand() * 5 ) + 20, 0.1);
@ -38,41 +24,22 @@ setprop("/engines/engine[1]/oil-qt-actual", qty2);
##########
# Lights #
##########
var beacon_switch = props.globals.getNode("controls/switches/beacon", 1);
var beacon_ctl = props.globals.getNode("controls/lighting/beacon", 1);
var beacon = aircraft.light.new("/sim/model/lights/beacon", [0.1, 1], "/controls/lighting/beacon");
var strobe_switch = props.globals.getNode("controls/switches/strobe", 1);
var strobe_light = props.globals.getNode("controls/lighting/strobe", 1);
var strobe = aircraft.light.new("/sim/model/lights/strobe", [0.05, 0.06, 0.05, 1], "/controls/lighting/strobe");
var tail_strobe = aircraft.light.new("/sim/model/lights/tailstrobe", [0.1, 1], "/controls/lighting/strobe");
var logo_lights = getprop("/sim/model/lights/logo-lights");
var nav_lights = props.globals.getNode("sim/model/lights/nav-lights");
var wing_switch = props.globals.getNode("controls/switches/wing-lights", 1);
var wing_ctl = props.globals.getNode("controls/lighting/wing-lights", 1);
var dome_light = props.globals.initNode("/sim/model/lights/dome-light", 0.0, "DOUBLE");
var wow = getprop("/gear/gear[2]/wow");
var slats = getprop("/controls/flight/slats");
var gear = getprop("/gear/gear[0]/position-norm");
var nose_lights = getprop("/sim/model/lights/nose-lights");
var left_turnoff_light = props.globals.getNode("controls/lighting/leftturnoff");
var right_turnoff_light = props.globals.getNode("controls/lighting/rightturnoff");
var settingT = getprop("/controls/lighting/taxi-light-switch");
var settingTurnoff = getprop("/controls/lighting/turnoff-light-switch");
var setting = getprop("/controls/lighting/nav-lights-switch");
var domeSetting = getprop("/controls/lighting/dome-norm");
var landL = props.globals.getNode("controls/lighting/landing-lights[1]", 1);
var landR = props.globals.getNode("controls/lighting/landing-lights[2]", 1);
var landlSw = props.globals.getNode("controls/switches/landing-lights-l", 1);
var landrSw = props.globals.getNode("controls/switches/landing-lights-r", 1);
###################
# Tire Smoke/Rain #
###################
var stateL = 0;
var stateR = 0;
###########
# Effects #
###########
var tiresmoke_system = aircraft.tyresmoke_system.new(0, 1, 2);
aircraft.rain.init();
aircraft.livery.init(getprop("/sim/model/livery-dir"));
##########
# Sounds #
##########
@ -82,7 +49,7 @@ setlistener("/sim/sounde/btn1", func {
return;
}
settimer(func {
props.globals.getNode("sim/sounde/btn1").setBoolValue(0);
props.globals.getNode("/sim/sounde/btn1").setBoolValue(0);
}, 0.05);
});
@ -91,7 +58,7 @@ setlistener("/sim/sounde/oh-btn", func {
return;
}
settimer(func {
props.globals.getNode("sim/sounde/oh-btn").setBoolValue(0);
props.globals.getNode("/sim/sounde/oh-btn").setBoolValue(0);
}, 0.05);
});
@ -100,7 +67,7 @@ setlistener("/sim/sounde/btn3", func {
return;
}
settimer(func {
props.globals.getNode("sim/sounde/btn3").setBoolValue(0);
props.globals.getNode("/sim/sounde/btn3").setBoolValue(0);
}, 0.05);
});
@ -109,7 +76,7 @@ setlistener("/sim/sounde/knb1", func {
return;
}
settimer(func {
props.globals.getNode("sim/sounde/knb1").setBoolValue(0);
props.globals.getNode("/sim/sounde/knb1").setBoolValue(0);
}, 0.05);
});
@ -118,36 +85,76 @@ setlistener("/sim/sounde/switch1", func {
return;
}
settimer(func {
props.globals.getNode("sim/sounde/switch1").setBoolValue(0);
props.globals.getNode("/sim/sounde/switch1").setBoolValue(0);
}, 0.05);
});
setlistener("/controls/lighting/seatbelt-sign", func {
props.globals.getNode("sim/sounde/seatbelt-sign").setBoolValue(1);
props.globals.getNode("/sim/sounde/seatbelt-sign").setBoolValue(1);
settimer(func {
props.globals.getNode("sim/sounde/seatbelt-sign").setBoolValue(0);
props.globals.getNode("/sim/sounde/seatbelt-sign").setBoolValue(0);
}, 2);
}, 0, 0);
setlistener("/controls/lighting/no-smoking-sign", func {
props.globals.getNode("sim/sounde/no-smoking-sign").setBoolValue(1);
props.globals.getNode("/sim/sounde/no-smoking-sign").setBoolValue(1);
settimer(func {
props.globals.getNode("sim/sounde/no-smoking-sign").setBoolValue(0);
props.globals.getNode("/sim/sounde/no-smoking-sign").setBoolValue(0);
}, 1);
}, 0, 0);
var flaps_click = props.globals.getNode("/sim/sounde/flaps-click");
setlistener("/controls/flight/flaps-input", func {
props.globals.getNode("sim/sounde/flaps-click").setBoolValue(1);
flaps_click.setBoolValue(1);
}, 0, 0);
setlistener("/sim/sounde/flaps-click", func {
if (!getprop("/sim/sounde/flaps-click")) {
if (!flaps_click.getValue()) {
return;
}
settimer(func {
props.globals.getNode("sim/sounde/flaps-click").setBoolValue(0);
flaps_click.setBoolValue(0);
}, 0.4);
});
var spdbrk_click = props.globals.getNode("/sim/sounde/spdbrk-click");
setlistener("/controls/flight/speedbrake", func {
spdbrk_click.setBoolValue(1);
}, 0, 0);
setlistener("/sim/sounde/spdbrk-click", func {
if (!spdbrk_click.getValue()) {
return;
}
settimer(func {
spdbrk_click.setBoolValue(0);
}, 0.4);
});
var relayBatt1 = func {
setprop("/sim/sounde/relay-batt-1",1);
settimer(func {setprop("/sim/sounde/relay-batt-1",0);},0.35);
}
var relayBatt2 = func {
setprop("/sim/sounde/relay-batt-2",1);
settimer(func {setprop("/sim/sounde/relay-batt-2",0);},0.35);
}
var relayApu = func {
setprop("/sim/sounde/relay-apu",1);
settimer(func {setprop("/sim/sounde/relay-apu",0);},0.35);
}
var relayExt = func {
setprop("/sim/sounde/relay-ext",1);
settimer(func {setprop("/sim/sounde/relay-ext",0);},0.35);
}
setlistener("/systems/electrical/sources/bat-1/contact", relayBatt1, nil, 0);
setlistener("/systems/electrical/sources/bat-2/contact", relayBatt2, nil, 0);
setlistener("/systems/electrical/relay/apu-glc/contact-pos", relayApu, nil, 0);
setlistener("/systems/electrical/relay/ext-epc/contact-pos", relayExt, nil, 0);
#########
# Doors #
#########
@ -189,10 +196,9 @@ var triggerDoor = func(door, doorName, doorDesc) {
}
};
#######################
# Various Other Stuff #
#######################
###########
# Systems #
###########
var systemsInit = func {
fbw.FBW.init();
effects.light_manager.init();
@ -203,10 +209,11 @@ var systemsInit = func {
systems.ADIRS.init();
systems.eng_init();
systems.APUController.init();
systems.autobrake_init();
systems.BrakeSys.reset();
systems.Autobrake.init();
systems.fire_init();
systems.icingInit();
fmgc.flightPlanController.reset();
fmgc.windController.reset();
fadec.FADEC.init();
fmgc.ITAF.init();
fmgc.FMGCinit();
@ -215,6 +222,7 @@ var systemsInit = func {
mcdu_scratchpad.mcduMsgtimer1.start();
mcdu_scratchpad.mcduMsgtimer2.start();
systemsLoop.start();
effects.icingInit();
lightsLoop.start();
ecam.ECAM.init();
libraries.variousReset();
@ -225,82 +233,123 @@ var systemsInit = func {
fcu.FCUController.init();
dmc.DMController.init();
fmgc.flightPlanController.init();
fmgc.windController.init();
atsu.CompanyCall.init();
}
setlistener("/sim/signals/fdm-initialized", func {
systemsInit();
fmgc.postInit();
fmgc.flightPlanTimer.start();
fmgc.WaypointDatabase.read();
});
var collectorTankL = props.globals.getNode("/fdm/jsbsim/propulsion/tank[5]/contents-lbs");
var collectorTankR = props.globals.getNode("/fdm/jsbsim/propulsion/tank[6]/contents-lbs");
var groundAir = props.globals.getNode("/controls/pneumatics/switches/groundair");
var groundCart = props.globals.getNode("/controls/electrical/ground-cart");
var chocks = props.globals.getNode("/services/chocks/enable");
var engRdy = props.globals.getNode("/engines/ready");
var groundspeed = 0;
var systemsLoop = maketimer(0.1, func {
systems.ELEC.loop();
systems.PNEU.loop();
systems.HYD.loop();
systems.FUEL.loop();
systems.ADIRS.loop();
systems.APUController.loop();
systems.BrakeSys.update();
ecam.ECAM.loop();
libraries.BUTTONS.update();
fadec.FADEC.loop();
rmp.rmpUpdate();
fcu.FCUController.loop();
dmc.DMController.loop();
systems.APUController.loop();
atsu.ATSU.loop();
libraries.BUTTONS.update();
systems.HFLoop();
if ((getprop("/controls/pneumatic/switches/groundair") or getprop("/controls/electrical/ground-cart")) and ((getprop("/velocities/groundspeed-kt") > 2) or (getprop("/controls/gear/brake-parking") == 0 and getprop("/services/chocks/nose") == 0 and getprop("/services/chocks/left") == 0 and getprop("/services/chocks/right") == 0))) {
setprop("/controls/electrical/ground-cart", 0);
setprop("/controls/pneumatic/switches/groundair", 0);
groundspeed = pts.Velocities.groundspeed.getValue();
if ((groundAir.getBoolValue() or groundCart.getBoolValue()) and ((groundspeed > 2) or (!pts.Controls.Gear.parkingBrake.getBoolValue() and !chocks.getBoolValue()))) {
groundAir.setBoolValue(0);
groundCart.setBoolValue(0);
}
if (getprop("/velocities/groundspeed-kt") > 15) {
setprop("/systems/shake/effect", 1);
if (groundspeed > 15) {
shakeEffectA3XX.setBoolValue(1);
} else {
setprop("/systems/shake/effect", 0);
shakeEffectA3XX.setBoolValue(0);
}
if (getprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override") == 1 or (getprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override") == 1 and getprop("/controls/flight/flaps-pos") >= 4)) {
setprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-override", 1);
stateL = pts.Engines.Engine.state[0].getValue();
stateR = pts.Engines.Engine.state[1].getValue();
if (stateL == 3 and stateR == 3) {
engRdy.setBoolValue(1);
} else {
setprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-override", 0);
engRdy.setBoolValue(0);
}
if (getprop("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit") == 1) {
setprop("/instrumentation/mk-viii/speaker/volume", 0);
} else {
setprop("/instrumentation/mk-viii/speaker/volume", 2);
}
if (getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") == 3) {
setprop("/engines/ready", 1);
} else {
setprop("/engines/ready", 0);
}
if ((getprop("/engines/engine[0]/state") == 2 or getprop("/engines/engine[0]/state") == 3) and getprop("/fdm/jsbsim/propulsion/tank[5]/contents-lbs") < 1) {
if ((stateL == 2 or stateL == 3) and collectorTankL.getValue() < 1) {
systems.cutoff_one();
}
if ((getprop("/engines/engine[1]/state") == 2 or getprop("/engines/engine[1]/state") == 3) and getprop("/fdm/jsbsim/propulsion/tank[6]/contents-lbs") < 1) {
if ((stateR == 2 or stateR == 3) and collectorTankR.getValue() < 1) {
systems.cutoff_two();
}
if (getprop("/sim/replay/replay-state") == 1) {
setprop("/sim/replay/was-active", 1);
} else if (getprop("/sim/replay/replay-state") == 0 and getprop("/sim/replay/was-active") == 1) {
setprop("/sim/replay/was-active", 0);
acconfig.colddark();
gui.popupTip("Replay Ended: Setting Cold and Dark state...");
}
});
# GPWS
var GPWS = {
inhibitNode: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit"),
volume: props.globals.getNode("/instrumentation/mk-viii/speaker/volume"),
flapAllOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override"),
flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override"),
flapOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-override"),
};
setlistener("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit", func() {
if (GPWS.inhibitNode.getBoolValue()) {
GPWS.volume.setValue(2);
} else {
GPWS.volume.setValue(0);
}
}, 0, 0);
var updateGPWSFlap = func() {
if (GPWS.flapAllOverride.getBoolValue() or (GPWS.flap3Override.getBoolValue() and pts.Controls.Flight.flapsPos.getValue() >= 4)) {
GPWS.flapOverride.setBoolValue(1);
} else {
GPWS.flapOverride.setBoolValue(0);
}
}
setlistener("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override", func() {
updateGPWSFlap();
}, 0, 0);
setlistener("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", func() {
updateGPWSFlap();
}, 0, 0);
# Replay
var replayState = props.globals.getNode("/sim/replay/replay-state");
setlistener("/sim/replay/replay-state", func() {
if (replayState.getBoolValue()) {
} else {
acconfig.colddark();
gui.popupTip("Replay Ended: Setting Cold and Dark state...");
}
}, 0, 0);
# Steep ILS
setlistener("/options/steep-ils", func {
if (getprop("/options/steep-ils") == 1) {
setprop("/instrumentation/mk-viii/inputs/discretes/steep-approach", 1);
} else {
setprop("/instrumentation/mk-viii/inputs/discretes/steep-approach", 0);
}
});
}, 0, 0);
# hackCanvas
canvas.Text._lastText = canvas.Text["_lastText"];
canvas.Text.setText = func(text) {
if (text == me._lastText and text != nil and size(text) == size(me._lastText)) {return me;}
@ -324,8 +373,12 @@ canvas.Element.setVisible = func(vis) {
me.setBool("visible", vis);
};
############
# Controls #
############
controls.stepSpoilers = func(step) {
setprop("/controls/flight/speedbrake-arm", 0);
pts.Controls.Flight.speedbrakeArm.setValue(0);
if (step == 1) {
deploySpeedbrake();
} else if (step == -1) {
@ -334,37 +387,40 @@ controls.stepSpoilers = func(step) {
}
var deploySpeedbrake = func {
if (getprop("/gear/gear[1]/wow") == 1 or getprop("/gear/gear[2]/wow") == 1) {
if (getprop("/controls/flight/speedbrake") < 1.0) {
setprop("/controls/flight/speedbrake", 1.0);
if (pts.Gear.Wow[1].getBoolValue() or pts.Gear.Wow[2].getBoolValue()) {
if (pts.Controls.Flight.speedbrake.getValue() < 1.0) {
pts.Controls.Flight.speedbrake.setValue(1.0);
}
} else {
if (getprop("/controls/flight/speedbrake") < 0.5) {
setprop("/controls/flight/speedbrake", 0.5);
} else if (getprop("/controls/flight/speedbrake") < 1.0) {
setprop("/controls/flight/speedbrake", 1.0);
if (pts.Controls.Flight.speedbrake.getValue() < 0.5) {
pts.Controls.Flight.speedbrake.setValue(0.5);
} else if (pts.Controls.Flight.speedbrake.getValue() < 1.0) {
pts.Controls.Flight.speedbrake.setValue(1.0);
}
}
}
var retractSpeedbrake = func {
if (getprop("/gear/gear[1]/wow") == 1 or getprop("/gear/gear[2]/wow") == 1) {
if (getprop("/controls/flight/speedbrake") > 0.0) {
setprop("/controls/flight/speedbrake", 0.0);
if (pts.Gear.Wow[1].getBoolValue() or pts.Gear.Wow[2].getBoolValue()) {
if (pts.Controls.Flight.speedbrake.getValue() > 0.0) {
pts.Controls.Flight.speedbrake.setValue(0.0);
}
} else {
if (getprop("/controls/flight/speedbrake") > 0.5) {
setprop("/controls/flight/speedbrake", 0.5);
} else if (getprop("/controls/flight/speedbrake") > 0.0) {
setprop("/controls/flight/speedbrake", 0.0);
if (pts.Controls.Flight.speedbrake.getValue() > 0.5) {
pts.Controls.Flight.speedbrake.setValue(0.5);
} else if (pts.Controls.Flight.speedbrake.getValue() > 0.0) {
pts.Controls.Flight.speedbrake.setValue(0.0);
}
}
}
var delta = 0;
var output = 0;
var slewProp = func(prop, delta) {
delta *= getprop("/sim/time/delta-realtime-sec");
setprop(prop, getprop(prop) + delta);
return getprop(prop);
delta *= pts.Sim.Time.deltaRealtimeSec.getValue();
output = props.globals.getNode(prop).getValue() + delta;
props.globals.getNode(prop).setValue(output);
return output;
}
controls.flapsDown = func(step) {
@ -392,135 +448,42 @@ controls.flapsDown = func(step) {
}
}
controls.elevatorTrim = func(speed) {
if (getprop("/systems/hydraulic/green-psi") >= 1500) {
slewprop("/controls/flight/elevator-trim", speed * 0.0185); # Rate in JSB normalized (0.25 / 13.5)
controls.elevatorTrim = func(d) {
if (systems.HYD.Psi.green.getValue() >= 1500) {
slewProp("/controls/flight/elevator-trim", d * 0.0185); # Rate in JSB normalized (0.125 / 13.5)
} else {
slewprop("/controls/flight/elevator-trim", speed * 0.0092); # Rate in JSB normalized (0.125 / 13.5)
slewProp("/controls/flight/elevator-trim", d * 0.0092) # Rate in JSB normalized (0.125 / 13.5)
}
}
setlistener("/controls/flight/elevator-trim", func {
if (getprop("/controls/flight/elevator-trim") > 0.296296) {
setprop("/controls/flight/elevator-trim", 0.296296);
if (pts.Controls.Flight.elevatorTrim.getValue() > 0.296296) {
pts.Controls.Flight.elevatorTrim.setValue(0.296296);
}
});
}, 0, 0);
# For the cockpit rotation and anywhere else you want to use it
var cmdDegCalc = 0;
var slewPitchWheel = func(d) {
cmdDegCalc = math.round(pts.Fdm.JSBsim.Hydraulics.ElevatorTrim.cmdDeg.getValue(), 0.1);
if (d > 0) { # DN
if (cmdDegCalc < 4) {
cmdDegCalc = (cmdDegCalc + 0.1) / 13.5; # Add and normalize, NOT 4! 13.5 = 1 on either polarity
pts.Controls.Flight.elevatorTrim.setValue(cmdDegCalc);
}
} else { # UP
if (cmdDegCalc > -13.5) {
cmdDegCalc = (cmdDegCalc - 0.1) / 13.5; # Subtract and normalize
pts.Controls.Flight.elevatorTrim.setValue(cmdDegCalc);
}
}
}
##########
# Lights #
##########
var lightsLoop = maketimer(0.2, func {
gear = getprop("/gear/gear[0]/position-norm");
nose_lights = getprop("/sim/model/lights/nose-lights");
settingT = getprop("/controls/lighting/taxi-light-switch");
domeSetting = getprop("/controls/lighting/dome-norm");
# nose lights
if (settingT == 0.5 and gear > 0.9 and (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0)) {
setprop("/sim/model/lights/nose-lights", 0.85);
} else if (settingT == 1 and gear > 0.9 and (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0)) {
setprop("/sim/model/lights/nose-lights", 1);
} else {
setprop("/sim/model/lights/nose-lights", 0);
}
# turnoff lights
settingTurnoff = getprop("/controls/lighting/turnoff-light-switch");
left_turnoff_light = props.globals.getNode("controls/lighting/leftturnoff");
right_turnoff_light = props.globals.getNode("controls/lighting/rightturnoff");
if (settingTurnoff == 1 and gear > 0.9 and getprop("/systems/electrical/bus/ac-1") > 0) {
left_turnoff_light.setBoolValue(1);
} else {
left_turnoff_light.setBoolValue(0);
}
if (settingTurnoff == 1 and gear > 0.9 and getprop("/systems/electrical/bus/ac-2") > 0) {
right_turnoff_light.setBoolValue(1);
} else {
right_turnoff_light.setBoolValue(0);
}
# logo and navigation lights
setting = getprop("/controls/lighting/nav-lights-switch");
nav_lights = props.globals.getNode("sim/model/lights/nav-lights");
logo_lights = props.globals.getNode("sim/model/lights/logo-lights");
wow = getprop("/gear/gear[2]/wow");
slats = getprop("/controls/flight/slats");
if (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0 or getprop("/systems/electrical/bus/dc-1") > 0 or getprop("/systems/electrical/bus/dc-2") > 0) {
setprop("/systems/electrical/nav-lights-power", 1);
} else {
setprop("/systems/electrical/nav-lights-power", 0);
}
if (setting == 0 and logo_lights == 1) {
logo_lights.setBoolValue(0);
} else if (setting == 1 or setting == 2 and (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0)) {
if ((wow) or (!wow and slats > 0)) {
logo_lights.setBoolValue(1);
} else {
logo_lights.setBoolValue(0);
}
} else {
logo_lights.setBoolValue(0);
}
if (setting == 1 or setting == 2 and (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0 or getprop("/systems/electrical/bus/dc-1") > 0 or getprop("/systems/electrical/bus/dc-2") > 0)) {
nav_lights.setBoolValue(1);
} else {
nav_lights.setBoolValue(0);
}
if (domeSetting == 0.5 and getprop("/systems/electrical/bus/dc-ess") > 0) {
dome_light.setValue(0.5);
} elsif (domeSetting == 1 and getprop("/systems/electrical/bus/dc-ess") > 0) {
dome_light.setValue(1);
} else {
dome_light.setValue(0);
}
# strobe
strobe_sw = strobe_switch.getValue();
if (strobe_sw == 1 and getprop("/systems/electrical/bus/ac-2") > 0) {
strobe_light.setValue(1);
} elsif (strobe_sw == 0.5 and getprop("/gear/gear[1]/wow") == 0 and getprop("/gear/gear[2]/wow") == 0 and getprop("/systems/electrical/bus/ac-2") > 0) {
# todo: use lgciu output 5
strobe_light.setValue(1);
} else {
strobe_light.setValue(0);
}
# beacon
if (beacon_switch.getValue() == 1 and (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0)) {
beacon_ctl.setValue(1);
} else {
beacon_ctl.setValue(0);
}
# wing
if (wing_switch.getValue() == 1 and (getprop("/systems/electrical/bus/ac-1") > 0 or getprop("/systems/electrical/bus/ac-2") > 0)) {
wing_ctl.setValue(1);
} else {
wing_ctl.setValue(0);
}
# landL
if (landlSw.getValue() == 1 and getprop("/systems/electrical/bus/ac-1") > 0) {
landL.setValue(1);
} else {
landL.setValue(0);
}
if (landrSw.getValue() == 1 and getprop("/systems/electrical/bus/ac-2") > 0) {
landR.setValue(1);
} else {
landR.setValue(0);
}
# signs
if (getprop("/systems/pressurization/cabinalt-norm") > 11300) {
@ -549,86 +512,70 @@ var lightsLoop = maketimer(0.2, func {
setprop("/controls/lighting/no-smoking-sign", 0); # sign stays on in cabin but sound still occurs
}
}
if (getprop("/controls/lighting/landing-lights[1]") >= 0.5) {
setprop("/fdm/jsbsim/rubbish/landL", 1);
} else {
setprop("/fdm/jsbsim/rubbish/landL", 0);
}
if (getprop("/controls/lighting/landing-lights[2]") >= 0.5) {
setprop("/fdm/jsbsim/rubbish/landR", 1);
} else {
setprop("/fdm/jsbsim/rubbish/landR", 0);
}
});
var lTray = func {
var lTrayCMD = getprop("/controls/tray/lefttrayext");
if (lTrayCMD < 0.5) {
interpolate("/controls/tray/lefttrayext", 0.5, 0.5);
} else if (lTrayCMD == 0.5) {
interpolate("/controls/tray/lefttrayext", 1.0, 0.5);
var pilotComfortTwoPos = func(prop) {
var item = getprop(prop);
if (item < 0.5) {
interpolate(prop, 0.5, 0.5);
} elsif (item == 0.5) {
interpolate(prop, 1.0, 0.5);
} else {
interpolate("/controls/tray/lefttrayext", 0.0, 1.0);
interpolate(prop, 0.0, 1.0);
}
}
var rTray = func {
var rTrayCMD = getprop("/controls/tray/righttrayext");
if (rTrayCMD < 0.5) {
interpolate("/controls/tray/righttrayext", 0.5, 0.5);
} else if (rTrayCMD == 0.5) {
interpolate("/controls/tray/righttrayext", 1.0, 0.5);
var pilotComfortOnePos = func(prop) {
var item = getprop(prop);
if (item < 1.0) {
interpolate(prop, 1.0, 1.0);
} else {
interpolate("/controls/tray/righttrayext", 0.0, 1.0);
interpolate(prop, 0.0, 1.0);
}
}
var lTray = func {
pilotComfortTwoPos("/controls/tray/lefttrayext");
}
var rTray = func {
pilotComfortTwoPos("/controls/tray/righttrayext");
}
var l1Pedal = func {
var lPedalCMD = getprop("/controls/footrest-cpt[0]");
if (lPedalCMD < 1.0) {
interpolate("/controls/footrest-cpt[0]", 1.0, 0.5);
} else {
interpolate("/controls/footrest-cpt[0]", 0.0, 0.5);
pilotComfortOnePos("/controls/footrest-cpt[0]");
}
}
var l2Pedal = func {
var l2PedalCMD = getprop("/controls/footrest-cpt[1]");
if (l2PedalCMD < 1.0) {
interpolate("/controls/footrest-cpt[1]", 1.0, 0.5);
} else {
interpolate("/controls/footrest-cpt[1]", 0.0, 0.5);
}
pilotComfortOnePos("/controls/footrest-cpt[1]");
}
var r1Pedal = func {
var rPedalCMD = getprop("/controls/footrest-fo[0]");
if (rPedalCMD < 1.0) {
interpolate("/controls/footrest-fo[0]", 1.0, 0.5);
} else {
interpolate("/controls/footrest-fo[0]", 0.0, 0.5);
pilotComfortOnePos("/controls/footrest-fo[0]");
}
}
var r2Pedal = func {
var r2PedalCMD = getprop("/controls/footrest-fo[1]");
if (r2PedalCMD < 1.0) {
interpolate("/controls/footrest-fo[1]", 1.0, 0.5);
} else {
interpolate("/controls/footrest-fo[1]", 0.0, 0.5);
}
pilotComfortOnePos("/controls/footrest-fo[1]");
}
if (getprop("/controls/flight/auto-coordination") == 1) {
setprop("/controls/flight/auto-coordination", 0);
#####################
# Auto-coordination #
#####################
if (pts.Controls.Flight.autoCoordination.getBoolValue()) {
pts.Controls.Flight.autoCoordination.setBoolValue(0);
pts.Controls.Flight.aileronDrivesTiller.setBoolValue(1);
} else {
pts.Controls.Flight.aileronDrivesTiller.setBoolValue(0);
}
setlistener("/controls/flight/auto-coordination", func {
pts.Controls.Flight.autoCoordination.setBoolValue(0);
print("System: Auto Coordination has been turned off as it is not compatible with the fly-by-wire of this aircraft.");
screen.log.write("Auto Coordination has been disabled as it is not compatible with the fly-by-wire of this aircraft", 1, 0, 0);
}
setprop("/controls/flight/aileron-drives-tiller", 0);
}, 0, 0);
##############
# Legacy FCU #
##############
var APPanel = {
APDisc: func() {
fcu.FCUController.APDisc();
@ -638,149 +585,4 @@ var APPanel = {
},
};
var resetView = 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 = 360;
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", -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);
if (_shakeFlag) {
setprop("/sim/rendering/headshake/enabled", 1);
}
}
}
setprop("/systems/acconfig/libraries-loaded", 1);

View file

@ -4,8 +4,11 @@
# Anything that says Temp is set by another file to avoid multiple getValue calls
# Usage Example: pts.Class.SubClass.node.getValue()
var Acconfig = {
running: props.globals.getNode("/systems/acconfig/autoconfig-running"),
};
var APU = {
masterSw: props.globals.getNode("/controls/apu/master"),
rpm: props.globals.getNode("/engines/engine[2]/n1"),
};
@ -22,17 +25,35 @@ var Controls = {
cutoffSw: [props.globals.getNode("/controls/engines/engine[0]/cutoff-switch"), props.globals.getNode("/controls/engines/engine[1]/cutoff-switch")],
firePb: [props.globals.getNode("/controls/engines/engine[0]/fire-btn"), props.globals.getNode("/controls/engines/engine[1]/fire-btn")],
throttle: [props.globals.getNode("/controls/engines/engine[0]/throttle"), props.globals.getNode("/controls/engines/engine[1]/throttle")],
throttleFdm: [props.globals.getNode("/controls/engines/engine[0]/throttle-fdm"), props.globals.getNode("/controls/engines/engine[1]/throttle-fdm")],
throttleLever: [props.globals.getNode("/controls/engines/engine[0]/throttle-lever"), props.globals.getNode("/controls/engines/engine[1]/throttle-lever")],
throttleOutput: [props.globals.getNode("/controls/engines/engine[0]/throttle-output"), props.globals.getNode("/controls/engines/engine[1]/throttle-output")],
throttlePos: [props.globals.getNode("/controls/engines/engine[0]/throttle-pos"), props.globals.getNode("/controls/engines/engine[1]/throttle-pos")],
throttleRev: [props.globals.getNode("/controls/engines/engine[0]/throttle-rev"), props.globals.getNode("/controls/engines/engine[1]/throttle-rev")],
reverser: [props.globals.getNode("/controls/engines/engine[0]/reverser"), props.globals.getNode("/controls/engines/engine[1]/reverser")],
},
},
Flight: {
aileron: props.globals.getNode("/controls/flight/aileron"),
aileronDrivesTiller: props.globals.getNode("/controls/flight/aileron-drives-tiller"),
autoCoordination: props.globals.getNode("/controls/flight/auto-coordination"),
elevatorTrim: props.globals.getNode("/controls/flight/elevator-trim"),
flaps: props.globals.getNode("/controls/flight/flaps"),
flapsTemp: 0,
flapsInput: props.globals.getNode("/controls/flight/flaps-input"),
flapsPos: props.globals.getNode("/controls/flight/flaps-pos"),
speedbrake: props.globals.getNode("/controls/flight/speedbrake"),
speedbrakeArm: props.globals.getNode("/controls/flight/speedbrake-arm"),
rudderTrim: props.globals.getNode("/controls/flight/rudder-trim"),
},
Gear: {
brake: [props.globals.getNode("/controls/gear/brake-left"),props.globals.getNode("/controls/gear/brake-right")],
gearDown: props.globals.getNode("/controls/gear/gear-down"),
parkingBrake: props.globals.getNode("/controls/gear/brake-parking"),
chocks: props.globals.getNode("/services/chocks/enable"),
},
Switches: {
annunTest: props.globals.getNode("/controls/switches/annun-test"),
},
};
@ -42,30 +63,59 @@ var ECAM = {
var Engines = {
Engine: {
egtActual: [props.globals.getNode("/engines/engine[0]/egt-actual"), props.globals.getNode("/engines/engine[1]/egt-actual")],
eprActual: [props.globals.getNode("/engines/engine[0]/epr-actual"), props.globals.getNode("/engines/engine[1]/epr-actual")],
fuelFlow: [props.globals.getNode("/engines/engine[0]/fuel-flow_actual"), props.globals.getNode("/engines/engine[1]/fuel-flow_actual")],
n1Actual: [props.globals.getNode("/engines/engine[0]/n1-actual"), props.globals.getNode("/engines/engine[1]/n1-actual")],
n2Actual: [props.globals.getNode("/engines/engine[0]/n2-actual"), props.globals.getNode("/engines/engine[1]/n2-actual")],
oilPsi: [props.globals.getNode("/engines/engine[0]/oil-psi-actual"), props.globals.getNode("/engines/engine[1]/oil-psi-actual")],
thrust: [props.globals.getNode("/engines/engine[0]/thrust-lb"), props.globals.getNode("/engines/engine[1]/thrust-lb")],
reverser: [props.globals.getNode("/engines/engine[0]/reverser-pos-norm"), props.globals.getNode("/engines/engine[1]/reverser-pos-norm")],
state: [props.globals.getNode("/engines/engine[0]/state"), props.globals.getNode("/engines/engine[1]/state")],
},
};
var Environment = {
magVar: props.globals.getNode("/environment/magnetic-variation-deg"),
tempDegC: props.globals.getNode("/environment/temperature-degc"),
windFromHdg: props.globals.getNode("/environment/wind-from-heading-deg"),
windSpeedKt: props.globals.getNode("/environment/wind-speed-kt"),
};
var Fdm = {
JSBsim: {
Aero: {
alpha: props.globals.getNode("/fdm/jsbsim/aero/alpha-deg"),
},
Fcs: {
brake: [props.globals.getNode("/fdm/jsbsim/fcs/left-brake-cmd-norm"),props.globals.getNode("/fdm/jsbsim/fcs/right-brake-cmd-norm")],
flapDeg: props.globals.getNode("/fdm/jsbsim/fcs/flap-pos-deg"),
slatDeg: props.globals.getNode("/fdm/jsbsim/fcs/slat-pos-deg"),
slatLocked: props.globals.getNode("/fdm/jsbsim/fcs/slat-locked"),
},
Fbw: {
aileron: props.globals.getNode("/fdm/jsbsim/fbw/aileron-sidestick"),
elevator: props.globals.getNode("/fdm/jsbsim/fbw/elevator-sidestick"),
},
Hydraulics: {
ElevatorTrim: {
cmdDeg: props.globals.getNode("/fdm/jsbsim/hydraulics/elevator-trim/cmd-deg"),
},
Rudder: {
trimDeg: props.globals.getNode("/fdm/jsbsim/hydraulics/rudder/trim-deg"),
},
},
Inertia: {
weightLbs: props.globals.getNode("/fdm/jsbsim/inertia/weight-lbs"),
},
Position: {
wow: props.globals.getNode("/fdm/jsbsim/position/wow"),
},
Propulsion: {
tatC: props.globals.getNode("/fdm/jsbsim/propulsion/tat-c"),
Engine: {
fuelUsed: [props.globals.getNode("/fdm/jsbsim/propulsion/engine[0]/fuel-used-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/engine[1]/fuel-used-lbs")],
reverserAngle: [props.globals.getNode("/fdm/jsbsim/propulsion/engine[0]/reverser-angle-rad"), props.globals.getNode("/fdm/jsbsim/propulsion/engine[1]/reverser-angle-rad")],
},
},
},
@ -79,14 +129,15 @@ var FMGC = {
var Gear = {
compression: [props.globals.getNode("/gear/gear[0]/compression-norm"), props.globals.getNode("/gear/gear[1]/compression-norm"), props.globals.getNode("/gear/gear[2]/compression-norm")],
wow: [props.globals.getNode("/gear/gear[0]/wow"), props.globals.getNode("/gear/gear[1]/wow"), props.globals.getNode("/gear/gear[2]/wow")],
position: [props.globals.getNode("/gear/gear[0]/position-norm"), props.globals.getNode("/gear/gear[1]/position-norm"), props.globals.getNode("/gear/gear[2]/position-norm")],
rollspeed: [props.globals.getNode("/gear/gear[0]/rollspeed-ms"), props.globals.getNode("/gear/gear[1]/rollspeed-ms"), props.globals.getNode("/gear/gear[2]/rollspeed-ms")],
wow: [props.globals.getNode("/gear/gear[0]/wow"), props.globals.getNode("/gear/gear[1]/wow"), props.globals.getNode("/gear/gear[2]/wow")],
};
var Instrumentation = {
AirspeedIndicator: {
indicatedSpdKt: props.globals.getNode("/instrumentation/airspeed-indicator/indicated-speed-kt"),
indicatedMach: props.globals.getNode("/instrumentation/airspeed-indicator/indicated-mach"),
},
Altimeter: {
indicatedFt: props.globals.getNode("/instrumentation/altimeter[0]/indicated-altitude-ft"),
@ -94,6 +145,10 @@ var Instrumentation = {
settingInhg: props.globals.getNode("/instrumentation/altimeter[0]/setting-inhg"),
std: props.globals.getNode("/instrumentation/altimeter[0]/std"),
},
Clock: {
indicatedString: props.globals.getNode("/instrumentation/clock/indicated-string"),
indicatedStringShort: props.globals.getNode("/instrumentation/clock/indicated-short-string"),
},
Efis: {
Inputs: {
arpt: [props.globals.initNode("/instrumentation/efis[0]/inputs/arpt", 0, "BOOL"), props.globals.initNode("/instrumentation/efis[1]/inputs/arpt", 0, "BOOL")],
@ -112,6 +167,17 @@ var Instrumentation = {
pnlModeNum: [props.globals.initNode("/instrumentation/efis[0]/mfd/pnl_mode-num", 2, "INT"), props.globals.initNode("/instrumentation/efis[1]/mfd/pnl_mode-num", 2, "INT")],
},
},
MKVII: {
Inputs: {
Discretes: {
flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap3-override"),
},
},
},
Nav: {
gsDeflection: props.globals.getNode("/instrumentation/nav[0]/gs-needle-deflection-norm"),
locDeflection: props.globals.getNode("/instrumentation/nav[0]/heading-needle-deflection-norm"),
},
TCAS: {
Inputs: {
mode: props.globals.getNode("/instrumentation/tcas/inputs/mode"),
@ -137,16 +203,42 @@ var Position = {
var Sim = {
aero: props.globals.getNode("/sim/aero"),
Input: {
Selected: {
engine: [props.globals.getNode("/sim/input/selected/engine[0]", 1),props.globals.getNode("/sim/input/selected/engine[1]", 1)],
}
},
Multiplay: {
online: props.globals.getNode("/sim/multiplay/online"),
},
pause: props.globals.getNode("/sim/freeze/master"),
replayState: props.globals.getNode("/sim/freeze/replay-state"),
Replay: {
replayActive: props.globals.getNode("/sim/replay/replay-state"),
},
Time: {
deltaRealtimeSec: props.globals.getNode("/sim/time/delta-realtime-sec"),
elapsedSec: props.globals.getNode("/sim/time/elapsed-sec"),
UTC: {
day: props.globals.getNode("/sim/time/utc/day"),
month: props.globals.getNode("/sim/time/utc/month"),
year: props.globals.getNode("/sim/time/utc/year"),
},
},
Version: props.globals.getNode("/sim/version/flightgear"),
};
var Systems = {
Thrust: {
engOut: props.globals.getNode("/systems/thrust/eng-out"),
state: [props.globals.getNode("/systems/thrust/state1"), props.globals.getNode("/systems/thrust/state2")],
},
};
var Velocities = {
airspeed: props.globals.getNode("/velocities/airspeed-kt"),
groundspeed: props.globals.getNode("/velocities/groundspeed-kt"),
mach: props.globals.getNode("/velocities/mach"),
};
setprop("/systems/acconfig/property-tree-setup-loaded", 1);

View file

@ -11,16 +11,16 @@ var incStep = 1;
var viewName = "XX";
var fovZoom = func(d) {
viewName = getprop("sim/current-view/name");
canChangeZOffset = getprop("sim/current-view/type") == "lookat" and viewName != "Tower View" and viewName != "Tower View AGL" and viewName != "Fly-By View" and viewName != "Chase View" and viewName != "Chase View Without Yaw" and viewName != "Walk View" and viewName != "Walker Orbit View";
viewName = getprop("/sim/current-view/name");
canChangeZOffset = getprop("/sim/current-view/type") == "lookat" and viewName != "Tower View" and viewName != "Tower View AGL" and viewName != "Fly-By View" and viewName != "Chase View" and viewName != "Chase View Without Yaw" and viewName != "Walk View" and viewName != "Walker Orbit View";
if (getprop("sim/current-view/z-offset-m") <= -20) {
if (getprop("/sim/current-view/z-offset-m") <= -20) {
decStep = -2;
} else {
decStep = -1;
}
if (getprop("sim/current-view/z-offset-m") < -20) { # Not a typo, the conditions are different
if (getprop("/sim/current-view/z-offset-m") < -20) { # Not a typo, the conditions are different
incStep = 2;
} else {
incStep = 1;
@ -28,11 +28,11 @@ var fovZoom = func(d) {
if (d == -1) {
if (canChangeZOffset) {
distance = getprop("sim/current-view/z-offset-m");
min_dist = getprop("sim/current-view/z-offset-min-m");
distance = getprop("/sim/current-view/z-offset-m");
min_dist = getprop("/sim/current-view/z-offset-min-m");
distance = math.round(std.min(-min_dist, distance + incStep) / incStep, 0.1) * incStep;
setprop("sim/current-view/z-offset-m", distance);
setprop("/sim/current-view/z-offset-m", distance);
gui.popupTip(sprintf("%d meters", abs(distance)));
} else {
@ -40,11 +40,11 @@ var fovZoom = func(d) {
}
} else if (d == 1) {
if (canChangeZOffset) {
distance = getprop("sim/current-view/z-offset-m");
max_dist = getprop("sim/current-view/z-offset-max-m");
distance = getprop("/sim/current-view/z-offset-m");
max_dist = getprop("/sim/current-view/z-offset-max-m");
distance = math.round(std.max(-max_dist, distance + decStep) / decStep, 0.1) * decStep;
setprop("sim/current-view/z-offset-m", distance);
setprop("/sim/current-view/z-offset-m", distance);
gui.popupTip(sprintf("%d meters", abs(distance)));
} else {
@ -52,11 +52,11 @@ var fovZoom = func(d) {
}
} else if (d == 0) {
if (canChangeZOffset) {
setprop("sim/current-view/z-offset-m", getprop("sim/current-view/z-offset-default") * -1);
gui.popupTip(sprintf("%d meters", getprop("sim/current-view/z-offset-default")));
setprop("/sim/current-view/z-offset-m", getprop("/sim/current-view/z-offset-default") * -1);
gui.popupTip(sprintf("%d meters", getprop("/sim/current-view/z-offset-default")));
} else {
setprop("sim/current-view/field-of-view", getprop("sim/view/config/default-field-of-view-deg"));
gui.popupTip(sprintf("FOV: %.1f", getprop("sim/current-view/field-of-view")))
setprop("/sim/current-view/field-of-view", getprop("/sim/view/config/default-field-of-view-deg"));
gui.popupTip(sprintf("FOV: %.1f", getprop("/sim/current-view/field-of-view")))
}
}
}

View file

@ -1,4 +1,8 @@
var isNoStar = [0, 0];
var isNoStar = [0, 0, 0];
var isNoTransArr = [0, 0, 0];
var isNoVia = [0, 0, 0];
var version = nil;
var arrivalPage = {
title: [nil, nil, nil],
@ -31,17 +35,20 @@ var arrivalPage = {
selectedVIA: nil,
selectedSTAR: nil,
selectedTransition: nil,
stars: nil,
transitions: nil,
vias: nil,
stars: [],
transitions: [],
vias: [],
computer: nil,
enableScrollApproach: 0,
enableScrollStars: 0,
enableScrollVias: 0,
scrollApproach: 0,
scrollStars: 0,
activePage: 0, # runways, stars, trans
hasPressNoTrans: 0, # temporary
scrollVias: 0,
activePage: 0, # runways, stars, vias
oldPage: 0,
_approaches: nil,
_vias: nil,
_stars: nil,
_transitions: nil,
new: func(icao, computer) {
@ -56,39 +63,78 @@ var arrivalPage = {
return nil;
},
reset: func() {
isNoStar[me.computer] = 0;
me.selectedApproach = nil;
me.selectedSTAR = nil;
me.hasPressNoTrans = 0;
me.selectedTransition = nil;
me.selectedVIA = nil;
isNoStar[me.computer] = 0;
isNoTransArr[me.computer] = 0;
isNoVia[me.computer] = 0;
},
_setupFirstTime: func() {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[2].approach != nil) {
me.selectedApproach = fmgc.flightPlanController.flightplans[2].approach;
version = pts.Sim.Version.getValue();
if (version == "2020.2.0" or version == "2020.2.1" or version == "2020.3.0") {
if (fmgc.flightPlanController.flightplans[2].approach_trans != nil) {
me.selectedVIA = fmgc.flightPlanController.flightplans[2].approach_trans;
} elsif (isNoVia[2] == 1) {
me.selectedVIA = "NO VIA";
}
}
}
if (fmgc.flightPlanController.flightplans[2].star != nil) {
me.selectedSTAR = fmgc.flightPlanController.flightplans[2].star;
isNoStar[me.computer] = 0;
} elsif (isNoStar[me.computer] == 1) {
isNoStar[2] = 0;
} elsif (isNoStar[2] == 1) {
me.selectedSTAR = "NO STAR";
me.hasPressNoTrans = 1;
}
if (isNoTransArr[2]) {
me.selectedTransition = "NO TRANS";
} elsif (fmgc.flightPlanController.flightplans[2].star != nil) {
me.selectedTransition = fmgc.flightPlanController.flightplans[2].star_trans;
}
} else {
if (fmgc.flightPlanController.flightplans[me.computer].approach != nil) {
me.selectedApproach = fmgc.flightPlanController.flightplans[me.computer].approach;
version = pts.Sim.Version.getValue();
if (version == "2020.2.0" or version == "2020.2.1" or version == "2020.3.0") {
if (fmgc.flightPlanController.flightplans[me.computer].approach_trans != nil) {
me.selectedVIA = fmgc.flightPlanController.flightplans[me.computer].approach_trans;
} elsif (isNoVia[me.computer] == 1) {
me.selectedVIA = "NO VIA";
}
}
} elsif (fmgc.flightPlanController.flightplans[2].approach != nil) {
me.selectedApproach = fmgc.flightPlanController.flightplans[2].approach;
version = pts.Sim.Version.getValue();
if (version == "2020.2.0" or version == "2020.2.1" or version == "2020.3.0") {
if (fmgc.flightPlanController.flightplans[2].approach_trans != nil) {
me.selectedVIA = fmgc.flightPlanController.flightplans[2].approach_trans;
}
}
}
if (fmgc.flightPlanController.flightplans[me.computer].star != nil) {
me.selectedSTAR = fmgc.flightPlanController.flightplans[me.computer].star;
me.selectedTransition = fmgc.flightPlanController.flightplans[me.computer].star_trans;
isNoStar[me.computer] = 0;
} elsif (fmgc.flightPlanController.flightplans[2].star != nil) {
me.selectedSTAR = fmgc.flightPlanController.flightplans[2].star;
me.selectedTransition = fmgc.flightPlanController.flightplans[2].star_trans;
isNoStar[me.computer] = 0;
isNoStar[2] = 0;
} elsif (isNoStar[me.computer] == 1) {
me.selectedSTAR = "NO STAR";
me.hasPressNoTrans = 1;
}
if (isNoTransArr[me.computer] or isNoTransArr[2]) {
me.selectedTransition = "NO TRANS";
} elsif (fmgc.flightPlanController.flightplans[me.computer].star != nil) {
me.selectedTransition = fmgc.flightPlanController.flightplans[me.computer].star_trans;
} elsif (fmgc.flightPlanController.flightplans[2].star != nil) {
me.selectedTransition = fmgc.flightPlanController.flightplans[2].star_trans;
}
}
},
@ -99,8 +145,8 @@ var arrivalPage = {
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["ack", "ack", "ack", "ack", "ack", "ack"]];
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.L6 = [" RETURN END", nil, "wht"];
if (!fmgc.flightPlanController.temporaryFlag[me.computer] or me.activePage == 2) {
me.L6 = [" RETURN", nil, "wht"];
} else {
me.L6 = [" F-PLN", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
@ -108,11 +154,17 @@ var arrivalPage = {
if (me.activePage == 0) {
me.updateApproaches();
} else {
} elsif (me.activePage == 1) {
me.updateSTARs();
me.updateTransitions();
} else {
me.updateVIAs();
}
me.checkPageType();
me.updateActiveApproach();
me.updateActiveVIAs();
me.updateActiveSTARs();
me.updateActiveTransitions();
},
@ -143,101 +195,148 @@ var arrivalPage = {
me._clearPage();
me._setupPageWithData();
},
# Functions to populate top row
updateActiveApproach: func() {
if (me.apprIsRwyFlag) {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].destination_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].destination_runway.id, " APPR", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].destination_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[2].destination_runway.id, " APPR", "grn"];
} elsif (fmgc.flightPlanController.flightplans[2].destination_runway != nil and fmgc.flightPlanController.flightplans[2].destination_runway.id == me.selectedApproach.id) {
me.L1 = [fmgc.flightPlanController.flightplans[2].destination_runway.id, " APPR", "yel"];
} else {
me.L1 = ["---", " APPR", "wht"];
me.L1 = ["-----", " APPR", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[me.computer].destination_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].destination_runway.id, " APPR", "yel"];
if (fmgc.flightPlanController.flightplans[2].destination_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[2].destination_runway.id, " APPR", "grn"];
} else {
me.L1 = ["---", " APPR", "wht"];
me.L1 = ["-----", " APPR", "wht"];
}
}
} elsif (me.selectedApproach != nil) {
if (fmgc.flightPlanController.flightplans[2].approach != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].approach != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].approach.id, " APPR", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].approach.id == me.selectedApproach.id) {
} elsif (fmgc.flightPlanController.flightplans[2].approach != nil and fmgc.flightPlanController.flightplans[2].approach.id == me.selectedApproach.id) {
me.L1 = [fmgc.flightPlanController.flightplans[2].approach.id, " APPR", "yel"];
} else {
me.L1 = ["-----", " APPR", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[2].approach != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[2].approach.id, " APPR", "grn"];
} else {
me.L1 = ["---", " APPR", "wht"];
me.L1 = ["-----", " APPR", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].approach != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].approach.id, " APPR", "yel"];
} else {
me.L1 = ["---", " APPR", "wht"];
}
} else {
me.L1 = ["---", " APPR", "wht"];
me.L1 = ["-----", " APPR", "wht"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateActiveVIAs: func() {
version = pts.Sim.Version.getValue();
if (version != "2020.2.0" and version != "2020.2.1" and version != "2020.3.0") { return; }
if (me.selectedVIA == "NO VIA") {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.C1 = ["NONE", "VIA", "grn"];
} else {
me.C1 = ["NONE", "VIA", "yel"];
}
} elsif (me.selectedVIA != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].approach_trans != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].approach_trans.id, "VIA", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].approach_trans != nil and fmgc.flightPlanController.flightplans[2].approach_trans.id == me.selectedVIA.id) {
me.C1 = [fmgc.flightPlanController.flightplans[2].approach_trans.id, "VIA", "yel"];
} else {
me.C1 = ["-------", "VIA", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[2].approach_trans != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[2].approach_trans.id, "VIA", "grn"];
} else {
me.C1 = ["-------", "VIA", "wht"];
}
}
} else {
me.C1 = ["-------", "VIA", "wht"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateActiveSTARs: func() {
if (me.selectedSTAR == "NO STAR") {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.C1 = ["NONE", "STAR", "grn"];
me.R1 = ["NONE", "STAR ", "grn"];
} else {
me.C1 = ["NONE", "STAR", "yel"];
me.R1 = ["NONE", "STAR ", "yel"];
}
} elsif (me.selectedSTAR != nil) {
if (fmgc.flightPlanController.flightplans[2].star != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].star != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].star.id, "STAR", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].star.id == me.selectedSTAR.id) {
me.C1 = [fmgc.flightPlanController.flightplans[2].star.id, "STAR", "grn"];
me.R1 = [fmgc.flightPlanController.flightplans[me.computer].star.id, "STAR ", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].star != nil and fmgc.flightPlanController.flightplans[2].star.id == me.selectedSTAR.id) {
me.R1 = [fmgc.flightPlanController.flightplans[2].star.id, "STAR ", "yel"];
} else {
me.C1 = ["------- ", "STAR", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].star.id != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].star.id, "STAR", "yel"];
} else {
me.C1 = ["------- ", "STAR", "wht"];
me.R1 = ["-------", "STAR ", "wht"];
}
} else {
me.C1 = ["------- ", "STAR", "wht"];
if (fmgc.flightPlanController.flightplans[2].star != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[2].star.id, "STAR ", "grn"];
} else {
me.R1 = ["-------", "STAR ", "wht"];
}
}
} else {
me.R1 = ["-------", "STAR ", "wht"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateActiveTransitions: func() {
if (!me.hasPressNoTrans) {
if (me.selectedTransition != nil) {
if (fmgc.flightPlanController.flightplans[2].star_trans != nil) {
if (fmgc.flightPlanController.flightplans[me.computer].star_trans != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[me.computer].star_trans.id, "TRANS", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].star_trans.id == me.selectedTransition.id) {
me.R1 = [fmgc.flightPlanController.flightplans[2].star_trans.id, "TRANS", "grn"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].star_trans != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].star_trans.id, "STAR", "yel"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} else {
if (me.selectedTransition == "NO TRANS") {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.R1 = ["NONE", "TRANS ", "grn"];
me.R2 = ["NONE", "TRANS ", "grn"];
} else {
me.R1 = ["NONE", "TRANS ", "yel"];
me.R2 = ["NONE", "TRANS ", "yel"];
}
} else {
if (me.selectedTransition != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].star_trans != nil) {
me.R2 = [fmgc.flightPlanController.flightplans[me.computer].star_trans.id, "TRANS ", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].star_trans != nil and fmgc.flightPlanController.flightplans[2].star_trans.id == me.selectedTransition.id) {
me.R2 = [fmgc.flightPlanController.flightplans[2].star_trans.id, "TRANS ", "yel"];
} else {
me.R2 = ["-------", "TRANS ", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[2].star_trans != nil) {
me.R2 = [fmgc.flightPlanController.flightplans[2].star_trans.id, "TRANS ", "grn"];
} else {
me.R2 = ["-------", "TRANS ", "wht"];
}
}
} else {
me.R2 = ["-------", "TRANS ", "wht"];
}
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateApproaches: func() {
me.apprIsRwyFlag = 0;
if (me.arrAirport == nil) {
me.arrAirport = findAirportsByICAO(left(me.id, 4));
}
me.approaches = [];
me._approaches = nil;
me._approaches = me.arrAirport[0].getApproachList();
me.approaches = sort(me._approaches,func(a,b) cmp(a,b));
if (me.approaches == nil or size(me.approaches) == 0) {
@ -353,6 +452,10 @@ var arrivalPage = {
if (me.arrAirport == nil) {
me.arrAirport = findAirportsByICAO(left(me.id, 4));
}
me.stars = [];
me._stars = nil;
if (me.selectedApproach != nil) {
me._stars = me.arrAirport[0].stars(me.selectedApproach.runways[0]);
} else {
@ -367,18 +470,8 @@ var arrivalPage = {
}
if (size(me.stars) >= 1) {
me.L2 = [" " ~ me.stars[0 + me.scrollStars], "STARS", "blu"];
me.L3 = [" " ~ me.stars[0 + me.scrollStars], "STARS", "blu"];
if (me.stars[0 + me.scrollStars] != me.selectedSTAR) {
me.arrowsMatrix[0][1] = 1;
me.arrowsColour[0][1] = "blu";
} else {
me.arrowsMatrix[0][1] = 0;
me.arrowsColour[0][1] = "ack";
}
}
if (size(me.stars) >= 2) {
me.L3 = [" " ~ me.stars[1 + me.scrollStars], nil, "blu"];
if (me.stars[1 + me.scrollStars] != me.selectedSTAR) {
me.arrowsMatrix[0][2] = 1;
me.arrowsColour[0][2] = "blu";
} else {
@ -386,9 +479,9 @@ var arrivalPage = {
me.arrowsColour[0][2] = "ack";
}
}
if (size(me.stars) >= 3) {
me.L4 = [" " ~ me.stars[2 + me.scrollStars], nil, "blu"];
if (me.stars[2 + me.scrollStars] != me.selectedSTAR) {
if (size(me.stars) >= 2) {
me.L4 = [" " ~ me.stars[1 + me.scrollStars], nil, "blu"];
if (me.stars[1 + me.scrollStars] != me.selectedSTAR) {
me.arrowsMatrix[0][3] = 1;
me.arrowsColour[0][3] = "blu";
} else {
@ -396,9 +489,9 @@ var arrivalPage = {
me.arrowsColour[0][3] = "ack";
}
}
if (size(me.stars) >= 4) {
me.L5 = [" " ~ me.stars[3 + me.scrollStars], nil, "blu"];
if (me.stars[3 + me.scrollStars] != me.selectedSTAR) {
if (size(me.stars) >= 3) {
me.L5 = [" " ~ me.stars[2 + me.scrollStars], nil, "blu"];
if (me.stars[2 + me.scrollStars] != me.selectedSTAR) {
me.arrowsMatrix[0][4] = 1;
me.arrowsColour[0][4] = "blu";
} else {
@ -407,21 +500,76 @@ var arrivalPage = {
}
}
me.C2 = [nil, "AVAILABLE", "wht"];
me.R2 = [nil, "TRANS ", "wht"];
me.C3[1] = "AVAILABLE";
me.R3[1] = "TRANS ";
if (size(me.stars) > 4) {
if (size(me.stars) > 3) {
me.enableScrollStars = 1;
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateVIAs: func() {
version = pts.Sim.Version.getValue();
if (version != "2020.2.0" and version != "2020.2.1" and version != "2020.3.0") { return; }
if (me.selectedApproach == nil or me.activePage != 2) {
me.clearVias();
return;
}
me.vias = [];
me._vias = nil;
me._vias = me.selectedApproach.transitions;
me.vias = sort(me._vias, func(a,b) cmp(a,b));
append(me.vias, "NO VIA");
if (size(me.vias) >= 1) {
me.L2 = [" " ~ me.vias[0 + me.scrollVias], " APP VIAS", "blu"];
if (me.vias[0 + me.scrollVias] != me.selectedVIA) {
me.arrowsMatrix[0][1] = 1;
me.arrowsColour[0][1] = "blu";
} else {
me.arrowsMatrix[0][1] = 0;
me.arrowsColour[0][1] = "ack";
}
}
if (size(me.vias) >= 2) {
me.L3 = [" " ~ me.vias[1 + me.scrollVias], nil, "blu"];
if (me.vias[1 + me.scrollVias] != me.selectedVIA) {
me.arrowsMatrix[0][2] = 1;
me.arrowsColour[0][2] = "blu";
} else {
me.arrowsMatrix[0][2] = 0;
me.arrowsColour[0][2] = "ack";
}
}
if (size(me.vias) >= 3) {
me.L4 = [" " ~ me.vias[2 + me.scrollVias], nil, "blu"];
if (me.vias[2 + me.scrollVias] != me.selectedVIA) {
me.arrowsMatrix[0][3] = 1;
me.arrowsColour[0][3] = "blu";
} else {
me.arrowsMatrix[0][3] = 0;
me.arrowsColour[0][3] = "ack";
}
}
if (size(me.vias) >= 4) {
me.L5 = [" " ~ me.vias[3 + me.scrollVias], nil, "blu"];
if (me.vias[3 + me.scrollVias] != me.selectedVIA) {
me.arrowsMatrix[0][4] = 1;
me.arrowsColour[0][4] = "blu";
} else {
me.arrowsMatrix[0][4] = 0;
me.arrowsColour[0][4] = "ack";
}
}
if (size(me.vias) > 3) {
me.enableScrollVias = 1;
}
},
clearTransitions: func() {
me.R2 = [nil, "TRANS", "wht"];
me.R3 = [nil, "TRANS", "wht"];
me.R4 = [nil, "TRANS", "wht"];
me.R5 = [nil, "TRANS", "wht"];
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
me.R3 = [nil, nil, "wht"];
me.R4 = [nil, nil, "wht"];
me.R5 = [nil, nil, "wht"];
me.arrowsMatrix[1][2] = 0;
me.arrowsColour[1][2] = "ack";
me.arrowsMatrix[1][3] = 0;
@ -429,67 +577,68 @@ var arrivalPage = {
me.arrowsMatrix[1][4] = 0;
me.arrowsColour[1][4] = "ack";
},
clearVias: func() {
me.L2 = [nil, nil, "wht"];
me.L3 = [nil, nil, "wht"];
me.L4 = [nil, nil, "wht"];
me.L5 = [nil, nil, "wht"];
me.arrowsMatrix[0][1] = 0;
me.arrowsColour[0][1] = "ack";
me.arrowsMatrix[0][2] = 0;
me.arrowsColour[0][2] = "ack";
me.arrowsMatrix[0][3] = 0;
me.arrowsColour[0][3] = "ack";
me.arrowsMatrix[0][4] = 0;
me.arrowsColour[0][4] = "ack";
if (me.activePage == 2) {
me.activePage = me.oldPage;
}
},
updateTransitions: func() {
if (me.arrAirport == nil) {
me.arrAirport = findAirportsByICAO(left(me.id, 4));
}
if (me.selectedSTAR == nil) {
me.R2 = ["NO TRANS ", "TRANS", "blu"];
if (!me.hasPressNoTrans) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
return;
}
if (me.selectedSTAR == "NO STAR") {
me.transitions = [];
me._transitions = nil;
me.clearTransitions();
if (me.selectedSTAR == nil or me.selectedSTAR == "NO STAR") {
append(me.transitions, "NO TRANS");
return;
}
if (isghost(me.selectedSTAR)) {
me._transitions = me.arrAirport[0].getStar(me.selectedSTAR.id).transitions;
} else {
me._transitions = me.arrAirport[0].getStar(me.selectedSTAR).transitions;
}
me.transitions = sort(me._transitions,func(a,b) cmp(a,b));
append(me.transitions, "NO TRANS");
if (size(me.transitions) == 0) {
me.R2 = ["NO TRANS ", "TRANS", "blu"];
if (!me.hasPressNoTrans) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
} elsif (size(me.transitions) >= 1) {
me.R2 = [me.transitions[0] ~ " ", "TRANS", "blu"];
if (size(me.transitions) >= 1) {
me.R3 = [me.transitions[0] ~ " ", "TRANS", "blu"];
if (me.transitions[0] != me.selectedTransition) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
} elsif (size(me.transitions) >= 2) {
me.R3 = [me.transitions[1] ~ " ", nil, "blu"];
if (me.transitions[1] != me.selectedTransition) {
me.arrowsMatrix[1][2] = 1;
me.arrowsColour[1][2] = "blu";
} else {
me.arrowsMatrix[1][2] = 0;
me.arrowsColour[1][2] = "ack";
}
} elsif (size(me.transitions) >= 3) {
me.R4 = [me.transitions[2] ~ " ", nil, "blu"];
if (me.transitions[2] != me.selectedTransition) {
}
if (size(me.transitions) >= 2) {
me.R4 = [me.transitions[1] ~ " ", nil, "blu"];
if (me.transitions[1] != me.selectedTransition) {
me.arrowsMatrix[1][3] = 1;
me.arrowsColour[1][3] = "blu";
} else {
me.arrowsMatrix[1][3] = 0;
me.arrowsColour[1][3] = "ack";
}
} elsif (size(me.transitions) >= 4) {
me.R5 = [me.transitions[3] ~ " ", nil, "blu"];
if (me.transitions[3] != me.selectedTransition) {
}
if (size(me.transitions) >= 3) {
me.R5 = [me.transitions[2] ~ " ", nil, "blu"];
if (me.transitions[2] != me.selectedTransition) {
me.arrowsMatrix[1][4] = 1;
me.arrowsColour[1][4] = "blu";
} else {
@ -497,6 +646,9 @@ var arrivalPage = {
me.arrowsColour[1][4] = "ack";
}
}
# no indication it is scrollable...
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
makeTmpy: func() {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
@ -510,6 +662,17 @@ var arrivalPage = {
}
}
},
checkPageType: func() {
if (me.activePage == 0) {
me.L2 = [nil, nil, "wht"];
me.arrowsMatrix[0][1] = 0;
me.arrowsColour[0][1] = "wht";
} elsif (me.activePage == 1) {
me.L2 = [" VIAS", " APPR", "wht"];
me.arrowsMatrix[0][1] = 1;
me.arrowsColour[0][1] = "wht";
}
},
scrollUp: func() {
if (me.activePage == 0) {
if (me.enableScrollApproach) {
@ -519,10 +682,10 @@ var arrivalPage = {
}
me.updateApproaches();
}
} else {
} elsif (me.activePage == 1) {
if (me.enableScrollStars) {
me.scrollStars += 1;
if (me.scrollStars > size(me.stars) - 4) {
if (me.scrollStars > size(me.stars) - 3) {
me.scrollStars = 0;
}
me.updateSTARs();
@ -531,7 +694,15 @@ var arrivalPage = {
} else {
me.updateTransitions();
}
me.hasPressNoTrans = 0;
}
} elsif (me.activePage == 2) {
if (me.enableScrollVias) {
me.scrollVias += 1;
if (me.scrollVias > size(me.vias) - 4) {
me.scrollVias = 0;
}
me.updateActiveVIAs();
me.updateVIAs();
}
}
},
@ -544,11 +715,11 @@ var arrivalPage = {
}
me.updateApproaches();
}
} else {
} elsif (me.activePage == 1) {
if (me.enableScrollStars) {
me.scrollStars -= 1;
if (me.scrollStars < 0) {
me.scrollStars = size(me.stars) - 4;
me.scrollStars = size(me.stars) - 3;
}
me.updateSTARs();
if (me.selectedSTAR == nil or me.selectedSTAR == "NO STAR") {
@ -556,24 +727,53 @@ var arrivalPage = {
} else {
me.updateTransitions();
}
me.hasPressNoTrans = 0;
}
} elsif (me.activePage == 2) {
if (me.enableScrollVias) {
me.scrollVias -= 1;
if (me.scrollVias < 0) {
me.scrollVias = size(me.vias) - 4;
}
me.updateActiveVIAs();
me.updateVIAs();
}
}
},
scrollLeft: func() {
if (me.activePage == 2) { return; }
me.activePage = !me.activePage;
me.checkPageType();
me.updatePage();
},
scrollRight: func() {
if (me.activePage == 2) { return; }
me.activePage = !me.activePage;
me.checkPageType();
me.updatePage();
},
arrPushbuttonLeft: func(index) {
if (me.activePage == 0) {
if (size(me.approaches) >= (index - 2) and index != 2) {
if (index == 2 and me.activePage == 1 and me.selectedApproach != nil) {
version = pts.Sim.Version.getValue();
if (version != "2020.2.0" and version != "2020.2.1" and version != "2020.3.0") { return; }
me.oldPage = me.activePage;
me.activePage = 2;
me.updatePage();
me.updateVIAs();
} elsif (index == 6 and me.activePage == 2) {
me.activePage = me.oldPage;
me.oldPage = 0;
me.updatePage();
} elsif (index == 6 and me.activePage != 2) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
setprop("/MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
} else {
setprop("/MCDU[" ~ me.computer ~ "]/page", "LATREV");
}
} elsif (me.activePage == 0 and index != 6) {
if (size(me.approaches) >= (index - 2) and index != 2) { # index = 3, size = 1
if (!dirToFlag) {
me.selectedSTAR = nil;
me.hasPressNoTrans = 0;
me.selectedVIA = nil;
isNoTransArr[me.computer] = 0;
isNoStar[me.computer] = 0;
me.makeTmpy();
if (!me.apprIsRwyFlag) {
@ -586,21 +786,23 @@ var arrivalPage = {
}
setprop("FMGC/internal/baro", 99999);
setprop("FMGC/internal/radio", 99999);
setprop("FMGC/internal/radio-no", 0);
me.updateActiveApproach();
fmgc.FMGCInternal.radioNo = 0;
me.updateApproaches();
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
me.scrollRight();
me.checkPageType();
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");
}
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}
} else {
if (size(me.stars) >= (index - 2)) {
} elsif (me.activePage == 1 and index != 6) {
if (size(me.stars) >= (index - 2) and index != 2) {
if (!dirToFlag) {
me.selectedSTAR = me.stars[index - 2 + me.scrollStars];
me.selectedTransition = nil;
me.selectedSTAR = me.stars[index - 3 + me.scrollStars];
me.makeTmpy();
if (me.selectedSTAR != "NO STAR") {
isNoStar[me.computer] = 0;
@ -612,15 +814,14 @@ var arrivalPage = {
fmgc.flightPlanController.insertNOSTAR(me.computer);
}
}
me.updateActiveSTARs();
me.updateSTARs();
if (me.selectedSTAR != "NO STAR") {
me.hasPressNoTrans = 0;
me.updateTransitions();
isNoTransArr[me.computer] = 0;
} else {
me.hasPressNoTrans = 1;
isNoTransArr[me.computer] = 1;
me.selectedTransition = "NO TRANS";
}
me.updateActiveTransitions();
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");
@ -628,24 +829,44 @@ var arrivalPage = {
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}
}
},
arrPushbuttonRight: func(index) {
if (index == 2 and size(me.transitions) == 0) {
} elsif (me.activePage == 2 and index != 6) {
if (size(me.vias) >= (index - 1)) { # different!!
if (!dirToFlag) {
me.hasPressNoTrans = 1;
me.updateActiveTransitions();
me.updateTransitions();
me.selectedVIA = me.vias[index - 2 + me.scrollVias];
me.makeTmpy();
if (me.selectedVIA != "NO VIA") {
isNoVia[me.computer] = 0;
fmgc.flightPlanController.flightplans[me.computer].approach_trans = me.selectedVIA;
} else {
isNoVia[me.computer] = 1;
fmgc.flightPlanController.flightplans[me.computer].approach_trans = nil;
}
me.updateVIAs();
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");
}
} elsif (size(me.transitions) >= (index - 1)) {
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}
},
arrPushbuttonRight: func(index) {
if (size(me.transitions) >= (index - 2)) {
if (!dirToFlag) {
me.selectedTransition = me.transitions[index - 2];
me.selectedTransition = me.transitions[index - 3];
me.makeTmpy();
if (me.selectedTransition != "NO TRANS") {
isNoTransArr[me.computer] = 0;
fmgc.flightPlanController.flightplans[me.computer].star_trans = me.selectedTransition;
me.updateActiveTransitions();
me.updateTransitions();
} else {
isNoTransArr[me.computer] = 1;
fmgc.flightPlanController.flightplans[me.computer].star_trans = nil;
}
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");

33
Nasal/MCDU/ATC.nas Normal file
View file

@ -0,0 +1,33 @@
var latReq = {
title: [nil, nil, nil],
titleColour: "wht",
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsColour: [["ack", "ack", "ack", "ack", "ack", "ack"],["ack", "ack", "ack", "ack", "ack", "ack"]],
L1: [nil, nil, "ack"], # content, title, colour
L2: [nil, nil, "ack"],
L3: [nil, nil, "ack"],
L4: [nil, nil, "ack"],
L5: [nil, nil, "ack"],
L6: [nil, nil, "ack"],
R1: [nil, nil, "ack"],
R2: [nil, nil, "ack"],
R3: [nil, nil, "ack"],
R4: [nil, nil, "ack"],
R5: [nil, nil, "ack"],
R6: [nil, nil, "ack"],
computer: nil,
new: func(computer) {
var lr = {parents:[latReq]};
lr.computer = computer;
lr._setupPageWithData();
return lr;
},
del: func() {
return nil;
},
_setupPageWithData: func() {
},
}

View file

@ -112,13 +112,13 @@ var closestAirportPage = {
}
if (size(id) > 4) {
mcdu_message(me.computer, "NOT ALLOWED");
}
if (airportinfo(id) == nil) {
notInDataBase(me.computer);
}
} elsif (airportinfo(id) == nil) {
mcdu_message(me.computer, "NOT IN DATA BASE");
} else {
me.manAirport = airportinfo(id);
me.L5 = [id, nil, "grn"];
me.R5 = ["----", nil, "grn"];
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
}
};

15
Nasal/MCDU/DATA2.nas Normal file
View file

@ -0,0 +1,15 @@
# A3XX mCDU by Joshua Davidson (Octal450), Jonathan Redpath, and Matthew Maring (mattmaring)
# Copyright (c) 2020 Matthew Maring (mattmaring)
var data2Input = func(key, i) {
if (key == "L5") {
if (canvas_mcdu.myCLBWIND[i] == nil) {
canvas_mcdu.myCLBWIND[i] = windCLBPage.new(i);
} else {
canvas_mcdu.myCLBWIND[i].reload();
}
fmgc.windController.accessPage[i] = "DATA2";
setprop("MCDU[" ~ i ~ "]/page", "WINDCLB");
}
}

View file

@ -1,4 +1,5 @@
var isNoSid = [0, 0];
var isNoSid = [0, 0, 0];
var isNoTransDep = [0, 0, 0];
var departurePage = {
title: [nil, nil, nil],
@ -29,18 +30,18 @@ var departurePage = {
selectedRunway: nil,
selectedSID: nil,
selectedTransition: nil,
sids: nil,
transitions: nil,
computer: nil,
enableScrollRwy: 0,
enableScrollSids: 0,
scrollRwy: 0,
scrollSids: 0,
activePage: 0, # runways, sids, trans
hasPressNoTrans: 0, # temporary
_runways: nil,
_sids: nil,
_transitions: nil,
runways: [],
sids: [],
transitions: [],
new: func(icao, computer) {
var page = {parents:[departurePage]};
page.id = icao;
@ -54,8 +55,9 @@ var departurePage = {
},
reset: func() {
isNoSid[me.computer] = 0;
isNoTransDep[me.computer] = 0;
me.selectedSID = nil;
me.hasPressNoTrans = 0;
me.selectedTransition = nil;
},
_setupFirstTime: func() {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
@ -65,9 +67,14 @@ var departurePage = {
if (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.selectedSID = fmgc.flightPlanController.flightplans[2].sid;
isNoSid[me.computer] = 0;
} elsif (isNoSid[me.computer] == 1) {
} elsif (isNoSid[2] == 1) {
me.selectedSID = "NO SID";
me.hasPressNoTrans = 1;
}
if (isNoTransDep[2]) {
me.selectedTransition = "NO TRANS";
} elsif (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.selectedTransition = fmgc.flightPlanController.flightplans[2].sid_trans;
}
} else {
if (fmgc.flightPlanController.flightplans[me.computer].departure_runway != nil) {
@ -77,15 +84,20 @@ var departurePage = {
}
if (fmgc.flightPlanController.flightplans[me.computer].sid != nil) {
me.selectedSID = fmgc.flightPlanController.flightplans[me.computer].sid;
me.selectedTransition = fmgc.flightPlanController.flightplans[me.computer].sid_trans;
isNoSid[me.computer] = 0;
} elsif (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.selectedSID = fmgc.flightPlanController.flightplans[2].sid;
me.selectedTransition = fmgc.flightPlanController.flightplans[2].sid_trans;
isNoSid[me.computer] = 0;
} elsif (isNoSid[me.computer] == 1) {
me.selectedSID = "NO SID";
me.hasPressNoTrans = 1;
}
if (isNoTransDep[me.computer] or isNoTransDep[2]) {
me.selectedTransition = "NO TRANS";
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid != nil) {
me.selectedTransition = fmgc.flightPlanController.flightplans[me.computer].sid_trans;
} elsif (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.selectedTransition = fmgc.flightPlanController.flightplans[2].sid_trans;
}
}
},
@ -107,6 +119,7 @@ var departurePage = {
me.updateRunways();
} else {
me.updateSIDs();
me.updateTransitions();
}
me.updateActiveRunway();
@ -142,18 +155,20 @@ var departurePage = {
},
updateActiveRunway: func() {
if (me.selectedRunway != nil) {
if (fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].departure_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].departure_runway.id, " RWY", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].departure_runway.id == me.selectedRunway.id) {
} elsif (fmgc.flightPlanController.flightplans[2].departure_runway != nil and fmgc.flightPlanController.flightplans[2].departure_runway.id == me.selectedRunway.id) {
me.L1 = [fmgc.flightPlanController.flightplans[2].departure_runway.id, " RWY", "yel"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[2].departure_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[2].departure_runway.id, " RWY", "grn"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].departure_runway != nil) {
me.L1 = [fmgc.flightPlanController.flightplans[me.computer].departure_runway.id, " RWY", "yel"];
} else {
me.L1 = ["---", " RWY", "wht"];
}
} else {
me.L1 = ["---", " RWY", "wht"];
@ -168,18 +183,20 @@ var departurePage = {
me.C1 = ["NONE", "SID", "yel"];
}
} elsif (me.selectedSID != nil) {
if (fmgc.flightPlanController.flightplans[2].sid != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].sid != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].sid.id, "SID", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].sid.id == me.selectedSID.id) {
} elsif (fmgc.flightPlanController.flightplans[2].sid != nil and fmgc.flightPlanController.flightplans[2].sid.id == me.selectedSID.id) {
me.C1 = [fmgc.flightPlanController.flightplans[2].sid.id, "SID", "yel"];
} else {
me.C1 = ["------- ", "SID", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[2].sid != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[2].sid.id, "SID", "grn"];
} else {
me.C1 = ["------- ", "SID", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid != nil) {
me.C1 = [fmgc.flightPlanController.flightplans[me.computer].sid.id, "SID", "yel"];
} else {
me.C1 = ["------- ", "SID", "wht"];
}
} else {
me.C1 = ["------- ", "SID", "wht"];
@ -187,30 +204,32 @@ var departurePage = {
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
updateActiveTransitions: func() {
if (!me.hasPressNoTrans) {
if (me.selectedTransition != nil) {
if (fmgc.flightPlanController.flightplans[2].sid_trans != nil) {
if (fmgc.flightPlanController.flightplans[me.computer].sid_trans != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[me.computer].sid_trans.id, "TRANS", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].sid_trans.id == me.selectedTransition.id) {
me.R1 = [fmgc.flightPlanController.flightplans[2].sid_trans.id, "TRANS", "grn"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} elsif (fmgc.flightPlanController.flightplans[me.computer].sid_trans != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[me.computer].sid_trans.id, "SID", "yel"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} else {
if (me.selectedTransition == "NO TRANS") {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.R1 = ["NONE", "TRANS ", "grn"];
} else {
me.R1 = ["NONE", "TRANS ", "yel"];
}
} else {
if (me.selectedTransition != nil) {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (fmgc.flightPlanController.flightplans[me.computer].sid_trans != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[me.computer].sid_trans.id, "TRANS", "yel"];
} elsif (fmgc.flightPlanController.flightplans[2].sid_trans != nil and fmgc.flightPlanController.flightplans[2].sid_trans.id == me.selectedTransition.id) {
me.R1 = [fmgc.flightPlanController.flightplans[2].sid_trans.id, "TRANS", "yel"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
} else {
if (fmgc.flightPlanController.flightplans[2].sid_trans != nil) {
me.R1 = [fmgc.flightPlanController.flightplans[2].sid_trans.id, "SID", "grn"];
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
}
} else {
me.R1 = ["-------", "TRANS ", "wht"];
}
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
@ -218,6 +237,10 @@ var departurePage = {
if (me.depAirport == nil) {
me.depAirport = findAirportsByICAO(left(me.id, 4));
}
me.runways = [];
me._runways = nil;
me._runways = keys(me.depAirport[0].runways);
me.runways = sort(me._runways,func(a,b) cmp(a,b));
@ -279,6 +302,10 @@ var departurePage = {
if (me.depAirport == nil) {
me.depAirport = findAirportsByICAO(left(me.id, 4));
}
me.sids = [];
me._sids = nil;
if (me.selectedRunway != nil) {
me._sids = me.depAirport[0].sids(me.selectedRunway.id);
} else {
@ -334,8 +361,8 @@ var departurePage = {
}
}
me.C2 = [nil, "AVAILABLE", "wht"];
me.R2 = [nil, "TRANS ", "wht"];
me.C2[1] = "AVAILABLE";
me.R2[1] = "TRANS ";
if (size(me.sids) > 4) {
me.enableScrollSids = 1;
@ -361,30 +388,22 @@ var departurePage = {
me.depAirport = findAirportsByICAO(left(me.id, 4));
}
if (me.selectedSID == nil) {
me.R2 = ["NO TRANS ", "TRANS", "blu"];
if (!me.hasPressNoTrans) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
me.clearTransitions();
if (me.selectedSID == nil or me.selectedSID == "NO SID") {
append(me.transitions, "NO TRANS");
return;
}
if (isghost(me.selectedSID)) {
me._transitions = me.depAirport[0].getSid(me.selectedSID.id).transitions;
} else {
me._transitions = me.depAirport[0].getSid(me.selectedSID).transitions;
}
me._transitions = me.depAirport[0].getSid(me.selectedSID).transitions;
me.transitions = sort(me._transitions,func(a,b) cmp(a,b));
append(me.transitions, "NO TRANS");
if (size(me.transitions) == 0) {
me.R2 = ["NO TRANS ", "TRANS", "blu"];
if (!me.hasPressNoTrans) {
me.arrowsMatrix[1][1] = 1;
me.arrowsColour[1][1] = "blu";
} else {
me.arrowsMatrix[1][1] = 0;
me.arrowsColour[1][1] = "ack";
}
} elsif (size(me.transitions) >= 1) {
if (size(me.transitions) >= 1) {
me.R2 = [me.transitions[0] ~ " ", "TRANS", "blu"];
if (me.transitions[0] != me.selectedTransition) {
me.arrowsMatrix[1][1] = 1;
@ -421,6 +440,7 @@ var departurePage = {
me.arrowsColour[1][4] = "ack";
}
}
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
makeTmpy: func() {
if (!fmgc.flightPlanController.temporaryFlag[me.computer]) {
@ -455,7 +475,6 @@ var departurePage = {
} else {
me.updateTransitions();
}
me.hasPressNoTrans = 0;
}
}
},
@ -480,7 +499,6 @@ var departurePage = {
} else {
me.updateTransitions();
}
me.hasPressNoTrans = 0;
}
}
},
@ -498,12 +516,12 @@ var departurePage = {
if (!dirToFlag) {
me.selectedSID = nil;
isNoSid[me.computer] = 0;
me.hasPressNoTrans = 0;
isNoTransDep[me.computer] = 0;
me.selectedRunway = me.depAirport[0].runway(me.runways[index - 2 + me.scrollRwy]);
me.makeTmpy();
fmgc.flightPlanController.flightplans[me.computer].departure_runway = me.selectedRunway;
me.updateActiveRunway();
me.updateRunways();
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
me.scrollRight();
} else {
@ -519,21 +537,20 @@ var departurePage = {
me.makeTmpy();
if (me.selectedSID != "NO SID") {
isNoSid[me.computer] = 0;
fmgc.flightPlanController.flightplans[me.computer].sid = me.selectedSID;
fmgc.flightPlanController.flightplans[me.computer].sid = me.depAirport[0].getSid(me.selectedSID);
} else {
isNoSid[me.computer] = 1;
fmgc.flightPlanController.flightplans[me.computer].sid = nil;
fmgc.flightPlanController.insertNOSID(me.computer);
}
me.updateActiveSIDs();
me.updateSIDs();
if (me.selectedSID != "NO SID") {
me.hasPressNoTrans = 0;
me.updateTransitions();
isNoTransDep[me.computer] = 0;
} else {
me.hasPressNoTrans = 1;
isNoTransDep[me.computer] = 1;
me.selectedTransition = "NO TRANS";
}
me.updateActiveTransitions();
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");
@ -544,21 +561,18 @@ var departurePage = {
}
},
depPushbuttonRight: func(index) {
if (index == 2 and size(me.transitions) == 0) {
if (!dirToFlag) {
me.hasPressNoTrans = 1;
me.updateActiveTransitions();
me.updateTransitions();
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");
}
} elsif (size(me.transitions) >= (index - 1)) {
if (size(me.transitions) >= (index - 1)) {
if (!dirToFlag) {
me.selectedTransition = me.transitions[index - 2];
me.makeTmpy();
fmgc.flightPlanController.flightplans[me.computer].sid_trans = me.depAirport[0].getSid(me.selectedSID).transition(me.selectedTransition);
me.updateActiveTransitions();
me.updateTransitions();
if (me.selectedTransition != "NO TRANS") {
isNoTransDep[me.computer] = 0;
fmgc.flightPlanController.flightplans[me.computer].sid_trans = me.selectedTransition;
} else {
isNoTransDep[me.computer] = 1;
fmgc.flightPlanController.flightplans[me.computer].sid_trans = nil;
}
me.updatePage();
fmgc.flightPlanController.flightPlanChanged(me.computer);
} else {
mcdu_message(me.computer, "DIR TO IN PROGRESS");

View file

@ -167,7 +167,7 @@ var dirTo = {
# fix
var fix = findFixesByID(text);
if (size(fix) == 0) {
notInDataBase(me.computer);
mcdu_message(me.computer, "NOT IN DATA BASE");
}
if (size(fix) == 1 or override) {
@ -189,7 +189,7 @@ var dirTo = {
# airport
var airport = findAirportsByICAO(text);
if (size(airport) == 0) {
notInDataBase(me.computer);
mcdu_message(me.computer, "NOT IN DATA BASE");
}
if (size(airport) == 1 or override) {
@ -211,7 +211,7 @@ var dirTo = {
# navaid
var navaid = findNavaidsByID(text);
if (size(navaid) == 0) {
notInDataBase(me.computer);
mcdu_message(me.computer, "NOT IN DATA BASE");
}
if (size(navaid) == 1 or override) {
@ -254,6 +254,7 @@ var dirTo = {
dirToFlag = 0;
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 0);
me.L1 = [" [ ]", " WAYPOINT", "blu"];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.R1 = ["---- --- ", "UTC DIST ", "wht"];
} else {
mcdu_message(me.computer, "NOT ALLOWED");
@ -264,6 +265,7 @@ var dirTo = {
dirToFlag = 0;
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 1);
me.L1 = [" [ ]", " WAYPOINT", "blu"];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0]];
me.R1 = ["---- --- ", "UTC DIST ", "wht"];
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA"); # todo - remember horizontal srcoll of f-plna?
} else {

View file

@ -7,6 +7,7 @@ var fplnItem = {
fI.computer = computer;
fI.colour = colour;
fI.assembledStr = [nil, nil, colour];
fI._colour = "wht";
return fI;
},
updateLeftText: func() {
@ -39,8 +40,10 @@ var fplnItem = {
if (me.wp.wp_name != "DISCONTINUITY") {
if (me.index == fmgc.flightPlanController.currentToWptIndex.getValue() - 1 and fmgc.flightPlanController.fromWptTime != nil) {
me.assembledStr[0] = fmgc.flightPlanController.fromWptTime ~ " ";
me.assembledStr[2] = "grn";
} else {
me.assembledStr[0] = "---- ";
me.assembledStr[2] = "wht";
}
if (me.index == fmgc.flightPlanController.currentToWptIndex.getValue()) {
@ -65,7 +68,11 @@ var fplnItem = {
me.spd = me.getSpd();
me.alt = me.getAlt();
me.dist = me.getDist();
return [me.spd ~ "/" ~ me.alt, " " ~ me.dist ~ "NM ", me.colour];
me._colour = "wht";
if (me.spd[1] != "wht" or me.alt[1] != "wht") {
me._colour = "mag";
}
return [me.spd[0] ~ "/" ~ me.alt[0], " " ~ me.dist ~ "NM ", me._colour];
} else {
return [nil, nil, "ack"];
}
@ -87,19 +94,27 @@ var fplnItem = {
return sprintf("%03.0f", math.round(me.trk));
},
getSpd: func() {
if (me.index == 0 and getprop("FMGC/internal/v1-set")) {
return sprintf("%3.0f", math.round(getprop("FMGC/internal/v1")));
if (me.index == 0 and left(me.wp.wp_name, 4) == fmgc.FMGCInternal.depApt and fmgc.FMGCInternal.v1set) {
return [sprintf("%3.0f", math.round(fmgc.FMGCInternal.v1)), "mag"];
} elsif (me.wp.speed_cstr != nil and me.wp.speed_cstr != 0) {
return [sprintf("%3.0f", me.wp.speed_cstr), "mag"];
} else {
return "---";
return ["---", "wht"];
}
},
getAlt: func() {
if (me.index == 0 and left(me.wp.wp_name, 4) == getprop("/FMGC/internal/dep-arpt") and fmgc.flightPlanController.flightplans[me.plan].departure != nil) {
return sprintf("%6.0f", math.round(fmgc.flightPlanController.flightplans[me.plan].departure.elevation * M2FT));
if (me.index == 0 and left(me.wp.wp_name, 4) == fmgc.FMGCInternal.depApt and fmgc.flightPlanController.flightplans[me.plan].departure != nil) {
return [" " ~ sprintf("%-5.0f", math.round(fmgc.flightPlanController.flightplans[me.plan].departure.elevation * M2FT)), "mag"];
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1) and fmgc.flightPlanController.fromWptAlt != nil) {
return " " ~ fmgc.flightPlanController.fromWptAlt;
return [" " ~ fmgc.flightPlanController.fromWptAlt, "mag"];
} elsif (me.wp.alt_cstr != nil and me.wp.alt_cstr != 0) {
if (me.wp.alt_cstr > fmgc.FMGCInternal.transAlt) {
return [" " ~ sprintf("%-5s", "FL" ~ math.round(num(me.wp.alt_cstr) / 100)), "mag"];
} else {
return "------";
return [" " ~ sprintf("%-5.0f", me.wp.alt_cstr), "mag"];
}
} else {
return ["------", "wht"];
}
},
getDist: func() {
@ -141,6 +156,7 @@ var fplnItem = {
setprop("MCDU[" ~ me.computer ~ "]/page", "LATREV");
},
pushButtonRight: func() {
if (size(mcdu_scratchpad.scratchpads[me.computer].scratchpad) == 0) {
if (canvas_mcdu.myVertRev[me.computer] != nil) {
canvas_mcdu.myVertRev[me.computer].del();
}
@ -148,26 +164,65 @@ var fplnItem = {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
if (me.index == fmgc.flightPlanController.arrivalIndex[me.computer]) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} if (left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[me.computer].departure.id) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
} else {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
}
} else {
if (me.index == fmgc.flightPlanController.arrivalIndex[2]) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(1, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (left(me.wp.wp_name, 4) == fmgc.flightPlanController.flightplans[2].departure.id) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(0, left(me.wp.wp_name, 4), me.index, me.computer, me.wp, me.plan);
} elsif (me.index == (fmgc.flightPlanController.currentToWptIndex.getValue() - 1)) {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(3, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
} else {
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer);
canvas_mcdu.myVertRev[me.computer] = vertRev.new(2, me.wp.wp_name, me.index, me.computer, me.wp, me.plan);
}
}
setprop("MCDU[" ~ me.computer ~ "]/page", "VERTREV");
} elsif (me.index != 0) { # todo - only apply to climb, descent, or missed waypoints
var scratchpadStore = mcdu_scratchpad.scratchpads[me.computer].scratchpad;
if (scratchpadStore == "CLR") {
me.wp.setSpeed("delete");
me.wp.setAltitude("delete");
mcdu_scratchpad.scratchpads[me.computer].empty();
} elsif (find("/", scratchpadStore) != -1) {
var scratchpadSplit = split("/", scratchpadStore);
if (size(scratchpadSplit[0]) == 0) {
if (num(scratchpadSplit[1]) != nil and (size(scratchpadSplit[1]) == 4 or size(scratchpadSplit[1]) == 5) and scratchpadSplit[1] >= 0 and scratchpadSplit[1] <= 39000) {
me.wp.setAltitude(math.round(scratchpadSplit[1], 10), "at");
mcdu_scratchpad.scratchpads[me.computer].empty();
} else {
mcdu_message(me.computer, "FORMAT ERROR");
}
} else {
if (num(scratchpadSplit[0]) != nil and size(scratchpadSplit[0]) == 3 and scratchpadSplit[0] >= 100 and scratchpadSplit[0] <= 350 and
num(scratchpadSplit[1]) != nil and (size(scratchpadSplit[1]) == 4 or size(scratchpadSplit[1]) == 5) and scratchpadSplit[1] >= 0 and scratchpadSplit[1] <= 39000) {
me.wp.setSpeed(scratchpadSplit[0], "at");
me.wp.setAltitude(math.round(scratchpadSplit[1], 10), "at");
mcdu_scratchpad.scratchpads[me.computer].empty();
} elsif (num(scratchpadSplit[0]) != nil and size(scratchpadSplit[0]) == 3 and scratchpadSplit[0] >= 100 and scratchpadSplit[0] <= 350 and size(scratchpadSplit[1]) == 0) {
me.wp.setSpeed(scratchpadSplit[0], "at");
mcdu_scratchpad.scratchpads[me.computer].empty();
} else {
mcdu_message(me.computer, "FORMAT ERROR");
}
}
} elsif (num(scratchpadStore) != nil and size(scratchpadStore) == 3 and scratchpadStore >= 100 and scratchpadStore <= 350) {
me.wp.setSpeed(scratchpadStore, "at");
mcdu_scratchpad.scratchpads[me.computer].empty();
} else {
mcdu_message(me.computer, "FORMAT ERROR");
}
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}
},
};
@ -216,17 +271,6 @@ var fplnPage = { # this one is only created once, and then updated - remember th
R5: [nil, nil, "ack"],
R6: [nil, nil, "ack"],
# init conditions
# line 1 = FROM
# line 2 = TO
# line 6 = DEST
# neither pseudo nor markers may be FROM waypoint
# bearing between FROM and TO waypoints
# track between line 2 and line 3 waypoints
# name of LEG above TO waypoint - is airway identifier, or waypoint name
# DEST in LINE 6 time prediction, distance along flightplan, and EFOB
# dashes if no predictions
planList: [],
outputList: [],
scroll: 0,
@ -275,7 +319,7 @@ var fplnPage = { # this one is only created once, and then updated - remember th
colour = "grn";
}
for (var i = 0; i < me.plan.getPlanSize(); i += 1) {
if (!me.temporaryFlagFpln and i > fmgc.flightPlanController.arrivalIndex[me.planIndex] and getprop("/FMGC/status/phase") != 6) {
if (!me.temporaryFlagFpln and i > fmgc.flightPlanController.arrivalIndex[me.planIndex] and fmgc.FMGCInternal.phase != 6) {
append(me.planList, fplnItem.new(me.plan.getWP(i), i, me.planIndex, me.computer, "blu"));
} else {
append(me.planList, fplnItem.new(me.plan.getWP(i), i, me.planIndex, me.computer, colour));
@ -392,9 +436,11 @@ var fplnPage = { # this one is only created once, and then updated - remember th
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 0);
# push update to fuel
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
} else {
if (canvas_mcdu.myLatRev[me.computer] != nil) {
@ -433,20 +479,18 @@ var fplnPage = { # this one is only created once, and then updated - remember th
if (dirToFlag) { dirToFlag = 0; }
fmgc.flightPlanController.destroyTemporaryFlightPlan(me.computer, 1);
# push update to fuel
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}
} else {
if (size(me.outputList) >= index) {
if (size(mcdu_scratchpad.scratchpads[me.computer].scratchpad) > 0) {
mcdu_message(me.computer, "NOT ALLOWED");
} else {
me.outputList[index - 1].pushButtonRight();
}
} else {
mcdu_message(me.computer, "NOT ALLOWED");
}

View file

@ -3,58 +3,45 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
# From INIT-B
var zfwcg = props.globals.getNode("FMGC/internal/zfwcg", 1);
var zfwcgSet = props.globals.getNode("FMGC/internal/zfwcg-set", 1);
var zfw = props.globals.getNode("FMGC/internal/zfw", 1);
var zfwSet = props.globals.getNode("FMGC/internal/zfw-set", 1);
var block = props.globals.getNode("FMGC/internal/block", 1);
var blockSet = props.globals.getNode("FMGC/internal/block-set", 1);
var taxi_fuel = props.globals.getNode("FMGC/internal/taxi-fuel", 1);
var trip_fuel = props.globals.getNode("FMGC/internal/trip-fuel", 1);
var trip_time = props.globals.getNode("FMGC/internal/trip-time", 1);
var rte_rsv = props.globals.getNode("FMGC/internal/rte-rsv", 1);
var rte_percent = props.globals.getNode("FMGC/internal/rte-percent", 1);
var alt_fuel = props.globals.getNode("FMGC/internal/alt-fuel", 1);
var alt_time = props.globals.getNode("FMGC/internal/alt-time", 1);
var final_fuel = props.globals.getNode("FMGC/internal/final-fuel", 1);
var final_time = props.globals.getNode("FMGC/internal/final-time", 1);
var min_dest_fob = props.globals.getNode("FMGC/internal/min-dest-fob", 1);
var tow = props.globals.getNode("FMGC/internal/tow", 1);
var lw = props.globals.getNode("FMGC/internal/lw", 1);
var trip_wind = props.globals.getNode("FMGC/internal/trip-wind", 1);
var trip_wind_value = props.globals.getNode("FMGC/internal/trip-wind", 1);
var fob = props.globals.getNode("FMGC/internal/fob", 1);
var fffq_sensor = props.globals.getNode("FMGC/internal/fffq-sensor", 1);
var extra_fuel = props.globals.getNode("FMGC/internal/extra-fuel", 1);
var extra_time = props.globals.getNode("FMGC/internal/extra-time", 1);
var fuelPredInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L3" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating")) {
if (key == "L3" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/rte-rsv", 0.05 * num(getprop("/FMGC/internal/trip-fuel")));
setprop("/FMGC/internal/rte-percent", 5.0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.rteRsv = 0.05 * fmgc.FMGCInternal.tripFuel;
fmgc.FMGCInternal.rteRsvSet = 0;
fmgc.FMGCInternal.rtePercent = 5.0;
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (getprop("/FMGC/internal/trip-fuel") != 0) {
} else if (fmgc.FMGCInternal.tripFuel != 0) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 2 and tfs <= 5 and find("/", scratchpad) == 0) {
var perc = num(split("/", scratchpad)[1]);
if (perc != nil and perc >= 0.0 and perc <= 15.0) {
setprop("/FMGC/internal/rte-rsv", num(perc) / 100 * num(getprop("/FMGC/internal/trip-fuel")));
setprop("/FMGC/internal/rte-percent", perc);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.rteRsv = perc / 100 * fmgc.FMGCInternal.tripFuel;
fmgc.FMGCInternal.rteRsvSet = 0;
fmgc.FMGCInternal.rtePercent = perc;
fmgc.FMGCInternal.rtePercentSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
}
} else if (tfs >= 1 and tfs <= 4 and tf != nil and tf >= 0 and tf <= 21.7) {
setprop("/FMGC/internal/rte-rsv", scratchpad);
if (scratchpad / num(getprop("/FMGC/internal/trip-fuel")) * 100 <= 15.0) {
setprop("/FMGC/internal/rte-percent", scratchpad / num(getprop("/FMGC/internal/trip-fuel")) * 100);
fmgc.FMGCInternal.rteRsv = scratchpad;
fmgc.FMGCInternal.rteRsvSet = 1;
if (scratchpad / fmgc.FMGCInternal.tripFuel * 100 <= 15.0) {
fmgc.FMGCInternal.rtePercent = scratchpad / fmgc.FMGCInternal.tripFuel * 100;
} else {
setprop("/FMGC/internal/rte-percent", 15.0); # need reasearch on this value
fmgc.FMGCInternal.rtePercent = 15.0; # need reasearch on this value
}
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -62,21 +49,26 @@ var fuelPredInput = func(key, i) {
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L4" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating") and getprop("/FMGC/internal/alt-set")) {
} else if (key == "L4" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and fmgc.FMGCInternal.altAirportSet) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/alt-fuel", 0.0);
setprop("/FMGC/internal/alt-time", "0000");
setprop("/FMGC/internal/alt-fuel-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.altFuel = 0.0;
fmgc.FMGCInternal.altTime = "0000";
fmgc.FMGCInternal.altFuelSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (find(".", scratchpad) != -1) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 3 and tfs <= 4 and tf != nil and tf >= 0 and tf <= 10.0) {
setprop("/FMGC/internal/alt-fuel", tf);
setprop("/FMGC/internal/alt-time", "0000");
setprop("/FMGC/internal/alt-fuel-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.altFuel = tf;
fmgc.FMGCInternal.altTime = "0000";
fmgc.FMGCInternal.altFuelSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -84,53 +76,67 @@ var fuelPredInput = func(key, i) {
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L5" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "L5" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/final-fuel", 0.0);
setprop("/FMGC/internal/final-time", "0030");
setprop("/FMGC/internal/final-fuel-set", 0);
setprop("/FMGC/internal/final-time-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.finalFuel = 0.0;
fmgc.FMGCInternal.finalTime = "0030";
fmgc.FMGCInternal.finalFuelSet = 0;
fmgc.FMGCInternal.finalTimeSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (find(".", scratchpad) != -1) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 3 and tfs <= 4 and tf != nil and tf >= 0 and tf <= 10.0) {
setprop("/FMGC/internal/final-fuel", tf);
setprop("/FMGC/internal/final-fuel-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.finalFuel = tf;
fmgc.FMGCInternal.finalFuelSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs == 4 and tf != nil and ((tf >= 0 and tf <= 59) or (tf >= 100 and tf <= 130))) {
setprop("/FMGC/internal/final-time", scratchpad);
setprop("/FMGC/internal/final-time-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.finalTime = scratchpad;
fmgc.FMGCInternal.finalTimeSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "L6" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "L6" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/min-dest-fob", 0);
setprop("/FMGC/internal/min-dest-fob-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.minDestFob = 0;
fmgc.FMGCInternal.minDestFobSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (find(".", scratchpad) != -1) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 3 and tfs <= 5 and tf != nil and tf >= 0 and tf <= 80.0) {
setprop("/FMGC/internal/min-dest-fob", tf);
setprop("/FMGC/internal/min-dest-fob-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.minDestFob = tf;
fmgc.FMGCInternal.minDestFobSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
if (num(getprop("/FMGC/internal/min-dest-fob")) < num(getprop("/FMGC/internal/final-fuel") + getprop("/FMGC/internal/alt-fuel"))) {
genericMessage(i, "CHECK MIN DEST FOB", "wht");
if (fmgc.FMGCInternal.minDestFob < fmgc.FMGCInternal.finalFuel + fmgc.FMGCInternal.altFuel) {
mcdu_message(i, "CHECK MIN DEST FOB");
}
} else {
mcdu_message(i, "NOT ALLOWED");
@ -138,96 +144,119 @@ var fuelPredInput = func(key, i) {
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "R3" and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "R3" and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
mcdu_message(i, "NOT ALLOWED");
} else {
if (!getprop("/FMGC/internal/cost-index-set")) {
mcdu_message(i, "USING COST INDEX N", getprop("/FMGC/internal/last-cost-index"));
setprop("/FMGC/internal/cost-index-set", 1);
setprop("/FMGC/internal/cost-index", getprop("/FMGC/internal/last-cost-index"));
var zfw_min = 80.6; #make based on performance
var zfw_max = 134.5; #61,000 kg, make based on performance
if (size(scratchpad) == 0) {
var zfw = pts.Fdm.JSBsim.Inertia.weightLbs.getValue() - pts.Consumables.Fuel.totalFuelLbs.getValue();
fmgc.FMGCInternal.zfw = sprintf("%3.1f", math.round(zfw / 1000, 0.1));
fmgc.FMGCInternal.zfwSet = 1;
if (fmgc.FMGCInternal.blockSet != 1) {
fmgc.FMGCInternal.block = pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000;
fmgc.FMGCInternal.blockSet = 1;
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
} else if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (find("/", scratchpad) != -1) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
}
var zfwi = split("/", scratchpad);
var zfw = num(zfwi[0]);
var zfwcg = num(zfwi[1]);
var zfws = size(zfwi[0]);
var zfwcgs = size(zfwi[1]);
if (zfw != nil and zfws > 0 and zfws <= 5 and (find(".", zfwi[0]) == -1 or size(split(".", zfwi[0])[1]) <= 1) and zfwcg != nil and zfwcgs > 0 and zfwcgs <= 4 and (find(".", zfwi[1]) == -1 or size(split(".", zfwi[1])[1]) <= 1)) {
if (zfw >= zfw_min and zfw <= zfw_max and zfwcg >= 8.0 and zfwcg <= 45.0) {
fmgc.FMGCInternal.zfw = zfw;
fmgc.FMGCInternal.zfwSet = 1;
fmgc.FMGCInternal.zfwcg = zfwcg;
fmgc.FMGCInternal.zfwcgSet = 1;
if (fmgc.FMGCInternal.blockSet != 1) {
fmgc.FMGCInternal.block = pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000;
fmgc.FMGCInternal.blockSet = 1;
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
} else if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
} else if (zfws == 0 and zfwcg != nil and zfwcgs > 0 and zfwcgs <= 4 and (find(".", zfwi[1]) == -1 or size(split(".", zfwi[1])[1]) <= 1)) {
if (zfwcg >= 8.0 and zfwcg <= 45.0) {
fmgc.FMGCInternal.zfwcg = zfwcg;
fmgc.FMGCInternal.zfwcgSet = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (num(scratchpad) != nil and size(scratchpad) > 0 and size(scratchpad) <= 5 and (find(".", scratchpad) == -1 or size(split(".", scratchpad)[1]) <= 1)) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
}
if (scratchpad >= zfw_min and scratchpad <= zfw_max) {
fmgc.FMGCInternal.zfw = scratchpad;
fmgc.FMGCInternal.zfwSet = 1;
if (fmgc.FMGCInternal.blockSet != 1) {
fmgc.FMGCInternal.block = pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000;
fmgc.FMGCInternal.blockSet = 1;
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
} else if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
var tfs = size(scratchpad);
if (tfs == 0) {
var zfw = getprop("/fdm/jsbsim/inertia/weight-lbs") - getprop("/consumables/fuel/total-fuel-lbs");
setprop("/FMGC/internal/zfw", sprintf("%3.1f", math.round(zfw / 1000, 0.1)));
setprop("/FMGC/internal/zfw-set", 1);
if (getprop("/FMGC/internal/block-set") != 1) {
setprop("/FMGC/internal/block", num(getprop("consumables/fuel/total-fuel-lbs") / 1000));
setprop("/FMGC/internal/block-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
}
} else if (tfs >= 2 and tfs <= 11 and find("/", scratchpad) != -1) {
var zfwi = split("/", scratchpad);
var zfwcg = num(zfwi[0]);
var zfw = num(zfwi[1]);
var zfwcgs = size(zfwi[0]);
var zfws = size(zfwi[1]);
if (zfwcg != nil and zfwcgs >= 1 and zfwcgs <= 5 and zfwcg > 0 and zfwcg <= 99.9) {
setprop("/FMGC/internal/zfwcg", zfwcg);
setprop("/FMGC/internal/zfwcg-set", 1);
if (getprop("/FMGC/internal/block-set") != 1) {
setprop("/FMGC/internal/block", num(getprop("consumables/fuel/total-fuel-lbs") / 1000));
setprop("/FMGC/internal/block-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
}
}
if (zfw != nil and zfws >= 1 and zfws <= 5 and zfw > 0 and zfw <= 999.9) {
setprop("/FMGC/internal/zfw", zfw);
setprop("/FMGC/internal/zfw-set", 1);
if (getprop("/FMGC/internal/block-set") != 1) {
setprop("/FMGC/internal/block", num(getprop("consumables/fuel/total-fuel-lbs") / 1000));
setprop("/FMGC/internal/block-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
}
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
}
}
if ((zfwcg != nil and zfwcgs >= 1 and zfwcgs <= 5 and zfwcg > 0 and zfwcg <= 99.9) or (zfw != nil and zfws >= 1 and zfws <= 5 and zfw > 0 and zfw <= 999.9)) {
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (tfs >= 1 and tfs <= 5) {
var zfwcg = size(scratchpad);
if (num(scratchpad) != nil and zfwcg >= 1 and zfwcg <= 5 and scratchpad > 0 and scratchpad <= 99.9) {
setprop("/FMGC/internal/zfwcg", scratchpad);
setprop("/FMGC/internal/zfwcg-set", 1);
if (getprop("/FMGC/internal/block-set") != 1) {
setprop("/FMGC/internal/block", num(getprop("consumables/fuel/total-fuel-lbs") / 1000));
setprop("/FMGC/internal/block-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
if (!fmgc.FMGCInternal.costIndexSet and fmgc.FMGCInternal.toFromSet) {
mcdu_message(i, "USING COST INDEX N", getprop("/FMGC/internal/last-cost-index") or 0);
fmgc.FMGCInternal.costIndexSet = 1;
fmgc.FMGCInternal.costIndex = getprop("/FMGC/internal/last-cost-index") or 0;
fmgc.FMGCNodes.costIndex.setValue(fmgc.FMGCInternal.costIndex);
}
}
} else if (key == "R4") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/fffq-sensor", "FF+FQ");
fmgc.FMGCInternal.fffqSensor = "FF+FQ";
mcdu_scratchpad.scratchpads[i].empty();
} else if (find("/", scratchpad) == 0) {
var sensor = substr(scratchpad, 1);
if (sensor == "FF+FQ" or sensor == "FQ+FF" or sensor == "FF" or sensor == "FQ") {
setprop("FMGC/internal/fffq-sensor", sensor);
fmgc.FMGCInternal.fffqSensor = sensor;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -40,21 +40,42 @@ var holdPage = {
_setupPageWithData: func() {
me.title = ["HOLD", " AT ", me.waypoint.wp_name];
me.titleColour = "wht";
me.L1 = [" [ ]", "INB CRS", "blu"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [1, 1, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["wht", "wht", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
if (me.waypoint.fly_type == "Hold") {
me.makeTmpy();
me.L1 = [" " ~ sprintf("%03.0f", me.waypoint.hold_inbound_radial), "INB CRS", "blu"];
me.fontMatrix[0][0] = 0;
if (me.waypoint.hold_is_left_handed) {
me.L2 = [" L", " TURN", "blu"];
} else {
me.L2 = [" R", " TURN", "blu"];
}
if (me.waypoint.hold_is_distance) {
me.L2 = [" -.-/" ~ me.waypoint.hold_time_or_distance, "TIME/DIST", "blu"];
} else {
me.L2 = [" " ~ sprintf("%3.1f", (me.waypoint.hold_time_or_distance / 60)) ~ "/----", "TIME/DIST", "blu"];
}
me.R1 = ["COMPUTED ", nil, "wht"];
me.R2 = ["DATABASE ", nil, "yel"];
me.arrowsMatrix[1][1] = 0;
} else {
me.L1 = [" 100", "INB CRS", "blu"];
me.L2 = [" R", " TURN", "blu"];
if (pts.Instrumentation.Altimeter.indicatedFt.getValue() >= 14000) {
me.L2 = [" 1.5/----", "TIME/DIST", "blu"];
} else {
me.L2 = [" 1.0/----", "TIME/DIST", "blu"];
}
me.R1 = ["COMPUTED ", nil, "wht"];
me.R2 = ["DATABASE ", nil, "wht"];
}
me.L6 = [" RETURN", nil, "wht"];
me.C4 = ["LAST EXIT", nil, "wht"];
me.C5 = ["---- ---.-", "UTC FUEL", "wht"];
me.R1 = ["COMPUTED ", nil, "wht"];
me.R2 = ["DATABASE ", nil, "wht"];
me.arrowsMatrix = [[0, 0, 0, 0, 0, 1], [1, 1, 0, 0, 0, 0]];
me.arrowsColour = [["ack", "ack", "ack", "ack", "ack", "wht"], ["wht", "wht", "ack", "ack", "ack", "ack"]];
me.fontMatrix = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
},
makeTmpy: func() {
@ -67,7 +88,7 @@ var holdPage = {
me.L1[2] = "yel";
me.L2[2] = "yel";
me.L6 = [" F-PLN", " TMPY", "yel"];
me.R6 = ["INSERT* ", " TMPY", "yel"];
me.R6 = ["INSERT ", " TMPY", "yel"];
me.arrowsColour[0][5] = "yel";
me.titleColour = "yel";
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);

View file

@ -7,30 +7,36 @@ var initInputA = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L2") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/alt-airport", "");
setprop("/FMGC/internal/alt-set", 0);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.altAirport = "";
fmgc.FMGCInternal.altAirportSet = 0;
fmgc.windController.updatePlans();
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
fmgc.updateARPT();
#} else if (scratchpad == "") {
#setprop("/FMGC/internal/alt-selected", 1);
#fmgc.FMGCInternal.altSelected = 1;
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
} else if (getprop("/FMGC/internal/tofrom-set") == 1) {
} else if (fmgc.FMGCInternal.toFromSet) {
if (!fmgc.flightPlanController.temporaryFlag[i]) {
var tfs = size(scratchpad);
if (tfs == 4) {
setprop("/FMGC/internal/alt-airport", scratchpad);
setprop("/FMGC/internal/alt-set", 1);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.altAirport = scratchpad;
fmgc.FMGCInternal.altAirportSet = 1;
fmgc.windController.updatePlans();
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
fmgc.updateARPT();
#setprop("/FMGC/internal/alt-selected", 1);
#fmgc.FMGCInternal.altSelected = 1;
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
} else {
mcdu_message(i, "NOT ALLOWED");
@ -43,14 +49,14 @@ var initInputA = func(key, i) {
}
} else if (key == "L3") {
if (scratchpad == "CLR") {
setprop("MCDUC/flight-num", "");
setprop("MCDUC/flight-num-set", 0);
fmgc.FMGCInternal.flightNum = "";
fmgc.FMGCInternal.flightNumSet = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else {
var flts = size(scratchpad);
if (flts >= 1 and flts <= 8) {
setprop("MCDUC/flight-num", scratchpad);
setprop("MCDUC/flight-num-set", 1);
fmgc.FMGCInternal.flightNum = scratchpad;
fmgc.FMGCInternal.flightNumSet = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -58,16 +64,18 @@ var initInputA = func(key, i) {
}
} else if (key == "L5") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/cost-index", 0);
setprop("/FMGC/internal/cost-index-set", 0);
fmgc.FMGCInternal.costIndex = 0;
fmgc.FMGCInternal.costIndexSet = 0;
fmgc.FMGCNodes.costIndex.setValue(0);
mcdu_scratchpad.scratchpads[i].empty();
} else {
var ci = int(scratchpad);
var cis = size(scratchpad);
if (cis >= 1 and cis <= 3) {
if (ci != nil and ci >= 0 and ci <= 999) {
setprop("/FMGC/internal/cost-index", ci);
setprop("/FMGC/internal/cost-index-set", 1);
fmgc.FMGCInternal.costIndex = ci;
fmgc.FMGCInternal.costIndexSet = 1;
fmgc.FMGCNodes.costIndex.setValue(fmgc.FMGCInternal.costIndex);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -78,14 +86,19 @@ var initInputA = func(key, i) {
}
} else if (key == "L6") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/cruise-ft", 10000);
setprop("/FMGC/internal/cruise-fl", 100);
setprop("/FMGC/internal/cruise-lvl-set", 0);
setprop("/FMGC/internal/cruise-temp", 15);
setprop("/FMGC/internal/cruise-temp-set", 0);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.crzFt = 10000;
fmgc.FMGCInternal.crzFl = 100;
fmgc.altvert();
fmgc.updateRouteManagerAlt();
fmgc.FMGCInternal.crzSet = 0;
updateCrzLvlCallback();
fmgc.FMGCInternal.crzTemp = 15;
fmgc.FMGCInternal.crzTempSet = 0;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (find("/", scratchpad) != -1) {
@ -99,12 +112,15 @@ var initInputA = func(key, i) {
}
var temp = int(crztemp[1]);
var temps = size(crztemp[1]);
if (crzs == 0 and temps >= 1 and temps <= 3 and temp != nil and getprop("/FMGC/internal/cruise-lvl-set")) {
if (crzs == 0 and temps >= 1 and temps <= 3 and temp != nil and fmgc.FMGCInternal.crzSet) {
if (temp >= -99 and temp <= 99) {
setprop("/FMGC/internal/cruise-temp", temp);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.crzTemp = temp;
fmgc.FMGCInternal.crzTempSet = 1;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -112,15 +128,20 @@ var initInputA = func(key, i) {
}
} else if (crzs >= 1 and crzs <= 3 and crz != nil and temps >= 1 and temps <= 3 and temp != nil) {
if (crz > 0 and crz <= 390 and temp >= -99 and temp <= 99) {
setprop("/FMGC/internal/cruise-ft", crz * 100);
setprop("/FMGC/internal/cruise-fl", crz);
setprop("/FMGC/internal/cruise-fl-prog", crz);
setprop("/FMGC/internal/cruise-lvl-set", 1);
setprop("/FMGC/internal/cruise-temp", temp);
setprop("/FMGC/internal/cruise-temp-set", 1);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.crzFt = crz * 100;
fmgc.FMGCInternal.crzFl = crz;
fmgc.altvert();
fmgc.updateRouteManagerAlt();
fmgc.FMGCInternal.crzSet = 1;
updateCrzLvlCallback();
fmgc.FMGCInternal.crzTemp = temp;
fmgc.FMGCInternal.crzTempSet = 1;
fmgc.FMGCInternal.crzProg = crz;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -139,13 +160,18 @@ var initInputA = func(key, i) {
}
if (crzs >= 1 and crzs <= 3 and crz != nil) {
if (crz > 0 and crz <= 390) {
setprop("/FMGC/internal/cruise-ft", crz * 100);
setprop("/FMGC/internal/cruise-fl", crz);
setprop("/FMGC/internal/cruise-fl-prog", crz);
setprop("/FMGC/internal/cruise-lvl-set", 1);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.crzFt = crz * 100;
fmgc.FMGCInternal.crzFl = crz;
fmgc.altvert();
fmgc.updateRouteManagerAlt();
fmgc.FMGCInternal.crzSet = 1;
updateCrzLvlCallback();
fmgc.FMGCInternal.crzProg = crz;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -157,22 +183,27 @@ var initInputA = func(key, i) {
}
} else if (key == "R1") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/dep-arpt", "");
setprop("/FMGC/internal/arr-arpt", "");
setprop("/FMGC/internal/tofrom-set", 0);
fmgc.FMGCInternal.depApt = "";
fmgc.FMGCInternal.arrApt = "";
fmgc.FMGCInternal.toFromSet = 0;
fmgc.FMGCNodes.toFromSet.setValue(0);
fmgc.windController.resetDesWinds();
setprop("/FMGC/internal/align-ref-lat", 0);
setprop("/FMGC/internal/align-ref-long", 0);
setprop("/FMGC/internal/align-ref-lat-edit", 0);
setprop("/FMGC/internal/align-ref-long-edit", 0);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
fmgc.flightPlanController.reset(2);
fmgc.flightPlanController.init();
Simbrief.SimbriefParser.inhibit = 0;
mcdu_scratchpad.scratchpads[i].empty();
#} else if (scratchpad == "") {
#setprop("/FMGC/internal/alt-selected", 0);
#fmgc.FMGCInternal.altSelected = 0;
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
} else {
if (!fmgc.flightPlanController.temporaryFlag[i]) {
@ -183,32 +214,18 @@ var initInputA = func(key, i) {
var tos = size(fromto[1]);
if (froms == 4 and tos == 4) {
#route
setprop("/FMGC/internal/dep-arpt", fromto[0]);
setprop("/FMGC/internal/arr-arpt", fromto[1]);
setprop("/FMGC/internal/tofrom-set", 1);
if (fmgc.FMGCInternal.toFromSet == 1 and fmgc.FMGCInternal.arrApt != fromto[1]) {
fmgc.windController.resetDesWinds();
}
fmgc.FMGCInternal.depApt = fromto[0];
fmgc.FMGCInternal.arrApt = fromto[1];
fmgc.FMGCInternal.toFromSet = 1;
fmgc.FMGCNodes.toFromSet.setValue(1);
#scratchpad
mcdu_scratchpad.scratchpads[i].empty();
fmgc.flightPlanController.updateAirports(fromto[0], fromto[1], 2);
setprop("/FMGC/internal/alt-selected", 0);
#ref lat
dms = getprop("/FMGC/flightplan[2]/wp[0]/lat");
degrees = int(dms);
minutes = sprintf("%.1f",abs((dms - degrees) * 60));
sign = degrees >= 0 ? "N" : "S";
setprop("/FMGC/internal/align-ref-lat-degrees", degrees);
setprop("/FMGC/internal/align-ref-lat-minutes", minutes);
setprop("/FMGC/internal/align-ref-lat-sign", sign);
#ref long
dms = getprop("/FMGC/flightplan[2]/wp[0]/lon");
degrees = int(dms);
minutes = sprintf("%.1f",abs((dms - degrees) * 60));
sign = degrees >= 0 ? "E" : "W";
setprop("/FMGC/internal/align-ref-long-degrees", degrees);
setprop("/FMGC/internal/align-ref-long-minutes", minutes);
setprop("/FMGC/internal/align-ref-long-sign", sign);
#ref edit
setprop("/FMGC/internal/align-ref-lat-edit", 0);
setprop("/FMGC/internal/align-ref-long-edit", 0);
fmgc.FMGCInternal.altSelected = 0;
fmgc.updateArptLatLon();
#setprop("MCDU[" ~ i ~ "]/page", "ROUTESELECTION");
} else {
mcdu_message(i, "NOT ALLOWED");
@ -220,18 +237,46 @@ var initInputA = func(key, i) {
mcdu_message(i, "TMPY F-PLN EXISTS");
}
}
} else if (key == "R2") {
if (pts.Engines.Engine.state[0].getValue() != 3 and pts.Engines.Engine.state[1].getValue() != 3) {
if (!ecam.vhf3_voice.active) {
if (atsu.ATSU.working) {
if (getprop("/FMGC/simbrief-username") == "") {
mcdu.mcdu_message(i, "MISSING USERNAME")
} elsif (!Simbrief.SimbriefParser.inhibit) {
Simbrief.SimbriefParser.fetch(getprop("/FMGC/simbrief-username"), i);
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NO COMM MSG NOT GEN");
}
} else {
mcdu_message(i, "VHF3 VOICE MSG NOT GEN");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "R3") {
setprop("MCDU[" ~ i ~ "]/page", "IRSINIT");
} else if (key == "R4") {
if (canvas_mcdu.myCLBWIND[i] == nil) {
canvas_mcdu.myCLBWIND[i] = windCLBPage.new(i);
} else {
canvas_mcdu.myCLBWIND[i].reload();
}
fmgc.windController.accessPage[i] = "INITA";
setprop("MCDU[" ~ i ~ "]/page", "WINDCLB");
} else if (key == "R5") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/tropo", 36090);
setprop("/FMGC/internal/tropo-set", 0);
fmgc.FMGCInternal.tropo = 36090;
fmgc.FMGCInternal.tropoSet = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tropo = size(scratchpad);
if (tropo == 5 and scratchpad <= 99990) {
setprop("FMGC/internal/tropo-set", 1);
setprop("FMGC/internal/tropo", scratchpad);
fmgc.FMGCInternal.tropo = scratchpad;
fmgc.FMGCInternal.tropoSet = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -239,11 +284,11 @@ var initInputA = func(key, i) {
}
} else if (key == "R6") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/gndtemp-set", 0);
fmgc.FMGCInternal.gndTempSet = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil and getprop("/FMGC/status/phase") == 0 and size(scratchpad) >= 1 and size(scratchpad) <= 3 and scratchpad >= -99 and scratchpad <= 99) {
setprop("/FMGC/internal/gndtemp", scratchpad);
setprop("/FMGC/internal/gndtemp-set", 1);
} else if (int(scratchpad) != nil and fmgc.FMGCInternal.phase == 0 and size(scratchpad) >= 1 and size(scratchpad) <= 3 and scratchpad >= -99 and scratchpad <= 99) {
fmgc.FMGCInternal.gndTemp = scratchpad;
fmgc.FMGCInternal.gndTempSet = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -2,27 +2,41 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
var acconfig_weight_kgs = props.globals.getNode("/systems/acconfig/options/weight-kgs", 1);
# Conversion factor pounds to kilogram
var LBS2KGS = 0.4535924;
var initInputB = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L1" and !getprop("/FMGC/internal/fuel-calculating")) {
if (key == "L1" and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/taxi-fuel", 0.4);
setprop("/FMGC/internal/taxi-fuel-set", 0);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
} else if (getprop("/FMGC/internal/fuel-request-set")) {
setprop("/FMGC/internal/block-calculating", 1);
fmgc.FMGCInternal.taxiFuel = 0.4;
fmgc.FMGCInternal.taxiFuelSet = 0;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
} else if (fmgc.FMGCInternal.fuelRequest) {
fmgc.FMGCInternal.blockCalculating = 1;
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
}
if (tfs >= 1 and tfs <= 4) {
if (num(scratchpad) != nil and scratchpad >= 0.0 and scratchpad <= 9.9) {
setprop("/FMGC/internal/taxi-fuel", scratchpad);
setprop("/FMGC/internal/taxi-fuel-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.taxiFuel = scratchpad;
fmgc.FMGCInternal.taxiFuelSet = 1;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
} else if (fmgc.FMGCInternal.fuelRequest) {
fmgc.FMGCInternal.blockCalculating = 1;
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
fmgc.updateFuel();
} else {
mcdu_message(i, "NOT ALLOWED");
}
@ -30,37 +44,43 @@ var initInputB = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "L3" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "L3" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/rte-rsv", 0.05 * num(getprop("/FMGC/internal/trip-fuel")));
setprop("/FMGC/internal/rte-rsv-set", 0);
setprop("/FMGC/internal/rte-percent", 5.0);
setprop("/FMGC/internal/rte-percent-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.rteRsv = 0.05 * fmgc.FMGCInternal.tripFuel;
fmgc.FMGCInternal.rteRsvSet = 0;
fmgc.FMGCInternal.rtePercent = 5.0;
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (getprop("/FMGC/internal/trip-fuel") != 0) {
} else if (fmgc.FMGCInternal.tripFuel != 0) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 2 and tfs <= 5 and find("/", scratchpad) == 0) {
var perc = num(split("/", scratchpad)[1]);
if (perc != nil and perc >= 0.0 and perc <= 15.0) {
setprop("/FMGC/internal/rte-rsv", num(perc) / 100 * num(getprop("/FMGC/internal/trip-fuel")));
setprop("/FMGC/internal/rte-rsv-set", 0);
setprop("/FMGC/internal/rte-percent", perc);
setprop("/FMGC/internal/rte-percent-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.rteRsv = perc / 100 * fmgc.FMGCInternal.tripFuel;
fmgc.FMGCInternal.rteRsvSet = 0;
fmgc.FMGCInternal.rtePercent = perc;
fmgc.FMGCInternal.rtePercentSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
}
} else if (tfs >= 1 and tfs <= 4 and tf != nil and tf >= 0 and tf <= 21.7) {
setprop("/FMGC/internal/rte-rsv", scratchpad);
setprop("/FMGC/internal/rte-rsv-set", 1);
if (scratchpad / num(getprop("/FMGC/internal/trip-fuel")) * 100 <= 15.0) {
setprop("/FMGC/internal/rte-percent", scratchpad / num(getprop("/FMGC/internal/trip-fuel")) * 100);
fmgc.FMGCInternal.rteRsv = scratchpad;
fmgc.FMGCInternal.rteRsvSet = 1;
if (scratchpad / fmgc.FMGCInternal.tripFuel * 100 <= 15.0) {
fmgc.FMGCInternal.rtePercent = scratchpad / fmgc.FMGCInternal.tripFuel * 100;
} else {
setprop("/FMGC/internal/rte-percent", 15.0); # need reasearch on this value
fmgc.FMGCInternal.rtePercent = 15.0; # need reasearch on this value
}
setprop("/FMGC/internal/rte-percent-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -68,21 +88,26 @@ var initInputB = func(key, i) {
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L4" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating") and getprop("/FMGC/internal/alt-set")) {
} else if (key == "L4" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and fmgc.FMGCInternal.altAirportSet) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/alt-fuel", 0.0);
setprop("/FMGC/internal/alt-time", "0000");
setprop("/FMGC/internal/alt-fuel-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.altFuel = 0.0;
fmgc.FMGCInternal.altTime = "0000";
fmgc.FMGCInternal.altFuelSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (find(".", scratchpad) != -1) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 3 and tfs <= 4 and tf != nil and tf >= 0 and tf <= 10.0) {
setprop("/FMGC/internal/alt-fuel", tf);
setprop("/FMGC/internal/alt-time", "0000");
setprop("/FMGC/internal/alt-fuel-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.altFuel = tf;
fmgc.FMGCInternal.altTime = "0000";
fmgc.FMGCInternal.altFuelSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -90,21 +115,26 @@ var initInputB = func(key, i) {
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L5" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "L5" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/final-fuel", 0.0);
setprop("/FMGC/internal/final-time", "0030");
setprop("/FMGC/internal/final-fuel-set", 0);
setprop("/FMGC/internal/final-time-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.finalFuel = 0.0;
fmgc.FMGCInternal.finalTime = "0030";
fmgc.FMGCInternal.finalFuelSet = 0;
fmgc.FMGCInternal.finalTimeSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (find(".", scratchpad) != -1) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 3 and tfs <= 4 and tf != nil and tf >= 0 and tf <= 10.0) {
setprop("/FMGC/internal/final-fuel", tf);
setprop("/FMGC/internal/final-fuel-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.finalFuel = tf;
fmgc.FMGCInternal.finalFuelSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -113,30 +143,36 @@ var initInputB = func(key, i) {
var tf = num(scratchpad);
var tfs = size(scratchpad);
if (tfs == 4 and tf != nil and ((tf >= 0 and tf <= 59) or (tf >= 100 and tf <= 130))) {
setprop("/FMGC/internal/final-time", scratchpad);
setprop("/FMGC/internal/final-time-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.finalTime = scratchpad;
fmgc.FMGCInternal.finalTimeSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "L6" and getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "L6" and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/min-dest-fob", 0);
setprop("/FMGC/internal/min-dest-fob-set", 0);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.minDestFob = 0;
fmgc.FMGCInternal.minDestFobSet = 0;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
} else if (find(".", scratchpad) != -1) {
var tf = num(scratchpad);
if (acconfig_weight_kgs.getValue() == 1) {
tf = tf / LBS2KGS;
}
var tfs = size(scratchpad);
if (tfs >= 3 and tfs <= 5 and tf != nil and tf >= 0 and tf <= 80.0) {
setprop("/FMGC/internal/min-dest-fob", tf);
setprop("/FMGC/internal/min-dest-fob-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.minDestFob = tf;
fmgc.FMGCInternal.minDestFobSet = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
mcdu_scratchpad.scratchpads[i].empty();
if (num(getprop("/FMGC/internal/min-dest-fob")) < num(getprop("/FMGC/internal/final-fuel") + getprop("/FMGC/internal/alt-fuel"))) {
genericMessage(i, "CHECK MIN DEST FOB", "wht");
if (fmgc.FMGCInternal.minDestFob < fmgc.FMGCInternal.finalFuel + fmgc.FMGCInternal.altFuel) {
mcdu_message(i, "CHECK MIN DEST FOB");
}
} else {
mcdu_message(i, "NOT ALLOWED");
@ -144,135 +180,181 @@ var initInputB = func(key, i) {
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "R1" and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "R1" and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
mcdu_message(i, "NOT ALLOWED");
} else {
if (!getprop("/FMGC/internal/cost-index-set")) {
mcdu_message(i, "USING COST INDEX N", getprop("/FMGC/internal/last-cost-index"));
setprop("/FMGC/internal/cost-index-set", 1);
setprop("/FMGC/internal/cost-index", getprop("/FMGC/internal/last-cost-index"));
var zfw_min = 80.6; #make based on performance
var zfw_max = 134.5; #61,000 kg, make based on performance
if (size(scratchpad) == 0) {
var zfw = pts.Fdm.JSBsim.Inertia.weightLbs.getValue() - pts.Consumables.Fuel.totalFuelLbs.getValue();
fmgc.FMGCInternal.zfw = sprintf("%3.1f", math.round(zfw / 1000, 0.1));
fmgc.FMGCInternal.zfwSet = 1;
if (!fmgc.FMGCInternal.blockConfirmed and fmgc.FMGCInternal.blockSet) {
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
} else if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
} else if (fmgc.FMGCInternal.fuelRequest) {
fmgc.FMGCInternal.blockCalculating = 1;
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else if (find("/", scratchpad) != -1) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
}
var zfwi = split("/", scratchpad);
var zfw = num(zfwi[0]);
var zfwcg = num(zfwi[1]);
var zfws = size(zfwi[0]);
var zfwcgs = size(zfwi[1]);
if (zfw != nil and zfws > 0 and zfws <= 5 and (find(".", zfwi[0]) == -1 or size(split(".", zfwi[0])[1]) <= 1) and zfwcg != nil and zfwcgs > 0 and zfwcgs <= 4 and (find(".", zfwi[1]) == -1 or size(split(".", zfwi[1])[1]) <= 1)) {
if (zfw >= zfw_min and zfw <= zfw_max and zfwcg >= 8.0 and zfwcg <= 45.0) {
fmgc.FMGCInternal.zfw = zfw;
fmgc.FMGCInternal.zfwSet = 1;
fmgc.FMGCInternal.zfwcg = zfwcg;
fmgc.FMGCInternal.zfwcgSet = 1;
if (!fmgc.FMGCInternal.blockConfirmed and fmgc.FMGCInternal.blockSet) {
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
} else if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
} else if (fmgc.FMGCInternal.fuelRequest) {
fmgc.FMGCInternal.blockCalculating = 1;
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
} else if (zfws == 0 and zfwcg != nil and zfwcgs > 0 and zfwcgs <= 4 and (find(".", zfwi[1]) == -1 or size(split(".", zfwi[1])[1]) <= 1)) {
if (zfwcg >= 8.0 and zfwcg <= 45.0) {
fmgc.FMGCInternal.zfwcg = zfwcg;
fmgc.FMGCInternal.zfwcgSet = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (num(scratchpad) != nil and size(scratchpad) > 0 and size(scratchpad) <= 5 and (find(".", scratchpad) == -1 or size(split(".", scratchpad)[1]) <= 1)) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
}
if (scratchpad >= zfw_min and scratchpad <= zfw_max) {
fmgc.FMGCInternal.zfw = scratchpad;
fmgc.FMGCInternal.zfwSet = 1;
if (!fmgc.FMGCInternal.blockConfirmed and fmgc.FMGCInternal.blockSet) {
fmgc.FMGCInternal.tow = fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel;
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
} else if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
} else if (fmgc.FMGCInternal.fuelRequest) {
fmgc.FMGCInternal.blockCalculating = 1;
fmgc.blockCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "ENTRY OUT OF RANGE");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
var tfs = size(scratchpad);
if (tfs == 0) {
var zfw = getprop("/fdm/jsbsim/inertia/weight-lbs") - getprop("/consumables/fuel/total-fuel-lbs");
setprop("/FMGC/internal/zfw", sprintf("%3.1f", math.round(zfw / 1000, 0.1)));
setprop("/FMGC/internal/zfw-set", 1);
if (!getprop("/FMGC/internal/block-confirmed") and getprop("/FMGC/internal/block-set")) {
setprop("/FMGC/internal/tow", num(getprop("/FMGC/internal/zfw") + getprop("/FMGC/internal/block") - getprop("/FMGC/internal/taxi-fuel")));
setprop("/FMGC/internal/tow-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
} else if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
} else if (getprop("/FMGC/internal/fuel-request-set")) {
setprop("/FMGC/internal/block-calculating", 1);
}
} else if (tfs >= 2 and tfs <= 11 and find("/", scratchpad) != -1) {
var zfwi = split("/", scratchpad);
var zfwcg = num(zfwi[0]);
var zfw = num(zfwi[1]);
var zfwcgs = size(zfwi[0]);
var zfws = size(zfwi[1]);
if (zfwcg != nil and zfwcgs >= 1 and zfwcgs <= 5 and zfwcg > 0 and zfwcg <= 99.9) {
setprop("/FMGC/internal/zfwcg", zfwi[0]);
setprop("/FMGC/internal/zfwcg-set", 1);
}
if (zfw != nil and zfws >= 1 and zfws <= 5 and zfw > 0 and zfw <= 999.9) {
setprop("/FMGC/internal/zfw", zfwi[1]);
setprop("/FMGC/internal/zfw-set", 1);
if (!getprop("/FMGC/internal/block-confirmed") and getprop("/FMGC/internal/block-set")) {
setprop("/FMGC/internal/tow", num(getprop("/FMGC/internal/zfw") + getprop("/FMGC/internal/block") - getprop("/FMGC/internal/taxi-fuel")));
setprop("/FMGC/internal/tow-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
} else if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
} else if (getprop("/FMGC/internal/fuel-request-set")) {
setprop("/FMGC/internal/block-calculating", 1);
if (!fmgc.FMGCInternal.costIndexSet and fmgc.FMGCInternal.toFromSet) {
mcdu_message(i, "USING COST INDEX N", getprop("/FMGC/internal/last-cost-index") or 0);
fmgc.FMGCInternal.costIndexSet = 1;
fmgc.FMGCInternal.costIndex = getprop("/FMGC/internal/last-cost-index") or 0;
fmgc.FMGCNodes.costIndex.setValue(fmgc.FMGCInternal.costIndex);
}
}
if ((zfwcg != nil and zfwcgs >= 1 and zfwcgs <= 5 and zfwcg > 0 and zfwcg <= 99.9) or (zfw != nil and zfws >= 1 and zfws <= 5 and zfw > 0 and zfw <= 999.9)) {
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (tfs >= 1 and tfs <= 5) {
var zfwcg = size(scratchpad);
if (num(scratchpad) != nil and zfwcg >= 1 and zfwcg <= 5 and scratchpad > 0 and scratchpad <= 99.9) {
setprop("/FMGC/internal/zfwcg", scratchpad);
setprop("/FMGC/internal/zfwcg-set", 1);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else {
mcdu_message(i, "NOT ALLOWED");
}
}
} else if (key == "R2" and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "R2" and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/block", 0.0);
setprop("/FMGC/internal/block-set", 0);
setprop("/FMGC/internal/taxi-fuel", 0.4);
setprop("/FMGC/internal/taxi-fuel-set", 0);
setprop("/FMGC/internal/trip-fuel", 0);
setprop("/FMGC/internal/trip-time", "0000");
setprop("/FMGC/internal/rte-rsv", 0);
setprop("/FMGC/internal/rte-rsv-set", 0);
setprop("/FMGC/internal/rte-percent", 5.0);
setprop("/FMGC/internal/rte-percent-set", 0);
setprop("/FMGC/internal/alt-fuel", 0);
setprop("/FMGC/internal/alt-fuel-set", 0);
setprop("/FMGC/internal/alt-time", "0000");
setprop("/FMGC/internal/final-fuel", 0);
setprop("/FMGC/internal/final-fuel-set", 0);
setprop("/FMGC/internal/final-time", "0030");
setprop("/FMGC/internal/final-time-set", 0);
setprop("/FMGC/internal/min-dest-fob", 0);
setprop("/FMGC/internal/min-dest-fob-set", 0);
setprop("/FMGC/internal/tow", 0);
setprop("/FMGC/internal/lw", 0);
setprop("/FMGC/internal/trip-wind", "HD000");
setprop("/FMGC/internal/trip-wind-value", 0);
setprop("/FMGC/internal/fffq-sensor", "FF+FQ");
setprop("/FMGC/internal/extra-fuel", 0);
setprop("/FMGC/internal/extra-time", "0000");
setprop("/FMGC/internal/fuel-request-set", 0);
setprop("/FMGC/internal/fuel-calculating", 0);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 0);
fmgc.FMGCInternal.block = 0.0;
fmgc.FMGCInternal.blockSet = 0;
fmgc.FMGCInternal.taxiFuel = 0.4;
fmgc.FMGCInternal.taxiFuelSet = 0;
fmgc.FMGCInternal.tripFuel = 0;
fmgc.FMGCInternal.tripTime = "0000";
fmgc.FMGCInternal.rteRsv = 0;
fmgc.FMGCInternal.rteRsvSet = 0;
fmgc.FMGCInternal.rtePercent = 5.0;
fmgc.FMGCInternal.rtePercentSet = 0;
fmgc.FMGCInternal.altFuel = 0;
fmgc.FMGCInternal.altFuelSet = 0;
fmgc.FMGCInternal.altTime = "0000";
fmgc.FMGCInternal.finalFuel = 0;
fmgc.FMGCInternal.finalFuelSet = 0;
fmgc.FMGCInternal.finalTime = "0030";
fmgc.FMGCInternal.finalTimeSet = 0;
fmgc.FMGCInternal.minDestFob = 0;
fmgc.FMGCInternal.minDestFobSet = 0;
fmgc.FMGCInternal.tow = 0;
fmgc.FMGCInternal.lw = 0;
fmgc.FMGCInternal.tripWind = "HD000";
fmgc.FMGCInternal.tripWindValue = 0;
fmgc.FMGCInternal.fffqSensor = "FF+FQ";
fmgc.FMGCInternal.extraFuel = 0;
fmgc.FMGCInternal.extraTime = "0000";
fmgc.FMGCInternal.fuelRequest = 0;
fmgc.FMGCInternal.fuelCalculating = 0;
fmgc.fuelCalculating.setValue(0);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else {
var tfs = size(scratchpad);
var maxblock = getprop("/options/maxblock");
if (tfs == 0) {
setprop("/FMGC/internal/block", sprintf("%3.1f", math.round(getprop("/consumables/fuel/total-fuel-lbs") / 1000, 0.1)));
setprop("/FMGC/internal/block-set", 1);
if (getprop("/FMGC/internal/zfw-set")) {
setprop("/FMGC/internal/tow", num(getprop("/FMGC/internal/zfw") + getprop("/FMGC/internal/block") - getprop("/FMGC/internal/taxi-fuel")));
setprop("/FMGC/internal/tow-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
fmgc.FMGCInternal.block = sprintf("%3.1f", math.round(pts.Consumables.Fuel.totalFuelLbs.getValue() / 1000, 0.1));
fmgc.FMGCInternal.blockSet = 1;
if (fmgc.FMGCInternal.zfwSet) {
fmgc.FMGCInternal.tow = num(fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel);
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
}
} else if (tfs >= 1 and tfs <= 5) {
if (acconfig_weight_kgs.getValue() == 1) {
scratchpad = scratchpad / LBS2KGS;
}
if (num(scratchpad) != nil and scratchpad >= 1.0 and scratchpad <= maxblock) {
setprop("/FMGC/internal/block", scratchpad);
setprop("/FMGC/internal/block-set", 1);
if (getprop("/FMGC/internal/zfw-set")) {
setprop("/FMGC/internal/tow", num(getprop("/FMGC/internal/zfw") + getprop("/FMGC/internal/block") - getprop("/FMGC/internal/taxi-fuel")));
setprop("/FMGC/internal/tow-set", 1);
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
setprop("/FMGC/internal/block-calculating", 0);
setprop("/FMGC/internal/block-confirmed", 1);
fmgc.FMGCInternal.block = scratchpad;
fmgc.FMGCInternal.blockSet = 1;
if (fmgc.FMGCInternal.zfwSet) {
fmgc.FMGCInternal.tow = num(fmgc.FMGCInternal.zfw + fmgc.FMGCInternal.block - fmgc.FMGCInternal.taxiFuel);
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
fmgc.FMGCInternal.blockCalculating = 0;
fmgc.blockCalculating.setValue(0);
fmgc.FMGCInternal.blockConfirmed = 1;
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -283,31 +365,35 @@ var initInputB = func(key, i) {
}
}
} else if (key == "R3") {
if (scratchpad == "" and getprop("/FMGC/internal/zfw-set") and !getprop("/FMGC/internal/fuel-request-set")) {
setprop("/FMGC/internal/fuel-request-set", 1);
setprop("/FMGC/internal/block-calculating", 1);
} else if (scratchpad == "" and getprop("/FMGC/internal/zfw-set") and getprop("/FMGC/internal/fuel-request-set") and !getprop("/FMGC/internal/block-confirmed") and !getprop("/FMGC/internal/block-calculating")) {
setprop("/FMGC/internal/block-confirmed", 1);
setprop("/FMGC/internal/fuel-calculating", 1);
if (scratchpad == "" and fmgc.FMGCInternal.zfwSet and !fmgc.FMGCInternal.fuelRequest) {
fmgc.FMGCInternal.fuelRequest = 1;
fmgc.FMGCInternal.blockCalculating = 1;
fmgc.blockCalculating.setValue(1);
} else if (scratchpad == "" and fmgc.FMGCInternal.zfwSet and fmgc.FMGCInternal.fuelRequest and !fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.blockCalculating) {
fmgc.FMGCInternal.blockConfirmed = 1;
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "R5" and !getprop("/FMGC/internal/fuel-calculating")) {
} else if (key == "R5" and !fmgc.FMGCInternal.fuelCalculating) {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/trip-wind", "HD000");
setprop("/FMGC/internal/trip-wind-value", 0);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.tripWind = "HD000";
fmgc.FMGCInternal.tripWindValue = 0;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
if (find("TL", scratchpad) != -1 or find("HD", scratchpad) != -1) {
var effwind = substr(scratchpad, 2);
if (int(effwind) != nil and effwind >= 0 and effwind <= 500) {
setprop("/FMGC/internal/trip-wind", scratchpad);
setprop("/FMGC/internal/trip-wind-value", effwind);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.tripWind = scratchpad;
fmgc.FMGCInternal.tripWindValue = effwind;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -316,10 +402,11 @@ var initInputB = func(key, i) {
} else if (find("-", scratchpad) != -1 or find("+", scratchpad) != -1 or find("T", scratchpad) != -1 or find("H", scratchpad) != -1) {
var effwind = substr(scratchpad, 1);
if (int(effwind) != nil and effwind >= 0 and effwind <= 500) {
setprop("/FMGC/internal/trip-wind", scratchpad);
setprop("/FMGC/internal/trip-wind-value", effwind);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.tripWind = scratchpad;
fmgc.FMGCInternal.tripWindValue = effwind;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {
@ -327,10 +414,11 @@ var initInputB = func(key, i) {
}
} else {
if (num(scratchpad) != nil and scratchpad >= 0 and scratchpad <= 500) {
setprop("/FMGC/internal/trip-wind", scratchpad);
setprop("/FMGC/internal/trip-wind-value", scratchpad);
if (getprop("/FMGC/internal/block-confirmed")) {
setprop("/FMGC/internal/fuel-calculating", 1);
fmgc.FMGCInternal.tripWind = scratchpad;
fmgc.FMGCInternal.tripWindValue = scratchpad;
if (fmgc.FMGCInternal.blockConfirmed) {
fmgc.FMGCInternal.fuelCalculating = 1;
fmgc.fuelCalculating.setValue(1);
}
mcdu_scratchpad.scratchpads[i].empty();
} else {

View file

@ -62,7 +62,7 @@ var initInputIRS = func(key, i) {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L1") {
if (getprop("FMGC/internal/tofrom-set")) {
if (fmgc.FMGCInternal.toFromSet) {
setprop("FMGC/internal/align-ref-lat-edit", 1);
setprop("FMGC/internal/align-ref-long-edit", 0);
} else {
@ -73,7 +73,7 @@ var initInputIRS = func(key, i) {
setprop("FMGC/internal/align-ref-long-edit", 0);
setprop("MCDU[" ~ i ~ "]/page", "INITA");
} else if (key == "R1") {
if (getprop("FMGC/internal/tofrom-set")) {
if (fmgc.FMGCInternal.toFromSet) {
setprop("FMGC/internal/align-ref-lat-edit", 0);
setprop("FMGC/internal/align-ref-long-edit", 1);
} else {
@ -82,17 +82,17 @@ var initInputIRS = func(key, i) {
} else if (key == "R6") {
setprop("FMGC/internal/align-ref-lat-edit", 0);
setprop("FMGC/internal/align-ref-long-edit", 0);
if (getprop("FMGC/internal/tofrom-set") == 1 and getprop("systems/navigation/adr/any-adr-on") == 1) {
if (fmgc.FMGCInternal.toFromSet and getprop("/systems/navigation/adr/any-adr-on") == 1) {
if (getprop("FMGC/internal/align-set") == 0) {
setprop("FMGC/internal/align-set", 1);
} else {
setprop("controls/adirs/mcducbtn", 1);
setprop("/controls/adirs/mcducbtn", 1);
setprop("FMGC/internal/align-set", 0);
setprop("MCDU[" ~ i ~ "]/page", "INITA");
}
} else if (getprop("FMGC/internal/tofrom-set") == 0) {
} else if (!fmgc.FMGCInternal.toFromSet) {
# setprop("MCDU[" ~ i ~ "]/scratchpad", "SELECT REFERENCE");
} else if (getprop("systems/navigation/adr/any-adr-on") == 0) {
} else if (getprop("/systems/navigation/adr/any-adr-on") == 0) {
# setprop("MCDU[" ~ i ~ "]/scratchpad", "IRS NOT ALIGNED");
} else {
mcdu_message(i, "NOT ALLOWED");

View file

@ -1,5 +1,6 @@
var latRev = {
title: [nil, nil, nil],
titleColour: "wht",
subtitle: [nil, nil],
fontMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
arrowsMatrix: [[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]],
@ -36,6 +37,7 @@ var latRev = {
_checkTmpy: func() {
if (fmgc.flightPlanController.temporaryFlag[me.computer]) {
me.L6 = [" F-PLN", " TMPY", "yel"];
me.titleColour = "yel";
me.arrowsColour[0][5] = "yel";
me.R2[2] = "yel";
me.R3[2] = "yel";
@ -130,7 +132,7 @@ var latRev = {
var returny = fmgc.flightPlanController.scratchpad(mcdu_scratchpad.scratchpads[me.computer].scratchpad, me.index + 1, me.computer);
if (returny == 0) {
notInDataBase(me.computer);
mcdu_message(me.computer, "NOT IN DATA BASE");
} elsif (returny == 1) {
mcdu_message(me.computer, "NOT ALLOWED");
} else {

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,6 @@
# Copyright (c) 2020 Matthew Maring (mattmaring)
# APPR PERF
var ldg_config_3_set = props.globals.getNode("/FMGC/internal/ldg-config-3-set", 1);
var ldg_config_f_set = props.globals.getNode("/FMGC/internal/ldg-config-f-set", 1);
var perfAPPRInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
@ -30,19 +28,21 @@ var perfAPPRInput = func(key, i) {
} else if (key == "L3") {
var tfs = size(scratchpad);
if (scratchpad == "CLR") {
setprop("/FMGC/internal/dest-mag", -1);
setprop("/FMGC/internal/dest-wind", -1);
fmgc.FMGCInternal.destMag = 0;
fmgc.FMGCInternal.destMagSet = 0;
fmgc.FMGCInternal.destWind = 0;
fmgc.FMGCInternal.destWindSet = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else if (tfs >= 3 and tfs <= 7 and find("/", scratchpad) != -1) {
var weather = split("/", scratchpad);
var mag = int(weather[0]);
var mags = size(weather[0]);
var wind = int(weather[1]);
var winds = size(weather[1]);
if (mags >= 1 and mags <= 3 and winds >= 1 and winds <= 3) {
if (mag != nil and wind != nil and mag >= 0 and mag <= 360 and wind >= 0 and wind <= 200) {
setprop("/FMGC/internal/dest-mag", weather[0]);
setprop("/FMGC/internal/dest-wind", weather[1]);
if (num(weather[0]) != nil and num(weather[1]) != nil and int(weather[0]) >= 0 and int(weather[0]) <= 360 and int(weather[1]) >= 0 and int(weather[1]) <= 200) {
fmgc.FMGCInternal.destMag = weather[0];
fmgc.FMGCInternal.destMagSet = 1;
fmgc.FMGCInternal.destWind = weather[1];
fmgc.FMGCInternal.destWindSet = 1;
mcdu_scratchpad.scratchpads[i].empty();
fmgc.updateARPT();
} else {
@ -75,11 +75,11 @@ var perfAPPRInput = func(key, i) {
}
} else if (key == "L5") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/vapp-speed-set", 0);
fmgc.FMGCInternal.vappSpeedSet = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil and scratchpad >= 100 and scratchpad <= 350) {
setprop("/FMGC/internal/vapp-speed-set", 1);
setprop("/FMGC/internal/computed-speeds/vapp_appr", scratchpad);
fmgc.FMGCInternal.vappSpeedSet = 1;
fmgc.FMGCInternal.vapp_appr = scratchpad;
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -91,7 +91,7 @@ var perfAPPRInput = func(key, i) {
setprop("/FMGC/internal/baro", 99999);
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil and scratchpad >= getprop("/FMGC/internal/ldg-elev") and scratchpad <= 5000 + getprop("/FMGC/internal/ldg-elev")) {
if (getprop("/FMGC/internal/radio-no") == 0) {
if (!fmgc.FMGCInternal.radioNo) {
setprop("/FMGC/internal/radio", 99999);
}
setprop("/FMGC/internal/baro", scratchpad);
@ -102,31 +102,31 @@ var perfAPPRInput = func(key, i) {
} else if (key == "R3") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/radio", 99999);
setprop("/FMGC/internal/radio-no", 0);
fmgc.FMGCInternal.radioNo = 0;
mcdu_scratchpad.scratchpads[i].empty();
} else if (scratchpad == "NO") {
setprop("/FMGC/internal/radio", 99999);
setprop("/FMGC/internal/radio-no", 1);
fmgc.FMGCInternal.radioNo = 1;
mcdu_scratchpad.scratchpads[i].empty();
} else if (int(scratchpad) != nil and scratchpad >= 0 and scratchpad <= 700) {
setprop("/FMGC/internal/baro", 99999);
setprop("/FMGC/internal/radio-no", 0);
fmgc.FMGCInternal.radioNo = 0;
setprop("/FMGC/internal/radio", scratchpad);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "R4") {
if (scratchpad == "" and ldg_config_f_set.getValue() == 1 and ldg_config_3_set.getValue() == 0) {
setprop("/FMGC/internal/ldg-config-3-set", 1);
setprop("/FMGC/internal/ldg-config-f-set", 0);
if (scratchpad == "" and fmgc.FMGCInternal.ldgConfigFull == 1 and fmgc.FMGCInternal.ldgConfig3 == 0) {
fmgc.FMGCInternal.ldgConfig3 = 1;
fmgc.FMGCInternal.ldgConfigFull = 0;
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "R5") {
if (scratchpad == "" and ldg_config_3_set.getValue() == 1 and ldg_config_f_set.getValue() == 0) {
setprop("/FMGC/internal/ldg-config-3-set", 0);
setprop("/FMGC/internal/ldg-config-f-set", 1);
if (scratchpad == "" and fmgc.FMGCInternal.ldgConfig3 == 1 and fmgc.FMGCInternal.ldgConfigFull == 0) {
fmgc.FMGCInternal.ldgConfig3 = 0;
fmgc.FMGCInternal.ldgConfigFull = 1;
} else {
mcdu_message(i, "NOT ALLOWED");
}

View file

@ -6,16 +6,18 @@ var perfCLBInput = func(key, i) {
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
if (key == "L2") {
if (scratchpad == "CLR") {
setprop("/FMGC/internal/cost-index", 0);
setprop("/FMGC/internal/cost-index-set", 0);
fmgc.FMGCInternal.costIndex = 0;
fmgc.FMGCInternal.costIndexSet = 0;
fmgc.FMGCNodes.costIndex.setValue(0);
mcdu_scratchpad.scratchpads[i].empty();
} else {
var ci = int(scratchpad);
var cis = size(scratchpad);
if (cis >= 1 and cis <= 3) {
if (ci != nil and ci >= 0 and ci <= 999) {
setprop("/FMGC/internal/cost-index", ci);
setprop("/FMGC/internal/cost-index-set", 1);
fmgc.FMGCInternal.costIndex = ci;
fmgc.FMGCInternal.costIndexSet = 1;
fmgc.FMGCNodes.costIndex.setValue(fmgc.FMGCInternal.costIndex);
mcdu_scratchpad.scratchpads[i].empty();
} else {
mcdu_message(i, "NOT ALLOWED");
@ -25,17 +27,17 @@ var perfCLBInput = func(key, i) {
}
}
} else if (key == "L5") {
if (getprop("/FMGC/status/phase") == 2) {
if (fmgc.FMGCInternal.phase == 2) {
setprop("MCDU[" ~ i ~ "]/page", "PERFTO");
} else {
mcdu_message(i, "NOT ALLOWED");
}
} else if (key == "L6") {
if (getprop("/FMGC/status/phase") == 2) {
if (fmgc.FMGCInternal.phase == 2) {
if (getprop("/FMGC/internal/activate-once") == 1) {
if (getprop("/FMGC/internal/activate-twice") == 0) {
setprop("/FMGC/internal/activate-twice", 1);
setprop("/FMGC/status/phase", 5);
fmgc.FMGCInternal.phase = 5;
setprop("/FMGC/internal/decel", 1);
setprop("MCDU[" ~ i ~ "]/page", "PERFAPPR");
} else {

Some files were not shown because too many files have changed in this diff Show more