Merge branch 'dev' into 3D
This commit is contained in:
commit
fae0c3fed2
61 changed files with 4520 additions and 1832 deletions
|
@ -206,9 +206,9 @@
|
|||
<autopilot n="0">
|
||||
<path>Aircraft/A320-family/Systems/fadec-cfm.xml</path>
|
||||
</autopilot>
|
||||
<autopilot n="10">
|
||||
<path>Aircraft/A320-family/Systems/cfm56-sound.xml</path>
|
||||
</autopilot>
|
||||
<property-rule n="100">
|
||||
<path>Aircraft/A320-family/Systems/cfm56-sound.xml</path>
|
||||
</property-rule>
|
||||
</systems>
|
||||
|
||||
</sim>
|
||||
|
|
|
@ -206,9 +206,9 @@
|
|||
<autopilot n="0">
|
||||
<path>Aircraft/A320-family/Systems/fadec-iae.xml</path>
|
||||
</autopilot>
|
||||
<autopilot n="10">
|
||||
<property-rule n="100">
|
||||
<path>Aircraft/A320-family/Systems/v2500-sound.xml</path>
|
||||
</autopilot>
|
||||
</property-rule>
|
||||
</systems>
|
||||
|
||||
</sim>
|
||||
|
|
|
@ -253,15 +253,15 @@
|
|||
<path>Aircraft/A320-family/Systems/pfd.xml</path>
|
||||
</autopilot>
|
||||
<!-- 10 is sound -->
|
||||
<autopilot n="11">
|
||||
<property-rule n="101">
|
||||
<path>Aircraft/A320-family/Systems/sound-common.xml</path>
|
||||
</autopilot>
|
||||
<autopilot n="12">
|
||||
</property-rule>
|
||||
<property-rule n="110">
|
||||
<path>Aircraft/A320-family/Systems/a320-lights-proprules.xml</path>
|
||||
</autopilot>
|
||||
<autopilot n="13">
|
||||
</property-rule>
|
||||
<property-rule n="111">
|
||||
<path>Aircraft/A320-family/Systems/ecam-proprules.xml</path>
|
||||
</autopilot>
|
||||
</property-rule>
|
||||
<path>Aircraft/A320-family/Systems/pitot-static.xml</path>
|
||||
</systems>
|
||||
|
||||
|
@ -674,6 +674,14 @@
|
|||
<line8 type="string"></line8>
|
||||
</rightmsg>
|
||||
<warning-phase type="int">0</warning-phase>
|
||||
<phases>
|
||||
<timer>
|
||||
<ldg-inhibit type="int">0</ldg-inhibit>
|
||||
<ldg-inhibit-output type="double">0</ldg-inhibit-output>
|
||||
<to-inhibit type="int">0</to-inhibit>
|
||||
<to-inhibit-output type="double">0</to-inhibit-output>
|
||||
</timer>
|
||||
</phases>
|
||||
</ECAM>
|
||||
|
||||
<environment>
|
||||
|
@ -802,6 +810,8 @@
|
|||
<atc>
|
||||
<system-knob type="int">0</system-knob>
|
||||
<mode-knob type="int">0</mode-knob>
|
||||
<abv-blw type="int">0</abv-blw>
|
||||
<thrt-all type="int">0</thrt-all>
|
||||
</atc>
|
||||
<apu>
|
||||
<agent-btn type="bool">0</agent-btn>
|
||||
|
@ -1380,11 +1390,14 @@
|
|||
<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>
|
||||
<fire>
|
||||
<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>
|
||||
<lavatory-fire type="bool">0</lavatory-fire>
|
||||
</fire>
|
||||
</failures>
|
||||
|
||||
<fctl n="0">
|
||||
|
@ -1417,6 +1430,9 @@
|
|||
<temperature type="double">0</temperature>
|
||||
</fwd>
|
||||
</cargo>
|
||||
<lavatory>
|
||||
<temperature type="double">0</temperature>
|
||||
</lavatory>
|
||||
</fire>
|
||||
<fuel n="0">
|
||||
<only-use-ctr-tank type="bool">0</only-use-ctr-tank>
|
||||
|
@ -4714,10 +4730,7 @@
|
|||
<file>Aircraft/A320-family/Nasal/MCDU/ROUTESELECTION.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/INITB.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/FUELPRED.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PROGTO.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PROGCLB.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PROGCRZ.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PROGDES.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PROG.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PERFAPPR.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PERFCLB.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/PERFCRZ.nas</file>
|
||||
|
@ -4729,6 +4742,11 @@
|
|||
<file>Aircraft/A320-family/Nasal/MCDU/DATA2.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
|
||||
</mcdu>
|
||||
<!-- Traffic layer from E-jet -->
|
||||
<traffic>
|
||||
<file>Aircraft/A320-family/Nasal/Displays/projection.nas</file>
|
||||
<file>Aircraft/A320-family/Nasal/Displays/traffic.nas</file>
|
||||
</traffic>
|
||||
<!-- Canvas -->
|
||||
<canvas_pfd>
|
||||
<file>Aircraft/A320-family/Models/Instruments/PFD/PFD.nas</file>
|
||||
|
|
|
@ -206,9 +206,9 @@
|
|||
<autopilot n="0">
|
||||
<path>Aircraft/A320-family/Systems/fadec-cfm.xml</path>
|
||||
</autopilot>
|
||||
<autopilot n="10">
|
||||
<property-rule n="100">
|
||||
<path>Aircraft/A320-family/Systems/leapx-sound.xml</path>
|
||||
</autopilot>
|
||||
</property-rule>
|
||||
</systems>
|
||||
|
||||
</sim>
|
||||
|
|
|
@ -206,9 +206,9 @@
|
|||
<autopilot n="0"> <!-- Apparently PW PurePower uses N1, not EPR.... sooo I use CFM FADEC -->
|
||||
<path>Aircraft/A320-family/Systems/fadec-cfm.xml</path>
|
||||
</autopilot>
|
||||
<autopilot n="10">
|
||||
<property-rule n="100">
|
||||
<path>Aircraft/A320-family/Systems/leapx-sound.xml</path>
|
||||
</autopilot>
|
||||
</property-rule>
|
||||
</systems>
|
||||
|
||||
</sim>
|
||||
|
|
|
@ -56,10 +56,12 @@ var failResetOld = func {
|
|||
setprop("/systems/failures/pump-green", 0);
|
||||
setprop("/systems/failures/pump-yellow-eng", 0);
|
||||
setprop("/systems/failures/pump-yellow-elec", 0);
|
||||
setprop("/systems/failures/cargo-aft-fire", 0);
|
||||
setprop("/systems/failures/cargo-fwd-fire", 0);
|
||||
setprop("/systems/failures/engine-left-fire", 0);
|
||||
setprop("/systems/failures/engine-right-fire", 0);
|
||||
setprop("/systems/failures/fire/cargo-aft-fire", 0);
|
||||
setprop("/systems/failures/fire/cargo-fwd-fire", 0);
|
||||
setprop("/systems/failures/fire/engine-left-fire", 0);
|
||||
setprop("/systems/failures/fire/apu-fire", 0);
|
||||
setprop("/systems/failures/fire/engine-right-fire", 0);
|
||||
setprop("/systems/failures/fire/lavatory-fire", 0);
|
||||
}
|
||||
|
||||
failResetOld();
|
||||
|
|
|
@ -560,7 +560,7 @@
|
|||
<stretch type="bool">true</stretch>
|
||||
</hrule>
|
||||
<text>
|
||||
<label>Cargo Fire</label>
|
||||
<label>Fire</label>
|
||||
</text>
|
||||
<hrule>
|
||||
<stretch type="bool">true</stretch>
|
||||
|
@ -568,9 +568,9 @@
|
|||
</group>
|
||||
|
||||
<checkbox>
|
||||
<label>AFT</label>
|
||||
<label>AFT CRG</label>
|
||||
<halign>left</halign>
|
||||
<property>/systems/failures/cargo-aft-fire</property>
|
||||
<property>/systems/failures/fire/cargo-aft-fire</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
|
@ -578,15 +578,26 @@
|
|||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<label>FWD</label>
|
||||
<label>FWD CRG</label>
|
||||
<halign>left</halign>
|
||||
<property>/systems/failures/cargo-fwd-fire</property>
|
||||
<property>/systems/failures/fire/cargo-fwd-fire</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<live>true</live>
|
||||
</checkbox>
|
||||
<group>
|
||||
|
||||
<checkbox>
|
||||
<label>LAV</label>
|
||||
<halign>left</halign>
|
||||
<property>/systems/failures/fire/lavatory-fire</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
<live>true</live>
|
||||
</checkbox>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
|
||||
<hrule>
|
||||
|
@ -603,7 +614,7 @@
|
|||
<checkbox>
|
||||
<label>Left Engine</label>
|
||||
<halign>left</halign>
|
||||
<property>/systems/failures/engine-left-fire</property>
|
||||
<property>/systems/failures/fire/engine-left-fire</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
|
@ -613,7 +624,7 @@
|
|||
<checkbox>
|
||||
<label>APU</label>
|
||||
<halign>left</halign>
|
||||
<property>/systems/failures/apu-fire</property>
|
||||
<property>/systems/failures/fire/apu-fire</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
|
@ -623,7 +634,7 @@
|
|||
<checkbox>
|
||||
<label>Right Engine</label>
|
||||
<halign>left</halign>
|
||||
<property>/systems/failures/engine-right-fire</property>
|
||||
<property>/systems/failures/fire/engine-right-fire</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<params>
|
||||
<n1>engines/engine[3]/n1</n1>
|
||||
<on-fire>systems/failures/engine-left-fire</on-fire>
|
||||
<on-fire>systems/failures/fire/engine-left-fire</on-fire>
|
||||
<contrail>engines/engine[0]/contrail</contrail>
|
||||
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
|
||||
</params>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<params>
|
||||
<n1>engines/engine[4]/n1</n1>
|
||||
<on-fire>systems/failures/engine-right-fire</on-fire>
|
||||
<on-fire>systems/failures/fire/engine-right-fire</on-fire>
|
||||
<contrail>engines/engine[1]/contrail</contrail>
|
||||
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
|
||||
</params>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
<params>
|
||||
<n1>engines/engine[3]/n1</n1>
|
||||
<on-fire>systems/failures/engine-left-fire</on-fire>
|
||||
<on-fire>systems/failures/fire/engine-left-fire</on-fire>
|
||||
<contrail>engines/engine[0]/contrail</contrail>
|
||||
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
|
||||
</params>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
<params>
|
||||
<n1>engines/engine[4]/n1</n1>
|
||||
<on-fire>systems/failures/engine-right-fire</on-fire>
|
||||
<on-fire>systems/failures/fire/engine-right-fire</on-fire>
|
||||
<contrail>engines/engine[1]/contrail</contrail>
|
||||
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
|
||||
</params>
|
||||
|
|
|
@ -1,545 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
|
||||
|
||||
<PropertyList>
|
||||
<path>Aircraft/A320-family/Models/Engines/Models/CFM56.ac</path>
|
||||
|
||||
<params>
|
||||
<contrail1>engines/engine[0]/contrail</contrail1>
|
||||
<contrail2>engines/engine[1]/contrail</contrail2>
|
||||
</params>
|
||||
|
||||
<!-- Particle Effects -->
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
|
||||
<name>contrailLeft</name>
|
||||
<condition>
|
||||
<property>environment/contrail</property>
|
||||
</condition>
|
||||
<overlay>
|
||||
<params>
|
||||
<contrail alias="../../../../params/contrail1" />
|
||||
</params>
|
||||
</overlay>
|
||||
<offsets>
|
||||
<x-m> 4.51789</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
|
||||
<name>contrailRight</name>
|
||||
<condition>
|
||||
<property>environment/contrail</property>
|
||||
</condition>
|
||||
<overlay>
|
||||
<params>
|
||||
<contrail alias="../../../../params/contrail2" />
|
||||
</params>
|
||||
</overlay>
|
||||
<offsets>
|
||||
<x-m> 4.51789</x-m>
|
||||
<y-m> 5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
|
||||
<name>moistureLeft</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/relative-humidity</property>
|
||||
<value>45</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>75</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-7.432</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-2.46943</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
|
||||
<name>moistureRight</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/relative-humidity</property>
|
||||
<value>45</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>75</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-7.432</x-m>
|
||||
<y-m> 5.63029</y-m>
|
||||
<z-m>-2.46943</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
|
||||
<name>engine-spray-left</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>15</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<equals>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<value>0</value>
|
||||
</equals>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-0.62458</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
|
||||
<name>engine-spray-right</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>15</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<equals>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<value>0</value>
|
||||
</equals>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-0.62458</x-m>
|
||||
<y-m>5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
|
||||
<name>engine-spray-reverse</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<greater-than>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<value>0.75</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-6.62458</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
|
||||
<name>engine-spray-reverse</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<greater-than>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<value>0.75</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-6.62458</x-m>
|
||||
<y-m>5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>Engine fire left</name>
|
||||
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
|
||||
<offsets>
|
||||
<x-m>-3.96705</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
<condition>
|
||||
<property>systems/failures/engine-left-fire</property>
|
||||
</condition>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>Engine fire right</name>
|
||||
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
|
||||
<offsets>
|
||||
<x-m>-3.96705</x-m>
|
||||
<y-m> 5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
<condition>
|
||||
<property>systems/failures/engine-right-fire</property>
|
||||
</condition>
|
||||
</model>
|
||||
|
||||
<!-- Animations -->
|
||||
<animation>
|
||||
<name>Fan spinning animation (slow)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanLCFM56L</object-name>
|
||||
<factor>50</factor> <!-- TCDS sourced - don't tune! -->
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.66773</x-m>
|
||||
<y-m>-5.63082</y-m>
|
||||
<z-m>-2.26943</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Fan spinning animation (slow)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanLCFM56R</object-name>
|
||||
<factor>50</factor>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.66773</x-m>
|
||||
<y-m> 5.62871</y-m>
|
||||
<z-m>-2.26943</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Fan spinning animation (fast)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanSpinningCFM56L</object-name>
|
||||
<factor>5</factor>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.66773</x-m>
|
||||
<y-m>-5.63082</y-m>
|
||||
<z-m>-2.26943</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Fan spinning animation (fast)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanSpinningCFM56R</object-name>
|
||||
<factor>5</factor>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.66773</x-m>
|
||||
<y-m> 5.62871</y-m>
|
||||
<z-m>-2.26943</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanSpinningCFM56L</object-name>
|
||||
<condition>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>40.0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanSpinningCFM56R</object-name>
|
||||
<condition>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>40.0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanLCFM56L</object-name>
|
||||
<condition>
|
||||
<less-than-equals>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>40.0</value>
|
||||
</less-than-equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanLCFM56R</object-name>
|
||||
<condition>
|
||||
<less-than-equals>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>40.0</value>
|
||||
</less-than-equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door LH 1</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserLDoor1</object-name>
|
||||
<object-name>ReverserLDoor1.Inner</object-name>
|
||||
<factor>-70</factor>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.7738</x1-m>
|
||||
<y1-m>-6.25156</y1-m>
|
||||
<z1-m>-1.65547</z1-m>
|
||||
<x2-m>-4.77475</x2-m>
|
||||
<y2-m>-6.29771</y2-m>
|
||||
<z2-m>-1.71849</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door LH 2</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserLDoor2</object-name>
|
||||
<object-name>ReverserLDoor2.Inner</object-name>
|
||||
<factor>-70</factor>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.77785</x1-m>
|
||||
<y1-m>-6.29253</y1-m>
|
||||
<z1-m>-2.82287</z1-m>
|
||||
<x2-m>-4.77731</x2-m>
|
||||
<y2-m>-6.2496</y2-m>
|
||||
<z2-m>-2.88363</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door LH 3</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserLDoor3</object-name>
|
||||
<object-name>ReverserLDoor3.Inner</object-name>
|
||||
<factor>70</factor>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.7738</x1-m>
|
||||
<y1-m>-5.01022</y1-m>
|
||||
<z1-m>-1.6555</z1-m>
|
||||
<x2-m>-4.77475</x2-m>
|
||||
<y2-m>-4.96408</y2-m>
|
||||
<z2-m>-1.71852</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door LH 4</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserLDoor4</object-name>
|
||||
<object-name>ReverserLDoor4.Inner</object-name>
|
||||
<factor>70</factor>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.778</x1-m>
|
||||
<y1-m>-4.96919</y1-m>
|
||||
<z1-m>-2.82264</z1-m>
|
||||
<x2-m>-4.77746</x2-m>
|
||||
<y2-m>-5.01209</y2-m>
|
||||
<z2-m>-2.8834</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door RH 1</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserRDoor1</object-name>
|
||||
<object-name>ReverserRDoor1.Inner</object-name>
|
||||
<factor>-70</factor>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.7738</x1-m>
|
||||
<y1-m> 5.01008</y1-m>
|
||||
<z1-m>-1.65547</z1-m>
|
||||
<x2-m>-4.77475</x2-m>
|
||||
<y2-m> 4.96393</y2-m>
|
||||
<z2-m>-1.71849</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door RH 2</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserRDoor2</object-name>
|
||||
<object-name>ReverserRDoor2.Inner</object-name>
|
||||
<factor>-70</factor>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.77785</x1-m>
|
||||
<y1-m> 4.96912</y1-m>
|
||||
<z1-m>-2.82287</z1-m>
|
||||
<x2-m>-4.77731</x2-m>
|
||||
<y2-m> 5.01204</y2-m>
|
||||
<z2-m>-2.88363</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door RH 3</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserRDoor3</object-name>
|
||||
<object-name>ReverserRDoor3.Inner</object-name>
|
||||
<factor>70</factor>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.7738</x1-m>
|
||||
<y1-m> 6.25142</y1-m>
|
||||
<z1-m>-1.6555</z1-m>
|
||||
<x2-m>-4.77475</x2-m>
|
||||
<y2-m> 6.29756</y2-m>
|
||||
<z2-m>-1.71852</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Reverser Door RH 4</name>
|
||||
<type>rotate</type>
|
||||
<object-name>ReverserRDoor4</object-name>
|
||||
<object-name>ReverserRDoor4.Inner</object-name>
|
||||
<factor>70</factor>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<axis>
|
||||
<x1-m>-4.778</x1-m>
|
||||
<y1-m> 6.29245</y1-m>
|
||||
<z1-m>-2.82264</z1-m>
|
||||
<x2-m>-4.77746</x2-m>
|
||||
<y2-m> 6.24955</y2-m>
|
||||
<z2-m>-2.8834</z2-m>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<!-- Effect -->
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-engine-CFM</inherits-from>
|
||||
<object-name>EngineCFM56L</object-name>
|
||||
<object-name>EngineCFM56R</object-name>
|
||||
<object-name>ReverserLDoor1</object-name>
|
||||
<object-name>ReverserLDoor2</object-name>
|
||||
<object-name>ReverserLDoor3</object-name>
|
||||
<object-name>ReverserLDoor4</object-name>
|
||||
<object-name>ReverserRDoor1</object-name>
|
||||
<object-name>ReverserRDoor2</object-name>
|
||||
<object-name>ReverserRDoor3</object-name>
|
||||
<object-name>ReverserRDoor4</object-name>
|
||||
</effect>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-matt-engine-CFM</inherits-from>
|
||||
<object-name>PylonCFM56L</object-name>
|
||||
<object-name>PylonCFM56R</object-name>
|
||||
</effect>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-chrome-engine-CFM</inherits-from>
|
||||
<object-name>IntakeCFM56L</object-name>
|
||||
<object-name>IntakeCFM56R</object-name>
|
||||
</effect>
|
||||
</PropertyList>
|
|
@ -1,429 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
|
||||
|
||||
<PropertyList>
|
||||
<path>Aircraft/A320-family/Models/Engines/Models/IAEV2500.ac</path>
|
||||
|
||||
<params>
|
||||
<contrail1>engines/engine[0]/contrail</contrail1>
|
||||
<contrail2>engines/engine[1]/contrail</contrail2>
|
||||
</params>
|
||||
|
||||
<!-- Particle Effects -->
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
|
||||
<name>contrailLeft</name>
|
||||
<condition>
|
||||
<property>environment/contrail</property>
|
||||
</condition>
|
||||
<overlay>
|
||||
<params>
|
||||
<contrail alias="../../../../params/contrail1" />
|
||||
</params>
|
||||
</overlay>
|
||||
<offsets>
|
||||
<x-m> 4.51789</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/contrail.xml</path>
|
||||
<name>contrailRight</name>
|
||||
<condition>
|
||||
<property>environment/contrail</property>
|
||||
</condition>
|
||||
<overlay>
|
||||
<params>
|
||||
<contrail alias="../../../../params/contrail2" />
|
||||
</params>
|
||||
</overlay>
|
||||
<offsets>
|
||||
<x-m> 4.51789</x-m>
|
||||
<y-m> 5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
|
||||
<name>moistureLeft</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/relative-humidity</property>
|
||||
<value>45</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>75</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-7.432</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-2.76465</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/Moisture.xml</path>
|
||||
<name>moistureRight</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/relative-humidity</property>
|
||||
<value>45</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>75</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-7.432</x-m>
|
||||
<y-m> 5.63029</y-m>
|
||||
<z-m>-2.76465</z-m>
|
||||
<pitch-deg>0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
|
||||
<name>engine-spray-left</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>15</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<equals>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<value>0</value>
|
||||
</equals>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-0.62458</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray.xml</path>
|
||||
<name>engine-spray-right</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>position/altitude-agl-ft</property>
|
||||
<value>15</value>
|
||||
</less-than-equals>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<equals>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<value>0</value>
|
||||
</equals>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-0.62458</x-m>
|
||||
<y-m>5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
|
||||
<name>engine-spray-reverse</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<greater-than>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<value>0.75</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-6.62458</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/A320-family/Models/Effects/engine-spray-reverse.xml</path>
|
||||
<name>engine-spray-reverse</name>
|
||||
<condition>
|
||||
<and>
|
||||
<greater-than>
|
||||
<property>environment/surface/wetness</property>
|
||||
<value>0.3</value>
|
||||
</greater-than>
|
||||
<less-than-equals>
|
||||
<property>sim/time/sun-angle-rad</property>
|
||||
<value>1.63</value>
|
||||
</less-than-equals>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>65</value>
|
||||
</greater-than>
|
||||
<greater-than>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<value>0.75</value>
|
||||
</greater-than>
|
||||
</and>
|
||||
</condition>
|
||||
<offsets>
|
||||
<x-m>-6.62458</x-m>
|
||||
<y-m>5.63029</y-m>
|
||||
<z-m>-5</z-m>
|
||||
</offsets>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>Engine fire left</name>
|
||||
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
|
||||
<offsets>
|
||||
<x-m>-2.76705</x-m>
|
||||
<y-m>-5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
<condition>
|
||||
<property>systems/failures/engine-left-fire</property>
|
||||
</condition>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>Engine fire right</name>
|
||||
<path>Aircraft/A320-family/Models/Effects/enginefire.xml</path>
|
||||
<offsets>
|
||||
<x-m>-2.76705</x-m>
|
||||
<y-m> 5.63029</y-m>
|
||||
<z-m>-2.22295</z-m>
|
||||
</offsets>
|
||||
<condition>
|
||||
<property>systems/failures/engine-right-fire</property>
|
||||
</condition>
|
||||
</model>
|
||||
|
||||
<!-- Animations -->
|
||||
<animation>
|
||||
<name>Fan spinning animation (slow)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanLIAEL</object-name>
|
||||
<factor>56.5</factor>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.71594</x-m>
|
||||
<y-m>-5.63028</y-m>
|
||||
<z-m>-2.28545</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Fan spinning animation (slow)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanLIAER</object-name>
|
||||
<factor>56.5</factor>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.71594</x-m>
|
||||
<y-m> 5.63028</y-m>
|
||||
<z-m>-2.28545</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Fan spinning animation (fast)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanSpinningIAEL</object-name>
|
||||
<factor>5.65</factor>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.71594</x-m>
|
||||
<y-m>-5.63028</y-m>
|
||||
<z-m>-2.28545</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<name>Fan spinning animation (fast)</name>
|
||||
<type>spin</type>
|
||||
<object-name>FanSpinningIAER</object-name>
|
||||
<factor>5.65</factor>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<axis>
|
||||
<x>-1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
<center>
|
||||
<x-m>-6.71594</x-m>
|
||||
<y-m> 5.63028</y-m>
|
||||
<z-m>-2.28545</z-m>
|
||||
</center>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanSpinningIAEL</object-name>
|
||||
<condition>
|
||||
<greater-than>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>40.0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanSpinningIAER</object-name>
|
||||
<condition>
|
||||
<greater-than>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>40.0</value>
|
||||
</greater-than>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanLIAEL</object-name>
|
||||
<condition>
|
||||
<less-than-equals>
|
||||
<property>engines/engine[3]/n1</property>
|
||||
<value>40.0</value>
|
||||
</less-than-equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>FanLIAER</object-name>
|
||||
<condition>
|
||||
<less-than-equals>
|
||||
<property>engines/engine[4]/n1</property>
|
||||
<value>40.0</value>
|
||||
</less-than-equals>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>ReverserLDoor</object-name>
|
||||
<property>engines/engine[0]/reverser-pos-norm</property>
|
||||
<factor>0.50</factor> <!-- According to photo reference -->
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>translate</type>
|
||||
<object-name>ReverserRDoor</object-name>
|
||||
<property>engines/engine[1]/reverser-pos-norm</property>
|
||||
<factor>0.50</factor> <!-- According to photo reference -->
|
||||
<axis>
|
||||
<x>1</x>
|
||||
<y>0</y>
|
||||
<z>0</z>
|
||||
</axis>
|
||||
</animation>
|
||||
|
||||
|
||||
|
||||
<!-- Effect -->
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-engine-IAE</inherits-from>
|
||||
<object-name>EngineIAEV2500L</object-name>
|
||||
<object-name>EngineIAEV2500R</object-name>
|
||||
<object-name>ReverserLDoor</object-name>
|
||||
<object-name>ReverserRDoor</object-name>
|
||||
</effect>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-matt-engine-IAE</inherits-from>
|
||||
<object-name>PylonIAEV2500L</object-name>
|
||||
<object-name>PylonIAEV2500R</object-name>
|
||||
</effect>
|
||||
|
||||
<effect>
|
||||
<inherits-from>Aircraft/A320-family/Models/Effects/reflection-chrome-engine-IAE</inherits-from>
|
||||
<object-name>IntakeIAEV2500L</object-name>
|
||||
<object-name>IntakeIAEV2500R</object-name>
|
||||
</effect>
|
||||
</PropertyList>
|
|
@ -877,7 +877,81 @@
|
|||
</and>
|
||||
</condition>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>atc_abv</object-name>
|
||||
<factor>35</factor>
|
||||
<offset-deg>0</offset-deg>
|
||||
<axis>
|
||||
<object-name>atc_abv.axis</object-name>
|
||||
</axis>
|
||||
<property>controls/atc/abv-blw</property>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>atc_abv</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<button>3</button>
|
||||
<binding>
|
||||
<command>property-cycle</command>
|
||||
<property>controls/atc/abv-blw</property>
|
||||
<value>-1</value>
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
</action>
|
||||
<action>
|
||||
<button>1</button>
|
||||
<button>4</button>
|
||||
<binding>
|
||||
<command>property-cycle</command>
|
||||
<property>controls/atc/abv-blw</property>
|
||||
<value>1</value>
|
||||
<value>0</value>
|
||||
<value>-1</value>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>rotate</type>
|
||||
<object-name>atc_thrt</object-name>
|
||||
<factor>-30</factor>
|
||||
<offset-deg>0</offset-deg>
|
||||
<axis>
|
||||
<object-name>atc_thrt.axis</object-name>
|
||||
</axis>
|
||||
<property>controls/atc/thrt-all</property>
|
||||
</animation>
|
||||
|
||||
<animation>
|
||||
<type>pick</type>
|
||||
<object-name>atc_thrt</object-name>
|
||||
<action>
|
||||
<button>0</button>
|
||||
<button>3</button>
|
||||
<binding>
|
||||
<command>property-cycle</command>
|
||||
<property>controls/atc/thrt-all</property>
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
</action>
|
||||
<action>
|
||||
<button>1</button>
|
||||
<button>4</button>
|
||||
<binding>
|
||||
<command>property-cycle</command>
|
||||
<property>controls/atc/thrt-all</property>
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
||||
|
||||
<!-- Primary Flight Displays -->
|
||||
<model>
|
||||
<name>PFD1</name>
|
||||
|
|
|
@ -533,7 +533,6 @@
|
|||
<object-name>MLGLockstayActuatorR2</object-name>
|
||||
<object-name>FlapMechanismL</object-name>
|
||||
<object-name>FlapMechanismR</object-name>
|
||||
<condition>
|
||||
<property>/fdm/jsbsim/zero</property>
|
||||
</condition>
|
||||
</animation>
|
||||
|
|
|
@ -261,8 +261,6 @@ var input = {
|
|||
"altitude_ind": "/instrumentation/altimeter/indicated-altitude-ft-pfd",
|
||||
"altimeter_mode": "/instrumentation/altimeter[0]/std",
|
||||
"attReset": "/instrumentation/iesi/att-reset",
|
||||
"dcEss": "/systems/electrical/bus/dc-ess",
|
||||
"dcHot1": "/systems/electrical/bus/dc-hot-1",
|
||||
"iesiBrt": "/controls/lighting/DU/iesi",
|
||||
"iesiInit": "/instrumentation/iesi/iesi-init",
|
||||
"mach": "/instrumentation/airspeed-indicator/indicated-mach",
|
||||
|
|
|
@ -3010,7 +3010,7 @@ var canvas_lowerECAM_wheel = {
|
|||
rightdoor = gear_door_R.getValue();
|
||||
nosedoor = gear_door_N.getValue();
|
||||
gearlvr = gear_down.getValue();
|
||||
askidsw = systems.HYD.Brakes.askidSw.getBoolValue();
|
||||
askidsw = systems.HYD.Switch.nwsSwitch.getBoolValue();
|
||||
brakemode = systems.HYD.Brakes.mode.getBoolValue();
|
||||
accum = systems.HYD.Brakes.accumPressPsi.getBoolValue();
|
||||
|
||||
|
|
|
@ -364,6 +364,10 @@ var canvas_MCDU_base = {
|
|||
me.fontSizeLeftS(small, small, small, small, small, small);
|
||||
me.fontSizeRight(normal, normal, normal, normal, normal, normal);
|
||||
me.fontSizeRightS(small, small, small, small, small, small);
|
||||
me.fontCenter(default, default, default, default, default, default);
|
||||
me.fontCenterS(default, default, default, default, default, default);
|
||||
me.fontSizeCenter(normal, normal, normal, normal, normal, normal);
|
||||
me.fontSizeCenterS(small, small, small, small, small, small);
|
||||
},
|
||||
standardFontColour: func() {
|
||||
me.colorLeft("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
|
@ -384,13 +388,28 @@ var canvas_MCDU_base = {
|
|||
var sign2 = degrees2 >= 0 ? "E" : "W";
|
||||
return sprintf("%d%.1f%s/%07s%s",abs(degrees),minutes,sign,abs(degrees2) ~ minutes2,sign2);
|
||||
},
|
||||
getIRSStatus: func(a) {
|
||||
getLatLogFormatted2: func(rootpropname) {
|
||||
var dms = getprop(rootpropname ~ "latitude-deg");
|
||||
var degrees = int(dms);
|
||||
var minutes = sprintf("%.1f",abs((dms - degrees) * 60));
|
||||
var sign = degrees >= 0 ? "N" : "S";
|
||||
var dms2 = getprop(rootpropname ~ "longitude-deg");
|
||||
var degrees2 = int(dms2);
|
||||
var minutes2 = sprintf("%.1f",abs((dms2 - degrees2) * 60));
|
||||
var sign2 = degrees2 >= 0 ? "E" : "W";
|
||||
return sprintf("%d %.1f%s/%03s %.1f%s",abs(degrees),minutes,sign,abs(degrees2),minutes2,sign2);
|
||||
},
|
||||
getIRSStatus: func(a,b = 0) {
|
||||
var irsstatus = "INVAL";
|
||||
if (systems.ADIRS.ADIRunits[a].operative) {
|
||||
if (systems.ADIRS.Operating.aligned[a].getValue()) {
|
||||
irsstatus = (systems.ADIRS.ADIRunits[a].mode == 2) ? "ATT" : "NAV";
|
||||
} else {
|
||||
irsstatus = "ALIGN TTN" ~ sprintf("% 2.0d",math.round(systems.ADIRS.ADIRunits[a]._alignTime) / 60);
|
||||
if (b) {
|
||||
irsstatus = "ALIGN TTN" ~ sprintf("%2d",math.round(systems.ADIRS.ADIRunits[a]._alignTime) / 60);
|
||||
} else {
|
||||
irsstatus = "ALIGN";
|
||||
}
|
||||
}
|
||||
}
|
||||
return irsstatus;
|
||||
|
@ -2454,7 +2473,7 @@ var canvas_MCDU_base = {
|
|||
var rows = ["Simple_L2S","Simple_L3S","Simple_L4S"];
|
||||
var center = ["Simple_C1","Simple_C2","Simple_C3"];
|
||||
for (var a = 0; a<3; a+=1) {
|
||||
me[rows[a]].setText(" " ~ me.getIRSStatus(a));
|
||||
me[rows[a]].setText(" " ~ me.getIRSStatus(a,1));
|
||||
if (systems.ADIRS.ADIRunits[a]._excessMotion) {
|
||||
me[center[a]].show();
|
||||
} else {
|
||||
|
@ -2475,8 +2494,69 @@ var canvas_MCDU_base = {
|
|||
me["Simple_R3S"].setText("");
|
||||
me["Simple_R4S"].setText("");
|
||||
}
|
||||
} else if (page == "GPSMON") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
|
||||
me.defaultHideWithCenter();
|
||||
me.standardFontSize();
|
||||
|
||||
me.defaultPageNumbers();
|
||||
|
||||
me.showLeft(1, 1, 1, 1, 1, 1);
|
||||
me.showLeftS(1, 1, 1, 1, 1, 1);
|
||||
me.showLeftArrow(-1, -1, -1, -1, -1, -1);
|
||||
me.showCenter(-1, 1, 1, -1, 1, 1);
|
||||
me.showCenterS(-1, 1, 1, -1, 1, 1);
|
||||
me.showRight(-1, 1, 1, -1, 1, 1);
|
||||
me.showRightS(-1, 1, 1, -1, 1, 1);
|
||||
me.showRightArrow(-1, -1, -1, -1, -1, -1);
|
||||
|
||||
me["arrowsDepArr"].hide();
|
||||
me["PERFAPPR"].hide();
|
||||
me["PERFGA"].hide();
|
||||
me["Simple_L0S"].hide();
|
||||
me["Simple_Title"].show();
|
||||
|
||||
me.colorLeft("grn", "grn", "grn", "grn", "grn", "grn");
|
||||
me.colorLeftS("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorCenter("grn", "grn", "grn", "grn", "grn", "grn");
|
||||
me.colorCenterS("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
me.colorRight("grn", "grn", "grn", "grn", "grn", "grn");
|
||||
me.colorRightS("wht", "wht", "wht", "wht", "wht", "wht");
|
||||
|
||||
me["Simple_Title"].setText("GPS MONITOR");
|
||||
|
||||
me["Simple_L1S"].setText("GPS1 POSITION");
|
||||
me["Simple_L2S"].setText("TTRK");
|
||||
me["Simple_L3S"].setText("MERIT");
|
||||
me["Simple_L3"].setText(sprintf("%3d",((rand() * 50) - 25) + 50) ~ "M");
|
||||
me["Simple_L4S"].setText("GPS2 POSITION");
|
||||
me["Simple_L5S"].setText("TTRK");
|
||||
me["Simple_L6S"].setText("MERIT");
|
||||
me["Simple_L6"].setText(sprintf("%3d",((rand() * 50) - 25) + 50) ~ "M");
|
||||
me["Simple_C2S"].setText("UTC");
|
||||
me["Simple_C3S"].setText("GPS ALT");
|
||||
me["Simple_C5S"].setText("UTC");
|
||||
me["Simple_C6S"].setText("GPS ALT");
|
||||
me["Simple_R2S"].setText("GS");
|
||||
me["Simple_R3S"].setText("MODE/SAT");
|
||||
me["Simple_R3"].setText("NAV/" ~ sprintf("%s",int((rand() * 2) - 1) + 6) ~ " ");
|
||||
me["Simple_R5S"].setText("GS");
|
||||
me["Simple_R6S"].setText("MODE/SAT");
|
||||
me["Simple_R6"].setText("NAV/" ~ sprintf("%s",int((rand() * 2) - 1) + 6) ~ " ");
|
||||
pageSwitch[i].setBoolValue(1);
|
||||
}
|
||||
me["Simple_L1"].setText(me.getLatLogFormatted2("/position/"));
|
||||
me["Simple_L2"].setText(sprintf("%-5.1f",pts.Instrumentation.GPS.trackMag.getValue() + magvar()));
|
||||
me["Simple_L4"].setText(me.getLatLogFormatted2("/position/"));
|
||||
me["Simple_L5"].setText(sprintf("%-5.1f",pts.Instrumentation.GPS.trackMag.getValue() + magvar()));
|
||||
var gmt = string.replace(pts.Sim.Time.gmtString.getValue(),":",".");
|
||||
me["Simple_C2"].setText(gmt);
|
||||
me["Simple_C5"].setText(gmt);
|
||||
me["Simple_C3"].setText(sprintf("%5.0f",pts.Instrumentation.GPS.altitude.getValue()));
|
||||
me["Simple_C6"].setText(sprintf("%5.0f",pts.Instrumentation.GPS.altitude.getValue()));
|
||||
me["Simple_R2"].setText(sprintf("%3.0f",pts.Instrumentation.GPS.gs.getValue()));
|
||||
me["Simple_R5"].setText(sprintf("%3.0f",pts.Instrumentation.GPS.gs.getValue()));
|
||||
} else if (page == "RADNAV") {
|
||||
if (!pageSwitch[i].getBoolValue()) {
|
||||
me.defaultHide();
|
||||
|
@ -3910,7 +3990,6 @@ var canvas_MCDU_base = {
|
|||
me["PROG_UPDATE"].show();
|
||||
me["Simple_L3"].setText(" [ ]");
|
||||
}
|
||||
me["Simple_L4"].setText(" ---g /----.-");
|
||||
me["Simple_L5"].setText(" GPS");
|
||||
me["Simple_L6"].setText("----");
|
||||
me["Simple_L1S"].setText(" CRZ");
|
||||
|
@ -3936,8 +4015,25 @@ var canvas_MCDU_base = {
|
|||
me["Simple_C2"].setText(sprintf("%17s%4d ",vdev_sign,abs(vdev)));
|
||||
me["Simple_R2"].setText(sprintf("%30s","VDEV= FT "));
|
||||
}
|
||||
|
||||
me["Simple_R4"].setText("[ ]");
|
||||
|
||||
if (mcdu.bearingDistances[i].displayID != nil) {
|
||||
me["Simple_R4"].setFont(default);
|
||||
me["Simple_R4"].setFontSize(normal);
|
||||
me["Simple_R4"].setText(mcdu.bearingDistances[i].displayID);
|
||||
} else {
|
||||
me["Simple_R4"].setFont(symbol);
|
||||
me["Simple_R4"].setFontSize(small);
|
||||
me["Simple_R4"].setText("[ ]");
|
||||
}
|
||||
|
||||
if (mcdu.bearingDistances[i].selectedPoint != nil) {
|
||||
me["Simple_L4"].setColor(GREEN);
|
||||
me["Simple_L4"].setText(sprintf("%3.0fg /%4.1f",mcdu.bearingDistances[i].bearing,mcdu.bearingDistances[i].distance));
|
||||
} else {
|
||||
me["Simple_L4"].setColor(WHITE);
|
||||
me["Simple_L4"].setText(" ---g /----.-");
|
||||
}
|
||||
|
||||
me["Simple_R5"].setText("GPS PRIMARY");
|
||||
me["Simple_R6"].setText("----");
|
||||
me["Simple_R1S"].setText("REC MAX ");
|
||||
|
@ -3945,7 +4041,7 @@ var canvas_MCDU_base = {
|
|||
me["Simple_C1"].setText("-----");
|
||||
me["Simple_C1S"].setText("OPT");
|
||||
me["Simple_C3S"].setText("CONFIRM UPDATE AT");
|
||||
me["Simple_C4"].setText(" TO");
|
||||
me["Simple_C4"].setText(" TO");
|
||||
me["Simple_C6S"].setText("ACCUR");
|
||||
if (systems.ADIRS.Operating.aligned[0].getValue() or systems.ADIRS.Operating.aligned[1].getValue()) me["Simple_C6"].setText("HIGH");
|
||||
else me["Simple_C6"].setText("LOW");
|
||||
|
@ -6157,6 +6253,46 @@ var canvas_MCDU_base = {
|
|||
me["Simple_L6S"].setFont(f);
|
||||
}
|
||||
},
|
||||
fontCenter: func (a, b, c, d, e, f) {
|
||||
if (a != 0) {
|
||||
me["Simple_C1"].setFont(a);
|
||||
}
|
||||
if (b != 0) {
|
||||
me["Simple_C2"].setFont(b);
|
||||
}
|
||||
if (c != 0) {
|
||||
me["Simple_C3"].setFont(c);
|
||||
}
|
||||
if (d != 0) {
|
||||
me["Simple_C4"].setFont(d);
|
||||
}
|
||||
if (e != 0) {
|
||||
me["Simple_C5"].setFont(e);
|
||||
}
|
||||
if (f != 0) {
|
||||
me["Simple_C6"].setFont(f);
|
||||
}
|
||||
},
|
||||
fontCenterS: func (a, b, c, d, e, f) {
|
||||
if (a != 0) {
|
||||
me["Simple_C1S"].setFont(a);
|
||||
}
|
||||
if (b != 0) {
|
||||
me["Simple_C2S"].setFont(b);
|
||||
}
|
||||
if (c != 0) {
|
||||
me["Simple_C3S"].setFont(c);
|
||||
}
|
||||
if (d != 0) {
|
||||
me["Simple_C4S"].setFont(d);
|
||||
}
|
||||
if (e != 0) {
|
||||
me["Simple_C5S"].setFont(e);
|
||||
}
|
||||
if (f != 0) {
|
||||
me["Simple_C6S"].setFont(f);
|
||||
}
|
||||
},
|
||||
fontRight: func (a, b, c, d, e, f) {
|
||||
if (a != 0) {
|
||||
me["Simple_R1"].setFont(a);
|
||||
|
|
|
@ -338,6 +338,41 @@ setlistener("sim/signals/fdm-initialized", func {
|
|||
ND_2 = canvas_ND_2.new(group_nd2);
|
||||
ND_2_test = canvas_ND_2_test.new(group_nd2_test, "Aircraft/A320-family/Models/Instruments/Common/res/du-test.svg");
|
||||
|
||||
setlistener("/instrumentation/efis[0]/inputs/range-nm", func() {
|
||||
canvas_nd.ND_1.NDCpt.trafficLayer.camera.range = getprop("/instrumentation/efis[0]/inputs/range-nm");
|
||||
}, 1, 0);
|
||||
|
||||
setlistener("/instrumentation/efis[1]/inputs/range-nm", func() {
|
||||
canvas_nd.ND_2.NDFo.trafficLayer.camera.range = getprop("/instrumentation/efis[1]/inputs/range-nm");
|
||||
}, 1, 0);
|
||||
|
||||
setlistener("/instrumentation/efis[0]/inputs/nd-centered", func() {
|
||||
canvas_nd.ND_1.NDCpt.trafficLayer.camera.screenRange = getprop("/instrumentation/efis[0]/inputs/nd-centered") ? 436.8545 : 710;
|
||||
canvas_nd.ND_1.NDCpt.trafficLayer.camera.screenCY = getprop("/instrumentation/efis[0]/inputs/nd-centered") ? 512 : 850;
|
||||
}, 1, 0);
|
||||
|
||||
setlistener("/instrumentation/efis[1]/inputs/nd-centered", func() {
|
||||
canvas_nd.ND_2.NDFo.trafficLayer.camera.screenRange = getprop("/instrumentation/efis[1]/inputs/nd-centered") ? 436.8545 : 710;
|
||||
canvas_nd.ND_2.NDFo.trafficLayer.camera.screenCY = getprop("/instrumentation/efis[1]/inputs/nd-centered") ? 512 : 850;
|
||||
}, 1, 0);
|
||||
|
||||
setlistener("/instrumentation/tcas/inputs/mode", func() {
|
||||
if (getprop("/instrumentation/efis[1]/nd/canvas-display-mode") != "PLAN") {
|
||||
canvas_nd.ND_1.NDCpt.trafficGroup.setVisible(pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2 ? 1 : 0);
|
||||
}
|
||||
if (getprop("/instrumentation/efis[1]/nd/canvas-display-mode") != "PLAN") {
|
||||
canvas_nd.ND_2.NDFo.trafficGroup.setVisible(pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2 ? 1 : 0);
|
||||
}
|
||||
}, 1, 0);
|
||||
|
||||
setlistener("/instrumentation/efis[0]/nd/canvas-display-mode", func() {
|
||||
canvas_nd.ND_1.NDCpt.trafficGroup.setVisible(getprop("/instrumentation/efis[0]/nd/canvas-display-mode") == "PLAN" ? 0 : 1);
|
||||
}, 1, 0);
|
||||
|
||||
setlistener("/instrumentation/efis[1]/nd/canvas-display-mode", func() {
|
||||
canvas_nd.ND_2.NDFo.trafficGroup.setVisible(getprop("/instrumentation/efis[1]/nd/canvas-display-mode") == "PLAN" ? 0 : 1);
|
||||
}, 1, 0);
|
||||
|
||||
nd_update.start();
|
||||
if (getprop("systems/acconfig/options/nd-rate") > 1) {
|
||||
rateApply();
|
||||
|
|
|
@ -32,8 +32,7 @@ canvas.NavDisplay.get_nav_path = func (type, idx) {
|
|||
return sprintf(path, name, idx);
|
||||
};
|
||||
|
||||
canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update_time=0.05)
|
||||
{
|
||||
canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update_time=0.05) {
|
||||
if (me.inited) die("MFD already was added to scene");
|
||||
me.range_dependant_layers = [];
|
||||
me.always_update_layers = {};
|
||||
|
@ -87,6 +86,8 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
|
|||
.set("screen-range", 700)
|
||||
.set("z-index",-1);
|
||||
|
||||
me.compassHdgTrk = 0; # last compass rotation deg
|
||||
|
||||
me.update_sub(); # init some map properties based on switches
|
||||
|
||||
var vor1_path = "/instrumentation/nav[2]";
|
||||
|
@ -233,6 +234,17 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
|
|||
event_handler();
|
||||
} # foreach layer
|
||||
|
||||
me.mapCamera = traffic.Camera.new({
|
||||
range: 20,
|
||||
screenRange: 436.8545,
|
||||
screenCX: 512,
|
||||
screenCY: 512,
|
||||
});
|
||||
me.trafficGroup = me.nd.createChild("group");
|
||||
me.trafficLayer = traffic.TrafficLayer.new(me.mapCamera, me.trafficGroup);
|
||||
me.trafficLayer.start();
|
||||
me.trafficGroup.set("z-index", -1);
|
||||
|
||||
#print("navdisplay.mfd:ND layer setup completed");
|
||||
|
||||
# TODO: move this to RTE.lcontroller ?
|
||||
|
@ -277,20 +289,38 @@ canvas.NavDisplay.update_sub = func(){
|
|||
me.userTrk=userHdg;
|
||||
}
|
||||
|
||||
var reqHdg = 0;
|
||||
|
||||
if((me.in_mode("toggle_display_mode", ["MAP"]) and me.get_switch("toggle_display_type") == "CRT")
|
||||
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD"))
|
||||
{
|
||||
or (me.get_switch("toggle_track_heading") and me.get_switch("toggle_display_type") == "LCD")) {
|
||||
userHdgTrk = userTrk;
|
||||
me.userHdgTrk = userTrk;
|
||||
me.compassHdgTrk = userTrk;
|
||||
userHdgTrkTru = userTrkTru;
|
||||
me.symbols.hdgTrk.setText("TRK");
|
||||
} else {
|
||||
userHdgTrk = userHdg;
|
||||
me.userHdgTrk = userHdg;
|
||||
if (userHdg != me.compassHdgTrk) {
|
||||
var dist = userHdg - me.compassHdgTrk;
|
||||
if (dist>180) dist = dist - 360;
|
||||
elsif (dist<-180) dist = 360 + dist;
|
||||
if (dist>0) {
|
||||
dist = dist * 0.3;
|
||||
if (dist>10) dist = 10;
|
||||
me.compassHdgTrk = (dist<0.1) ? userHdg : math.mod(me.compassHdgTrk+dist,360);
|
||||
}
|
||||
elsif (dist<0) {
|
||||
dist = dist * 0.3;
|
||||
if (dist<-10) dist = -10;
|
||||
me.compassHdgTrk = (dist>-0.1) ? userHdg : math.mod(me.compassHdgTrk+dist,360);
|
||||
}
|
||||
}
|
||||
userHdgTrk = me.compassHdgTrk;
|
||||
me.userHdgTrk = me.compassHdgTrk;
|
||||
userHdgTrkTru = userHdgTru;
|
||||
me.symbols.hdgTrk.setText("HDG");
|
||||
}
|
||||
|
||||
|
||||
# First, update the display position of the map
|
||||
var oldRange = me.map.getRange();
|
||||
var pos = {
|
||||
|
@ -372,6 +402,13 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
|
|||
else
|
||||
me.map.setTranslation(512,824);
|
||||
}
|
||||
me.mapCamera.repositon(geo.aircraft_position(), me.aircraft_source.get_hdg_tru());
|
||||
me.pos = props.globals.getNode("position");
|
||||
me.trafficLayer.setRefAlt(me.pos.getValue("altitude-ft"));
|
||||
if (me.trafficGroup.getVisible()) {
|
||||
me.trafficLayer.update();
|
||||
me.trafficLayer.redraw();
|
||||
}
|
||||
var vor1_path = "/instrumentation/nav[2]";
|
||||
var vor2_path = "/instrumentation/nav[3]";
|
||||
var dme1_path = "/instrumentation/dme[2]";
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="airbusND_orig.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="airbusND.svg"
|
||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"
|
||||
xml:space="preserve"
|
||||
id="svg5180"
|
||||
height="1024"
|
||||
|
@ -23,16 +23,16 @@
|
|||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-height="1017"
|
||||
id="namedview102"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.9002897"
|
||||
inkscape:cx="467.92702"
|
||||
inkscape:cy="538.03817"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:zoom="1.2732019"
|
||||
inkscape:cx="406.21664"
|
||||
inkscape:cy="201.87587"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer8"
|
||||
inkscape:current-layer="layer3"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
|
@ -40,7 +40,8 @@
|
|||
inkscape:snap-to-guides="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"><sodipodi:guide
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:snap-text-baseline="true"><sodipodi:guide
|
||||
id="guide3167"
|
||||
orientation="1,0"
|
||||
position="512,811.5" /><sodipodi:guide
|
||||
|
@ -58,10 +59,28 @@
|
|||
id="guide3537" /><sodipodi:guide
|
||||
orientation="-0.8660254,0.5"
|
||||
position="512,200"
|
||||
id="guide3545" /></sodipodi:namedview><metadata
|
||||
id="guide3545" /><sodipodi:guide
|
||||
position="-3.9271069,171.8178"
|
||||
orientation="1,0"
|
||||
id="guide742" /><sodipodi:guide
|
||||
position="63.243533,882.27478"
|
||||
orientation="1,0"
|
||||
id="guide3109" /><sodipodi:guide
|
||||
position="59.703006,906.39896"
|
||||
orientation="0,-1"
|
||||
id="guide3111" /><sodipodi:guide
|
||||
position="70.197038,990.32506"
|
||||
orientation="0,-1"
|
||||
id="guide3113" /><sodipodi:guide
|
||||
position="211.67107,1010.2551"
|
||||
orientation="0,-1"
|
||||
id="guide3115" /><sodipodi:guide
|
||||
position="14.137585,913.25558"
|
||||
orientation="1,0"
|
||||
id="guide3498" /></sodipodi:namedview><metadata
|
||||
id="metadata5186"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title><dc:creator><cc:Agent><dc:title>Gijs de Rooy</dc:title></cc:Agent></dc:creator><cc:license
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /><dc:creator><cc:Agent><dc:title>Gijs de Rooy</dc:title></cc:Agent></dc:creator><cc:license
|
||||
rdf:resource="" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs5184"><marker
|
||||
style="overflow:visible"
|
||||
|
@ -240,26 +259,26 @@
|
|||
style="display:inline;fill:none;stroke:#f2f235;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><text
|
||||
inkscape:label="#text7243"
|
||||
id="wpActiveId"
|
||||
y="54.099972"
|
||||
x="766.04407"
|
||||
y="34.099972"
|
||||
x="788.04407"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="54.099972"
|
||||
x="766.04407"
|
||||
y="34.099972"
|
||||
x="788.04407"
|
||||
id="tspan7245"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25">ABCD</tspan></text>
|
||||
<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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
x="844.04407"
|
||||
y="88.124893"
|
||||
x="866.04407"
|
||||
y="68.124893"
|
||||
id="wpActiveDist"
|
||||
inkscape:label="#text7243"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan7251"
|
||||
x="844.04407"
|
||||
y="88.124893"
|
||||
x="866.04407"
|
||||
y="68.124893"
|
||||
style="font-size:36px;line-height:1.25">999.9</tspan></text>
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
|
@ -267,13 +286,21 @@
|
|||
id="aplSymMap"
|
||||
d="m 512,866.4 v -68 m 34.5,24 h -70 m 50,32 h -30"
|
||||
style="fill:none;stroke:#f2f235;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="#path7253" /><path
|
||||
inkscape:label="#path3017"
|
||||
sodipodi:nodetypes="cccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#path7253" /><g
|
||||
id="windArrow"
|
||||
d="m 75.2914,119.519 -2e-4,65.158 m 0,0 7.0125,-12.145 H 67.4945 l 7.7967,12.146"
|
||||
style="fill:#0dc04b;stroke:#0dc04b;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><g
|
||||
transform="matrix(0.81,0,0,0.81,-8.3843096,20.546412)"><path
|
||||
inkscape:label="#path3017"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3017"
|
||||
d="m 63.260317,138.7628 9.917949,-18.75435 -9.917949,18.75529 -9.969447,-18.75529 9.969447,18.75529"
|
||||
style="display:inline;fill:#0dc04b;stroke:#0dc04b;stroke-width:4.44444;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
inkscape:label="#path3017l"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3107l"
|
||||
d="M 63.260505,77.514285 63.260317,138.7628"
|
||||
style="display:inline;fill:#0dc04b;stroke:#0dc04b;stroke-width:4.44444;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
|
||||
inkscape:label="#g3124"
|
||||
id="compass"
|
||||
transform="rotate(0.34999975,516.49696,825.81379)"><path
|
||||
|
@ -784,63 +811,63 @@
|
|||
</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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
x="36.862175"
|
||||
y="92.904839"
|
||||
x="12.862175"
|
||||
y="72.904839"
|
||||
id="wind"
|
||||
inkscape:label="#text7243"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3801"
|
||||
x="36.862175"
|
||||
y="92.904839"
|
||||
x="12.862175"
|
||||
y="72.904839"
|
||||
style="font-size:36px;line-height:1.25">999°/ 99</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text7243"
|
||||
id="gs"
|
||||
y="53.306854"
|
||||
x="101.87437"
|
||||
y="33.306854"
|
||||
x="61.874367"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="53.306854"
|
||||
x="101.87437"
|
||||
y="33.306854"
|
||||
x="61.874367"
|
||||
id="tspan3809"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25">999</tspan></text>
|
||||
<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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
x="248.49673"
|
||||
y="53.306854"
|
||||
x="189.71132"
|
||||
y="33.306854"
|
||||
id="tas"
|
||||
inkscape:label="#text7243"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3813"
|
||||
x="248.49673"
|
||||
y="53.306854"
|
||||
x="189.71132"
|
||||
y="33.306854"
|
||||
style="font-size:36px;line-height:1.25">999</tspan></text>
|
||||
<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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
|
||||
x="38.276394"
|
||||
y="53.306854"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.32193px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none;stroke-width:0.776827"
|
||||
x="13.895038"
|
||||
y="33.26786"
|
||||
id="gsLbl"
|
||||
inkscape:label="#text7243"><tspan
|
||||
style="font-size:36px;line-height:1.25"
|
||||
style="font-size:27.9658px;line-height:1.25;stroke-width:0.776827"
|
||||
sodipodi:role="line"
|
||||
id="tspan3817"
|
||||
x="38.276394"
|
||||
y="53.306854">GS</tspan></text>
|
||||
x="13.895038"
|
||||
y="33.26786">GS</tspan></text>
|
||||
<text
|
||||
inkscape:label="#text7243"
|
||||
id="tasLbl"
|
||||
y="53.306854"
|
||||
x="170.17084"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
|
||||
y="33.340725"
|
||||
x="129.95859"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.32191px;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none;stroke-width:0.776826"
|
||||
xml:space="preserve"><tspan
|
||||
y="53.306854"
|
||||
x="170.17084"
|
||||
y="33.340725"
|
||||
x="129.95859"
|
||||
id="tspan3821"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25">TAS</tspan></text>
|
||||
style="font-size:27.9658px;line-height:1.25;stroke-width:0.776826">TAS</tspan></text>
|
||||
<g
|
||||
id="hdgGroup"
|
||||
inkscape:label="#g3141"><path
|
||||
|
@ -983,12 +1010,12 @@
|
|||
<text
|
||||
inkscape:label="#text7243"
|
||||
id="eta"
|
||||
y="126.06245"
|
||||
y="106.06245"
|
||||
x="892.04407"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:36px;line-height:1.25"
|
||||
y="126.06245"
|
||||
y="106.06245"
|
||||
x="892.04407"
|
||||
id="tspan3092"
|
||||
sodipodi:role="line">08 34.4z</tspan></text>
|
||||
|
@ -1173,36 +1200,36 @@
|
|||
sodipodi:nodetypes="ccccccccc" /></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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
|
||||
x="945.04547"
|
||||
y="87.431412"
|
||||
x="967.04547"
|
||||
y="67.431412"
|
||||
id="wpActiveDistLbl"
|
||||
inkscape:label="#text7243"><tspan
|
||||
style="font-size:24px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3179"
|
||||
x="945.04547"
|
||||
y="87.431412">NM</tspan></text>
|
||||
x="967.04547"
|
||||
y="67.431412">NM</tspan></text>
|
||||
<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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none"
|
||||
x="785.289"
|
||||
y="53.929054"
|
||||
x="807.289"
|
||||
y="33.929054"
|
||||
id="ilsLbl"
|
||||
inkscape:label="#text7243"><tspan
|
||||
style="font-size:32px;line-height:1.25;fill:#cecdce"
|
||||
sodipodi:role="line"
|
||||
id="tspan4172"
|
||||
x="785.289"
|
||||
y="53.929054">ILS </tspan></text>
|
||||
x="807.289"
|
||||
y="33.929054">ILS </tspan></text>
|
||||
<text
|
||||
inkscape:label="#text7243"
|
||||
id="ilsFreq"
|
||||
y="53.929054"
|
||||
x="888.28894"
|
||||
y="33.929054"
|
||||
x="910.28894"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#af0063;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="53.929054"
|
||||
x="888.28894"
|
||||
y="33.929054"
|
||||
x="910.28894"
|
||||
id="tspan4176"
|
||||
sodipodi:role="line"
|
||||
style="font-size:32px;line-height:125%;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#af0063;fill-opacity:1">999.99</tspan></text>
|
||||
|
@ -1224,14 +1251,14 @@
|
|||
inkscape:transform-center-y="-715.12894" /><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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none"
|
||||
x="926.04407"
|
||||
y="54.099972"
|
||||
x="948.04407"
|
||||
y="34.099972"
|
||||
id="wpActiveCrs"
|
||||
inkscape:label="#text7243"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4501"
|
||||
x="926.04407"
|
||||
y="54.099972"
|
||||
x="948.04407"
|
||||
y="34.099972"
|
||||
style="font-size:36px;line-height:1.25">360</tspan></text>
|
||||
<g
|
||||
id="chrono_box"
|
||||
|
@ -1302,7 +1329,31 @@
|
|||
x="13.282043"
|
||||
y="739.28204"
|
||||
style="font-size:40px;line-height:1.25">OFST</tspan></text>
|
||||
</g><g
|
||||
<text
|
||||
inkscape:label="#text7243"
|
||||
id="hdgBug2ValL"
|
||||
y="174.13467"
|
||||
x="-97.01178"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"
|
||||
transform="rotate(-35)"><tspan
|
||||
y="174.13467"
|
||||
x="-97.01178"
|
||||
id="tspan744"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25;fill:#179ab7;fill-opacity:1">999</tspan></text><text
|
||||
inkscape:label="#text7243"
|
||||
id="hdgBug2ValR"
|
||||
y="-418.00525"
|
||||
x="872.1673"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"
|
||||
transform="rotate(35)"><tspan
|
||||
y="-418.00525"
|
||||
x="872.1673"
|
||||
id="tspan748"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25;fill:#179ab7;fill-opacity:1">999</tspan></text></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="CTR"
|
||||
|
@ -1368,20 +1419,22 @@
|
|||
id="vorCrsPtr2"
|
||||
inkscape:label="#g3266"
|
||||
inkscape:transform-center-y="5.4559828"
|
||||
transform="matrix(0.73371425,0,0,1.2956425,136.34805,-201.98371)"><path
|
||||
transform="matrix(0.73371425,0,0,1.2956425,136.34805,-201.98371)"
|
||||
style="stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none"><path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 519.27414,698 h -14.54828 v 194.49655 l 7.27414,1.9e-4 7.27414,-1.9e-4 z M 504.72586,432 v -23.89752 l -38.65179,-0.001 V 402 h 38.65179 V 225.04414 l 7.61514,-0.48629 6.93314,0.4863 V 402 h 38.65179 v 6.10148 l -38.65179,0.001 V 432 Z"
|
||||
style="fill:#009fd6;stroke:#009fd6;stroke-width:1.02564;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:#009fd6;stroke:#009fd6;stroke-width:0.999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="vorCrsPtr2_line"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc" /><g
|
||||
id="locPtr2"><path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.02564;marker:none;enable-background:accumulate"
|
||||
id="locPtr2"
|
||||
style="stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none"><path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
|
||||
d="m 521.98396,447.79054 -17.26114,3.07727 0.01,235.98519 14.53528,0.01 -0.01,-235.98419 z"
|
||||
id="locPtr2_line"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:label="#locPtr"
|
||||
sodipodi:nodetypes="cccccc" /><path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.02564;marker:none;enable-background:accumulate"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
|
||||
d="m 511.04486,437.35427 9.61501,5.69001 -35.22401,17.6614 -9.61501,-5.69001 c 0,0 29.42519,-14.6957 35.22387,-17.66133 5.79867,-2.96563 1.4e-4,-7e-5 1.4e-4,-7e-5 z"
|
||||
id="locPtr2_arr2"
|
||||
inkscape:connector-curvature="0"
|
||||
|
@ -1392,14 +1445,14 @@
|
|||
inkscape:connector-curvature="0"
|
||||
id="locPtr2_arr1"
|
||||
d="m 512.69442,437.35427 -9.615,5.69 35.22401,17.6614 9.615,-5.69 c 0,0 -29.42519,-14.6957 -35.22387,-17.66133 -5.79867,-2.96563 -1.4e-4,-7e-5 -1.4e-4,-7e-5 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.02564;marker:none;enable-background:accumulate" /></g><circle
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;overflow:visible;visibility:visible;fill:#009fd6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.999997;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate" /></g><circle
|
||||
transform="matrix(0.968853,0.690717,-0.690717,0.968853,437.361,-328.129)"
|
||||
id="path3951"
|
||||
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="380.07001"
|
||||
cy="643.92999"
|
||||
r="6.7175102" /><circle
|
||||
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3953"
|
||||
transform="matrix(0.968853,0.690717,-0.690717,0.968853,512.923,-328.129)"
|
||||
cx="380.07001"
|
||||
|
@ -1407,11 +1460,11 @@
|
|||
r="6.7175102" /><circle
|
||||
transform="matrix(0.968853,0.690717,-0.690717,0.968853,663.814,-328.129)"
|
||||
id="path3955"
|
||||
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
cx="380.07001"
|
||||
cy="643.92999"
|
||||
r="6.7175102" /><circle
|
||||
style="fill:none;stroke:#ededed;stroke-width:4.20218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:none;stroke:#ededed;stroke-width:0.840432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path3959"
|
||||
transform="matrix(0.968853,0.690717,-0.690717,0.968853,739.667,-328.128)"
|
||||
cx="380.07001"
|
||||
|
@ -1643,12 +1696,12 @@
|
|||
inkscape:transform-center-y="-363.559" /><text
|
||||
inkscape:label="#text7243"
|
||||
id="crsLbl"
|
||||
y="90.379868"
|
||||
x="812.72168"
|
||||
y="70.379868"
|
||||
x="834.72168"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#cecdce;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="90.379868"
|
||||
x="812.72168"
|
||||
y="70.379868"
|
||||
x="834.72168"
|
||||
id="tspan4007"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25">CRS</tspan></text>
|
||||
|
@ -1656,23 +1709,23 @@
|
|||
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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
|
||||
x="854.72168"
|
||||
y="124.87983"
|
||||
y="104.87983"
|
||||
id="dmeLbl"
|
||||
inkscape:label="#text7243"><tspan
|
||||
style="font-size:24px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan4011"
|
||||
x="854.72168"
|
||||
y="124.87983"> </tspan></text>
|
||||
y="104.87983"> </tspan></text>
|
||||
<text
|
||||
inkscape:label="#text7243"
|
||||
id="crs"
|
||||
y="90.062439"
|
||||
x="913.95801"
|
||||
y="70.062439"
|
||||
x="935.95801"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none"
|
||||
xml:space="preserve"><tspan
|
||||
y="90.062439"
|
||||
x="913.95801"
|
||||
y="70.062439"
|
||||
x="935.95801"
|
||||
id="tspan4046"
|
||||
sodipodi:role="line"
|
||||
style="font-size:36px;line-height:1.25">999</tspan></text>
|
||||
|
@ -1680,13 +1733,13 @@
|
|||
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:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ededed;fill-opacity:1;stroke:none"
|
||||
x="913.95801"
|
||||
y="126.12444"
|
||||
y="106.12444"
|
||||
id="dme"
|
||||
inkscape:label="#text7243"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4071"
|
||||
x="913.95801"
|
||||
y="126.12444"
|
||||
y="106.12444"
|
||||
style="font-size:36px;line-height:1.25">99.9</tspan></text>
|
||||
<g
|
||||
id="gsGroup"
|
||||
|
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 137 KiB |
|
@ -10,6 +10,9 @@ var NOTHING = func nil;
|
|||
var att_switch = props.globals.getNode("/controls/navigation/switching/att-hdg", 1);
|
||||
var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1);
|
||||
|
||||
var vhdg_bug = props.globals.getNode("/it-autoflight/input/hdg",0); # ND compass position deg
|
||||
|
||||
|
||||
canvas.NDStyles["Airbus"] = {
|
||||
font_mapper: func(family, weight) {
|
||||
if( family == "Liberation Sans" and weight == "normal" )
|
||||
|
@ -884,6 +887,42 @@ canvas.NDStyles["Airbus"] = {
|
|||
is_false: NOTHING,
|
||||
},
|
||||
},
|
||||
{
|
||||
id:"hdgBug2ValR", #"hdgBug2ValL"",
|
||||
impl: {
|
||||
init: func(nd,symbol),
|
||||
predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered"),
|
||||
is_true: func(nd) {
|
||||
var bugRot = vhdg_bug.getValue();
|
||||
var diffRot = (bugRot>=nd.userHdgTrk) ? (bugRot-nd.userHdgTrk) : (360+bugRot-nd.userHdgTrk);
|
||||
if (diffRot<180 and diffRot>48) {
|
||||
nd.symbols.hdgBug2ValR.setText(sprintf("%03d", bugRot+0.5)); #CHECKME - not sure about adding +.5 as "hdg" process
|
||||
nd.symbols.hdgBug2ValR.show();
|
||||
} else {
|
||||
nd.symbols.hdgBug2ValR.hide();
|
||||
}
|
||||
},
|
||||
is_false: func(nd) nd.symbols.hdgBug2ValR.hide(),
|
||||
},
|
||||
},
|
||||
{
|
||||
id:"hdgBug2ValL",
|
||||
impl: {
|
||||
init: func(nd,symbol),
|
||||
predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered"),
|
||||
is_true: func(nd) {
|
||||
var bugRot = vhdg_bug.getValue();
|
||||
var diffRot = (bugRot>nd.userHdgTrk) ? (360+nd.userHdgTrk-bugRot) : (nd.userHdgTrk-bugRot);
|
||||
if (diffRot<180 and diffRot>48) {
|
||||
nd.symbols.hdgBug2ValL.setText(sprintf("%03d", bugRot-0.5)); #CHECKME - not sure about adding +.5 as "hdg" process
|
||||
nd.symbols.hdgBug2ValL.show();
|
||||
} else {
|
||||
nd.symbols.hdgBug2ValL.hide();
|
||||
}
|
||||
},
|
||||
is_false: func(nd) nd.symbols.hdgBug2ValL.hide(),
|
||||
},
|
||||
},
|
||||
{
|
||||
id:"hdgGroup",
|
||||
impl: {
|
||||
|
|
41
Nasal/Displays/projection.nas
Normal file
41
Nasal/Displays/projection.nas
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Projection-related helper functions for the MFD maps
|
||||
|
||||
var Camera = {
|
||||
new: func(options) {
|
||||
var m = {
|
||||
parents: [Camera],
|
||||
|
||||
camGeo: options['camGeo'] or geo.aircraft_position(),
|
||||
camHdg: options['camHdg'] or 0,
|
||||
range: options['range'] or 10.0,
|
||||
screenRange: options['screenRange'] or 256.0,
|
||||
screenCX: options['screenCX'] or options['screenRange'] or 256.0,
|
||||
screenCY: options['screenCY'] or options['screenRange'] or 256.0,
|
||||
};
|
||||
return m;
|
||||
},
|
||||
|
||||
setRange: func(range) {
|
||||
me.range = range;
|
||||
},
|
||||
|
||||
repositon: func(geo, hdg) {
|
||||
me.camGeo = geo;
|
||||
me.camHdg = hdg;
|
||||
},
|
||||
|
||||
project: func(targetGeo) {
|
||||
var dist = me.camGeo.distance_to(targetGeo) * M2NM;
|
||||
var bearing = me.camGeo.course_to(targetGeo) - me.camHdg;
|
||||
return me.projectDistBearing(dist, bearing);
|
||||
},
|
||||
|
||||
projectDistBearing: func(dist, bearing) {
|
||||
var bearingRad = bearing * D2R;
|
||||
var tx = math.sin(bearingRad) * dist;
|
||||
var ty = -math.cos(bearingRad) * dist;
|
||||
var x = tx * me.screenRange / me.range + me.screenCX;
|
||||
var y = ty * me.screenRange / me.range + me.screenCY;
|
||||
return [x, y];
|
||||
},
|
||||
};
|
359
Nasal/Displays/traffic.nas
Normal file
359
Nasal/Displays/traffic.nas
Normal file
|
@ -0,0 +1,359 @@
|
|||
# Traffic layer
|
||||
|
||||
var ATCSwitchAbvBlw = props.globals.getNode("/controls/atc/abv-blw");
|
||||
var ATCSwitchThrtAll = props.globals.getNode("/controls/atc/thrt-all");
|
||||
|
||||
var colorByLevel = {
|
||||
# 0: other
|
||||
0: [0.8,0.8,0.8],
|
||||
# 1: proximity
|
||||
1: [0.8,0.8,0.8],
|
||||
# 2: traffic advisory (TA)
|
||||
2: [1,0.75,0],
|
||||
# 3: resolution advisory (RA)
|
||||
3: [1,0,0],
|
||||
};
|
||||
|
||||
var doFill = {
|
||||
0: 0,
|
||||
1: 1,
|
||||
2: 1,
|
||||
3: 1,
|
||||
};
|
||||
|
||||
var colorDefault = [0.8,0.8,0.8];
|
||||
|
||||
var drawBlip = func(elem, threatLvl) {
|
||||
if (threatLvl == 3) {
|
||||
# resolution advisory
|
||||
elem.reset()
|
||||
.setStrokeLineWidth(0)
|
||||
.moveTo(-17,-17)
|
||||
.horiz(34)
|
||||
.vert(34)
|
||||
.horiz(-34)
|
||||
.close();
|
||||
}
|
||||
elsif (threatLvl == 2) {
|
||||
# traffic advisory
|
||||
elem.reset()
|
||||
.moveTo(-17,0)
|
||||
.setStrokeLineWidth(0)
|
||||
.arcSmallCW(17,17,0,34,0)
|
||||
.arcSmallCW(17,17,0,-34,0);
|
||||
}
|
||||
elsif (threatLvl == 1) {
|
||||
# proximate traffic
|
||||
elem.reset()
|
||||
.setStrokeLineWidth(0)
|
||||
.moveTo(-14,0)
|
||||
.lineTo(0,-17)
|
||||
.lineTo(14,0)
|
||||
.lineTo(0,17)
|
||||
.close();
|
||||
}
|
||||
else {
|
||||
# other traffic
|
||||
elem.reset()
|
||||
.setStrokeLineWidth(4)
|
||||
.moveTo(-10,0)
|
||||
.lineTo(0,-14)
|
||||
.lineTo(10,0)
|
||||
.lineTo(0,14)
|
||||
.close();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var TrafficLayer = {
|
||||
new: func(camera, group) {
|
||||
var m = {
|
||||
parents: [TrafficLayer],
|
||||
camera: camera,
|
||||
refAlt: 0,
|
||||
group: group,
|
||||
items: {},
|
||||
sorted: {}, # TODO - only the most 8 relevant advisories
|
||||
values: {},
|
||||
updateKeys: [],
|
||||
addListener: nil,
|
||||
delListener: nil,
|
||||
};
|
||||
return m;
|
||||
},
|
||||
|
||||
makeElems: func () {
|
||||
if (me.group == nil) return nil;
|
||||
var elems = {};
|
||||
elems['master'] = me.group.createChild('group');
|
||||
elems['blip'] = elems.master.createChild('path')
|
||||
.setStrokeLineWidth(0);
|
||||
elems['text'] = elems.master.createChild('text')
|
||||
.setDrawMode(canvas.Text.TEXT)
|
||||
.setText(sprintf("0"))
|
||||
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
|
||||
.setColor(1,1,1)
|
||||
.setFontSize(32)
|
||||
.setAlignment("center-center");
|
||||
elems['master'].hide();
|
||||
elems['arrowUp'] = elems.master.createChild("text")
|
||||
.setDrawMode(canvas.Text.TEXT)
|
||||
.setText(sprintf("↑"))
|
||||
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
|
||||
.setColor(1,1,1)
|
||||
.setFontSize(50)
|
||||
.setTranslation(16, 2)
|
||||
.setAlignment("left-center");
|
||||
elems['arrowDown'] = elems.master.createChild("text")
|
||||
.setDrawMode(canvas.Text.TEXT)
|
||||
.setText(sprintf("↓"))
|
||||
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
|
||||
.setColor(1,1,1)
|
||||
.setFontSize(50)
|
||||
.setTranslation(16, 2)
|
||||
.setAlignment("left-center");
|
||||
return elems;
|
||||
},
|
||||
|
||||
start: func() {
|
||||
me.stop();
|
||||
var self = me;
|
||||
me.addListener = setlistener('/ai/models/model-added', func(changed, listen, mode, is_child) {
|
||||
var path = changed.getValue();
|
||||
if (path == nil) return;
|
||||
#printf("ADD: %s", path);
|
||||
me.values[path] = nil;
|
||||
var masterProp = props.globals.getNode(path);
|
||||
var prop = {
|
||||
'master': masterProp,
|
||||
};
|
||||
if (me.items[path] == nil) {
|
||||
me.items[path] = {
|
||||
prop: prop,
|
||||
elems: me.makeElems(),
|
||||
data: {'threatLevel': -2},
|
||||
};
|
||||
}
|
||||
else {
|
||||
me.items[path].prop = prop;
|
||||
me.items[path].data = {'threatLevel': -2};
|
||||
}
|
||||
}, 1, 1);
|
||||
me.delListener = setlistener('/ai/models/model-removed', func(changed, listen, mode, is_child) {
|
||||
var path = changed.getValue();
|
||||
if (path == nil) return;
|
||||
#printf("DEL: %s", path);
|
||||
me.values[path] = nil;
|
||||
if (me.items[path] == nil) return;
|
||||
if (me.items[path] != nil) {
|
||||
me.items[path].prop = nil;
|
||||
me.items[path].elems.master.hide();
|
||||
me.items[path].data = {};
|
||||
}
|
||||
}, 1, 1);
|
||||
},
|
||||
|
||||
stop: func() {
|
||||
if (me.addListener != nil) {
|
||||
removelistener(me.addListener);
|
||||
me.addListener = nil;
|
||||
}
|
||||
if (me.delListener != nil) {
|
||||
removelistener(me.delListener);
|
||||
me.delListener = nil;
|
||||
}
|
||||
me.items = {};
|
||||
if (me.group != nil) {
|
||||
me.group.removeAllChildren();
|
||||
}
|
||||
},
|
||||
|
||||
nxtupdatetime: 0,
|
||||
|
||||
update: func() {
|
||||
var _tm = systime();
|
||||
if (me.nxtupdatetime != 0) {
|
||||
if (_tm<me.nxtupdatetime) return;
|
||||
}
|
||||
me.nxtupdatetime = _tm + 0.5; # refresh rate at 500ms
|
||||
|
||||
if (size(me.updateKeys) == 0) {
|
||||
me.updateKeys = keys(me.items);
|
||||
}
|
||||
var path = pop(me.updateKeys);
|
||||
foreach (var path; keys(me.items)) {
|
||||
me.updateItem(path);
|
||||
}
|
||||
},
|
||||
|
||||
redraw: func() {
|
||||
foreach (var path; keys(me.items)) {
|
||||
me.redrawItem(me.items[path],me.values[path]);
|
||||
}
|
||||
},
|
||||
|
||||
setRefAlt: func(alt) {
|
||||
me.refAlt = alt;
|
||||
},
|
||||
|
||||
proplist: ['lat', 'lon', 'alt', 'threatLevel', 'callsign', 'vspeed', 'tas'],
|
||||
|
||||
updateItem: func(path) {
|
||||
|
||||
var item = me.items[path];
|
||||
if (item == nil) return;
|
||||
if (item.prop == nil) {
|
||||
if (item.elems != nil) {
|
||||
item.elems.master.hide();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.prop['lat'] == nil) {
|
||||
item.prop['lat'] = item.prop.master.getNode('position/latitude-deg');
|
||||
item.prop['lon'] = item.prop.master.getNode('position/longitude-deg');
|
||||
item.prop['alt'] = item.prop.master.getNode('position/altitude-ft');
|
||||
}
|
||||
if (item.prop['threatLevel'] == nil) {
|
||||
item.prop['threatLevel'] = item.prop.master.getNode('tcas/threat-level');
|
||||
}
|
||||
if (item.prop['callsign'] == nil) {
|
||||
item.prop['callsign'] = item.prop.master.getNode('callsign');
|
||||
}
|
||||
if (item.prop['vspeed'] == nil) {
|
||||
item.prop['vspeed'] = item.prop.master.getNode('velocities/vertical-speed-fps');
|
||||
item.prop['tas'] = item.prop.master.getNode('velocities/true-airspeed-kt');
|
||||
}
|
||||
|
||||
# this item has a prop associated with it
|
||||
if (item.elems == nil) {
|
||||
item.elems = me.makeElems();
|
||||
}
|
||||
|
||||
var oldThreatLevel = item.data['threatLevel'];
|
||||
|
||||
foreach (var k; me.proplist) {
|
||||
if (item.prop[k] != nil) {
|
||||
item.data[k] = item.prop[k].getValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (item.data['threatLevel'] == -1) { # airplane with TCAS not enabled or supported
|
||||
me.values[path] = {visible: 0};
|
||||
return;
|
||||
}
|
||||
|
||||
if (oldThreatLevel != item.data['threatLevel']) {
|
||||
item.data['threatLevelDirty'] = 1;
|
||||
}
|
||||
|
||||
var newThrtAll = ATCSwitchThrtAll.getValue();
|
||||
if (newThrtAll == 1) { # AUTO - display only proximate and higher advisories
|
||||
if (item.data['threatLevel']==0) {
|
||||
me.values[path] = {visible: 0};
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var _lat = item.data['lat'];
|
||||
var _lon = item.data['lon'];
|
||||
var alt = item.data['alt'];
|
||||
var vspeed = item.data['vspeed'];
|
||||
var tas = item.data['tas'];
|
||||
|
||||
me.values[path] = nil;
|
||||
|
||||
if (_lat != nil and _lon != nil and vspeed != nil) {
|
||||
|
||||
if (tas<80) { # flying airplane only
|
||||
me.values[path] = {visible: 0};
|
||||
return;
|
||||
}
|
||||
|
||||
var top = 27;
|
||||
var bottom = -27;
|
||||
if (ATCSwitchAbvBlw.getValue() == -1) {
|
||||
top = 99;
|
||||
}
|
||||
if (ATCSwitchAbvBlw.getValue() == 1) {
|
||||
bottom = -99;
|
||||
}
|
||||
|
||||
var altDiff100 = ((alt or me.refAlt) - me.refAlt) / 100;
|
||||
|
||||
if (altDiff100 > top or altDiff100 < bottom) { # check TCAS vertical range
|
||||
me.values[path] = {visible: 0};
|
||||
return;
|
||||
}
|
||||
|
||||
var _val = {visible:1, lat:_lat, lon:_lon, dirty:item.data['threatLevelDirty']};
|
||||
|
||||
var spd = vspeed * 60;
|
||||
_val.arrowup = (spd > 500);
|
||||
_val.arrowdown = (spd < -500);
|
||||
|
||||
if (math.abs(altDiff100) > 0.5) {
|
||||
_val.text = sprintf("%+03.0f ", altDiff100);
|
||||
} else {
|
||||
_val.text = "";
|
||||
}
|
||||
|
||||
_val.textpy = (altDiff100 < 0) ? 34 : -30;
|
||||
|
||||
me.values[path] = _val;
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
redrawItem: func (item,val) {
|
||||
#debug.dump("REDRAW ", item.data);
|
||||
|
||||
if (val != nil and val.visible == 1) {
|
||||
|
||||
var lat = val.lat;
|
||||
var lon = val.lon;
|
||||
|
||||
var coords = geo.Coord.new();
|
||||
coords.set_latlon(lat, lon);
|
||||
var (x, y) = me.camera.project(coords);
|
||||
item.elems.master.setTranslation(x, y);
|
||||
#printf("%f %f", x, y);
|
||||
if (val.dirty) {
|
||||
#printf('%s THREAT LVL: %i', item.data['callsign'] or '???', item.data['threatLevel']);
|
||||
var threatLevel = item.data['threatLevel'];
|
||||
#debug.dump(item.data, threatLevel);
|
||||
drawBlip(item.elems.blip, threatLevel);
|
||||
var rgb = colorByLevel[threatLevel];
|
||||
if (rgb == nil) rgb = colorDefault;
|
||||
var color = canvas._getColor(rgb);
|
||||
var (r, g, b) = rgb;
|
||||
if (threatLevel > 0) {
|
||||
item.elems.blip.setColorFill(r, g, b);
|
||||
} else {
|
||||
item.elems.blip.setColorFill(0,0,0);
|
||||
item.elems.blip.setColor(r, g, b);
|
||||
}
|
||||
item.elems.text.setColor(r, g, b);
|
||||
item.elems.arrowUp.setColor(r, g, b);
|
||||
item.elems.arrowDown.setColor(r, g, b);
|
||||
item.elems.master.set('z-index', threatLevel + 2);
|
||||
item.data['threatLevelDirty'] = 0;
|
||||
val.dirty = 0;
|
||||
}
|
||||
|
||||
item.elems.arrowUp.setVisible(val.arrowup);
|
||||
item.elems.arrowDown.setVisible(val.arrowdown);
|
||||
|
||||
item.elems.text.setText(val.text);
|
||||
item.elems.text.setTranslation(0, val.textpy);
|
||||
item.elems.master.show();
|
||||
|
||||
} else {
|
||||
|
||||
item.elems.master.hide();
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
};
|
|
@ -12,7 +12,6 @@ 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 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"), props.globals.initNode("/sim/sound/warnings/retard", 0, "BOOL"), props.globals.initNode("/sim/sound/warnings/cchord", 0, "BOOL")];
|
||||
|
@ -76,6 +75,33 @@ var warningNodes = {
|
|||
greenYellowFuel: props.globals.initNode("/ECAM/warnings/hyd/green-yellow-fuel-consumpt"),
|
||||
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault"),
|
||||
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault"),
|
||||
flapNotZero: props.globals.initNode("/ECAM/warnings/fctl/flaps-not-zero"),
|
||||
slatsConfig: props.globals.initNode("/ECAM/warnings/fctl/slats-config-output"),
|
||||
flapsConfig: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-output"),
|
||||
spdBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-output"),
|
||||
pitchTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-output"),
|
||||
rudTrimConfig: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-output"),
|
||||
parkBrkConfig: props.globals.initNode("/ECAM/warnings/fctl/park-brk-config-output"),
|
||||
slatsConfig2: props.globals.initNode("/ECAM/warnings/fctl/slats-config-range"),
|
||||
flapsConfig2: props.globals.initNode("/ECAM/warnings/fctl/flaps-config-range"),
|
||||
spdBrkConfig2: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-config-range"),
|
||||
pitchTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/pitch-trim-config-range"),
|
||||
rudTrimConfig2: props.globals.initNode("/ECAM/warnings/fctl/rudder-trim-config-range"),
|
||||
dcEssFuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fuel-consumption-increased"),
|
||||
dcEssFMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-ess-fms-predictions-unreliable"),
|
||||
dc2FuelConsumptionIncreased: props.globals.initNode("/ECAM/warnings/logic/dc-2-fuel-consumption-increased"),
|
||||
dc2FMSPredictions: props.globals.initNode("/ECAM/warnings/logic/dc-2-fms-predictions-unreliable"),
|
||||
thrLeversNotSet: props.globals.initNode("/ECAM/warnings/logic/eng/thr-lever-not-set"),
|
||||
revSet: props.globals.initNode("/ECAM/warnings/logic/eng/reverse-set"),
|
||||
eng1Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-fail"),
|
||||
eng2Fail: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-fail"),
|
||||
phase5Trans: props.globals.initNode("/ECAM/warnings/logic/eng/phase-5-output"),
|
||||
eng1Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-1-shutdown"),
|
||||
eng2Shutdown: props.globals.initNode("/ECAM/warnings/logic/eng/eng-2-shutdown"),
|
||||
acEssBusAltn: props.globals.initNode("/ECAM/warnings/logic/ac-ess-bus-altn-feed"),
|
||||
gen1Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-1-off"),
|
||||
gen2Off: props.globals.initNode("/ECAM/warnings/logic/elec/gen-2-off"),
|
||||
spdBrkOut: props.globals.initNode("/ECAM/warnings/fctl/spd-brk-still-out"),
|
||||
},
|
||||
Timers: {
|
||||
apuFaultOutput: props.globals.initNode("/ECAM/warnings/timer/apu-fault-output"),
|
||||
|
@ -110,6 +136,20 @@ var warningNodes = {
|
|||
navTerrFault: props.globals.initNode("/ECAM/warnings/timer/nav-gpws-terr-fault"),
|
||||
leftElevFail: props.globals.initNode("/ECAM/warnings/fctl/leftElevFault-output"),
|
||||
rightElevFail: props.globals.initNode("/ECAM/warnings/fctl/rightElevFault-output"),
|
||||
staticInverter: props.globals.initNode("/systems/electrical/some-electric-thingie/static-inverter-timer"),
|
||||
dcEmerConfig: props.globals.initNode("/ECAM/warnings/logic/dc-emer-config-output"),
|
||||
dc12Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-2-output"),
|
||||
dcEssFault: props.globals.initNode("/ECAM/warnings/logic/dc-ess-output"),
|
||||
dc1Fault: props.globals.initNode("/ECAM/warnings/logic/dc-1-output"),
|
||||
dc2Fault: props.globals.initNode("/ECAM/warnings/logic/dc-2-output"),
|
||||
dcBatFault: props.globals.initNode("/ECAM/warnings/logic/dc-bat-output"),
|
||||
ac1Fault: props.globals.initNode("/ECAM/warnings/logic/ac-1-output"),
|
||||
ac2Fault: props.globals.initNode("/ECAM/warnings/logic/ac-2-output"),
|
||||
acEssFault: props.globals.initNode("/ECAM/warnings/logic/ac-ess-output"),
|
||||
dcEssShed: props.globals.initNode("/ECAM/warnings/logic/dc-ess-shed-output"),
|
||||
acEssShed: props.globals.initNode("/ECAM/warnings/logic/ac-ess-shed-output"),
|
||||
centerPumpsOff: props.globals.initNode("/ECAM/warnings/fuel/center-pumps-off-output"),
|
||||
lowLevelBoth: props.globals.initNode("/ECAM/warnings/fuel/lo-level-l-r-output"),
|
||||
},
|
||||
Flipflops: {
|
||||
apuGenFault: props.globals.initNode("/ECAM/warnings/flipflop/apu-gen-fault"),
|
||||
|
@ -389,6 +429,7 @@ var ECAM_controller = {
|
|||
m.active = 0;
|
||||
}
|
||||
}
|
||||
me._ready = 1;
|
||||
},
|
||||
clear: func() {
|
||||
hasCleared = 0;
|
||||
|
@ -479,7 +520,7 @@ var ECAM_controller = {
|
|||
};
|
||||
|
||||
setlistener("/systems/electrical/bus/dc-ess", func {
|
||||
if (dc_ess.getValue() < 25) {
|
||||
if (systems.ELEC.Bus.dcEss.getValue() < 25) {
|
||||
ECAM_controller.reset();
|
||||
}
|
||||
}, 0, 0);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -10,6 +10,7 @@
|
|||
# Left E/WD
|
||||
|
||||
var warnings = std.Vector.new([
|
||||
# LEVEL 3 WARN
|
||||
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, isMainMsg: 1),
|
||||
|
||||
|
@ -47,12 +48,12 @@ var warnings = std.Vector.new([
|
|||
var eng1FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
|
||||
var eng1FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
|
||||
var eng1FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
|
||||
var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1),
|
||||
var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"),
|
||||
var eng1FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
|
||||
|
||||
# ENG 1 FIRE (ground)
|
||||
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 eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
|
||||
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"),
|
||||
|
@ -70,12 +71,12 @@ var warnings = std.Vector.new([
|
|||
var eng2FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
|
||||
var eng2FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
|
||||
var eng2FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
|
||||
var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", isMainMsg: 1),
|
||||
var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w"),
|
||||
var eng2FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
|
||||
|
||||
# ENG 2 FIRE (ground)
|
||||
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 eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w"),
|
||||
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"),
|
||||
|
@ -85,6 +86,20 @@ var warnings = std.Vector.new([
|
|||
var eng2FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
|
||||
var eng2FireGnEvac = warning.new(msg: " -EMER EVAC PROC...APPLY", colour: "c"),
|
||||
|
||||
# ADR 1 + 2 + 3 FAULT
|
||||
var ADR123Fault = warning.new(msg: "NAV ADR1+2+3 FAULT ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var ADR123FaultAP = warning.new(msg: " -AP+FD..............OFF", colour: "c"),
|
||||
var ADR123FaultATHR = warning.new(msg: " -ATHR...............OFF", colour: "c"),
|
||||
var ADR123FaultPRBW = warning.new(msg: " -PROBE/WINDOW HEAT...ON", colour: "c"),
|
||||
var ADR123FaultBUSSC = warning.new(msg: " -CAPT BKUP SPD/ALT...ON", colour: "c"),
|
||||
var ADR123FaultBUSSF = warning.new(msg: " -FO BKUP SPD/ALT.....ON", colour: "c"),
|
||||
var ADR123FaultADRPB = warning.new(msg: " -ADR 1+2+3 P/B......OFF", colour: "c"),
|
||||
var ADR123FaultSPD = warning.new(msg: " -SPD......FLY THE GREEN", colour: "c"),
|
||||
var ADR123FaultAOADISAG = warning.new(msg: " •IF AOA DISAGREE: ", colour: "w"),
|
||||
var ADR123FaultBUSSINOP = warning.new(msg: " BKUP SPD/ALT.DO NOT USE", colour: "c"),
|
||||
var ADR123FaultSTBY = warning.new(msg: " -STBY INST.MAY BE UNREL", colour: "c"),
|
||||
var ADR123FaultPROC = warning.new(msg: " -ALL ADR OFF PROC.APPLY", colour: "c"),
|
||||
|
||||
# APU FIRE
|
||||
var apuFire = warning.new(msg: "APU FIRE ", colour: "r", aural: 0, light: 0, isMainMsg: 1, sdPage: "apu"),
|
||||
var apuFirePB = warning.new(msg: " -APU FIRE P/B......PUSH", colour: "c"),
|
||||
|
@ -105,6 +120,37 @@ 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),
|
||||
|
||||
# EXCESS CAB ALT
|
||||
var excessCabAlt = warning.new(msg: "CAB PR EXCESS CAB ALT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var excessCabAltMask = warning.new(msg: " -CREW OXY MASKS.....USE", colour: "c"),
|
||||
var excessCabAltSigns = warning.new(msg: " -SIGNS...............ON", colour: "c"),
|
||||
var excessCabAltEmerD = warning.new(msg: " •EMER DESCENT:", colour: "w"),
|
||||
var excessCabAltDES = warning.new(msg: " -DESCENT.......INITIATE", colour: "c"),
|
||||
var excessCabAltTHRLVR = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
|
||||
var excessCabAltSPDBRK = warning.new(msg: " -SPD BRK...........FULL", colour: "c"),
|
||||
var excessCabAltSPD = warning.new(msg: " SPD.....MAX/APPROPRIATE", colour: "c"),
|
||||
var excessCabAltENG = warning.new(msg: " -ENG MODE...........IGN", colour: "c"),
|
||||
var excessCabAltCAB = warning.new(msg: " -CABIN CREW......ADVISE", colour: "c"),
|
||||
var excessCabAltPA = warning.new(msg: " -EMER DES (PA).ANNOUNCE", colour: "c"),
|
||||
var excessCabAltXPDR = warning.new(msg: " -XPDR 7700.....CONSIDER", colour: "c"),
|
||||
var excessCabAltMEA = warning.new(msg: " MAX FL.....100/MEA-MORA", colour: "c"),
|
||||
var excessCabAltCabAlt = warning.new(msg: " •IF CAB ALT>14000 FT:", colour: "w"),
|
||||
var excessCabAltMasks = warning.new(msg: " -PAX OXY MASKS...MAN ON", colour: "c"),
|
||||
|
||||
# ENG 1 OIL LO PR
|
||||
var eng1OilLoPr = warning.new(msg: "ENG 1 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var eng1OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"),
|
||||
var eng1OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"),
|
||||
var eng1OilLoPrThrot = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
|
||||
var eng1OilLoPrMaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
|
||||
|
||||
# ENG 2 OIL LO PR
|
||||
var eng2OilLoPr = warning.new(msg: "ENG 2 OIL LO PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var eng2OilLoPrIf = warning.new(msg: " •IF OIL PR < 13 PSI :", colour: "w"),
|
||||
var eng2OilLoPrIf2 = warning.new(msg: " •IF OIL PR < 60 PSI :", colour: "w"),
|
||||
var eng2OilLoPrThrot = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
|
||||
var eng2OilLoPrMaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
|
||||
|
||||
# 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"),
|
||||
|
@ -116,8 +162,8 @@ var warnings = std.Vector.new([
|
|||
|
||||
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 gearNotDownLockedWork = warning.new(msg: " •IF UNSUCCESSFUL:", colour: "w"),
|
||||
var gearNotDownLocked120 = warning.new(msg: " AFTER 120S:", colour: "w"),
|
||||
var gearNotDownLockedGrav = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
|
||||
|
||||
# Autopilot off involuntary
|
||||
|
@ -125,18 +171,34 @@ var warnings = std.Vector.new([
|
|||
|
||||
# Cargo smoke
|
||||
var cargoSmokeFwd = warning.new(msg: "SMOKE FWD CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var cargoSmokeFwdFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
|
||||
var cargoSmokeFwdGrdClsd = warning.new(msg: " •IF FWD CRG CLSD:", colour: "w"),
|
||||
var cargoSmokeFwdAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
|
||||
var cargoSmokeFwdGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"),
|
||||
var cargoSmokeFwdDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
|
||||
var cargoSmokeFwdDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
|
||||
var cargoSmokeAft = warning.new(msg: "SMOKE AFT CARGO SMOKE", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var cargoSmokeAftFans = warning.new(msg: " -CAB FANS...........OFF", colour: "c"),
|
||||
var cargoSmokeAftGrdClsd = warning.new(msg: " •IF AFT CRG CLSD:", colour: "w"),
|
||||
var cargoSmokeAftAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
|
||||
var cargoSmokeAftGrd = warning.new(msg: " •WHEN ON GROUND", colour: "w"),
|
||||
var cargoSmokeAftDoors = warning.new(msg: " BEFORE OPEN CRG DOORS:", colour: "w"),
|
||||
var cargoSmokeAftDisemb = warning.new(msg: "-PAX..........DISEMBARK", colour: "c"),
|
||||
|
||||
# Lavatory SMOKE
|
||||
var lavatorySmoke = warning.new(msg: "SMOKE LAVATORY SMOKE ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var lavatorySmokeComm = warning.new(msg: "-CKPT/CAB COM.ESTABLISH ", colour: "c"),
|
||||
|
||||
# EXCES RESID PR
|
||||
var excessResidPress = warning.new(msg: "CAB PR EXCES RESIDUAL PR ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var excessResidPressPack1 = warning.new(msg: "-PACK 1.............OFF", colour: "c"),
|
||||
var excessResidPressPack2 = warning.new(msg: "-PACK 2.............OFF", colour: "c"),
|
||||
var excessResidPressCabCr = warning.new(msg: "-CABIN CREW.......ALERT", colour: "c"),
|
||||
|
||||
# ESS Bus on Bat
|
||||
# NEW EMER CONFIG
|
||||
var essBusOnBat = warning.new(msg: "ELEC ESS BUSES ON BAT", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var essBusOnBatLGUplock = warning.new(msg: " •WHEN L/G UPLOCKED :", colour: "w"),
|
||||
var essBusOnBatManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
|
||||
var essBusOnBatRetract = warning.new(msg: " •IF L/G RETRACT FAULT:", colour: "w"),
|
||||
var essBusOnBatMinSpeed = warning.new(msg: " MIN RAT SPD......180 KT", colour: "c"),
|
||||
var essBusOnBatLGCB = warning.new(msg: " -LGCIU1 C/B (C09)..PULL", colour: "c"),
|
||||
var essBusOnBatManOn2 = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
|
||||
var essBusOnBatMinSpeed = warning.new(msg: " MIN RAT SPD......140 KT", colour: "c"),
|
||||
|
||||
# Emer Config
|
||||
var emerconfig = warning.new(msg: "ELEC EMER CONFIG", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
|
@ -148,13 +210,14 @@ var warnings = std.Vector.new([
|
|||
var emerconfigManOn = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
|
||||
var emerconfigEngMode = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
|
||||
var emerconfigRadio = warning.new(msg: " -VHF1/ATC1..........USE", colour: "c"),
|
||||
var emerconfigIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
|
||||
var emerconfigFuelG = warning.new(msg: " FUEL GRVTY FEED", colour: "c"),
|
||||
var emerconfigFuelG2 = warning.new(msg: " PROC:GRVTY FUEL FEEDING", colour: "c"),
|
||||
var emerconfigFAC = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
|
||||
var emerconfigBusTie2 = warning.new(msg: " -BUS TIE...........AUTO", colour: "c"),
|
||||
var emerconfigAPU = warning.new(msg: " -APU (IF AVAIL)...START", colour: "c"),
|
||||
var emerconfigVent = warning.new(msg: " -BLOWER + EXTRACT..OVRD", colour: "c"),
|
||||
var emerconfigFuelIN = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
|
||||
var emerconfigFMSPRD = warning.new(msg: " FMS PRED UNRELIABLE", 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),
|
||||
|
@ -190,15 +253,140 @@ var warnings = std.Vector.new([
|
|||
var hydGYloPrFuelCnsmpt = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
|
||||
var hydGYloPrFmsPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
|
||||
|
||||
# AIR BLEED LEAK
|
||||
var airBleedLeak = warning.new(msg: "AIR BLEED LEAK ", colour: "r", aural: 0, light: 0, isMainMsg: 1),
|
||||
var airBleedLeakShut = warning.new(msg: " -X BLEED..........SHUT", colour: "c"),
|
||||
|
||||
# LEVEL 2 WARN
|
||||
# THR LEVERS NOT SET
|
||||
var engThrustLvrNotSet = warning.new(msg: "ENG THR LEVERS NOT SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var engThrustLvrNotSetMCT = warning.new(msg: " -THR LEVERS ....MCT/FLX", colour: "c"),
|
||||
var engThrustLvrNotSetTO = warning.new(msg: " -THR LEVERS.......TO/GA", colour: "c"),
|
||||
|
||||
# REV SET
|
||||
var engRevSet = warning.new(msg: "ENG REV SET ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var engRevSetLevers = warning.new(msg: " -THR LEVER......FWD THR", colour: "c"),
|
||||
|
||||
# ENG 1 FAIL
|
||||
var eng1Fail = warning.new(msg: "ENG 1 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var thrustMalfunction1 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"),
|
||||
var shaftFailure1 = warning.new(msg: " SHAFT FAILURE ", colour: "a"),
|
||||
var eng1FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
|
||||
var eng1FailThrLvrIdle = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
|
||||
var eng1FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"),
|
||||
var eng1FailMasterOff = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
|
||||
var eng1FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"),
|
||||
var eng1FailFirePB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
|
||||
var eng1FailAgent1DischT = warning.new(msg: " -AGENT1 AFTER 10S.DISCH", colour: "c"),
|
||||
var eng1FailAgent1Disch = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
|
||||
var eng1FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"),
|
||||
var eng1FailRelight = warning.new(msg: " -ENG 1 RELIGHT.CONSIDER", colour: "c"),
|
||||
|
||||
# ENG 1 OIL HI TEMP
|
||||
var eng1OilHiTemp = warning.new(msg: "ENG 1 OIL HI TEMP ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var eng1OilHiTempIdle = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
|
||||
var eng1OilHiTempSuccess = warning.new(msg: " •IF UNSUCCESSFUL: ", colour: "w"),
|
||||
var eng1OilHiTempMaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
|
||||
|
||||
# ENG 1 SHUT DOWN
|
||||
var eng1ShutDown = warning.new(msg: "ENG 1 SHUT DOWN ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var eng1ShutDownPack = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
|
||||
var eng1ShutDownXBleed = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
|
||||
var eng1ShutDownModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
|
||||
var eng1ShutDownFuelLeak = warning.new(msg: " •IF NO FUEL LEAK :", colour: "w"),
|
||||
var eng1ShutDownImbalance = warning.new(msg: " -IMBALANCE......MONITOR", colour: "c"),
|
||||
var eng1ShutDownTCAS = warning.new(msg: " -TCAS MODE SEL.......TA", colour: "c"),
|
||||
var eng1ShutDownBuffet = warning.new(msg: " •IF BUFFET : ", colour: "w"),
|
||||
var eng1ShutDownSpeed = warning.new(msg: " MAX SPEED...........240", colour: "c"),
|
||||
var eng1ShutDownXBleedS = warning.new(msg: " -X BLEED...........SHUT", colour: "c"),
|
||||
var eng1ShutDownWingAI = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
|
||||
var eng1ShutDownIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
|
||||
|
||||
# ENG 2 FAIL
|
||||
var eng2Fail = warning.new(msg: "ENG 2 FAIL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var thrustMalfunction2 = warning.new(msg: " THRUST MALFUNCTION ", colour: "a"),
|
||||
var shaftFailure2 = warning.new(msg: " SHAFT FAILURE ", colour: "a"),
|
||||
var eng2FailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
|
||||
var eng2FailThrLvrIdle = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
|
||||
var eng2FailNoRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w"),
|
||||
var eng2FailMasterOff = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
|
||||
var eng2FailDamage = warning.new(msg: " IF DAMAGE : ", colour: "w"),
|
||||
var eng2FailFirePB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
|
||||
var eng2FailAgent1DischT = warning.new(msg: " -AGENT2 AFTER 10S.DISCH", colour: "c"),
|
||||
var eng2FailAgent1Disch = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
|
||||
var eng2FailNoDamage = warning.new(msg: " IF NO DAMAGE : ", colour: "w"),
|
||||
var eng2FailRelight = warning.new(msg: " -ENG 2 RELIGHT.CONSIDER", colour: "c"),
|
||||
|
||||
# ENG 2 OIL HI TEMP
|
||||
var eng2OilHiTemp = warning.new(msg: "ENG 2 OIL HI TEMP ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var eng2OilHiTempIdle = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
|
||||
var eng2OilHiTempSuccess = warning.new(msg: " •IF UNSUCCESSFUL: ", colour: "w"),
|
||||
var eng2OilHiTempMaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
|
||||
|
||||
# ENG 2 SHUT DOWN
|
||||
var eng2ShutDown = warning.new(msg: "ENG 2 SHUT DOWN ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var eng2ShutDownPack1 = warning.new(msg: " -PACK 1.............OFF", colour: "c"),
|
||||
var eng2ShutDownPack = warning.new(msg: " -PACK 2.............OFF", colour: "c"),
|
||||
var eng2ShutDownXBleed = warning.new(msg: " -X BLEED...........OPEN", colour: "c"),
|
||||
var eng2ShutDownModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
|
||||
var eng2ShutDownFuelLeak = warning.new(msg: " •IF NO FUEL LEAK :", colour: "w"),
|
||||
var eng2ShutDownImbalance = warning.new(msg: " -IMBALANCE......MONITOR", colour: "c"),
|
||||
var eng2ShutDownTCAS = warning.new(msg: " -TCAS MODE SEL.......TA", colour: "c"),
|
||||
var eng2ShutDownBuffet = warning.new(msg: " •IF BUFFET : ", colour: "w"),
|
||||
var eng2ShutDownSpeed = warning.new(msg: " MAX SPEED...........240", colour: "c"),
|
||||
var eng2ShutDownXBleedS = warning.new(msg: " -X BLEED...........SHUT", colour: "c"),
|
||||
var eng2ShutDownWingAI = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
|
||||
var eng2ShutDownIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
|
||||
|
||||
# SAT ABOVE FLEX TEMP
|
||||
var satAbvFlexTemp = warning.new(msg: "ENG SAT ABOVE FLEX TEMP", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var satAbvFlexTempCheck = warning.new(msg: " -T.O DATA.........CHECK", colour: "c"),
|
||||
|
||||
# B RSVR LO LVL
|
||||
var hydBSysLoLvl = warning.new(msg: "HYD B RSVR LO LVL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var hydBSysLoLvlPump = warning.new(msg: " -BLUE ELEC PUMP.....OFF ", colour: "c"),
|
||||
|
||||
# G RSVR LO LVL
|
||||
var hydGSysLoLvl = warning.new(msg: "HYD G RSVR LO LVL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var hydGSysLoLvlPtu = warning.new(msg: " -PTU................OFF ", colour: "c"),
|
||||
var hydGSysLoLvlPump = warning.new(msg: " -GREEN ENG 1 PUMP...OFF ", colour: "c"),
|
||||
|
||||
# Y RSVR LO LVL
|
||||
var hydYSysLoLvl = warning.new(msg: "HYD Y RSVR LO LVL ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var hydYSysLoLvlPtu = warning.new(msg: " -PTU................OFF ", colour: "c"),
|
||||
var hydYSysLoLvlPump = warning.new(msg: " -YELLOW ENG 2 PUMP..OFF ", colour: "c"),
|
||||
var hydYSysLoLvlElec = warning.new(msg: " -YELLOW ELEC PUMP...OFF ", colour: "c"),
|
||||
|
||||
# B SYS LO PR
|
||||
var hydBSysLoPr = warning.new(msg: "HYD B SYS LO PR ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var hydBSysLoPrFuel = warning.new(msg: " FUEL CONSUMPT INCRSD ", colour: "c"),
|
||||
var hydBSysLoPrFmsPred = warning.new(msg: " FMS PRED UNRELIABLE ", colour: "c"),
|
||||
|
||||
# G SYS LO PR
|
||||
var hydGSysLoPr = warning.new(msg: "HYD G SYS LO PR ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var hydGSysLoPrFuel = warning.new(msg: " FUEL CONSUMPT INCRSD ", colour: "c"),
|
||||
var hydGSysLoPrFmsPred = warning.new(msg: " FMS PRED UNRELIABLE ", colour: "c"),
|
||||
var hydGSysLoPrEngPump = warning.new(msg: " G ENG 1 PUMP LO PR ", colour: "a"),
|
||||
|
||||
# Y SYS LO PR
|
||||
var hydYSysLoPr = warning.new(msg: "HYD Y SYS LO PR ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var hydYSysLoPrAccu = warning.new(msg: " BRK Y ACCU PR MONITOR ", colour: "c"),
|
||||
var hydYSysLoPrFuel = warning.new(msg: " FUEL CONSUMPT INCRSD ", colour: "c"),
|
||||
var hydYSysLoPrFmsPred = warning.new(msg: " FMS PRED UNRELIABLE ", colour: "c"),
|
||||
var hydYSysLoPrEngPump = warning.new(msg: " Y ENG 2 PUMP LO PR ", colour: "a"),
|
||||
|
||||
# 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"),
|
||||
var dcEmerconfigFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
|
||||
|
||||
# DC BUS 1 OR 2 FAULT
|
||||
var dcBus12Fault = warning.new(msg: "ELEC DC BUS 1+2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var dcBus12FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
|
||||
var dcBus12FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
|
||||
var dcBus12FaultBaroRef = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
|
||||
var dcBus12FaultFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
|
||||
var dcBus12FaultPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
|
||||
var dcBus12FaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
|
||||
var dcBus12FaultBrking = warning.new(msg: " MAX BRK........1000 PSI", colour: "c"),
|
||||
|
||||
|
@ -216,21 +404,30 @@ var warnings = std.Vector.new([
|
|||
var DcEssBusFaultRadio = warning.new(msg: " -VHF 2 OR 3.........USE", colour: "c"),
|
||||
var DcEssBusFaultRadio2 = warning.new(msg: " -AUDIO SWTG......SELECT", colour: "c"),
|
||||
var DcEssBusFaultBaro = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
|
||||
var DcEssBusFaultGPWS = warning.new(msg: " -GPWS...............OFF", colour: "c"),
|
||||
var DcEssBusFaultGear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
|
||||
var DcEssBusFaultGPWS = warning.new(msg: " -GPWS SYS...........OFF", colour: "c"),
|
||||
var DcEssBusFaultFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
|
||||
var DcEssBusFaultPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
|
||||
var DcEssBusFaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
|
||||
|
||||
# AC BUS 2 FAULT
|
||||
var AcBus2Fault = warning.new(msg: "ELEC AC BUS 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var AcBus2FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
|
||||
var AcBus2FaultAtc = warning.new(msg: " -ATC..............SYS 1", colour: "c"),
|
||||
|
||||
# DC BUS 1 FAULT
|
||||
var dcBus1Fault = warning.new(msg: "ELEC DC BUS 1 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var dcBus1FaultBlower = warning.new(msg: " -BLOWER............OVRD", colour: "c"),
|
||||
var dcBus1FaultExtract = warning.new(msg: " -EXTRACT...........OVRD", colour: "c"),
|
||||
var dcBus1FaultIcing = warning.new(msg: " AVOID ICING CONDITIONS", colour: "c"),
|
||||
|
||||
# DC BUS 2 FAULT
|
||||
var dcBus2Fault = warning.new(msg: "ELEC DC BUS 2 FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var dcBus2FaultAirData = warning.new(msg: " -AIR DATA SWTG......F/O", colour: "c"),
|
||||
var dcBus2FaultBaro = warning.new(msg: " -BARO REF.........CHECK", colour: "c"),
|
||||
var dcBus2FaultGear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
|
||||
var dcBus2FaultFuel = warning.new(msg: " FUEL CONSUMPT INCRSD", colour: "c"),
|
||||
var dcBus2FaultPredict = warning.new(msg: " FMS PRED UNRELIABLE", colour: "c"),
|
||||
|
||||
# DC BAT BUS FAULT
|
||||
var dcBusBatFault = warning.new(msg: "ELEC DC BAT BUS FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
@ -244,23 +441,39 @@ var warnings = std.Vector.new([
|
|||
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"),
|
||||
|
||||
# IDG 1 DISCONNECTED
|
||||
var idg1Disc = warning.new(msg: "ELEC IDG 1 DISCONNECTED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
||||
# IDG 2 DISCONNECTED
|
||||
var idg2Disc = warning.new(msg: "ELEC IDG 2 DISCONNECTED", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
||||
# 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 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"),
|
||||
var gen1faultGen3 = warning.new(msg: " -GEN 1..............OFF", colour: "c"),
|
||||
|
||||
# ESS TR FAULT
|
||||
var essTRFault = warning.new(msg: "ELEC ESS TR FAULT ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
||||
# 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 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"),
|
||||
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 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"),
|
||||
var apuGenfaultGen3 = warning.new(msg: " -APU GEN............OFF", colour: "c"),
|
||||
|
||||
# GEN OFF
|
||||
var gen1Off = warning.new(msg: "ELEC GEN 1 OFF ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var gen2Off = warning.new(msg: "ELEC GEN 2 OFF ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
||||
# APU GEN FAULT
|
||||
var acEssBusAltn = warning.new(msg: "ELEC AC ESS BUS ALTN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
||||
# L ELEV FAULT
|
||||
var lElevFault = warning.new(msg: "F/CTL L ELEV FAULT", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
@ -272,6 +485,9 @@ var warnings = std.Vector.new([
|
|||
var rElevFaultCare = warning.new(msg: " MANEUVER WITH CARE", colour: "c"),
|
||||
var rElevFaultPitch = warning.new(msg: " FOR GA:MAX PITCH 15 DEG", colour: "c"),
|
||||
|
||||
# F/CTL SPD BRK STILL OUT
|
||||
var fctlSpdBrkStillOut = warning.new(msg: "F/CTL SPD BRK STILL OUT ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
|
||||
# DIRECT LAW
|
||||
var directLaw = warning.new(msg: "F/CTL DIRECT LAW", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var directLawProt = warning.new(msg: " (PROT LOST)", colour: "a"),
|
||||
|
@ -342,6 +558,24 @@ var warnings = std.Vector.new([
|
|||
var fcuFault2 = warning.new(msg: "AUTO FLT FCU 2 FAULT", colour: "a", isMainMsg: 1),
|
||||
var fcuFault2Baro = warning.new(msg: " -BARO REF.......X CHECK", colour: "c"),
|
||||
|
||||
# FUEL
|
||||
var wingLoLvl = warning.new(msg: "FUEL L+R WING TK LO LVL", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var wingLoLvlManMode = warning.new(msg: " -FUEL MODE SEL......MAN", colour: "c"),
|
||||
var wingLoLvlPumpL1 = warning.new(msg: " -L TK PUMP 1.........ON", colour: "c"),
|
||||
var wingLoLvlPumpL2 = warning.new(msg: " -L TK PUMP 2.........ON", colour: "c"),
|
||||
var wingLoLvlPumpC1 = warning.new(msg: " -CTR TK PUMP 1.......ON", colour: "c"),
|
||||
var wingLoLvlPumpR1 = warning.new(msg: " -R TK PUMP 1.........ON", colour: "c"),
|
||||
var wingLoLvlPumpR2 = warning.new(msg: " -R TK PUMP 2.........ON", colour: "c"),
|
||||
var wingLoLvlPumpC2 = warning.new(msg: " -CTR TK PUMP 2.......ON", colour: "c"),
|
||||
var wingLoLvlLeak = warning.new(msg: " •IF NO FUEL LEAK: ", colour: "w"),
|
||||
var wingLoLvlXFeed = warning.new(msg: " -FUEL X FEED.........ON", colour: "c"),
|
||||
var wingLoLvlGrav = warning.new(msg: " •IF GRVTY FEED: ", colour: "w"),
|
||||
var wingLoLvlXFeedOff = warning.new(msg: " -FUEL X FEED........OFF", colour: "c"),
|
||||
|
||||
var ctrPumpsOff = warning.new(msg: "FUEL CTR TK PUMPS OFF ", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var ctrPumpsOffPump1 = warning.new(msg: " -CTR TK PUMP 1.......ON", colour: "c"),
|
||||
var ctrPumpsOffPump2 = warning.new(msg: " -CTR TK PUMP 2.......ON", colour: "c"),
|
||||
|
||||
# APU shutdown
|
||||
var apuEmerShutdown = warning.new(msg: "APU EMER SHUT DOWN", colour: "a", aural: 1, light: 1, isMainMsg: 1),
|
||||
var apuEmerShutdownMast = warning.new(msg: " -MASTER SW..........OFF", colour: "c"),
|
||||
|
@ -362,8 +596,8 @@ var warnings = std.Vector.new([
|
|||
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 xBleedFaultWAI = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
|
||||
var xBleedFaultICE = 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),
|
||||
|
@ -525,9 +759,11 @@ var leftmemos = std.Vector.new([
|
|||
var strobe_lt_off = warning.new(msg: "STROBE LT OFF" ),
|
||||
var outr_tk_fuel_xfrd = warning.new(msg: "OUTR TK FUEL XFRD" ),
|
||||
var fob_3T = warning.new(msg: "FOB BELOW 3T" ),
|
||||
var fob_66L = warning.new(msg: "FOB BELOW 6600LBS" ),
|
||||
var gpws_flap_mode_off = warning.new(msg: "GPWS FLAP MODE OFF" ),
|
||||
var atc_datalink_stby = warning.new(msg: "ATC DATALINK STBY" ), # Not yet implemented
|
||||
var company_datalink_stby = warning.new(msg: "COMPANY DATALINK STBY"), # Not yet implemented
|
||||
var acars_stby = warning.new(msg: "ACARS STBY" ), # Not yet implemented
|
||||
]);
|
||||
|
||||
# Right E/WD
|
||||
|
|
|
@ -66,7 +66,7 @@ var FCUController = {
|
|||
me.FCU2 = FCU.new(systems.ELEC.Bus.dc2);
|
||||
me._init = 1;
|
||||
},
|
||||
loop: func() {
|
||||
loop: func(notification) {
|
||||
if (me._init == 0) { return; }
|
||||
|
||||
# Update FCU Power
|
||||
|
@ -82,11 +82,11 @@ var FCUController = {
|
|||
}
|
||||
|
||||
foreach (var update_item; me.update_items) {
|
||||
update_item.update(nil);
|
||||
update_item.update(notification);
|
||||
}
|
||||
},
|
||||
update_items: [
|
||||
props.UpdateManager.FromPropertyHashList(["/it-autoflight/output/fd1","/it-autoflight/output/fd2", "/it-autoflight/output/ap1", "/it-autoflight/output/ap2"], 1, func(notification)
|
||||
props.UpdateManager.FromPropertyHashList(["/it-autoflight/output/fd1","/it-autoflight/output/fd2", "/it-autoflight/output/ap1", "/it-autoflight/output/ap2"], nil, func(notification)
|
||||
{
|
||||
updateActiveFMGC();
|
||||
}
|
||||
|
|
|
@ -428,13 +428,14 @@ var flightPlanController = {
|
|||
# flag: is it a navaids DUPLICATENAMES page or not?
|
||||
# plan: plan
|
||||
# flagPBD: do we return back to PBD handler or to default waypoint handler?
|
||||
# flagPROG: do we return back to PROG handler or to default waypoint handler (only if flagPBD false)
|
||||
|
||||
createDuplicateNames: func(ghostContainer, index, flag, plan, flagPBD = 0, bearing = -999, distance = -99) {
|
||||
createDuplicateNames: func(ghostContainer, index, flag, plan, flagPBD = 0, bearing = -999, distance = -99, flagPROG = 0) {
|
||||
if (canvas_mcdu.myDuplicate[plan] != nil) {
|
||||
canvas_mcdu.myDuplicate[plan].del();
|
||||
}
|
||||
canvas_mcdu.myDuplicate[plan] = nil;
|
||||
canvas_mcdu.myDuplicate[plan] = mcdu.duplicateNamesPage.new(ghostContainer, index, flag, plan, flagPBD, bearing, distance);
|
||||
canvas_mcdu.myDuplicate[plan] = mcdu.duplicateNamesPage.new(ghostContainer, index, flag, plan, flagPBD, bearing, distance, flagPROG);
|
||||
setprop("MCDU[" ~ plan ~ "]/page", "DUPLICATENAMES");
|
||||
},
|
||||
|
||||
|
@ -639,9 +640,9 @@ var flightPlanController = {
|
|||
}
|
||||
} else {
|
||||
if (type == "navaid") {
|
||||
me.createDuplicateNames(wpGhostContainer, index, 1, plan, 1, num(textSplit[1]), num(textSplit[2]));
|
||||
me.createDuplicateNames(wpGhostContainer, index, 1, plan, 1, num(textSplit[1]), num(textSplit[2]), 0);
|
||||
} else {
|
||||
me.createDuplicateNames(wpGhostContainer, index, 0, plan, 1, num(textSplit[1]), num(textSplit[2]));
|
||||
me.createDuplicateNames(wpGhostContainer, index, 0, plan, 1, num(textSplit[1]), num(textSplit[2]), 0);
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
|
|
@ -170,19 +170,18 @@ var update_items = [
|
|||
|
||||
var systemsLoop = func(notification) {
|
||||
if (!systemsInitialized) { return; }
|
||||
systems.ELEC.loop();
|
||||
systems.PNEU.loop();
|
||||
systems.HYD.loop();
|
||||
systems.ADIRS.loop();
|
||||
systems.PNEU.loop(notification);
|
||||
systems.ADIRS.loop(notification);
|
||||
systems.BrakeSys.update(notification);
|
||||
systems.HFLoop(notification);
|
||||
systems.APUController.loop();
|
||||
systems.BrakeSys.update();
|
||||
fadec.FADEC.loop();
|
||||
rmp.rmpUpdate();
|
||||
fcu.FCUController.loop();
|
||||
fcu.FCUController.loop(notification);
|
||||
atc.Transponders.vector[atc.transponderPanel.atcSel - 1].update(notification);
|
||||
dmc.DMController.loop();
|
||||
atsu.ATSU.loop();
|
||||
libraries.BUTTONS.update();
|
||||
systems.HFLoop(notification);
|
||||
|
||||
if ((notification.engine1State == 2 or notification.engine1State == 3) and collectorTankL.getValue() < 1) {
|
||||
systems.cutoff_one();
|
||||
|
|
|
@ -174,6 +174,13 @@ 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")],
|
||||
},
|
||||
},
|
||||
GPS: {
|
||||
altitude: props.globals.getNode("/instrumentation/gps/indicated-altitude-ft"),
|
||||
latitude: props.globals.getNode("/instrumentation/gps/indicated-latitude-deg"),
|
||||
longitude: props.globals.getNode("/instrumentation/gps/indicated-longitude-deg"),
|
||||
trackMag: props.globals.getNode("/instrumentation/gps/indicated-track-magnetic-deg"),
|
||||
gs: props.globals.getNode("/instrumentation/gps/indicated-ground-speed-kt"),
|
||||
},
|
||||
MKVII: {
|
||||
Inputs: {
|
||||
Discretes: {
|
||||
|
@ -246,6 +253,7 @@ var Sim = {
|
|||
Time: {
|
||||
deltaRealtimeSec: props.globals.getNode("/sim/time/delta-realtime-sec"),
|
||||
elapsedSec: props.globals.getNode("/sim/time/elapsed-sec"),
|
||||
gmtString: props.globals.getNode("/sim/time/gmt-string"),
|
||||
UTC: {
|
||||
day: props.globals.getNode("/sim/time/utc/day"),
|
||||
month: props.globals.getNode("/sim/time/utc/month"),
|
||||
|
|
|
@ -74,29 +74,44 @@ var closestAirportPage = {
|
|||
me._range += 250;
|
||||
}
|
||||
}
|
||||
|
||||
me.L1 = [me.airports[0].id, nil, "grn"];
|
||||
me.R1 = ["----", "UTC ", "grn"];
|
||||
me.L2 = [me.airports[1].id, nil, "grn"];
|
||||
me.R2 = ["----", nil, "grn"];
|
||||
me.L3 = [me.airports[2].id, nil, "grn"];
|
||||
me.R3 = ["----", nil, "grn"];
|
||||
me.L4 = [me.airports[3].id, nil, "grn"];
|
||||
me.R4 = ["----", nil, "grn"];
|
||||
if (size(me.airports) >= 1) {
|
||||
me.L1 = [me.airports[0].id, nil, "grn"];
|
||||
me.R1 = ["----", "UTC ", "grn"];
|
||||
}
|
||||
if (size(me.airports) >= 2) {
|
||||
me.L2 = [me.airports[1].id, nil, "grn"];
|
||||
me.R2 = ["----", nil, "grn"];
|
||||
}
|
||||
if (size(me.airports) >= 3) {
|
||||
me.L3 = [me.airports[2].id, nil, "grn"];
|
||||
me.R3 = ["----", nil, "grn"];
|
||||
}
|
||||
if (size(me.airports) >= 4) {
|
||||
me.L4 = [me.airports[3].id, nil, "grn"];
|
||||
me.R4 = ["----", nil, "grn"];
|
||||
}
|
||||
me.listPopulated = 1;
|
||||
canvas_mcdu.pageSwitch[me.computer].setBoolValue(0);
|
||||
},
|
||||
updateBrgDist: func() {
|
||||
if (!me.listPopulated) { return; }
|
||||
me.cdVector[0] = courseAndDistance(me.airports[0]);
|
||||
me.cdVector[1] = courseAndDistance(me.airports[1]);
|
||||
me.cdVector[2] = courseAndDistance(me.airports[2]);
|
||||
me.cdVector[3] = courseAndDistance(me.airports[3]);
|
||||
var magvarLocal = magvar();
|
||||
me.C1 = [math.round(me.cdVector[0][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[0][1]), " BRG DIST", "grn"];
|
||||
me.C2 = [math.round(me.cdVector[1][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[1][1]) , nil, "grn"];
|
||||
me.C3 = [math.round(me.cdVector[2][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[2][1]), nil, "grn"];
|
||||
me.C4 = [math.round(me.cdVector[3][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[3][1]), nil, "grn"];
|
||||
if (size(me.airports) >= 1) {
|
||||
me.cdVector[0] = courseAndDistance(me.airports[0]);
|
||||
me.C1 = [math.round(me.cdVector[0][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[0][1]), " BRG DIST", "grn"];
|
||||
}
|
||||
if (size(me.airports) >= 2) {
|
||||
me.cdVector[1] = courseAndDistance(me.airports[1]);
|
||||
me.C2 = [math.round(me.cdVector[1][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[1][1]) , nil, "grn"];
|
||||
}
|
||||
if (size(me.airports) >= 3) {
|
||||
me.cdVector[2] = courseAndDistance(me.airports[2]);
|
||||
me.C3 = [math.round(me.cdVector[2][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[2][1]), nil, "grn"];
|
||||
}
|
||||
if (size(me.airports) >= 4) {
|
||||
me.cdVector[3] = courseAndDistance(me.airports[3]);
|
||||
me.C4 = [math.round(me.cdVector[3][0] - magvarLocal) ~ " " ~ math.round(me.cdVector[3][1]), nil, "grn"];
|
||||
}
|
||||
if (me.manAirport != nil) {
|
||||
me.C5 = [math.round(courseAndDistance(me.manAirport)[0] - magvarLocal) ~ " " ~ math.round(courseAndDistance(me.manAirport)[1]), nil, "grn"];
|
||||
}
|
||||
|
|
|
@ -5,19 +5,18 @@
|
|||
var dataInput = func(key, i) {
|
||||
if (key == "L1") {
|
||||
setprop("MCDU[" ~ i ~ "]/page", "POSMON");
|
||||
}
|
||||
if (key == "L2") {
|
||||
} elsif (key == "L2") {
|
||||
setprop("MCDU[" ~ i ~ "]/page", "IRSMON");
|
||||
}
|
||||
if (key == "L5") {
|
||||
} elsif (key == "L3") {
|
||||
setprop("MCDU[" ~ i ~ "]/page", "GPSMON");
|
||||
} elsif (key == "L5") {
|
||||
if (canvas_mcdu.myClosestAirport[i] != nil) {
|
||||
canvas_mcdu.myClosestAirport[i].del();
|
||||
}
|
||||
canvas_mcdu.myClosestAirport[i] = nil;
|
||||
canvas_mcdu.myClosestAirport[i] = closestAirportPage.new(i);
|
||||
setprop("MCDU[" ~ i ~ "]/page", "CLOSESTAIRPORT");
|
||||
}
|
||||
if (key == "R5") {
|
||||
} elsif (key == "R5") {
|
||||
setprop("MCDU[" ~ i ~ "]/page", "PRINTFUNC");
|
||||
}
|
||||
}
|
||||
|
@ -25,23 +24,17 @@ var dataInput = func(key, i) {
|
|||
var printInput = func(key, i) {
|
||||
if (key == "L1") {
|
||||
setprop("FMGC/print/mcdu/page1/L1auto", 1);
|
||||
}
|
||||
if (key == "L2") {
|
||||
} elsif (key == "L2") {
|
||||
setprop("FMGC/print/mcdu/page1/L2auto", 1);
|
||||
}
|
||||
if (key == "L3") {
|
||||
} elsif (key == "L3") {
|
||||
setprop("FMGC/print/mcdu/page1/L3auto", 1);
|
||||
}
|
||||
if (key == "L5") {
|
||||
} elsif (key == "L5") {
|
||||
setprop("MCDU[" ~ i ~ "]/page", "DATA");
|
||||
}
|
||||
if (key == "R1") {
|
||||
} elsif (key == "R1") {
|
||||
setprop("FMGC/print/mcdu/page1/R1req", 1);
|
||||
}
|
||||
if (key == "R2") {
|
||||
} elsif (key == "R2") {
|
||||
setprop("FMGC/print/mcdu/page1/R2req", 1);
|
||||
}
|
||||
if (key == "R3") {
|
||||
} elsif (key == "R3") {
|
||||
setprop("FMGC/print/mcdu/page1/R3req", 1);
|
||||
}
|
||||
}
|
||||
|
@ -49,29 +42,21 @@ var printInput = func(key, i) {
|
|||
var printInput2 = func(key, i) {
|
||||
if (key == "L1") {
|
||||
setprop("FMGC/print/mcdu/page2/L1auto", 1);
|
||||
}
|
||||
if (key == "L2") {
|
||||
} elsif (key == "L2") {
|
||||
setprop("FMGC/print/mcdu/page2/L2auto", 1);
|
||||
}
|
||||
if (key == "L3") {
|
||||
} elsif (key == "L3") {
|
||||
setprop("FMGC/print/mcdu/page2/L3auto", 1);
|
||||
}
|
||||
if (key == "L4") {
|
||||
} elsif (key == "L4") {
|
||||
setprop("FMGC/print/mcdu/page2/L4auto", 1);
|
||||
}
|
||||
if (key == "L6") {
|
||||
} elsif (key == "L6") {
|
||||
setprop("MCDU[" ~ i ~ "]/page", "DATA");
|
||||
}
|
||||
if (key == "R1") {
|
||||
} elsif (key == "R1") {
|
||||
setprop("FMGC/print/mcdu/page2/R1req", 1);
|
||||
}
|
||||
if (key == "R2") {
|
||||
} elsif (key == "R2") {
|
||||
setprop("FMGC/print/mcdu/page2/R2req", 1);
|
||||
}
|
||||
if (key == "R3") {
|
||||
} elsif (key == "R3") {
|
||||
setprop("FMGC/print/mcdu/page2/R3req", 1);
|
||||
}
|
||||
if (key == "R4") {
|
||||
} elsif (key == "R4") {
|
||||
setprop("FMGC/print/mcdu/page2/R4req", 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ var duplicateNamesPage = {
|
|||
enableScroll: 0,
|
||||
scroll: 0,
|
||||
distances: nil,
|
||||
new: func(vector, index, type, computer, flagPBD = 0, pbdBrg = -999, pbdDist = -99) {
|
||||
new: func(vector, index, type, computer, flagPBD = 0, pbdBrg = -999, pbdDist = -99, flagProg = 0) {
|
||||
var dn = {parents:[duplicateNamesPage]};
|
||||
dn.vector = vector;
|
||||
dn.index = index;
|
||||
|
@ -37,6 +37,7 @@ var duplicateNamesPage = {
|
|||
dn.bearing = pbdBrg;
|
||||
dn.distance = pbdDist;
|
||||
dn.computer = computer;
|
||||
dn.flagPROG = flagProg;
|
||||
dn._setupPageWithData();
|
||||
dn.distances = [];
|
||||
return dn;
|
||||
|
@ -134,7 +135,7 @@ var duplicateNamesPage = {
|
|||
},
|
||||
pushButtonLeft: func(indexSelect) {
|
||||
if (!dirToFlag) {
|
||||
if (!me.flagPBD) {
|
||||
if (!me.flagPBD and !me.flagPROG) {
|
||||
if (size(me.vector[0].id) == 5) {
|
||||
fmgc.flightPlanController.insertFix(me.vector[0].id, me.index, me.computer, 1, indexSelect - 1);
|
||||
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
|
||||
|
@ -145,9 +146,16 @@ var duplicateNamesPage = {
|
|||
fmgc.flightPlanController.insertNavaid(me.vector[0].id, me.index, me.computer, 1, indexSelect - 1);
|
||||
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
|
||||
}
|
||||
} else {
|
||||
} elsif (me.flagPBD) {
|
||||
fmgc.flightPlanController.getWPforPBD(me.vector[0].id ~ "/" ~ me.bearing ~ "/" ~ me.distance, me.index, me.computer, 1, indexSelect - 1);
|
||||
setprop("MCDU[" ~ me.computer ~ "]/page", "F-PLNA");
|
||||
} else {
|
||||
if (me.type == 0) {
|
||||
mcdu.bearingDistances[me.computer].newPointResult(me.vector, 1, indexSelect - 1);
|
||||
} else {
|
||||
mcdu.bearingDistances[me.computer].newPointNavaid(me.vector, 1, indexSelect - 1);
|
||||
}
|
||||
pagebutton("prog",me.computer);
|
||||
}
|
||||
} else {
|
||||
canvas_mcdu.myDirTo[me.computer].fieldL1(me.vector[0].id, 1, indexSelect - 1);
|
||||
|
|
|
@ -128,7 +128,7 @@ var doorR4_pos = props.globals.getNode("/sim/model/door-positions/doorr4/positio
|
|||
|
||||
# Detect OFF without IN
|
||||
var lastgs0 = 0;
|
||||
var lastgear0 = 0;
|
||||
#var lastgear0 = 0;
|
||||
var lastgsrestart = 0;
|
||||
|
||||
# Check for A/C state change - advice me for a better method, please :/
|
||||
|
@ -145,7 +145,6 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
|
|||
if (gs > 9) { # imho - it's useful few speed tollerance, 10kts min speed on taxiways - CHECKME - better with pushback detection?
|
||||
FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState));
|
||||
expectedOOOIState = 1;
|
||||
lastgear0 = 0;
|
||||
}
|
||||
}
|
||||
} else if (expectedOOOIState == 1) { # OFF
|
||||
|
@ -163,7 +162,7 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
|
|||
if (gear0 and (phase == 7 or phase == 0)) { #done or preflight
|
||||
FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState));
|
||||
expectedOOOIState = 3;
|
||||
lastgear0 = 0;
|
||||
lastgs0 = 0;
|
||||
lastgsrestart = 0;
|
||||
}
|
||||
} else if (expectedOOOIState == 3) { # IN
|
||||
|
@ -178,9 +177,9 @@ var waitingOOOIChange = maketimer(1, func(){ # 1sec precision
|
|||
}
|
||||
}
|
||||
else if (!gear0) { # OFF without IN -> TO without stop and opening doors
|
||||
if (lastgear0) FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState,lastgear0)); # IN (estimated)
|
||||
if (lastgs0>0) FlightLogDatabase.addReport(OOOIReport.new(expectedOOOIState,lastgs0)); # IN (estimated)
|
||||
FlightLogDatabase.addPage();
|
||||
if (lastgsrestart) FlightLogDatabase.addReport(OOOIReport.new(0,lastgsrestart)); # OUT (estimated)
|
||||
if (lastgsrestart>0) FlightLogDatabase.addReport(OOOIReport.new(0,lastgsrestart)); # OUT (estimated)
|
||||
expectedOOOIState = 1; # go on to OFF state
|
||||
}
|
||||
else if (gs > 9 and lastgsrestart == 0) { # try to detect OFF without IN
|
||||
|
|
|
@ -534,6 +534,8 @@ var lskbutton = func(btn, i) {
|
|||
statusInput("L3",i);
|
||||
} else if (page == "RADNAV") {
|
||||
radnavInput("L3",i);
|
||||
} else if (page == "DATA") {
|
||||
dataInput("L3",i);
|
||||
} else if (page == "PRINTFUNC") {
|
||||
printInput("L3",i);
|
||||
} else if (page == "PRINTFUNC2") {
|
||||
|
@ -853,7 +855,13 @@ var lskbutton = func(btn, i) {
|
|||
} else if (page == "F-PLNA" or page == "F-PLNB") {
|
||||
canvas_mcdu.myFpln[i].pushButtonLeft(6);
|
||||
} else if (page == "LATREV" or page == "VERTREV" or page == "DUPLICATENAMES") {
|
||||
pageNode[i].setValue("F-PLNA");
|
||||
if (page != "DUPLICATENAMES") {
|
||||
pageNode[i].setValue("F-PLNA");
|
||||
} else {
|
||||
if (canvas_mcdu.myDuplicate[i] != nil and canvas_mcdu.myDuplicate[i].flagPROG) {
|
||||
pagebutton("prog",i);
|
||||
}
|
||||
}
|
||||
} else if (page == "ARRIVAL") {
|
||||
canvas_mcdu.myArrival[i].arrPushbuttonLeft(6);
|
||||
} else if (page == "DEPARTURE" or page == "HOLD" or page == "AIRWAYS") {
|
||||
|
@ -1123,6 +1131,8 @@ var rskbutton = func(btn, i) {
|
|||
}
|
||||
}
|
||||
pageNode[i].setValue("WINDCRZ");
|
||||
} else if (find("PROG",page) != -1) {
|
||||
progGENInput("R4",i);
|
||||
} else if (page == "PERFTO") {
|
||||
perfTOInput("R4",i);
|
||||
} else if (page == "PERFAPPR") {
|
||||
|
|
284
Nasal/MCDU/PROG.nas
Normal file
284
Nasal/MCDU/PROG.nas
Normal file
|
@ -0,0 +1,284 @@
|
|||
# Copyright (c) 2020 Matthew Maring (mattmaring)
|
||||
|
||||
var altSet = props.globals.getNode("it-autoflight/input/alt", 1);
|
||||
var brgDistResult = nil;
|
||||
|
||||
var progGENInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "R4") {
|
||||
if (scratchpad == "CLR") {
|
||||
bearingDistances[i].selectedPoint = nil;
|
||||
bearingDistances[i].displayID = nil;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
brgDistResult = bearingDistances[i].newPoint(mcdu_scratchpad.scratchpads[i].scratchpad);
|
||||
if (brgDistResult != 1) {
|
||||
mcdu_message(i, "NOT IN DATA BASE");
|
||||
} else {
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var progTOInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100 and fmgc.FMGCInternal.crzSet) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var progCLBInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var progCRZInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var progDESInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var _result = [nil, nil];
|
||||
var _courseAndDistance = [nil, nil];
|
||||
var bearingDistanceInstance = {
|
||||
new: func(id) {
|
||||
var bd = {parents: [bearingDistanceInstance]};
|
||||
bd.id = id;
|
||||
bd.bearing = 360;
|
||||
bd.distance = 0;
|
||||
bd.selectedPoint = nil;
|
||||
bd.displayID = nil;
|
||||
return bd;
|
||||
},
|
||||
newPointResult: func(result, duplicateNames = 0, duplicateNamesIndex = nil) {
|
||||
if (duplicateNames != 0) {
|
||||
me.selectedPoint = result[duplicateNamesIndex];
|
||||
me.displayID = result[duplicateNamesIndex].id;
|
||||
} elsif (size(result) > 1) {
|
||||
if (canvas_mcdu.myDuplicate[me.id] != nil) {
|
||||
canvas_mcdu.myDuplicate[me.id].del();
|
||||
}
|
||||
canvas_mcdu.myDuplicate[me.id] = nil;
|
||||
canvas_mcdu.myDuplicate[me.id] = mcdu.duplicateNamesPage.new(result, 0, 0, me.id, 0, -999, -999, 1);
|
||||
setprop("MCDU[" ~ me.id ~ "]/page", "DUPLICATENAMES");
|
||||
} else {
|
||||
me.selectedPoint = result[0];
|
||||
me.displayID = result[0].id;
|
||||
}
|
||||
return 1;
|
||||
},
|
||||
newPointNavaid: func(result, duplicateNames = 0, duplicateNamesIndex = nil) {
|
||||
if (duplicateNames != 0) {
|
||||
me.selectedPoint = result[duplicateNamesIndex];
|
||||
me.displayID = result[duplicateNamesIndex].id;
|
||||
} elsif (size(result) > 1) {
|
||||
if (canvas_mcdu.myDuplicate[me.id] != nil) {
|
||||
canvas_mcdu.myDuplicate[me.id].del();
|
||||
}
|
||||
canvas_mcdu.myDuplicate[me.id] = nil;
|
||||
canvas_mcdu.myDuplicate[me.id] = mcdu.duplicateNamesPage.new(result, 0, 1, me.id, 0, -999, -999, 1);
|
||||
setprop("MCDU[" ~ me.id ~ "]/page", "DUPLICATENAMES");
|
||||
} else {
|
||||
me.selectedPoint = result[0];
|
||||
me.displayID = result[0].id;
|
||||
print("YES");
|
||||
}
|
||||
return 1;
|
||||
},
|
||||
newPointRWY: func(result,ID) {
|
||||
if (size(result) > 1) {
|
||||
#spawnPAGE
|
||||
} else {
|
||||
var string = split(left(ID,4),ID)[1];
|
||||
if (find("C",string) != -1 or find("L",string) != -1 or find("R",string) != -1) {
|
||||
if (size(string) == 2) {
|
||||
string = "0" ~ string;
|
||||
}
|
||||
} else {
|
||||
if (size(string) == 1) {
|
||||
string = "0" ~ string;
|
||||
}
|
||||
}
|
||||
|
||||
if (contains(result[0].runways,string)) {
|
||||
me.selectedPoint = {lat: result[0].runways[string].lat, lon: result[0].runways[string].lon};
|
||||
me.displayID = left(ID,4) ~ string;
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
},
|
||||
newPointLatLon: func(result) {
|
||||
return 0;
|
||||
},
|
||||
newPoint: func(id) {
|
||||
_result[me.id] = fmgc.WaypointDatabase.getWP(id);
|
||||
if (_result[me.id] != nil) {
|
||||
me.selectedPoint = _result[me.id];
|
||||
me.displayID = _result[me.id].id;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (size(id) >= 2 and size(id) <= 3) {
|
||||
_result[me.id] = findNavaidsByID(id);
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointNavaid(_result[me.id]);
|
||||
} else {
|
||||
_result[me.id] = findAirportsByICAO(id); # consider 3 letter ICAOs
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointResult(_result[me.id]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
} elsif (size(id) == 4) {
|
||||
_result[me.id] = findAirportsByICAO(id);
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointResult(_result[me.id]);
|
||||
} else {
|
||||
_result[me.id] = findFixesByID(id);
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointResult(_result[me.id]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
} elsif (size(id) >= 5 and size(id) <= 7) {
|
||||
_result[me.id] = findFixesByID(id);
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointResult(_result[me.id]);
|
||||
} else {
|
||||
_result[me.id] = findAirportsByICAO(left(id,4));
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointRWY(_result[me.id],id);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
} elsif (size(id) >= 12) {
|
||||
_result[me.id] = fetchLatLon(id);
|
||||
if (size(_result[me.id]) != 0) {
|
||||
return me.newPointLatLon(_result[me.id]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
update: func() {
|
||||
if (me.selectedPoint == nil) {
|
||||
return;
|
||||
}
|
||||
if (find("PROG",canvas_mcdu.pageProp[me.id].getValue()) == -1) {
|
||||
return;
|
||||
}
|
||||
_courseAndDistance[me.id] = courseAndDistance(me.selectedPoint);
|
||||
me.bearing = _courseAndDistance[me.id][0];
|
||||
me.distance = _courseAndDistance[me.id][1];
|
||||
},
|
||||
};
|
||||
|
||||
var bearingDistances = [bearingDistanceInstance.new(0),bearingDistanceInstance.new(1)];
|
||||
|
||||
var BDTimer = maketimer(2, func(){
|
||||
bearingDistances[0].update();
|
||||
bearingDistances[1].update();
|
||||
});
|
||||
BDTimer.start();
|
|
@ -1,33 +0,0 @@
|
|||
# Copyright (c) 2020 Matthew Maring (mattmaring)
|
||||
|
||||
var progCLBInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
# Copyright (c) 2020 Matthew Maring (mattmaring)
|
||||
|
||||
var progCRZInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
if (fmgc.FMGCInternal.phase == 5) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
# Copyright (c) 2020 Matthew Maring (mattmaring)
|
||||
|
||||
var progDESInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
|
||||
fmgc.FMGCInternal.phase = 3;
|
||||
setprop("/FMGC/internal/activate-once", 0);
|
||||
setprop("/FMGC/internal/activate-twice", 0);
|
||||
setprop("/FMGC/internal/decel", 0);
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
# Copyright (c) 2020 Matthew Maring (mattmaring)
|
||||
|
||||
var altSet = props.globals.getNode("it-autoflight/input/alt", 1);
|
||||
|
||||
var progTOInput = func(key, i) {
|
||||
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
||||
if (key == "L1") {
|
||||
if (scratchpad == "CLR") {
|
||||
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else if (int(scratchpad) != nil) {
|
||||
var crzs = size(scratchpad);
|
||||
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100 and fmgc.FMGCInternal.crzSet) {
|
||||
fmgc.FMGCInternal.crzProg = scratchpad;
|
||||
mcdu_scratchpad.scratchpads[i].empty();
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
} else {
|
||||
mcdu_message(i, "NOT ALLOWED");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,13 +20,12 @@ var Transponder = {
|
|||
activeADIRS: 1,
|
||||
condition: 0,
|
||||
failed: 0,
|
||||
codeDigitsNodes: [props.globals.getNode("instrumentation/transponder/inputs/digit[0]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[1]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[2]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[3]", 1)],
|
||||
serviceableNode: props.globals.getNode("instrumentation/transponder/serviceable", 1),
|
||||
knobNode: props.globals.getNode("instrumentation/transponder/inputs/knob-mode", 1),
|
||||
identNode: props.globals.getNode("instrumentation/transponder/inputs/ident-btn", 1),
|
||||
ac1Node: props.globals.getNode("/systems/electrical/bus/ac-1", 1),
|
||||
tcasNode: props.globals.getNode("instrumentation/tcas/inputs/mode"),
|
||||
aglNode: props.globals.getNode("position/gear-agl-ft", 1),
|
||||
codeDigitsNodes: [props.globals.getNode("/instrumentation/transponder/inputs/digit[0]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[1]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[2]", 1), props.globals.getNode("instrumentation/transponder/inputs/digit[3]", 1)],
|
||||
serviceableNode: props.globals.getNode("/instrumentation/transponder/serviceable", 1),
|
||||
knobNode: props.globals.getNode("/instrumentation/transponder/inputs/knob-mode", 1),
|
||||
identNode: props.globals.getNode("/instrumentation/transponder/inputs/ident-btn", 1),
|
||||
tcasNode: props.globals.getNode("/instrumentation/tcas/inputs/mode"),
|
||||
aglNode: props.globals.getNode("/position/gear-agl-ft", 1),
|
||||
electricNode: props.globals.getNode("/systems/electrical/outputs/transponder", 1), # communicate to generic systems
|
||||
new: func(elecSrc, ADIRS) {
|
||||
var t = {parents:[Transponder]};
|
||||
|
@ -40,9 +39,9 @@ var Transponder = {
|
|||
|
||||
return t;
|
||||
},
|
||||
update: func() {
|
||||
update: func(notification) {
|
||||
# TCAS - on seperate electrical source, so has to be before transponder electrical checking
|
||||
if (me.ac1Node.getValue() < 110) {
|
||||
if (notification.elecAC1 < 110) {
|
||||
me.tcasNode.setValue(0); # off
|
||||
} else {
|
||||
if (me.mode >= 1 and me.mode <= 3) {
|
||||
|
@ -285,7 +284,6 @@ var transponderPanel = {
|
|||
var init = func() {
|
||||
transponderPanel.atcSwitch(1);
|
||||
transponderPanel.updateAirData();
|
||||
transponderTimer.start();
|
||||
}
|
||||
|
||||
# Handler for code change from generic dialog
|
||||
|
@ -297,9 +295,6 @@ setlistener("/instrumentation/transponder/id-code", func {
|
|||
|
||||
var Transponders = std.Vector.new([Transponder.new("/systems/electrical/bus/ac-ess-shed", 1), Transponder.new("/systems/electrical/bus/ac-2", 2)]);
|
||||
|
||||
var transponderTimer = maketimer(0.1, func() {
|
||||
Transponders.vector[transponderPanel.atcSel - 1].update();
|
||||
});
|
||||
|
||||
setlistener("/systems/navigation/adr/operating-1", func() {
|
||||
transponderPanel.updateADR1(systems.ADIRS.Operating.adr[0].getValue());
|
||||
|
|
|
@ -324,7 +324,7 @@ var ADIRS = {
|
|||
}
|
||||
),
|
||||
],
|
||||
loop: func() {
|
||||
loop: func(notification) {
|
||||
if (me._init) {
|
||||
for (i = 0; i < _NUMADIRU; i = i + 1) {
|
||||
# update ADR units power
|
||||
|
@ -348,7 +348,6 @@ var ADIRS = {
|
|||
}
|
||||
|
||||
# Update VFE
|
||||
notification = nil;
|
||||
foreach (var update_item; me.update_items) {
|
||||
update_item.update(notification);
|
||||
}
|
||||
|
|
|
@ -448,4 +448,4 @@ setlistener("/systems/thrust/thr-locked", func {
|
|||
}, 0, 0);
|
||||
|
||||
var lockTimer = maketimer(0.1, checkLockThr);
|
||||
var lockTimer2 = maketimer(0.1, checkLockThr2);
|
||||
var lockTimer2 = maketimer(0.1, checkLockThr2);
|
|
@ -111,7 +111,7 @@ var BrakeSystem =
|
|||
},
|
||||
|
||||
# update brake energy
|
||||
update : func()
|
||||
update : func(notification)
|
||||
{
|
||||
if (me.counter == 0) {
|
||||
me.counter = 1;
|
||||
|
@ -122,10 +122,10 @@ var BrakeSystem =
|
|||
|
||||
LThermalEnergy = me.thermalEnergy[0];
|
||||
RThermalEnergy = me.thermalEnergy[1];
|
||||
me.CurrentTime = pts.Sim.Time.elapsedSec.getValue();
|
||||
me.CurrentTime = notification.elapsedTime;
|
||||
dt = me.CurrentTime - me.LastSimTime;
|
||||
LBrakeLevel = pts.Fdm.JSBsim.Fcs.brake[0].getValue();
|
||||
RBrakeLevel = pts.Fdm.JSBsim.Fcs.brake[1].getValue();
|
||||
LBrakeLevel = notification.leftBrakeFCS;
|
||||
RBrakeLevel = notification.rightBrakeFCS;
|
||||
tatdegc = pts.Fdm.JSBsim.Propulsion.tatC.getValue() or 0;
|
||||
|
||||
if (pts.Sim.replayState.getValue() == 0 and dt < 1.0) {
|
||||
|
@ -137,7 +137,7 @@ var BrakeSystem =
|
|||
LCoolingRatio = LCoolingRatio * 3;
|
||||
RCoolingRatio = RCoolingRatio * 3;
|
||||
};
|
||||
airspeed = pts.Velocities.airspeed.getValue();
|
||||
airspeed = notification.airspeedV;
|
||||
if (pts.Gear.position[1].getValue()) {
|
||||
#increase CoolingRatio if gear down according to airspeed
|
||||
LCoolingRatio = LCoolingRatio * airspeed;
|
||||
|
@ -168,7 +168,7 @@ var BrakeSystem =
|
|||
L_Thrust = 0;
|
||||
R_Thrust = 0;
|
||||
|
||||
if (pts.Gear.wow[1].getValue()) {
|
||||
if (notification.gear1Wow) {
|
||||
var V1 = pts.Velocities.groundspeed.getValue();
|
||||
var Mass = pts.Fdm.JSBsim.Inertia.weightLbs.getValue() * me.ScalingDivisor;
|
||||
|
||||
|
@ -179,7 +179,7 @@ var BrakeSystem =
|
|||
|
||||
LThermalEnergy += (Mass * pts.Gear.compression[1].getValue() * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2);
|
||||
if (pts.Controls.Gear.chocks.getValue()) {
|
||||
if (!pts.Controls.Gear.parkingBrake.getValue()) {
|
||||
if (!notification.parkingBrake) {
|
||||
# cooling effect: reduce thermal energy by (LnCoolFactor) * dt
|
||||
LThermalEnergy = LThermalEnergy * math.exp(LnCoolFactor * dt);
|
||||
} else {
|
||||
|
@ -188,7 +188,7 @@ var BrakeSystem =
|
|||
LThermalEnergy = (LThermalEnergy * math.exp(LnCoolFactor * dt)) + (L_Thrust * dt);
|
||||
};
|
||||
} else {
|
||||
if (!pts.Controls.Gear.parkingBrake.getValue()) {
|
||||
if (!notification.parkingBrake) {
|
||||
if (LBrakeLevel>0) {
|
||||
if (V2_L>0) {
|
||||
#LThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_L, 2)) / 2) + L_thrust;
|
||||
|
@ -212,7 +212,7 @@ var BrakeSystem =
|
|||
|
||||
RThermalEnergy += (Mass * pts.Gear.compression[2].getValue() * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2);
|
||||
if (pts.Controls.Gear.chocks.getValue()) {
|
||||
if (!pts.Controls.Gear.parkingBrake.getValue()) {
|
||||
if (!notification.parkingBrake) {
|
||||
# cooling effect: reduce thermal energy by (RnCoolFactor) * dt
|
||||
RThermalEnergy = RThermalEnergy * math.exp(RnCoolFactor * dt);
|
||||
} else {
|
||||
|
@ -221,7 +221,7 @@ var BrakeSystem =
|
|||
RThermalEnergy = (RThermalEnergy * math.exp(RnCoolFactor * dt)) + (R_Thrust * dt);
|
||||
};
|
||||
} else {
|
||||
if (!pts.Controls.Gear.parkingBrake.getValue()) {
|
||||
if (!notification.parkingBrake) {
|
||||
if (RBrakeLevel>0) {
|
||||
if (V2_R>0) {
|
||||
#RThermalEnergy += (Mass * (math.pow(V1, 2) - math.pow(V2_R, 2)) / 2) + R_thrust;
|
||||
|
@ -271,7 +271,7 @@ var BrakeSystem =
|
|||
if (LThermalEnergy>1 and !me.LSmokeActive) {
|
||||
# start smoke processing
|
||||
me.LSmokeActive = 1;
|
||||
settimer(func { BrakeSys.Lsmoke(); },0);
|
||||
settimer(func { BrakeSys.Lsmoke(); },0); # is settimer needed?
|
||||
};
|
||||
if (RThermalEnergy>1 and !me.RSmokeActive) {
|
||||
# start smoke processing
|
||||
|
@ -406,7 +406,7 @@ var Autobrake = {
|
|||
me._mode = me.mode.getValue();
|
||||
me._active = me.active.getBoolValue();
|
||||
if (me._gnd_speed > 72) {
|
||||
if (me._mode != 0 and pts.Controls.Engines.Engine.throttle[0].getValue() < 0.15 and pts.Controls.Engines.Engine.throttle[1].getValue() < 0.15 and me._wow0 and systems.HYD.Brakes.askidSw.getValue() and systems.HYD.Psi.green.getValue() >= 2500 ) {
|
||||
if (me._mode != 0 and pts.Controls.Engines.Engine.throttle[0].getValue() < 0.15 and pts.Controls.Engines.Engine.throttle[1].getValue() < 0.15 and me._wow0 and systems.HYD.Switch.nwsSwitch.getBoolValue() and systems.HYD.Psi.green.getValue() >= 2500 ) {
|
||||
me.active.setBoolValue(1);
|
||||
} elsif (me._active) {
|
||||
me.active.setBoolValue(0);
|
||||
|
|
|
@ -13,8 +13,6 @@ var dc2 = 0;
|
|||
|
||||
# Main class
|
||||
var ELEC = {
|
||||
_timer1On: 0,
|
||||
_timer2On: 0,
|
||||
EmerElec: props.globals.getNode("/systems/electrical/some-electric-thingie/emer-elec-config"),
|
||||
Bus: {
|
||||
acEss: props.globals.getNode("/systems/electrical/bus/ac-ess"),
|
||||
|
@ -121,6 +119,7 @@ var ELEC = {
|
|||
volts: props.globals.getNode("/systems/electrical/sources/emer-gen/output-volt"),
|
||||
hertz: props.globals.getNode("/systems/electrical/sources/emer-gen/output-hertz"),
|
||||
voltsRelay: props.globals.getNode("/systems/electrical/relay/emer-glc/output"),
|
||||
relayPos: props.globals.getNode("/systems/electrical/relay/emer-glc/contact-pos"),
|
||||
},
|
||||
Ext: {
|
||||
volts: props.globals.getNode("/systems/electrical/sources/ext/output-volt"),
|
||||
|
@ -206,36 +205,65 @@ var ELEC = {
|
|||
me.Fail.tr1Fault.setBoolValue(0);
|
||||
me.Fail.tr2Fault.setBoolValue(0);
|
||||
},
|
||||
loop: func() {
|
||||
_FMGC1: 0,
|
||||
_FMGC2: 0,
|
||||
_activeFMGC: nil,
|
||||
_timer1On: 0,
|
||||
_timer2On: 0,
|
||||
loop: func(notification) {
|
||||
# Autopilot Disconnection routines
|
||||
if (me.Bus.dcEssShed.getValue() < 25) {
|
||||
if (fmgc.Output.ap1.getValue() and !me._timer1On) {
|
||||
me._activeFMGC = fcu.FCUController.activeFMGC.getValue();
|
||||
me._FMGC1 = fmgc.Output.ap1.getValue();
|
||||
me._FMGC2 = fmgc.Output.ap2.getValue();
|
||||
|
||||
if (notification.dcEssShed < 25) {
|
||||
if (me._FMGC1 and !me._timer1On) { # delay 1 cycle to avoid spurious
|
||||
me._timer1On = 1;
|
||||
settimer(func() {
|
||||
if (me.Bus.dcEssShed.getValue() < 25) {
|
||||
fcu.apOff("hard", 1);
|
||||
if (fcu.FCUController.activeFMGC.getValue() == 1) {
|
||||
fcu.athrOff("hard");
|
||||
}
|
||||
} elsif (me._FMGC1) {
|
||||
if (notification.dcEssShed < 25) {
|
||||
fcu.apOff("hard", 1);
|
||||
if (me._activeFMGC == 1) {
|
||||
fcu.athrOff("hard");
|
||||
}
|
||||
me._timer1On = 0;
|
||||
}, 0.1);
|
||||
}
|
||||
me._timer1On = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (me.Bus.dc2.getValue() < 25) {
|
||||
if (fmgc.Output.ap2.getValue() and !me._timer2On) {
|
||||
if (notification.dc2 < 25) {
|
||||
if (me._FMGC2 and !me._timer2On) { # delay 1 cycle to avoid spurious
|
||||
me._timer2On = 1;
|
||||
settimer(func() {
|
||||
if (me.Bus.dc2.getValue() < 25) {
|
||||
fcu.apOff("hard", 2);
|
||||
if (fcu.FCUController.activeFMGC.getValue() == 2) {
|
||||
fcu.athrOff("hard");
|
||||
}
|
||||
} elsif (me._FMGC2) {
|
||||
if (notification.dc2 < 25) {
|
||||
fcu.apOff("hard", 2);
|
||||
if (me._activeFMGC == 2) {
|
||||
fcu.athrOff("hard");
|
||||
}
|
||||
me._timer2On = 0;
|
||||
}, 0.1);
|
||||
}
|
||||
me._timer2On = 0;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
# Emesary
|
||||
var A320Electrical = notifications.SystemRecipient.new("A320 Electrical",ELEC.loop,ELEC);
|
||||
emesary.GlobalTransmitter.Register(A320Electrical);
|
||||
|
||||
var input = {
|
||||
"elecAC1": "/systems/electrical/bus/ac-1",
|
||||
"elecAC2": "/systems/electrical/bus/ac-2",
|
||||
"elecACEss": "/systems/electrical/bus/ac-ess",
|
||||
"elecACEssShed": "/systems/electrical/bus/ac-ess-shed",
|
||||
"dc1": "/systems/electrical/bus/dc-1",
|
||||
"dc2": "/systems/electrical/bus/dc-2",
|
||||
"dcBat": "/systems/electrical/bus/dc-bat",
|
||||
"dcEss": "/systems/electrical/bus/dc-ess",
|
||||
"dcEssShed": "/systems/electrical/bus/dc-ess-shed",
|
||||
"dcHot1": "/systems/electrical/bus/dc-hot-1",
|
||||
"dcHot2": "/systems/electrical/bus/dc-hot-2",
|
||||
};
|
||||
|
||||
foreach (var name; keys(input)) {
|
||||
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 Electrical", name, input[name]));
|
||||
}
|
|
@ -17,6 +17,7 @@ var cargoTestBtnOff = props.globals.initNode("/controls/fire/cargo/test-off", 0,
|
|||
var eng1FireWarn = props.globals.initNode("/systems/fire/engine1/warning-active", 0, "BOOL");
|
||||
var eng2FireWarn = props.globals.initNode("/systems/fire/engine2/warning-active", 0, "BOOL");
|
||||
var apuFireWarn = props.globals.initNode("/systems/fire/apu/warning-active", 0, "BOOL");
|
||||
var lavatoryFireWarn = props.globals.getNode("/systems/fire/lavatory/warning", 1);
|
||||
var eng1Inop = props.globals.initNode("/systems/fire/engine1/det-inop", 0, "BOOL");
|
||||
var eng2Inop = props.globals.initNode("/systems/fire/engine2/det-inop", 0, "BOOL");
|
||||
var apuInop = props.globals.initNode("/systems/fire/apu/det-inop", 0, "BOOL");
|
||||
|
@ -33,13 +34,15 @@ var eng1Agent2TimerTime = props.globals.initNode("/systems/fire/engine1/agent2-t
|
|||
var eng2Agent2TimerTime = props.globals.initNode("/systems/fire/engine2/agent2-timer-time", 0, "INT");
|
||||
var apuAgentTimerTime = props.globals.initNode("/systems/fire/apu/agent-timer-time", 0, "INT");
|
||||
|
||||
var fireButtons = [props.globals.getNode("/controls/engines/engine[0]/fire-btn"),props.globals.getNode("/controls/engines/engine[1]/fire-btn"),props.globals.getNode("/controls/apu/fire-btn")];
|
||||
|
||||
var fire_init = func {
|
||||
setprop("/controls/OH/protectors/fwddisch", 0);
|
||||
setprop("/controls/OH/protectors/aftdisch", 0);
|
||||
setprop("/controls/fire/cargo/fwddisch", 0);
|
||||
setprop("/controls/fire/cargo/aftdisch", 0);
|
||||
setprop("/systems/failures/cargo-fwd-fire", 0);
|
||||
setprop("/systems/failures/cargo-aft-fire", 0);
|
||||
setprop("/systems/failures/fire/cargo-fwd-fire", 0);
|
||||
setprop("/systems/failures/fire/cargo-aft-fire", 0);
|
||||
setprop("/controls/fire/cargo/test", 0);
|
||||
fire_timer.start();
|
||||
}
|
||||
|
@ -276,9 +279,9 @@ var detectorLoop = {
|
|||
}
|
||||
},
|
||||
sendSignal: func(system, typeLoop) {
|
||||
if (system == 0 and !getprop("/systems/failures/engine-left-fire")) { return; }
|
||||
elsif (system == 1 and !getprop("/systems/failures/engine-right-fire")) { return; }
|
||||
elsif (system == 2 and !getprop("/systems/failures/apu-fire")) { return; }
|
||||
if (system == 0 and !getprop("/systems/failures/fire/engine-left-fire")) { return; }
|
||||
elsif (system == 1 and !getprop("/systems/failures/fire/engine-right-fire")) { return; }
|
||||
elsif (system == 2 and !getprop("/systems/failures/fire/apu-fire")) { return; }
|
||||
engFireDetectorUnits.vector[system].receiveSignal(typeLoop);
|
||||
}
|
||||
};
|
||||
|
@ -303,8 +306,8 @@ var cargoDetectorLoop = {
|
|||
}
|
||||
},
|
||||
sendSignal: func(system, typeLoop) {
|
||||
if ((system == 0 or system == 1) and !getprop("/systems/failures/cargo-aft-fire")) { return; }
|
||||
elsif (system == 2 and !getprop("/systems/failures/cargo-fwd-fire")) { return; }
|
||||
if ((system == 0 or system == 1) and !getprop("/systems/failures/fire/cargo-aft-fire")) { return; }
|
||||
elsif (system == 2 and !getprop("/systems/failures/fire/cargo-fwd-fire")) { return; }
|
||||
|
||||
cargoSmokeDetectorUnits.vector[system].receiveSignal(typeLoop);
|
||||
}
|
||||
|
@ -488,29 +491,29 @@ var checkTwoInop2Timer = maketimer(0.1, checkTwoInop2);
|
|||
var checkTwoInop3Timer = maketimer(0.1, checkTwoInop3);
|
||||
|
||||
# Create fire systems
|
||||
var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/apu-fire", "/controls/fire/apu-test-btn") ]);
|
||||
var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-fwd-fire")]);
|
||||
var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/fire/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/fire/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/fire/apu-fire", "/controls/fire/apu-test-btn") ]);
|
||||
var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/fire/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/fire/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/fire/cargo-fwd-fire")]);
|
||||
|
||||
# Create detector loops
|
||||
var engDetectorLoops = std.Vector.new([
|
||||
detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-left-fire"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/engine-left-fire"),
|
||||
detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/engine-right-fire"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-right-fire"),
|
||||
detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire")
|
||||
detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/fire/engine-left-fire"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-left-fire"),
|
||||
detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-right-fire"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/fire/engine-right-fire"),
|
||||
detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire")
|
||||
]);
|
||||
|
||||
var cargoDetectorLoops = std.Vector.new([
|
||||
cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
|
||||
cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
|
||||
cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire")
|
||||
cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"),
|
||||
cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/fire/cargo-aft-fire"),
|
||||
cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/fire/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/fire/cargo-fwd-fire")
|
||||
]);
|
||||
|
||||
# Create extinguisher bottles
|
||||
var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dc-hot-1", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"),
|
||||
extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dc-hot-2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"),
|
||||
extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/apu-fire", "/systems/fire/apu/warning-active") ]);
|
||||
var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dc-hot-1", "/systems/failures/fire/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-left-fire", "/systems/fire/engine1/warning-active"),
|
||||
extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dc-hot-2", "/systems/failures/fire/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc-2", "/systems/failures/fire/engine-right-fire", "/systems/fire/engine2/warning-active"),
|
||||
extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/apu-fire", "/systems/fire/apu/warning-active") ]);
|
||||
|
||||
# There is only one bottle but the system will think there are two, so other parts work
|
||||
var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
|
||||
var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dc-bat", "/systems/failures/fire/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
|
||||
|
||||
# Create CIDS channels
|
||||
var CIDSchannels = std.Vector.new([CIDSchannel.new("/systems/electrical/bus/dc-ess"), CIDSchannel.new("/systems/electrical/bus/dc-2")]);
|
||||
|
@ -544,7 +547,7 @@ var createCargoFireBottleListener = func(prop, index) {
|
|||
|
||||
# Listeners
|
||||
setlistener("/controls/engines/engine[0]/fire-btn", func() {
|
||||
if (getprop("/controls/engines/engine[0]/fire-btn") == 1) {
|
||||
if (systems.fireButtons[0].getValue() == 1) {
|
||||
ecam.shutUpYou();
|
||||
eng1AgentTimerMakeTimer.stop();
|
||||
eng1AgentTimer.setValue(10);
|
||||
|
@ -587,7 +590,7 @@ eng1Agent2TimerMakeTimerFunc = func() {
|
|||
}
|
||||
|
||||
setlistener("/controls/engines/engine[1]/fire-btn", func() {
|
||||
if (getprop("/controls/engines/engine[1]/fire-btn") == 1) {
|
||||
if (systems.fireButtons[1].getValue() == 1) {
|
||||
ecam.shutUpYou();
|
||||
eng2AgentTimerMakeTimer.stop();
|
||||
eng2AgentTimer.setValue(10);
|
||||
|
@ -652,7 +655,7 @@ apuAgentTimerMakeTimerFunc = func() {
|
|||
}
|
||||
|
||||
setlistener("/controls/fire/test-btn-1", func() {
|
||||
if (getprop("/systems/failures/engine-left-fire")) { return; }
|
||||
if (getprop("/systems/failures/fire/engine-left-fire")) { return; }
|
||||
|
||||
if (testBtn.getValue() == 1) {
|
||||
if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
|
||||
|
@ -665,7 +668,7 @@ setlistener("/controls/fire/test-btn-1", func() {
|
|||
}, 0, 0);
|
||||
|
||||
setlistener("/controls/fire/test-btn-2", func() {
|
||||
if (getprop("/systems/failures/engine-right-fire")) { return; }
|
||||
if (getprop("/systems/failures/fire/engine-right-fire")) { return; }
|
||||
if (testBtn2.getValue() == 1) {
|
||||
if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
|
||||
eng2FireWarn.setBoolValue(1);
|
||||
|
@ -677,7 +680,7 @@ setlistener("/controls/fire/test-btn-2", func() {
|
|||
}, 0, 0);
|
||||
|
||||
setlistener("/controls/fire/apu-test-btn", func() {
|
||||
if (getprop("/systems/failures/apu-fire")) { return; }
|
||||
if (getprop("/systems/failures/fire/apu-fire")) { return; }
|
||||
if (apuTestBtn.getValue() == 1) {
|
||||
if (systems.ELEC.Bus.dcBat.getValue() > 25 or systems.ELEC.Bus.dcEss.getValue() > 25) {
|
||||
apuFireWarn.setBoolValue(1);
|
||||
|
@ -689,7 +692,7 @@ setlistener("/controls/fire/apu-test-btn", func() {
|
|||
}, 0, 0);
|
||||
|
||||
setlistener("/controls/fire/cargo/test", func() {
|
||||
if (getprop("/systems/failures/aft-cargo-fire") or getprop("/systems/failures/fwd-cargo-fire") or systems.ELEC.Bus.dcBat.getValue() < 25 or systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
|
||||
if (getprop("/systems/failures/fire/aft-cargo-fire") or getprop("/systems/failures/fire/fwd-cargo-fire") or systems.ELEC.Bus.dcBat.getValue() < 25 or systems.ELEC.Bus.dcEss.getValue() < 25) { return; }
|
||||
if (cargoTestBtn.getBoolValue()) {
|
||||
cargoTestTime.setValue(elapsedTime.getValue());
|
||||
cargoTestChecker.start();
|
||||
|
|
|
@ -10,7 +10,6 @@ var HYD = {
|
|||
accumPressPsi: props.globals.initNode("/systems/hydraulic/yellow-accumulator-psi-cmd", 0, "INT"),
|
||||
leftPressPsi: props.globals.initNode("/systems/hydraulic/brakes/pressure-left-psi", 0, "INT"),
|
||||
rightPressPsi: props.globals.initNode("/systems/hydraulic/brakes/pressure-right-psi", 0, "INT"),
|
||||
askidSw: props.globals.initNode("/systems/hydraulic/brakes/askidnwssw", 1, "BOOL"),
|
||||
mode: props.globals.initNode("/systems/hydraulic/brakes/mode", 0, "INT"),
|
||||
leftbrake: props.globals.getNode("/controls/gear/brake-left"),
|
||||
rightbrake: props.globals.getNode("/controls/gear/brake-right"),
|
||||
|
@ -57,6 +56,7 @@ var HYD = {
|
|||
rat: props.globals.getNode("/controls/hydraulic/switches/rat-man"),
|
||||
yellowEDP: props.globals.getNode("/controls/hydraulic/switches/yellow-edp"),
|
||||
yellowElec: props.globals.getNode("/controls/hydraulic/switches/yellow-elec"),
|
||||
nwsSwitch: props.globals.getNode("/controls/gear/nws-switch"),
|
||||
},
|
||||
Valve: {
|
||||
yellowFire: props.globals.getNode("/systems/hydraulic/sources/yellow-edp/fire-valve"),
|
||||
|
@ -85,97 +85,91 @@ var HYD = {
|
|||
me.Fail.yellowElec.setBoolValue(0);
|
||||
me.Fail.yellowLeak.setBoolValue(0);
|
||||
},
|
||||
loop: func() {
|
||||
if (props.globals.getValue("/controls/gear/nws-switch") == 1) {
|
||||
me.Brakes.askidSw.setBoolValue(1); #true
|
||||
} else {
|
||||
me.Brakes.askidSw.setBoolValue(0); #false
|
||||
}
|
||||
|
||||
loop: func(notification) {
|
||||
# Decrease accumPressPsi when green and yellow hydraulic's aren't pressurized
|
||||
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
if (me.Brakes.leftbrake.getValue() > 0 or notification.brakesMode == 0) {
|
||||
lcont = lcont + 1;
|
||||
} else {
|
||||
lcont = 0;
|
||||
}
|
||||
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
if (me.Brakes.rightbrake.getValue() > 0 or notification.brakesMode == 0) {
|
||||
rcont = rcont + 1;
|
||||
} else {
|
||||
rcont = 0;
|
||||
}
|
||||
if (me.Psi.yellow.getValue() < me.Brakes.accumPressPsi.getValue() and me.Brakes.accumPressPsi.getValue() > 0) {
|
||||
if (notification.yellow < notification.accumPressPsi and notification.accumPressPsi > 0) {
|
||||
if (lcont == 1) {
|
||||
me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - 200);
|
||||
me.Brakes.accumPressPsi.setValue(notification.accumPressPsi - 200);
|
||||
}
|
||||
if (rcont == 1) {
|
||||
me.Brakes.accumPressPsi.setValue(me.Brakes.accumPressPsi.getValue() - 200);
|
||||
me.Brakes.accumPressPsi.setValue(notification.accumPressPsi - 200);
|
||||
}
|
||||
if (me.Brakes.accumPressPsi.getValue() < 0) {
|
||||
if (notification.accumPressPsi < 0) {
|
||||
me.Brakes.accumPressPsi.setValue(0);
|
||||
}
|
||||
}
|
||||
|
||||
# Braking Pressure
|
||||
if (me.Brakes.mode.getValue() == 1 or (me.Brakes.mode.getValue() == 2 and me.Psi.green.getValue() >= 2500)) {
|
||||
if (notification.brakesMode == 1 or (notification.brakesMode == 2 and notification.green >= 2500)) {
|
||||
# Normal braking - Green OK
|
||||
if (me.Brakes.leftbrake.getValue() > 0) {
|
||||
me.Brakes.leftPressPsi.setValue(me.Psi.green.getValue() * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
|
||||
if (notification.leftBrake > 0) {
|
||||
me.Brakes.leftPressPsi.setValue(notification.green * notification.leftBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.leftPressPsi.setValue(0);
|
||||
}
|
||||
if (me.Brakes.rightbrake.getValue() > 0) {
|
||||
me.Brakes.rightPressPsi.setValue(me.Psi.green.getValue() * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
|
||||
if (notification.rightBrake > 0) {
|
||||
me.Brakes.rightPressPsi.setValue(notification.green * notification.rightBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.rightPressPsi.setValue(0);
|
||||
}
|
||||
} else {
|
||||
if ((me.Brakes.mode.getValue() == 2 and me.Psi.green.getValue() < 2500) or me.Brakes.mode.getValue() == 0) {
|
||||
if ((notification.brakesMode == 2 and notification.green < 2500) or notification.brakesMode == 0) {
|
||||
# Alternate Braking (Yellow OK + Antiskid ON + electric OK) - missing condition: BSCU OK-KO
|
||||
if (me.Psi.yellow.getValue() >= 2500 and me.Brakes.askidSw.getValue() and (systems.ELEC.Bus.dc1.getValue() >= 24 or systems.ELEC.Bus.dc2.getValue() >= 24 or systems.ELEC.Bus.dcEss.getValue() >= 24)) {
|
||||
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(me.Psi.yellow.getValue() * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
|
||||
if (notification.yellow >= 2500 and notification.NWSSwitch and (notification.dc1 >= 24 or notification.dc2 >= 24 or notification.dcEss >= 24)) {
|
||||
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(notification.yellow * notification.leftBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.leftPressPsi.setValue(0);
|
||||
}
|
||||
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(me.Psi.yellow.getValue() * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
|
||||
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(notification.yellow * notification.rightBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.rightPressPsi.setValue(0);
|
||||
}
|
||||
} else {
|
||||
# Alternate Braking (Yellow OK + Antiskid OFF + electric OK) - missing condition: BSCU OK-KO
|
||||
if (me.Psi.yellow.getValue() >= 2500 and !me.Brakes.askidSw.getValue() and (systems.ELEC.Bus.dc1.getValue() >= 24 or systems.ELEC.Bus.dc2.getValue() >= 24 or systems.ELEC.Bus.dcEss.getValue() >= 24)) {
|
||||
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
|
||||
if (notification.yellow >= 2500 and !notification.NWSSwitch and (notification.dc1 >= 24 or notification.dc2 >= 24 or notification.dcEss >= 24)) {
|
||||
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(1000 * notification.leftBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.leftPressPsi.setValue(0);
|
||||
}
|
||||
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
|
||||
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(1000 * notification.rightBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.rightPressPsi.setValue(0);
|
||||
}
|
||||
} else {
|
||||
# Alternate Braking (Yellow KO or Antiskid KO or electric KO) - missing condition: BSCU OK-KO
|
||||
if (me.Brakes.accumPressPsi.getValue() < 1000 and (me.Psi.yellow.getValue() < 2500 or !me.Brakes.askidSw.getValue() or (systems.ELEC.Bus.dc1.getValue() < 24 and systems.ELEC.Bus.dc2.getValue() < 24 and systems.ELEC.Bus.dcEss.getValue() < 24))) {
|
||||
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(me.Brakes.accumPressPsi.getValue() * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
|
||||
if (notification.accumPressPsi < 1000 and (notification.yellow < 2500 or !notification.NWSSwitch or (notification.dc1 < 24 and notification.dc2 < 24 and notification.dcEss < 24))) {
|
||||
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(notification.accumPressPsi * notification.leftBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.leftPressPsi.setValue(0);
|
||||
}
|
||||
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(me.Brakes.accumPressPsi.getValue() * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
|
||||
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(notification.accumPressPsi * notification.rightBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.rightPressPsi.setValue(0);
|
||||
}
|
||||
} else {
|
||||
if (me.Brakes.leftbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[0].getValue());
|
||||
if (notification.leftBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.leftPressPsi.setValue(1000 * notification.leftBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.leftPressPsi.setValue(0);
|
||||
}
|
||||
if (me.Brakes.rightbrake.getValue() > 0 or me.Brakes.mode.getValue() == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(1000 * pts.Fdm.JSBsim.Fcs.brake[1].getValue());
|
||||
if (notification.rightBrake > 0 or notification.brakesMode == 0) {
|
||||
me.Brakes.rightPressPsi.setValue(1000 * notification.rightBrakeFCS);
|
||||
} else {
|
||||
me.Brakes.rightPressPsi.setValue(0);
|
||||
}
|
||||
|
@ -192,3 +186,25 @@ setlistener("/controls/gear/gear-down", func {
|
|||
pts.Controls.Gear.gearDown.setValue(1);
|
||||
}
|
||||
});
|
||||
|
||||
# Emesary
|
||||
var A320Hydraulic = notifications.SystemRecipient.new("A320 Hydraulic",HYD.loop,HYD);
|
||||
emesary.GlobalTransmitter.Register(A320Hydraulic);
|
||||
|
||||
var input = {
|
||||
"blue": "/systems/hydraulic/blue-psi",
|
||||
"green": "/systems/hydraulic/green-psi",
|
||||
"yellow": "/systems/hydraulic/yellow-psi",
|
||||
|
||||
"brakesMode": "/systems/hydraulic/brakes/mode",
|
||||
"accumPressPsi": "/systems/hydraulic/yellow-accumulator-psi-cmd",
|
||||
"leftBrake": "/controls/gear/brake-left",
|
||||
"rightBrake": "/controls/gear/brake-right",
|
||||
"leftBrakeFCS": "/fdm/jsbsim/fcs/left-brake-cmd-norm",
|
||||
"rightBrakeFCS": "/fdm/jsbsim/fcs/right-brake-cmd-norm",
|
||||
"NWSSwitch": "/controls/gear/nws-switch",
|
||||
};
|
||||
|
||||
foreach (var name; keys(input)) {
|
||||
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 Hydraulic", name, input[name]));
|
||||
}
|
|
@ -99,6 +99,8 @@ var PNEU = {
|
|||
hotAir: props.globals.getNode("/systems/air-conditioning/valves/hot-air"),
|
||||
starter1: props.globals.getNode("/systems/pneumatics/valves/starter-valve-1"),
|
||||
starter2: props.globals.getNode("/systems/pneumatics/valves/starter-valve-2"),
|
||||
wingLeft: props.globals.getNode("/systems/pneumatics/valves/wing-ice-1"),
|
||||
wingRight: props.globals.getNode("/systems/pneumatics/valves/wing-ice-2"),
|
||||
},
|
||||
pressMode: props.globals.getNode("/systems/pressurization/mode", 1),
|
||||
init: func() {
|
||||
|
@ -159,9 +161,9 @@ var PNEU = {
|
|||
me.Fail.trimValveFwd.setBoolValue(0);
|
||||
me.Fail.xbleed.setBoolValue(0);
|
||||
},
|
||||
loop: func() {
|
||||
wowl = getprop("gear/gear[1]/wow");
|
||||
wowr = getprop("gear/gear[2]/wow");
|
||||
loop: func(notification) {
|
||||
wowl = notification.gear1Wow;
|
||||
wowr = notification.gear2Wow;
|
||||
|
||||
# Legacy pressurization
|
||||
cabinalt = getprop("/systems/pressurization/cabinalt");
|
||||
|
|
|
@ -100,4 +100,28 @@ var frameNotification = FrameNotification.new(1);
|
|||
# Frame count
|
||||
# 5 = ECAM
|
||||
# 7 = FWC phases
|
||||
# 10 = ECAM messages
|
||||
# 10 = ECAM messages
|
||||
|
||||
|
||||
var SystemRecipient =
|
||||
{
|
||||
new: func(_ident,loopFunc, instance)
|
||||
{
|
||||
var NewSystemRecipient = emesary.Recipient.new(_ident);
|
||||
NewSystemRecipient.Receive = func(notification)
|
||||
{
|
||||
if (notification.NotificationType == "FrameNotification")
|
||||
{
|
||||
if (math.mod(notifications.frameNotification.FrameCount,5) == 0) {
|
||||
call(loopFunc,[notification],instance, nil, var errors = []);
|
||||
if (size(errors) > 0) {
|
||||
debug.printerror(errors);
|
||||
}
|
||||
}
|
||||
return emesary.Transmitter.ReceiptStatus_OK;
|
||||
}
|
||||
return emesary.Transmitter.ReceiptStatus_NotProcessed;
|
||||
};
|
||||
return NewSystemRecipient;
|
||||
},
|
||||
};
|
|
@ -42,13 +42,14 @@ input = {
|
|||
frame_rate: "/sim/frame-rate",
|
||||
elapsedTime: "/sim/time/elapsed-sec",
|
||||
FWCPhase: "/ECAM/warning-phase",
|
||||
gear0Wow: "/gear/gear[0]/wow",
|
||||
|
||||
# Just about everything uses these properties at some stage, lets add them here!
|
||||
elecAC1: "/systems/electrical/bus/ac-1",
|
||||
elecAC2: "/systems/electrical/bus/ac-2",
|
||||
elecACEss: "/systems/electrical/bus/ac-ess",
|
||||
elecACEssShed: "/systems/electrical/bus/ac-ess-shed",
|
||||
gear0Wow: "/gear/gear[0]/wow",
|
||||
gear1Wow: "/gear/gear[1]/wow",
|
||||
gear2Wow: "/gear/gear[2]/wow",
|
||||
parkingBrake: "/controls/gear/brake-parking",
|
||||
airspeedV: "/velocities/airspeed-kt",
|
||||
groundspeed: "/velocities/groundspeed-kt",
|
||||
engine1State: "/engines/engine[0]/state",
|
||||
engine2State: "/engines/engine[1]/state",
|
||||
};
|
||||
|
|
|
@ -1848,6 +1848,7 @@
|
|||
<test logic="AND" value="1">
|
||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||
/systems/electrical/some-electric-thingie/generator-1-pb eq 1
|
||||
/controls/electrical/switches/gen-1 eq 1
|
||||
/controls/electrical/switches/bus-tie eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
@ -1857,6 +1858,7 @@
|
|||
<test logic="AND" value="1">
|
||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||
/systems/electrical/some-electric-thingie/generator-2-pb eq 1
|
||||
/controls/electrical/switches/gen-2 eq 1
|
||||
/controls/electrical/switches/bus-tie eq 0
|
||||
</test>
|
||||
</switch>
|
||||
|
@ -1866,6 +1868,7 @@
|
|||
<test logic="AND" value="1">
|
||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||
/systems/electrical/some-electric-thingie/generator-1-pb eq 1
|
||||
/controls/electrical/switches/gen-1 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
@ -1874,6 +1877,7 @@
|
|||
<test logic="AND" value="1">
|
||||
/systems/electrical/some-electric-thingie/emer-elec-config eq 1
|
||||
/systems/electrical/some-electric-thingie/generator-2-pb eq 1
|
||||
/controls/electrical/switches/gen-2 eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
<system name="A320: Engine Fire">
|
||||
|
||||
<channel name="Engine Fire" execrate="8">
|
||||
<fcs_function name="enginefire1">
|
||||
<fcs_function name="rubbish/enginefire1">
|
||||
<function>
|
||||
<sum>
|
||||
<property>/systems/fire/engine1/temperature</property>
|
||||
<product>
|
||||
<table>
|
||||
<independentVar lookup="row">/systems/failures/engine-left-fire</independentVar>
|
||||
<independentVar lookup="row">/systems/failures/fire/engine-left-fire</independentVar>
|
||||
<tableData>
|
||||
0 -5
|
||||
1 30
|
||||
|
@ -28,13 +28,13 @@
|
|||
<output>/systems/fire/engine1/temperature</output>
|
||||
</fcs_function>
|
||||
|
||||
<fcs_function name="enginefire2">
|
||||
<fcs_function name="rubbish/enginefire2">
|
||||
<function>
|
||||
<sum>
|
||||
<property>/systems/fire/engine2/temperature</property>
|
||||
<product>
|
||||
<table>
|
||||
<independentVar lookup="row">/systems/failures/engine-right-fire</independentVar>
|
||||
<independentVar lookup="row">/systems/failures/fire/engine-right-fire</independentVar>
|
||||
<tableData>
|
||||
0 -5
|
||||
1 30
|
||||
|
@ -51,13 +51,13 @@
|
|||
<output>/systems/fire/engine2/temperature</output>
|
||||
</fcs_function>
|
||||
|
||||
<fcs_function name="apufire">
|
||||
<fcs_function name="rubbish/apufire">
|
||||
<function>
|
||||
<sum>
|
||||
<property>/systems/fire/apu/temperature</property>
|
||||
<product>
|
||||
<table>
|
||||
<independentVar lookup="row">/systems/failures/apu-fire</independentVar>
|
||||
<independentVar lookup="row">/systems/failures/fire/apu-fire</independentVar>
|
||||
<tableData>
|
||||
0 -5
|
||||
1 45
|
||||
|
@ -76,13 +76,13 @@
|
|||
</channel>
|
||||
|
||||
<channel name="Cargo Fire" execrate="8">
|
||||
<fcs_function name="fwdfire">
|
||||
<fcs_function name="rubbish/fwdfire">
|
||||
<function>
|
||||
<sum>
|
||||
<property>/systems/fire/cargo/fwd/temperature</property>
|
||||
<product>
|
||||
<table>
|
||||
<independentVar lookup="row">/systems/failures/cargo-fwd-fire</independentVar>
|
||||
<independentVar lookup="row">/systems/failures/fire/cargo-fwd-fire</independentVar>
|
||||
<tableData>
|
||||
0 -5
|
||||
1 30
|
||||
|
@ -99,13 +99,13 @@
|
|||
<output>/systems/fire/cargo/fwd/temperature</output>
|
||||
</fcs_function>
|
||||
|
||||
<fcs_function name="aftfire">
|
||||
<fcs_function name="rubbish/aftfire">
|
||||
<function>
|
||||
<sum>
|
||||
<property>/systems/fire/cargo/aft/temperature</property>
|
||||
<product>
|
||||
<table>
|
||||
<independentVar lookup="row">/systems/failures/cargo-aft-fire</independentVar>
|
||||
<independentVar lookup="row">/systems/failures/fire/cargo-aft-fire</independentVar>
|
||||
<tableData>
|
||||
0 -5
|
||||
1 45
|
||||
|
@ -121,5 +121,35 @@
|
|||
</clipto>
|
||||
<output>/systems/fire/cargo/aft/temperature</output>
|
||||
</fcs_function>
|
||||
|
||||
<fcs_function name="rubbish/lavatory">
|
||||
<function>
|
||||
<sum>
|
||||
<property>/systems/fire/lavatory/temperature</property>
|
||||
<product>
|
||||
<table>
|
||||
<independentVar lookup="row">/systems/failures/fire/lavatory-fire</independentVar>
|
||||
<tableData>
|
||||
0 -5
|
||||
1 45
|
||||
</tableData>
|
||||
</table>
|
||||
<property>simulation/channel-dt</property>
|
||||
</product>
|
||||
</sum>
|
||||
</function>
|
||||
<clipto>
|
||||
<min>0</min>
|
||||
<max>300</max>
|
||||
</clipto>
|
||||
<output>/systems/fire/lavatory/temperature</output>
|
||||
</fcs_function>
|
||||
|
||||
<switch name="/systems/fire/lavatory/warning">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/systems/fire/lavatory/temperature ge 295
|
||||
</test>
|
||||
</switch>
|
||||
</channel>
|
||||
</system>
|
||||
|
|
|
@ -229,6 +229,14 @@
|
|||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/ECAM/phases/monostable/phase-8">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/ECAM/warning-phase eq 8
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
</channel>
|
||||
|
||||
</system>
|
||||
|
|
1426
Systems/a320-fwc.xml
1426
Systems/a320-fwc.xml
File diff suppressed because it is too large
Load diff
|
@ -589,12 +589,12 @@
|
|||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/controls/gear/brake-parking ne 1
|
||||
/systems/hydraulic/brakes/askidnwssw eq 1
|
||||
/controls/gear/nws-switch eq 1
|
||||
/systems/hydraulic/green-psi ge 2500
|
||||
</test>
|
||||
<test logic="AND" value="2">
|
||||
/controls/gear/brake-parking ne 1
|
||||
/systems/hydraulic/brakes/askidnwssw eq 1
|
||||
/controls/gear/nws-switch eq 1
|
||||
/systems/hydraulic/yellow-psi ge 2500
|
||||
</test>
|
||||
<test logic="AND" value="2">
|
||||
|
@ -671,34 +671,34 @@
|
|||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/hydraulics/warnings/blue-lo-pr">
|
||||
<switch name="/systems/hydraulic/warnings/blue-lo-pr">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="AND">
|
||||
/systems/hydraulic/blue-psi lt 1750
|
||||
/systems/hydraulics/warnings/blue-lo-pr eq 1
|
||||
/systems/hydraulic/warnings/blue-lo-pr eq 1
|
||||
</test>
|
||||
/systems/hydraulic/blue-psi lt 1450
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/hydraulics/warnings/green-lo-pr">
|
||||
<switch name="/systems/hydraulic/warnings/green-lo-pr">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="AND">
|
||||
/systems/hydraulic/green-psi lt 1750
|
||||
/systems/hydraulics/warnings/green-lo-pr eq 1
|
||||
/systems/hydraulic/warnings/green-lo-pr eq 1
|
||||
</test>
|
||||
/systems/hydraulic/green-psi lt 1450
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/hydraulics/warnings/yellow-lo-pr">
|
||||
<switch name="/systems/hydraulic/warnings/yellow-lo-pr">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
<test logic="AND">
|
||||
/systems/hydraulic/yellow-psi lt 1750
|
||||
/systems/hydraulics/warnings/yellow-lo-pr eq 1
|
||||
/systems/hydraulic/warnings/yellow-lo-pr eq 1
|
||||
</test>
|
||||
/systems/hydraulic/yellow-psi lt 1450
|
||||
</test>
|
||||
|
|
|
@ -1183,28 +1183,47 @@
|
|||
<rate_limit sense="decr">120</rate_limit>
|
||||
</actuator>
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open">
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open-man">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/pneumatics/valves/crossbleed-valve-cmd eq 1
|
||||
/systems/pneumatics/valves/crossbleed-valve ne 1
|
||||
/controls/pneumatics/switches/x-bleed eq 2
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open-auto">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/pneumatics/valves/crossbleed-valve-cmd eq 1
|
||||
/systems/pneumatics/valves/crossbleed-valve ne 1
|
||||
/controls/pneumatics/switches/x-bleed eq 1
|
||||
/systems/electrical/bus/dc-2 ge 25
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag">
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag-open">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/systems/pneumatics/warnings/crossbleed-disag-open-man eq 1
|
||||
<test logic="AND">
|
||||
/systems/pneumatics/warnings/crossbleed-disag-open-auto eq 1
|
||||
/systems/electrical/bus/dc-2 ge 25
|
||||
</test>
|
||||
</test>
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag-closed">
|
||||
<default value="0"/>
|
||||
<test logic="AND" value="1">
|
||||
/systems/pneumatics/valves/crossbleed-valve-cmd eq 0
|
||||
/systems/pneumatics/valves/crossbleed-valve ne 0
|
||||
</test>
|
||||
<test logic="AND" value="1">
|
||||
</switch>
|
||||
|
||||
<switch name="/systems/pneumatics/warnings/crossbleed-disag">
|
||||
<default value="0"/>
|
||||
<test logic="OR" value="1">
|
||||
/systems/pneumatics/warnings/crossbleed-disag-closed eq 1
|
||||
/systems/pneumatics/warnings/crossbleed-disag-open eq 1
|
||||
</test>
|
||||
</switch>
|
||||
|
|
|
@ -6,24 +6,22 @@
|
|||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>0.1</value>
|
||||
<value>1.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/controls/electrical/switches/gen-1</property>
|
||||
<not><property>/controls/electrical/switches/gen-1</property></not>
|
||||
</S>
|
||||
<output>/systems/electrical/some-electric-thingie/generator-1-pb</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>0.1</value>
|
||||
<value>1.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/controls/electrical/switches/gen-2</property>
|
||||
<not><property>/controls/electrical/switches/gen-2</property></not>
|
||||
</S>
|
||||
<output>/systems/electrical/some-electric-thingie/generator-2-pb</output>
|
||||
</flipflop>
|
||||
|
@ -80,6 +78,29 @@
|
|||
<output>/systems/electrical/some-electric-thingie/generator-2-reset</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>10.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<not><property>/systems/electrical/some-electric-thingie/emer-elec-config</property></not>
|
||||
</S>
|
||||
<output>/systems/electrical/some-electric-thingie/emer-elec-config-10-sec</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<time>
|
||||
<value>20.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<not><property>/systems/electrical/some-electric-thingie/emer-elec-config</property></not>
|
||||
</S>
|
||||
<output>/systems/electrical/some-electric-thingie/emer-elec-config-20-sec</output>
|
||||
</flipflop>
|
||||
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
|
@ -303,7 +324,7 @@
|
|||
<output>ECAM/warnings/altitude-alert/gear-downlocked-output</output>
|
||||
</flipflop>
|
||||
|
||||
<!-- falling edge detector - take inverse of following -->
|
||||
<!-- falling edge detector - switch and output both false -->
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
|
@ -311,9 +332,9 @@
|
|||
<value>4.5</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>ECAM/phases/monostable/phase-8</property>
|
||||
<property>/ECAM/phases/monostable/phase-8</property>
|
||||
</S>
|
||||
<output>ECAM/phases/monostable/phase-8-output</output>
|
||||
<output>/ECAM/phases/monostable/phase-8-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
|
@ -412,30 +433,6 @@
|
|||
</flipflop>
|
||||
|
||||
<!-- falling edge detectors -->
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>10.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/ECAM/warnings/timer/xbleed-fault-output</property>
|
||||
</S>
|
||||
<output>/ECAM/warnings/timer/xbleed-fault-output-10</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>15.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/controls/engines/engine[0]/fire-btn</property>
|
||||
</S>
|
||||
<output>/ECAM/warnings/timer/xbleed-fault-output-15</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
|
@ -926,7 +923,7 @@
|
|||
<value>1.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/stall/phase-8</property>
|
||||
<property>/ECAM/phases/monostable/phase-8</property>
|
||||
</S>
|
||||
<output>/ECAM/warnings/logic/stall/phase-8-output</output>
|
||||
</flipflop>
|
||||
|
@ -1029,4 +1026,139 @@
|
|||
</R>
|
||||
<output>/ECAM/phases/phase-calculation/altitude-ge-800</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/fctl/flaps-config-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/fctl/flaps-config-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/fctl/flaps-config-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/fctl/slats-config-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/fctl/slats-config-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/fctl/slats-config-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/fctl/spd-brk-config-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/fctl/spd-brk-config-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/fctl/spd-brk-config-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/fctl/pitch-trim-config-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/fctl/pitch-trim-config-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/fctl/pitch-trim-config-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/fctl/rudder-trim-config-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/fctl/rudder-trim-config-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/fctl/rudder-trim-config-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>SR</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/fctl/park-brk-config-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/fctl/park-brk-config-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/fctl/park-brk-config-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/eng/eng-1-fail-cond-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/logic/eng/eng-1-fail-cond-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/logic/eng/eng-1-fail-cond</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/eng/eng-2-fail-cond-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/logic/eng/eng-2-fail-cond-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/logic/eng/eng-2-fail-cond</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/eng/eng-1-fail-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/logic/eng/eng-1-fail-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/logic/eng/eng-1-fail-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>RS</type>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/eng/eng-2-fail-set</property>
|
||||
</S>
|
||||
<R>
|
||||
<property>/ECAM/warnings/logic/eng/eng-2-fail-reset</property>
|
||||
</R>
|
||||
<output>/ECAM/warnings/logic/eng/eng-2-fail-output</output>
|
||||
</flipflop>
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>30.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/eng/phase-5</property>
|
||||
</S>
|
||||
<output>/ECAM/warnings/logic/eng/phase-5-output</output>
|
||||
</flipflop>
|
||||
|
||||
|
||||
<flipflop>
|
||||
<type>monostable</type>
|
||||
<inverted type="bool">true</inverted>
|
||||
<time>
|
||||
<value>1.0</value>
|
||||
</time>
|
||||
<S>
|
||||
<property>/ECAM/warnings/logic/eng/phase-5-output</property>
|
||||
</S>
|
||||
<output>/ECAM/warnings/logic/eng/phase-5-output-2</output>
|
||||
</flipflop>
|
||||
</PropertyList>
|
||||
|
|
|
@ -79,7 +79,40 @@
|
|||
<input>0</input>
|
||||
<output>/controls/engines/idle-limit</output>
|
||||
</filter>
|
||||
|
||||
|
||||
<filter>
|
||||
<name>Engines At Idle Stage 1</name>
|
||||
<type>gain</type>
|
||||
<gain>1.0</gain>
|
||||
<input>
|
||||
<expression>
|
||||
<difference>
|
||||
<table>
|
||||
<max>
|
||||
<property>/engines/engine[0]/n1-actual</property>
|
||||
<property>/engines/engine[1]/n1-actual</property>
|
||||
</max>
|
||||
<entry><ind> 18.9</ind><dep>0</dep></entry>
|
||||
<entry><ind>103.8</ind><dep>1</dep></entry>
|
||||
</table>
|
||||
<value>0.005</value>
|
||||
</difference>
|
||||
</expression>
|
||||
</input>
|
||||
<output>/engines/highest-n1-buffer</output>
|
||||
</filter>
|
||||
|
||||
<logic>
|
||||
<name>Engines At Idle Stage 2</name>
|
||||
<input>
|
||||
<less-than-equals>
|
||||
<property>/engines/highest-n1-buffer</property>
|
||||
<property>/controls/engines/idle-limit</property>
|
||||
</less-than-equals>
|
||||
</input>
|
||||
<output>/engines/both-at-idle</output>
|
||||
</logic>
|
||||
|
||||
<filter>
|
||||
<name>MAN One</name>
|
||||
<type>gain</type>
|
||||
|
|
|
@ -80,7 +80,40 @@
|
|||
<input>0</input>
|
||||
<output>/controls/engines/idle-limit</output>
|
||||
</filter>
|
||||
|
||||
|
||||
<filter>
|
||||
<name>Engines At Idle Stage 1</name>
|
||||
<type>gain</type>
|
||||
<gain>1.0</gain>
|
||||
<input>
|
||||
<expression>
|
||||
<difference>
|
||||
<table>
|
||||
<max>
|
||||
<property>/engines/engine[0]/n1-actual</property>
|
||||
<property>/engines/engine[1]/n1-actual</property>
|
||||
</max>
|
||||
<entry><ind> 22.4</ind><dep>0</dep></entry>
|
||||
<entry><ind>103.8</ind><dep>1</dep></entry>
|
||||
</table>
|
||||
<value>0.005</value>
|
||||
</difference>
|
||||
</expression>
|
||||
</input>
|
||||
<output>/engines/highest-n1-buffer</output>
|
||||
</filter>
|
||||
|
||||
<logic>
|
||||
<name>Engines At Idle Stage 2</name>
|
||||
<input>
|
||||
<less-than-equals>
|
||||
<property>/engines/highest-n1-buffer</property>
|
||||
<property>/controls/engines/idle-limit</property>
|
||||
</less-than-equals>
|
||||
</input>
|
||||
<output>/engines/both-at-idle</output>
|
||||
</logic>
|
||||
|
||||
<filter>
|
||||
<name>MAN One</name>
|
||||
<type>gain</type>
|
||||
|
|
|
@ -1 +1 @@
|
|||
46
|
||||
47
|
Loading…
Add table
Reference in a new issue