1
0
Fork 0

Merge branch 'dev' into rework

This commit is contained in:
Inuyaksa 2021-08-24 22:14:32 +02:00
commit 7b27024e1c
60 changed files with 128654 additions and 127613 deletions

View file

@ -212,6 +212,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -1058,6 +1058,19 @@
<ratman type="bool">0</ratman>
</protectors>
</OH>
<oxygen>
<cockpit-oxygen-supply-pb type="bool">0</cockpit-oxygen-supply-pb>
<cockpit-mask-1-on type="bool">0</cockpit-mask-1-on>
<cockpit-mask-2-on type="bool">0</cockpit-mask-2-on>
<cockpit-mask-3-on type="bool">0</cockpit-mask-3-on>
<cockpit-mask-4-on type="bool">0</cockpit-mask-4-on>
<cockpit-mask-1-selector type="bool">0</cockpit-mask-1-selector>
<cockpit-mask-2-selector type="bool">0</cockpit-mask-2-selector>
<cockpit-mask-3-selector type="bool">0</cockpit-mask-3-selector>
<cockpit-mask-4-selector type="bool">0</cockpit-mask-4-selector>
<passenger-mask-deploy-man type="bool">0</passenger-mask-deploy-man>
<passenger-mask-reset type="bool">0</passenger-mask-reset>
</oxygen>
<pneumatics n="0">
<switches n="0">
<apu type="bool">0</apu>
@ -1285,8 +1298,6 @@
<ac-ess-bus type="bool">0</ac-ess-bus>
<ac-1-bus type="bool">0</ac-1-bus>
<ac-2-bus type="bool">0</ac-2-bus>
<bat-1 type="bool">0</bat-1>
<bat-2 type="bool">0</bat-2>
<dc-bat-bus type="bool">0</dc-bat-bus>
<dc-ess-bus type="bool">0</dc-ess-bus>
<dc-1-bus type="bool">0</dc-1-bus>
@ -1580,6 +1591,7 @@
<operating-3 type="bool">0</operating-3>
</adr>
</navigation>
</systems>
<options n="0">
@ -4719,7 +4731,6 @@
<file>Aircraft/A320-family/Nasal/MCDU/PERFTO.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/RADNAV.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/DATA.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/DATA2.nas</file>
<file>Aircraft/A320-family/Nasal/MCDU/STATUS.nas</file>
</mcdu>
<!-- Traffic layer from E-jet -->
@ -4757,6 +4768,7 @@
<file>Aircraft/A320-family/Models/Instruments/IESI/IESI.nas</file>
</canvas_iesi>
<canvas_mcdu>
<file>Aircraft/A320-family/Models/Instruments/MCDU/MCDU-funcs.nas</file>
<file>Aircraft/A320-family/Models/Instruments/MCDU/MCDU.nas</file>
</canvas_mcdu>
<canvas_qrh>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -211,6 +211,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-engine-fire"/>
<system file="a320-adr"/>
<system file="a320-apu"/>
<system file="a320-oxygen"/>
<system file="a320-fmgc"/>
<system file="a320-misc"/>

View file

@ -104,14 +104,30 @@ setlistener("/systems/acconfig/new-revision", func {
}
});
var fgfsMin = split(".", getprop("/sim/minimum-fg-version"));
var fgfsVer = split(".", getprop("/sim/version/flightgear"));
var versionCheck = func() {
if (fgfsVer[0] < fgfsMin[0] or fgfsVer[1] < fgfsMin[1]) {
return 0;
} else if (fgfsVer[1] == fgfsMin[1]) {
if (fgfsVer[2] < fgfsMin[2]) {
return 0;
} else {
return 1;
}
} else {
return 1;
}
}
var mismatch_chk = func {
if (num(string.replace(getprop("/sim/version/flightgear"),".","")) < 201920) {
if (!versionCheck()) {
setprop("/systems/acconfig/mismatch-code", "0x121");
setprop("/systems/acconfig/mismatch-reason", "FGFS version is too old! Please update FlightGear to at least 2019.2.0.");
setprop("/systems/acconfig/mismatch-reason", "FGFS version is too old! Please update FlightGear to at least " ~ getprop("/sim/minimum-fg-version") ~ ".");
if (getprop("/systems/acconfig/out-of-date") != 1) {
error_mismatch.open();
}
libraries.systemsLoop.stop();
print("Mismatch: 0x121");
welcome_dlg.close();
} else if (getprop("/gear/gear[0]/wow") == 0 or getprop("/position/altitude-ft") >= 15000) {
@ -120,7 +136,6 @@ var mismatch_chk = func {
if (getprop("/systems/acconfig/out-of-date") != 1) {
error_mismatch.open();
}
libraries.systemsLoop.stop();
print("Mismatch: 0x223");
welcome_dlg.close();
} else if (getprop("/systems/acconfig/libraries-loaded") != 1) {
@ -129,7 +144,6 @@ var mismatch_chk = func {
if (getprop("/systems/acconfig/out-of-date") != 1) {
error_mismatch.open();
}
libraries.systemsLoop.stop();
print("Mismatch: 0x247");
welcome_dlg.close();
}
@ -323,7 +337,7 @@ var beforestart = func {
setprop("/controls/flight/elevator-trim", 0);
libraries.systemsInit();
libraries.variousReset();
setprop("/controls/oxygen/crewOxyPB", 1);
setprop("/controls/oxygen/cockpit-oxygen-supply-pb", 1);
failResetOld();
# Now the Startup!
@ -419,7 +433,7 @@ var taxi = func {
setprop("/controls/flight/elevator-trim", 0);
libraries.systemsInit();
libraries.variousReset();
setprop("/controls/oxygen/crewOxyPB", 1);
setprop("/controls/oxygen/cockpit-oxygen-supply-pb", 1);
failResetOld();
# Now the Startup!

View file

@ -412,26 +412,6 @@
<live>true</live>
</checkbox>
<checkbox>
<label>BATTERY 1</label>
<halign>left</halign>
<property>/systems/failures/electrical/bat-1</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>BATTERY 2</label>
<halign>left</halign>
<property>/systems/failures/electrical/bat-2</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>DC ESS BUS</label>
<halign>left</halign>

View file

@ -172,6 +172,8 @@
</hrule>
</group>
<group>
<layout>hbox</layout>
<checkbox>
<label>Front Left</label>
<halign>left</halign>
@ -191,6 +193,7 @@
</binding>
<live>true</live>
</checkbox>
</group>
<checkbox>
<label>Stairway Cover</label>
@ -342,6 +345,59 @@
<value>1</value>
</binding>
</button>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Oxygen</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<group>
<layout>hbox</layout>
<button>
<legend>Replace Oxygen Bottle</legend>
<halign>center</halign>
<padding>5</padding>
<enable>
<property>/gear/gear[1]/wow</property>
</enable>
<binding>
<command>property-assign</command>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<value>2183</value>
</binding>
</button>
<text>
<x>10</x>
<y>200</y>
<label>8888 litres</label><!-- placeholder for width -->
<format>%4.0f litres</format>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<live>true</live>
</text>
</group>
<button>
<legend>Reset Pax Oxy Masks</legend>
<halign>center</halign>
<padding>5</padding>
<enable>
<property>/gear/gear[1]/wow</property>
</enable>
<binding>
<command>property-assign</command>
<property>/systems/oxygen/passenger-oxygen/masks-deploy</property>
<value>0</value>
</binding>
</button>
</group>
</PropertyList>

View file

@ -996,6 +996,7 @@
<property>modes/fo-du-xfr</property>
<factor>-0.20062</factor>
<axis>
<x>-0.004984547901</x>
<x>0</x>
<y>1</y>
<z>0</z>
@ -3073,6 +3074,10 @@
<value>0</value>
<value>1</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/knb1", 1);</script>
</binding>
</action>
</animation>
@ -3437,6 +3442,10 @@
<command>property-toggle</command>
<property>modes/pfd/ILS1</property>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3472,6 +3481,10 @@
<command>property-toggle</command>
<property>modes/pfd/ILS2</property>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3544,9 +3557,12 @@
} else {
fcu.cpt_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3586,9 +3602,12 @@
} else {
fcu.fo_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3628,9 +3647,12 @@
} else {
fcu.cpt_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3670,9 +3692,12 @@
} else {
fcu.fo_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3712,9 +3737,12 @@
} else {
fcu.cpt_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3754,9 +3782,12 @@
} else {
fcu.fo_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3796,9 +3827,12 @@
} else {
fcu.cpt_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3838,9 +3872,12 @@
} else {
fcu.fo_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3880,9 +3917,12 @@
} else {
fcu.cpt_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -3922,9 +3962,12 @@
} else {
fcu.fo_efis_btns("off");
}
setprop("sim/sounde/btn1", 1);
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -4111,6 +4154,10 @@
<value>1</value> <!-- VOR -->
<value>-1</value> <!-- ADF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
<action>
<button>1</button>
@ -4122,6 +4169,10 @@
<value>1</value> <!-- VOR -->
<value>0</value> <!-- OFF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -4151,6 +4202,10 @@
<value>1</value> <!-- VOR -->
<value>-1</value> <!-- ADF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
<action>
<button>1</button>
@ -4162,6 +4217,10 @@
<value>1</value> <!-- VOR -->
<value>0</value> <!-- OFF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -4191,6 +4250,10 @@
<value>1</value> <!-- VOR -->
<value>-1</value> <!-- ADF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
<action>
<button>1</button>
@ -4202,6 +4265,10 @@
<value>1</value> <!-- VOR -->
<value>0</value> <!-- OFF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -4231,6 +4298,10 @@
<value>1</value> <!-- VOR -->
<value>-1</value> <!-- ADF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
<action>
<button>1</button>
@ -4242,6 +4313,10 @@
<value>1</value> <!-- VOR -->
<value>0</value> <!-- OFF -->
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/switch1", 1);</script>
</binding>
</action>
</animation>
<animation>
@ -5518,6 +5593,22 @@
</condition>
</animation>
<animation>
<type>pick</type>
<object-name>metric_alt</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>
fcu.FCUController.MetricAlt();
setprop("sim/sounde/btn1", 1);
</script>
</binding>
</action>
</animation>
<!-- Flap Lever -->
<animation>
<type>pick</type>
@ -6461,6 +6552,10 @@
}
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
@ -6495,6 +6590,10 @@
}
</script>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
@ -7453,19 +7552,15 @@
<object-name>vs.ind</object-name>
<object-name>fpa.ind</object-name>
<object-name>fpa.ind.001</object-name>
<object-name>atc-code</object-name>
<object-name>atc-test</object-name>
<object-name>fpa-text</object-name>
<object-name>qnh-inhg</object-name>
<object-name>qnh-hpa</object-name>
<object-name>qnh-std</object-name>
<object-name>qnh-test</object-name>
<object-name>rudder-trim</object-name>
<object-name>rudder-trim-letter</object-name>
<diffuse>
<red>0.75</red>
<green>0.30</green>
<blue>0.0</blue>
<red>1.00</red>
<green>0.515</green>
<blue>0.00</blue>
<factor-prop>controls/lighting/fcu-digit-norm</factor-prop>
</diffuse>
<ambient>
@ -7479,9 +7574,9 @@
<blue>0</blue>
</specular>
<emission>
<red>0.75</red>
<green>0.30</green>
<blue>0.0</blue>
<red>1.00</red>
<green>0.515</green>
<blue>0.00</blue>
<factor-prop>controls/lighting/fcu-digit-norm</factor-prop>
</emission>
</animation>
@ -7490,10 +7585,12 @@
<type>material</type>
<object-name>rudder-trim</object-name>
<object-name>rudder-trim-letter</object-name>
<object-name>atc-code</object-name>
<object-name>atc-test</object-name>
<diffuse>
<red>0.75</red>
<green>0.30</green>
<blue>0.0</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</diffuse>
<ambient>
<red>0</red>
@ -7506,9 +7603,9 @@
<blue>0</blue>
</specular>
<emission>
<red>0.75</red>
<green>0.30</green>
<blue>0.0</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</emission>
</animation>
@ -8909,9 +9006,9 @@
<object-name>dme1</object-name>
<!-- <object-name>dme1_20</object-name>-->
<diffuse>
<red>0.89</red>
<green>0.37</green>
<blue>0.08</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</diffuse>
<ambient>
<red>0</red>
@ -8924,9 +9021,9 @@
<blue>0</blue>
</specular>
<emission>
<red>0.89</red>
<green>0.37</green>
<blue>0.08</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</emission>
</animation>
@ -9056,6 +9153,10 @@
<value>1</value>
<value>2</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>
@ -9073,6 +9174,10 @@
<value>1</value>
<value>2</value>
</binding>
<binding>
<command>nasal</command>
<script>setprop("sim/sounde/btn1", 1);</script>
</binding>
</action>
</animation>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

@ -26,7 +26,6 @@ var canvas_lowerECAMPageDoor =
obj["Cabin3LeftSlide"].hide();
obj["Cabin3RightSlide"].hide();
obj["DOOROXY-REGUL-LO-PR"].hide();
obj["AvionicsLine1"].hide();
obj["AvionicsLine2"].hide();
obj["AvionicsLbl1"].hide();
@ -153,16 +152,23 @@ var canvas_lowerECAMPageDoor =
obj["Cargo1Line"].hide();
}
}),
props.UpdateManager.FromHashValue("oxyPB", nil, func(val) {
if (val) {
props.UpdateManager.FromHashList(["oxyPB","oxyBottlePress","oxyBottleRegulLoPr"], nil, func(val) {
if (val.oxyPB) {
if (val.oxyBottlePress < 300 or val.oxyBottleRegulLoPr) {
obj["DOOROXY-OxyIndicator"].setColor(0.7333,0.3803,0);
} else {
obj["DOOROXY-OxyIndicator"].setColor(0.8078,0.8039,0.8078);
obj["DOOROXY-PR"].setColor(0.0509,0.7529,0.2941);
obj["DOOROXY-PR"].setText("1300");
}
} else {
obj["DOOROXY-OxyIndicator"].setColor(0.7333,0.3803,0);
obj["DOOROXY-PR"].setColor(0.7333,0.3803,0);
obj["DOOROXY-PR"].setText("0");
}
if (val.oxyBottlePress < 300) {
obj["DOOROXY-PR"].setColor(0.7333,0.3803,0);
} else {
obj["DOOROXY-PR"].setColor(0.0509,0.7529,0.2941);
}
obj["DOOROXY-PR"].setText(sprintf("%4.0f", math.round(val.oxyBottlePress, 10)));
}),
props.UpdateManager.FromHashValue("pressVS", nil, func(val) {
if (val > 9950) {
@ -186,6 +192,13 @@ var canvas_lowerECAMPageDoor =
obj["DOOR-VS-Container"].hide();
}
}),
props.UpdateManager.FromHashValue("oxyBottleRegulLoPr", nil, func(val) {
if (val) {
obj["DOOROXY-REGUL-LO-PR"].show();
} else {
obj["DOOROXY-REGUL-LO-PR"].hide();
}
}),
];
obj.displayedGForce = 0;
@ -326,7 +339,9 @@ var input = {
cargoAft: "/sim/model/door-positions/cargoaft/position-norm",
cargoBulk: "/sim/model/door-positions/cargobulk/position-norm",
cargoFwd: "/sim/model/door-positions/cargofwd/position-norm",
oxyPB: "/controls/oxygen/crewOxyPB",
oxyPB: "/controls/oxygen/cockpit-oxygen-supply-pb",
oxyBottlePress: "/systems/oxygen/cockpit-oxygen/bottle-psi",
oxyBottleRegulLoPr: "/systems/oxygen/cockpit-oxygen/regul-lo-pr",
};
foreach (var name; keys(input)) {

View file

@ -631,14 +631,16 @@ var canvas_lowerECAMPageElec =
} else {
obj["ELEC-Line-APU-EXT"].hide();
}
if (val.elecExtEPC and (val.elecAcTie1 or val.elecAcTie2)) {
}),
props.UpdateManager.FromHashValue("elecExtEPC", nil, func(val) {
if (val) {
obj["EXT-out"].show();
} else {
obj["EXT-out"].hide();
}
if (val.apuGLC and (val.elecAcTie1 or val.elecAcTie2)) {
}),
props.UpdateManager.FromHashValue("apuGLC", nil, func(val) {
if (val) {
obj["APU-out"].show();
} else {
obj["APU-out"].hide();

View file

@ -0,0 +1,359 @@
var showLeft = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_L1"].show();
} else {
obj["Simple_L1"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_L2"].show();
} else {
obj["Simple_L2"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_L3"].show();
} else {
obj["Simple_L3"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_L4"].show();
} else {
obj["Simple_L4"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_L5"].show();
} else {
obj["Simple_L5"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_L6"].show();
} else {
obj["Simple_L6"].hide();
}
}
};
var showLeftS = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_L1S"].show();
} else {
obj["Simple_L1S"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_L2S"].show();
} else {
obj["Simple_L2S"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_L3S"].show();
} else {
obj["Simple_L3S"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_L4S"].show();
} else {
obj["Simple_L4S"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_L5S"].show();
} else {
obj["Simple_L5S"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_L6S"].show();
} else {
obj["Simple_L6S"].hide();
}
}
};
var showCenter = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_C1"].show();
} else {
obj["Simple_C1"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_C2"].show();
} else {
obj["Simple_C2"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_C3"].show();
} else {
obj["Simple_C3"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_C4"].show();
} else {
obj["Simple_C4"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_C5"].show();
} else {
obj["Simple_C5"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_C6"].show();
} else {
obj["Simple_C6"].hide();
}
}
};
var showCenterS = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_C1S"].show();
} else {
obj["Simple_C1S"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_C2S"].show();
} else {
obj["Simple_C2S"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_C3S"].show();
} else {
obj["Simple_C3S"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_C4S"].show();
} else {
obj["Simple_C4S"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_C5S"].show();
} else {
obj["Simple_C5S"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_C6S"].show();
} else {
obj["Simple_C6S"].hide();
}
}
};
var showRight = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_R1"].show();
} else {
obj["Simple_R1"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_R2"].show();
} else {
obj["Simple_R2"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_R3"].show();
} else {
obj["Simple_R3"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_R4"].show();
} else {
obj["Simple_R4"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_R5"].show();
} else {
obj["Simple_R5"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_R6"].show();
} else {
obj["Simple_R6"].hide();
}
}
};
var showRightS = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_R1S"].show();
} else {
obj["Simple_R1S"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_R2S"].show();
} else {
obj["Simple_R2S"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_R3S"].show();
} else {
obj["Simple_R3S"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_R4S"].show();
} else {
obj["Simple_R4S"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_R5S"].show();
} else {
obj["Simple_R5S"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_R6S"].show();
} else {
obj["Simple_R6S"].hide();
}
}
};
var showLeftArrow = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_L1_Arrow"].show();
} else {
obj["Simple_L1_Arrow"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_L2_Arrow"].show();
} else {
obj["Simple_L2_Arrow"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_L3_Arrow"].show();
} else {
obj["Simple_L3_Arrow"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_L4_Arrow"].show();
} else {
obj["Simple_L4_Arrow"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_L5_Arrow"].show();
} else {
obj["Simple_L5_Arrow"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_L6_Arrow"].show();
} else {
obj["Simple_L6_Arrow"].hide();
}
}
};
var showRightArrow = func (obj, a, b, c, d, e, f) {
if (a != 0) {
if (a >= 1) {
obj["Simple_R1_Arrow"].show();
} else {
obj["Simple_R1_Arrow"].hide();
}
}
if (b != 0) {
if (b >= 1) {
obj["Simple_R2_Arrow"].show();
} else {
obj["Simple_R2_Arrow"].hide();
}
}
if (c != 0) {
if (c >= 1) {
obj["Simple_R3_Arrow"].show();
} else {
obj["Simple_R3_Arrow"].hide();
}
}
if (d != 0) {
if (d >= 1) {
obj["Simple_R4_Arrow"].show();
} else {
obj["Simple_R4_Arrow"].hide();
}
}
if (e != 0) {
if (e >= 1) {
obj["Simple_R5_Arrow"].show();
} else {
obj["Simple_R5_Arrow"].hide();
}
}
if (f != 0) {
if (f >= 1) {
obj["Simple_R6_Arrow"].show();
} else {
obj["Simple_R6_Arrow"].hide();
}
}
};

File diff suppressed because it is too large Load diff

View file

@ -218,6 +218,7 @@ var canvas_ND_1 = {
# here we make the ND:
me.NDCpt = ND.new("/instrumentation/efis", myCockpit_switches, "Airbus");
me.NDCpt.attitude_heading_setting = -1;
me.NDCpt.number = 0;
me.NDCpt.adirs_property = props.globals.getNode("/instrumentation/efis[0]/nd/ir-1",1);
me.NDCpt.newMFD(canvas_group);
me.NDCpt.change_phase = 0;
@ -243,6 +244,7 @@ var canvas_ND_2 = {
myCockpit_switches["ADIRS"]= {path: "/nd/ir-2", value: 0, type: "BOOL"};
me.NDFo = ND.new("/instrumentation/efis[1]", myCockpit_switches, "Airbus");
me.NDFo.attitude_heading_setting = 1;
me.NDFo.number = 1;
me.NDFo.adirs_property = props.globals.getNode("/instrumentation/efis[1]/nd/ir-2",1);
me.NDFo.newMFD(canvas_group);
me.NDFo.change_phase = 0;

View file

@ -225,7 +225,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update
# anything that needs updatecenter called, should be added to the vector here
#
foreach(var element; ["staFromL2","staToL2","staFromR2","staToR2",
"hdgTrk","trkInd","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr",
"hdgTrk","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr",
"HdgBugCRT2","TrkBugLCD2","HdgBugLCD2","hdgBug2","selHdgLine","selHdgLine2","curHdgPtr2",
"staToL","staFromL","staToR","staFromR"] )
me.symbols[element] = me.nd.getElementById(element).updateCenter();
@ -613,13 +613,11 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
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"))
{
me.symbols.trkInd.setRotation(0);
me.symbols.curHdgPtr.setRotation((userHdg-userTrk)*D2R);
me.symbols.curHdgPtr2.setRotation((userHdg-userTrk)*D2R);
}
else
{
me.symbols.trkInd.setRotation((userTrk-userHdg)*D2R);
me.symbols.curHdgPtr.setRotation(0);
me.symbols.curHdgPtr2.setRotation(0);
}
@ -656,10 +654,6 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
var adf0hdg = getprop("/instrumentation/adf/indicated-bearing-deg");
var adf1hdg = getprop("/instrumentation/adf[1]/indicated-bearing-deg");
if(!me.get_switch("toggle_centered")) {
if(me.in_mode("toggle_display_mode", ["PLAN"]) or (me.adirs_property.getValue() != 1 or (me.change_phase == 1) and (adirs_3.getValue() != 1 or att_switch.getValue() != me.attitude_heading_setting)))
me.symbols.trkInd.hide();
else
me.symbols.trkInd.show();
if((getprop("/instrumentation/nav[2]/in-range") and me.get_switch("toggle_lh_vor_adf") == 1)) {
me.symbols.staToL.setColor(0.195,0.96,0.097);
me.symbols.staFromL.setColor(0.195,0.96,0.097);
@ -713,7 +707,6 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec
}
me.symbols.selHdgLine.setVisible(staPtrVis and hdg_bug_active);
} else {
me.symbols.trkInd.hide();
if((getprop("/instrumentation/nav[2]/in-range") and me.get_switch("toggle_lh_vor_adf") == 1)) {
me.symbols.staFromL2.setColor(0.195,0.96,0.097);
me.symbols.staToL2.setColor(0.195,0.96,0.097);

View file

@ -23,8 +23,7 @@ var init = func {
var draw = func{
if(me.decel_grp != nil){
var spd_ctrl = getprop(me.options.spd_ctrl);
var spd_managed = (spd_ctrl == me.options.managed_val);
if(spd_managed)
if(spd_ctrl)
me.decel_grp.setColor(me.style.managed_color);
else
me.decel_grp.setColor(me.style.selected_color);

View file

@ -82,7 +82,7 @@ var draw = func{
var wp_group = me.element;
var alt = me.model.alt;
var i = me.model.idx;
var vnav_actv = getprop(me.options.ver_ctrl) == me.options.managed_val;
var vnav_actv = getprop(me.options.spd_ctrl) == 1;
var curwp = getprop(me.options.current_wp);
if(alt > 0){
var wp_d = me.model.wp.distance_along_route;

View file

@ -1183,43 +1183,29 @@
x="198.86594"
y="648.10144">99</tspan></text>
<g
id="trkInd"
inkscape:label="#g3107"
inkscape:transform-center-y="-318.607"
inkscape:transform-center-x="-0.165"><path
inkscape:transform-center-y="-715.775"
inkscape:label="#path3882"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="curTrkPtr"
<path
style="display:inline;fill:none;stroke:#0dc04b;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 494.187,150.9257 512.25,179.3894 530.312,150.9257 512.25,122.462 Z"
style="display:inline;fill:none;stroke:#0dc04b;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
inkscape:label="#path6714"
inkscape:transform-center-y="-436.38973"
style="fill:none;stroke:#66b266;stroke-width:5.12176;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 512,179.04645 V 777.94594"
id="curTrkPtr"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:label="#path3882"
inkscape:transform-center-y="-673.07581"
inkscape:transform-center-x="-0.25" /><path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="trkline"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" /><path
style="fill:none;stroke:#ededed;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 497.671,651.001 h 27.578"
id="path3823"
inkscape:connector-curvature="0" /><path
inkscape:connector-curvature="0"
id="path3825"
d="m 497.671,478.113 h 27.578"
style="fill:none;stroke:#ededed;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
style="fill:none;stroke:#ededed;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 498.171,306.64 h 27.578"
id="path3827"
inkscape:connector-curvature="0" /><path
d="M 512,179.04645 V 777.94594"
style="fill:none;stroke:#66b266;stroke-width:5.12175989;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-y="-345.50518"
inkscape:label="#path6714"
inkscape:transform-center-x="-0.001953124" /><path
sodipodi:nodetypes="cscc"
inkscape:connector-curvature="0"
id="altArc"
d="m 351.124,888.591 c 0,0 72.1,-39.455 161.041,-39.455 88.941,0 161.041,39.455 161.041,39.455 v 0"
style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0"
inkscape:label="#path3888-1" /></g>
inkscape:label="#path3888-1" />
<g
inkscape:transform-center-x="-0.198874"
inkscape:transform-center-y="4.4952743"
@ -1614,22 +1600,24 @@
inkscape:connector-curvature="0"
id="path4921"
d="m 97.36195,-183.49186 34.40958,0.79658 v 0"
style="fill:none;stroke:#ff00ff;stroke-width:6.72142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
id="trkInd2"
inkscape:transform-center-y="-221.51123"><path
style="fill:none;stroke:#ff00ff;stroke-width:6.72142;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g>
<path
id="curTrkPtr2"
d="M 494.187,114.9257 512.25,143.3894 530.312,114.9257 512.25,86.462 Z"
style="display:inline;fill:none;stroke:#0dc04b;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
inkscape:label="#path3998" /><path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="trkline2"
inkscape:label="#path3998"
inkscape:transform-center-x="-0.28439381"
inkscape:transform-center-y="-400.24318" /><path
inkscape:label="#path6714"
inkscape:transform-center-y="-195.62267"
style="fill:none;stroke:#66b266;stroke-width:4.09095001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 512,143.84995 V 525.93899"
style="fill:none;stroke:#66b266;stroke-width:4.09095;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-y="-278.41021"
inkscape:label="#path6714" /></g><path
id="trkline2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:transform-center-x="-0.16436971" /><path
id="aplSymVor"
style="fill:none;stroke:#ededed;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 523.994,501.789 v 58 h 51.042 m -51.042,0 v 57 h 18.782 m -43.653,-115 v 58 h -50.158 m 50.158,0 v 57 h -19.136"

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 149 KiB

View file

@ -529,7 +529,7 @@ canvas.NDStyles["Airbus"] = {
var lat_ctrl = getprop(me.options.lat_ctrl);
var is_managed = (lat_ctrl == me.options.managed_val);
var is_active = getprop(me.options.fplan_active);
(is_managed and is_active ? [] : [32, 16]);
(is_managed and is_active ? [] : [12, 12]);
},
line_dash_alternate_active: [32,16],
line_dash_temporary: [32,16],
@ -561,6 +561,7 @@ canvas.NDStyles["Airbus"] = {
"fplan_active",
"lat_ctrl",
"ver_ctrl",
"spd_ctrl",
"current_wp",
"wp_count",
"dep_rwy",
@ -707,18 +708,33 @@ canvas.NDStyles["Airbus"] = {
id: "nd_warn_memo",
impl: {
init: func(nd, symbol),
predicate: ALWAYS,
is_true: func(nd) nd.symbols.nd_warn_memo.hide(),
is_false: func(nd),
predicate: func(nd) {
(!systems.ADIRS.Operating.aligned[0].getBoolValue() and !systems.ADIRS.Operating.aligned[1].getBoolValue() and !systems.ADIRS.Operating.aligned[2].getBoolValue())
or (mcdu_scratchpad.scratchpads[nd.number].showTypeIIMsg and mcdu_scratchpad.scratchpads[nd.number].scratchpad == "GPS PRIMARY")
},
is_true: func(nd) {
nd.symbols.nd_warn_memo.show();
if (mcdu_scratchpad.scratchpads[nd.number].showTypeIIMsg and mcdu_scratchpad.scratchpads[nd.number].scratchpad == "GPS PRIMARY") {
nd.symbols.nd_warn_memo.setText("GPS PRIMARY");
nd.symbols.nd_warn_memo.setColor(0.8078,0.8039,0.8078);
} else {
nd.symbols.nd_warn_memo.setText("GPS PRIMARY LOST");
nd.symbols.nd_warn_memo.setColor(0.7333,0.3803,0);
}
},
is_false: func(nd) nd.symbols.nd_warn_memo.hide(),
},
},
{
id: "nd_warn_msgbox",
impl: {
init: func(nd, symbol),
predicate: ALWAYS,
is_true: func(nd) nd.symbols.nd_warn_msgbox.hide(),
is_false: func(nd),
predicate: func(nd) {
(!systems.ADIRS.Operating.aligned[0].getBoolValue() and !systems.ADIRS.Operating.aligned[1].getBoolValue() and !systems.ADIRS.Operating.aligned[2].getBoolValue())
or (mcdu_scratchpad.scratchpads[nd.number].showTypeIIMsg and mcdu_scratchpad.scratchpads[nd.number].scratchpad == "GPS PRIMARY")
},
is_true: func(nd) nd.symbols.nd_warn_msgbox.show(),
is_false: func(nd) nd.symbols.nd_warn_msgbox.hide(),
},
},
{
@ -743,21 +759,14 @@ canvas.NDStyles["Airbus"] = {
id: "tas",
impl: {
init: func(nd,symbol),
predicate: func(nd) nd.aircraft_source.get_spd() > 100,
predicate: func(nd) getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 60,
is_true: func(nd) {
nd.symbols.tas.setText(sprintf("%3.0f",getprop("/velocities/TAS") ));
nd.symbols.tas.setText(sprintf("%3.0f",getprop("/instrumentation/airspeed-indicator/true-speed-kt")));
nd.symbols.tas.show();
},
is_false: func(nd) nd.symbols.tas.hide(),
},
},
{
id: "tasLbl",
impl: {
init: func(nd,symbol),
predicate: func(nd) nd.aircraft_source.get_spd() > 100,
is_true: func(nd) nd.symbols.tasLbl.show(),
is_false: func(nd) nd.symbols.tasLbl.hide(),
is_false: func(nd){
nd.symbols.tas.setText("---");
}
},
},
{
@ -991,12 +1000,6 @@ canvas.NDStyles["Airbus"] = {
impl: {
init: func(nd,symbol),
common: func(nd) nd.symbols.gs.setText(sprintf("%3.0f",nd.aircraft_source.get_gnd_spd() )),
predicate: func(nd) nd.aircraft_source.get_gnd_spd() >= 30,
is_true: func(nd) {
#nd.symbols.gs.show();
nd.symbols.gs.setFontSize(36);
},
is_false: func(nd) {},#nd.symbols.gs.hide(),
},
},
{
@ -1318,36 +1321,47 @@ canvas.NDStyles["Airbus"] = {
is_false: func(nd) nd.symbols.dme.hide(),
},
},
{
id:"curTrkPtr",
impl: {
init: func(nd,symbol),
predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and !nd.get_switch("toggle_centered")
and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))
and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42),
is_true: func(nd) {
nd.symbols.curTrkPtr.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R);
nd.symbols.curTrkPtr.show();
},
is_false: func(nd) nd.symbols.curTrkPtr.hide(),
},
},
{
id:"trkline",
impl: {
init: func(nd,symbol),
predicate: func(nd){
nd.get_switch("toggle_display_mode") == "MAP" and !nd.get_switch("toggle_centered")
and (nd.change_phase != 1)
and (
getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val or
nd.get_switch("toggle_trk_line")
)
},
predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and
!nd.get_switch("toggle_centered") and (nd.change_phase != 1) and
getprop(nd.options.defaults.lat_ctrl) == 0 and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42 and
(nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
is_true: func(nd) {
nd.symbols.trkline.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R);
nd.symbols.trkline.show();
},
is_false: func(nd) nd.symbols.trkline.hide(),
},
},
{
id:"trkInd2",
id:"curTrkPtr2",
impl: {
init: func(nd,symbol),
predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and nd.get_switch("toggle_centered")
and (nd.change_phase != 1)
and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))
and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42),
is_true: func(nd) {
nd.symbols.trkInd2.show();
nd.symbols.trkInd2.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R);
nd.symbols.curTrkPtr2.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R);
nd.symbols.curTrkPtr2.show();
},
is_false: func(nd) nd.symbols.trkInd2.hide(),
is_false: func(nd) nd.symbols.curTrkPtr2.hide(),
},
},
{
@ -1356,9 +1370,10 @@ canvas.NDStyles["Airbus"] = {
init: func(nd,symbol),
predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and
nd.get_switch("toggle_centered") and (nd.change_phase != 1) and
getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val and
getprop(nd.options.defaults.lat_ctrl) == 0 and abs(nd.aircraft_source.get_trk_mag() - nd.aircraft_source.get_hdg_mag()) <= 42 and
(nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))),
is_true: func(nd) {
nd.symbols.trkline2.setRotation((nd.aircraft_source.get_trk_mag()-nd.aircraft_source.get_hdg_mag())*D2R);
nd.symbols.trkline2.show();
},
is_false: func(nd) nd.symbols.trkline2.hide(),
@ -1515,35 +1530,24 @@ canvas.NDStyles["Airbus"] = {
id:"wind",
impl: {
init: func(nd,symbol),
predicate: ALWAYS,
predicate: func(nd) (getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 100),
is_true: func(nd) {
var windDir = getprop("environment/wind-from-heading-deg");
if(!nd.get_switch("toggle_true_north"))
windDir = windDir + getprop("environment/magnetic-variation-deg");
nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,getprop("environment/wind-speed-kt")));
var windDir = pts.Instrumentation.PFD.windDirection.getValue() or 0;
nd.symbols.wind.setText(sprintf("%03.0f / %02.0f",windDir,pts.Instrumentation.PFD.windSpeed.getValue() or 0));
},
is_false: NOTHING,
is_false: func(nd) {
nd.symbols.wind.setText("---/--");
}
},
},
{
id:"windArrow",
impl: {
init: func(nd,symbol),
predicate: func(nd) (!(nd.in_mode("toggle_display_mode", ["PLAN"]) and (nd.get_switch("toggle_display_type") == "LCD"))),
predicate: func(nd) (!(nd.in_mode("toggle_display_mode", ["PLAN"]) and (nd.get_switch("toggle_display_type") == "LCD")) and (pts.Instrumentation.PFD.windSpeed.getValue() or 0) >= 2 and getprop("/instrumentation/airspeed-indicator/true-speed-kt") >= 100),
is_true: func(nd) {
nd.symbols.windArrow.show();
var windArrowRot = getprop("environment/wind-from-heading-deg");
if(nd.in_mode("toggle_display_mode", ["MAP","PLAN"])) {
if(nd.get_switch("toggle_true_north"))
windArrowRot = windArrowRot - nd.aircraft_source.get_trk_tru();
else
windArrowRot = windArrowRot - nd.aircraft_source.get_trk_mag();
} else {
if(nd.get_switch("toggle_true_north"))
windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_tru();
else
windArrowRot = windArrowRot - nd.aircraft_source.get_hdg_mag();
}
var windArrowRot = (pts.Instrumentation.PFD.windDirection.getValue() or 0) - nd.aircraft_source.get_hdg_tru();
nd.symbols.windArrow.setRotation(windArrowRot*D2R);
},
is_false: func(nd) nd.symbols.windArrow.hide(),

View file

@ -7314,6 +7314,10 @@
<command>nasal</command>
<script>libraries.MechCallFunc();</script>
</binding>
<binding>
<command>nasal</command>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>
@ -7333,6 +7337,33 @@
<command>nasal</command>
<script>libraries.CabinCallFunc();</script>
</binding>
<binding>
<command>nasal</command>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>AftCabinCall</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<condition>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
</condition>
<command>nasal</command>
<script>libraries.CabinCallFunc();</script>
</binding>
<binding>
<command>nasal</command>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>
@ -7502,37 +7533,13 @@
</action>
</animation-->
<animation>
<type>pick</type>
<object-name>PassOxyInd</object-name>
<object-name>PassOxyInd1S</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<condition>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
</condition>
<command>property-toggle</command>
<property>controls/oxygen/masksSys</property>
</binding>
<binding>
<command>nasal</command>
<script>libraries.pushbutton();</script>
</binding>
</action>
</animation>
<animation>
<type>select</type>
<object-name>PassOxyInd1S</object-name>
<condition>
<or>
<equals>
<property>controls/oxygen/masksSys</property>
<property>/systems/oxygen/passenger-oxygen/sys-on-light</property>
<value>1</value>
</equals>
<equals>
@ -7558,7 +7565,7 @@
</greater-than-equals>
</condition>
<command>property-toggle</command>
<property>controls/oxygen/crewOxyPB</property>
<property>controls/oxygen/cockpit-oxygen-supply-pb</property>
</binding>
<binding>
<command>nasal</command>
@ -7573,7 +7580,7 @@
<condition>
<or>
<equals>
<property>controls/oxygen/crewOxyPB</property>
<property>controls/oxygen/cockpit-oxygen-supply-pb</property>
<value>0</value>
</equals>
<equals>
@ -7603,8 +7610,9 @@
</greater-than-equals>
</and>
</condition>
<command>property-toggle</command>
<property>controls/oxygen/masksDeployMan</property>
<command>property-assign</command>
<property>controls/oxygen/passenger-mask-deploy-man</property>
<value>1</value>
</binding>
<binding>
<condition>
@ -7616,6 +7624,24 @@
<command>nasal</command>
<script>libraries.pushbutton();</script>
</binding>
<mod-up>
<binding>
<condition>
<and>
<equals>
<property>controls/OH/protectors/maskman</property>
<value>1</value>
</equals>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
</and>
</condition>
<command>property-assign</command>
<property>controls/oxygen/passenger-mask-deploy-man</property>
<value>0</value>
</binding>
<binding>
<condition>
<equals>
@ -7627,6 +7653,7 @@
<property>controls/OH/protectors/maskman</property>
<value>0</value>
</binding>
</mod-up>
</action>
</animation>

View file

@ -219,9 +219,9 @@ var canvas_PFD_base = {
"FMA_athr_box","FMA_Middle1","FMA_Middle2","ALPHA_MAX","ALPHA_PROT","ALPHA_SW","ALPHA_bars","VLS_min","ASI_max","ASI_scale","ASI_target","ASI_mach","ASI_mach_decimal","ASI_trend_up","ASI_trend_down","ASI_digit_UP","ASI_digit_DN","ASI_decimal_UP",
"ASI_decimal_DN","ASI_index","ASI_error","ASI_group","ASI_frame","AI_center","AI_bank","AI_bank_lim","AI_bank_lim_X","AI_pitch_lim","AI_pitch_lim_X","AI_slipskid","AI_horizon","AI_horizon_ground","AI_horizon_sky","AI_stick","AI_stick_pos","AI_heading",
"AI_agl_g","AI_agl","AI_error","AI_group","FD_roll","FD_pitch","ALT_box_flash","ALT_box","ALT_box_amber","ALT_scale","ALT_target","ALT_target_digit","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_digit_UP",
"ALT_digit_DN","ALT_error","ALT_neg","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale",
"ALT_digit_DN","ALT_digit_UP_metric","ALT_error","ALT_neg","ALT_group","ALT_group2","ALT_frame","VS_pointer","VS_box","VS_digit","VS_error","VS_group","QNH","QNH_setting","QNH_std","QNH_box","LOC_pointer","LOC_scale","GS_scale","GS_pointer","CRS_pointer","HDG_target","HDG_scale",
"HDG_one","HDG_two","HDG_three","HDG_four","HDG_five","HDG_six","HDG_seven","HDG_digit_L","HDG_digit_R","HDG_error","HDG_group","HDG_frame","TRK_pointer","machError","ilsError","ils_code","ils_freq","dme_dist","dme_dist_legend","ILS_HDG_R","ILS_HDG_L",
"ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref","FPV","spdLimError","vsFMArate"];
"ILS_right","ILS_left","outerMarker","middleMarker","innerMarker","v1_group","v1_text","vr_speed","F_target","S_target","FS_targets","flap_max","clean_speed","ground","ground_ref","FPV","spdLimError","vsFMArate","tailstrikeInd","Metric_box","Metric_letter","Metric_cur_alt"];
},
off: 0,
on: 0,
@ -346,6 +346,7 @@ var canvas_PFD_base = {
PFD_2_mismatch.page.show();
}
},
showMetricAlt: 0,
updateCommon: func () {
# FMA MAN TOGA MCT FLX THR
# Set properties used a lot to a variable to avoid calling getValue() multiple times
@ -395,6 +396,12 @@ var canvas_PFD_base = {
me["AI_agl"].setText(sprintf("%s", math.round(math.clamp(gear_agl_cur, 0, 2500))));
if (gear_agl_cur < 400 and pts.Velocities.groundspeed.getValue() > 50 and pts.Controls.Engines.Engine.throttlePos[0].getValue() < 0.78 and pts.Controls.Engines.Engine.throttlePos[1].getValue() < 0.78) {
me["tailstrikeInd"].show();
} else {
me["tailstrikeInd"].hide();
}
if (fmgc.FMGCInternal.phase < 3 or fmgc.flightPlanController.arrivalDist >= 250) {
me["FMA_dh_box"].hide();
me["FMA_dh"].hide();
@ -1033,7 +1040,6 @@ var canvas_PFD_base = {
me["QNH_std"].hide();
me["QNH_box"].hide();
}
},
# Get Angle of Attack from ADR1 or, depending on Switching panel, ADR3
@ -1696,6 +1702,18 @@ var canvas_PFD_1 = {
me["ALT_scale"].show();
me.altitude = dmc.DMController.DMCs[0].outputs[1].getValue();
if (me.showMetricAlt) {
me["Metric_box"].show();
me["Metric_letter"].show();
me["Metric_cur_alt"].show();
me["Metric_cur_alt"].setText(sprintf("%5.0f", me.altitude * 0.3048));
} else {
me["Metric_box"].hide();
me["Metric_letter"].hide();
me["Metric_cur_alt"].hide();
}
me.altOffset = me.altitude / 500 - int(me.altitude / 500);
me.middleAltText = roundaboutAlt(me.altitude / 100);
me.middleAltOffset = nil;
@ -1723,6 +1741,14 @@ var canvas_PFD_1 = {
me["ALT_tens"].setTranslation(0, altTens * 1.392);
ap_alt_cur = ap_alt.getValue();
if (me.showMetricAlt) {
me["ALT_digit_UP_metric"].show();
me["ALT_digit_UP_metric"].setText(sprintf("%5.0fM", ap_alt_cur * 0.3048));
} else {
me["ALT_digit_UP_metric"].hide();
}
alt_diff_cur = dmc.DMController.DMCs[0].outputs[7].getValue();
if (alt_diff_cur >= -565 and alt_diff_cur <= 565) {
me["ALT_target"].setTranslation(0, (alt_diff_cur / 100) * -48.66856);
@ -1832,6 +1858,10 @@ var canvas_PFD_1 = {
me["ALT_box_flash"].hide();
me["ALT_box_amber"].hide();
me["ALT_box"].hide();
me["Metric_box"].hide();
me["Metric_letter"].hide();
me["Metric_cur_alt"].hide();
me["ALT_digit_UP_metric"].hide();
}
me.updateCommon();
@ -2468,6 +2498,18 @@ var canvas_PFD_2 = {
me["ALT_scale"].show();
me.altitude = dmc.DMController.DMCs[1].outputs[1].getValue();
if (me.showMetricAlt) {
me["Metric_box"].show();
me["Metric_letter"].show();
me["Metric_cur_alt"].show();
me["Metric_cur_alt"].setText(sprintf("%5.0f", me.altitude * 0.3048));
} else {
me["Metric_box"].hide();
me["Metric_letter"].hide();
me["Metric_cur_alt"].hide();
}
me.altOffset = me.altitude / 500 - int(me.altitude / 500);
me.middleAltText = roundaboutAlt(me.altitude / 100);
me.middleAltOffset = nil;
@ -2495,6 +2537,14 @@ var canvas_PFD_2 = {
me["ALT_tens"].setTranslation(0, altTens * 1.392);
ap_alt_cur = ap_alt.getValue();
if (me.showMetricAlt) {
me["ALT_digit_UP_metric"].show();
me["ALT_digit_UP_metric"].setText(sprintf("%5.0fM", ap_alt_cur * 0.3048));
} else {
me["ALT_digit_UP_metric"].hide();
}
alt_diff_cur = dmc.DMController.DMCs[1].outputs[7].getValue();
if (alt_diff_cur >= -565 and alt_diff_cur <= 565) {
me["ALT_target"].setTranslation(0, (alt_diff_cur / 100) * -48.66856);
@ -2604,6 +2654,10 @@ var canvas_PFD_2 = {
me["ALT_box_flash"].hide();
me["ALT_box_amber"].hide();
me["ALT_box"].hide();
me["Metric_box"].hide();
me["Metric_letter"].hide();
me["Metric_cur_alt"].hide();
me["ALT_digit_UP_metric"].hide();
}
me.updateCommon();

View file

@ -41,9 +41,9 @@
inkscape:window-maximized="1"
inkscape:window-y="-8"
inkscape:window-x="-8"
inkscape:cy="683.12157"
inkscape:cx="1026.1197"
inkscape:zoom="1.8101934"
inkscape:cy="1074.3176"
inkscape:cx="955.3885"
inkscape:zoom="2"
showgrid="true"
id="namedview371"
inkscape:window-height="705"
@ -580,6 +580,13 @@
id="path886"
d="m 448.25473,1194.8172 66.90422,59.142 h -59.49742 v -14.7583 h 11.11022 l -18.51702,-19.615 -18.51702,19.615 h 11.11022 v 14.7583 h -59.49741 z"
style="fill:none;stroke:#ff0000;stroke-width:7.42499971;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="tailstrikeInd"
d="m 408.59584,403.53091 h 13.2497 l 26.49939,39.11651 26.49939,-39.11651 h 13.2497 l -39.74909,57.25812 z"
style="fill:none;stroke:#ff0000;stroke-width:4.19999981;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="#tailstrikeInd" />
</g>
<g
transform="translate(0,97.082371)"
@ -2262,11 +2269,11 @@
id="QNH_setting"
y="885.26117"
x="907.61713"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75;stroke-opacity:1;"
xml:space="preserve"
transform="scale(1.0000144,0.9999856)"
inkscape:label="#text979"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3994px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.75"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3994px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.75;stroke:none;stroke-opacity:1;"
y="885.26117"
x="907.61713"
id="tspan977"
@ -6269,4 +6276,50 @@
x="417.56354"
y="34.634907"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.99950027px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.65757698">-800</tspan></text>
<rect
inkscape:label="#rect4290"
y="896.48456"
x="788.52734"
height="36.03083"
width="153.94527"
id="Metric_box"
style="fill:none;fill-opacity:1;stroke:#c9d121;stroke-width:3.20831394;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
<text
id="Metric_cur_alt"
y="928.04248"
x="847.62854"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"
transform="scale(1.0000144,0.9999856)"
inkscape:label="#text979"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3993988px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#0dc04b;fill-opacity:1;stroke-width:0.75"
y="928.04248"
x="852.95343"
id="tspan977-3"
sodipodi:role="line">11070 </tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:38.3993988px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';letter-spacing:0px;word-spacing:0px;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.75"
x="909.43152"
y="928.62128"
id="Metric_letter"
inkscape:label="#text1815"><tspan
sodipodi:role="line"
id="tspan1813"
x="909.43152"
y="928.62128"
style="font-size:38.3993988px;fill:#179ab7;fill-opacity:1;stroke-width:0.75">M</tspan></text>
<text
inkscape:label="#text975"
transform="scale(0.95382559,1.0484097)"
id="ALT_digit_UP_metric"
y="218.16887"
x="604.67737"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.75"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#179ab7;fill-opacity:1;stroke-width:0.75"
y="218.16887"
x="604.67737"
id="tspan5116-2"
sodipodi:role="line">10000M</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 341 KiB

After

Width:  |  Height:  |  Size: 344 KiB

View file

@ -2176,9 +2176,9 @@
<object-name>rmp-standby</object-name>
<object-name>rmp-standby-test</object-name>
<diffuse>
<red>0.89</red>
<green>0.37</green>
<blue>0.08</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</diffuse>
<ambient>
<red>0</red>
@ -2191,9 +2191,9 @@
<blue>0</blue>
</specular>
<emission>
<red>0.89</red>
<green>0.37</green>
<blue>0.08</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</emission>
</animation>

View file

@ -2176,9 +2176,9 @@
<object-name>rmp-standby</object-name>
<object-name>rmp-standby-test</object-name>
<diffuse>
<red>0.89</red>
<green>0.37</green>
<blue>0.08</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</diffuse>
<ambient>
<red>0</red>
@ -2191,9 +2191,9 @@
<blue>0</blue>
</specular>
<emission>
<red>0.89</red>
<green>0.37</green>
<blue>0.08</blue>
<red>1.00</red>
<green>0.355</green>
<blue>0.00</blue>
</emission>
</animation>

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

After

Width:  |  Height:  |  Size: 259 KiB

View file

@ -1,4 +1,4 @@
<?xml version="1.0"?>
<?xml version="1.0"?>
<PropertyList>
@ -7,17 +7,56 @@
<path>Douglas.ac</path>
<!-- Lights-->
<model>
<name>warning light left</name>
<path>Aircraft/A320-family/Models/Services/Pushback/warning-light.xml</path>
<offsets>
<x-m>-4.308</x-m>
<y-m>-1.08</y-m>
<z-m>2.23</z-m>
</offsets>
</model>
<model>
<name>warning light center</name>
<path>Aircraft/A320-family/Models/Services/Pushback/warning-light.xml</path>
<offsets>
<x-m>-3.795</x-m>
<y-m>-0.2683</y-m>
<z-m>2.343</z-m>
</offsets>
</model>
<model>
<name>warning light right</name>
<path>Aircraft/A320-family/Models/Services/Pushback/warning-light.xml</path>
<offsets>
<x-m>-4.308</x-m>
<y-m>0.5438</y-m>
<z-m>2.229</z-m>
</offsets>
</model>
<!-- switch to night/day textures -->
<animation>
<type>textranslate</type>
<!--<object-name>Mesh</object-name>
<object-name>Mesh.001</object-name>
<object-name>Mesh.002</object-name>
<object-name>wheelfl</object-name>
<object-name>wheelfr</object-name>
<object-name>wheelrl</object-name>
<object-name>wheelrr</object-name>-->
<property>sim/time/sun-angle-rad</property>
<step>1.60</step>
<step>1.57</step>
<factor>0.318471338</factor>
<center>
<!--<center>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
</center>-->
<axis>
<x>-1</x>
<y>0</y>
@ -27,6 +66,13 @@
<animation>
<type>material</type>
<!--<object-name>Mesh</object-name>
<object-name>Mesh.001</object-name>
<object-name>Mesh.002</object-name>
<object-name>wheelfl</object-name>
<object-name>wheelfr</object-name>
<object-name>wheelrl</object-name>
<object-name>wheelrr</object-name>-->
<condition>
<greater-than>
<property>sim/time/sun-angle-rad</property>
@ -42,6 +88,13 @@
<animation>
<type>material</type>
<!--<object-name>Mesh</object-name>
<object-name>Mesh.001</object-name>
<object-name>Mesh.002</object-name>
<object-name>wheelfl</object-name>
<object-name>wheelfr</object-name>
<object-name>wheelrl</object-name>
<object-name>wheelrr</object-name>-->
<condition>
<less-than-equals>
<property>sim/time/sun-angle-rad</property>
@ -55,6 +108,48 @@
</emission>
</animation>
<animation>
<type>spin</type>
<object-name>wheelfl</object-name>
<object-name>wheelfr</object-name>
<property>velocities/uBody-fps</property>
<factor>-4.973</factor>
<center>
<x-m>-1.4081</x-m>
<y-m>0</y-m>
<z-m>0.58458</z-m>
<!--<x>0</x>
<y>0</y>
<z>0</z>
<x-m>2.0501</x-m>
<y-m>0</y-m>
<z-m>0.5735</z-m>-->
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>spin</type>
<object-name>wheelrl</object-name>
<object-name>wheelrr</object-name>
<property>velocities/uBody-fps</property>
<factor>-4.973</factor>
<center>
<x-m>2.2942</x-m>
<y-m>0</y-m>
<z-m>0.44266</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>select</type>
<condition>
@ -79,6 +174,24 @@
</axis>
</animation>
<!-- change heading of the pushback when driving the arc -->
<animation>
<type>rotate</type>
<property>sim/model/pushback/position-norm</property>
<factor>-90</factor>
<offset-deg>0</offset-deg>
<center>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<!-- compensate for gear compression -->
<animation>
<type>translate</type>

View file

@ -0,0 +1,24 @@
AC3Db
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
MATERIAL "DefaultWhite.001" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.025 0.025 0.025 shi 50 trans 0.1
OBJECT world
kids 1
OBJECT poly
name "warning-als"
data 8
Mesh.005
crease 30.000000
numvert 4
-0.090665 -0.991468 -0.999611
-0.090663 1.008532 -0.999611
-0.090662 -0.991468 1.000389
-0.090661 1.008532 1.000389
numsurf 1
SURF 0x20
mat 1
refs 4
1 0.0 0.0
0 0.0 0.0
2 0.0 0.0
3 0.0 0.0
kids 0

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>Effects/warning-als</name>
<inherits-from>Effects/procedural-light</inherits-from>
<parameters>
<texture n="0">
<type>white</type>
</texture>
<light_color_base_r type="float">0.98</light_color_base_r>
<light_color_base_g type="float">0.75</light_color_base_g>
<light_color_base_b type="float">0.0</light_color_base_b>
<light_color_center_r type="float">0.98</light_color_center_r>
<light_color_center_g type="float">0.75</light_color_center_g>
<light_color_center_b type="float">0.0</light_color_center_b>
<intensity_scale type="float">0.8</intensity_scale>
<!--<pointing_x type="float">0.0</pointing_x>
<pointing_y type="float">0.0</pointing_y>
<pointing_z type="float">0.0</pointing_z>-->
<is_directional type="bool">false</is_directional>
<is_strobe type="bool">true</is_strobe>
<!--<inner_angle type="float">0.2</inner_angle>
<outer_angle type="float">0.4</outer_angle>
<zero_angle type="float">0.7</zero_angle>
<outer_gain type="float">0.5</outer_gain>-->
<visibility><use>environment/ground-visibility-m</use></visibility>
<avisibility><use>environment/visibility-m</use></avisibility>
<lthickness><use>environment/ground-haze-thickness-m</use></lthickness>
<terrain_alt><use>environment/mean-terrain-elevation-m</use></terrain_alt>
<eye_alt><use>sim/rendering/eye-altitude-m</use></eye_alt>
<terminator><use>environment/terminator-relative-position-m</use></terminator>
</parameters>
</PropertyList>

View file

@ -0,0 +1,40 @@
<?xml version="1.0"?>
<!-- Copyright (c) 2020 Josh Davidson (Octal450) -->
<PropertyList>
<path>warning-light.ac</path>
<effect>
<inherits-from>Aircraft/A320-family/Models/Services/Pushback/warning-light</inherits-from>
<object-name>warning-als</object-name>
</effect>
<animation>
<type>scale</type>
<x-offset>1.0</x-offset>
<y-offset>1.0</y-offset>
<z-offset>1.0</z-offset>
</animation>
<animation>
<type>dist-scale</type>
<object-name>warning-als</object-name>
<interpolation>
<entry>
<ind>0</ind>
<dep>1</dep>
</entry>
<entry>
<ind>300</ind>
<dep>4</dep>
</entry>
<entry>
<ind>1500</ind>
<dep>8</dep>
</entry>
</interpolation>
</animation>
</PropertyList>

View file

@ -36,6 +36,7 @@ var altAlertInhibit = nil;
var alt200 = nil;
var alt750 = nil;
var bigThree = nil;
var fltCtlLandAsap = 0;
var altAlertSteady = 0;
var altAlertFlash = 0;
@ -2098,7 +2099,7 @@ var messages_priority_2 = func {
altnLaw.active = 1;
altnLawProt.active = 1;
if (altnLawMaxSpeed.clearFlag == 0 and altnLawMaxSpeed2.clearFlag == 0 and !fbw.tripleADRFail) {
if (!(getprop("/ECAM/warnings/hyd/green-abnorm-lo-pr") and (getprop("/ECAM/warnings/hyd/blue-abnorm-lo-pr") or getprop("/ECAM/warnings/hyd/yellow-abnorm-lo-pr")))) {
if (!(systems.HYD.Warnings.greenAbnormLoPr.getValue() and (systems.HYD.Warnings.blueAbnormLoPr.getValue() or systems.HYD.Warnings.yellowAbnormLoPr.getValue()))) {
altnLawMaxSpeed.active = 1;
ECAM_controller.warningReset(altnLawMaxSpeed2);
} else {
@ -2135,7 +2136,7 @@ var messages_priority_2 = func {
if (getprop("/systems/thrust/thr-locked-flash") == 0) {
athr_lock.msg = " ";
} else {
athr_lock.msg = msgSave
athr_lock.msg = msgSave;
}
athr_lock.active = 1;
athr_lock_1.active = 1;
@ -3148,7 +3149,7 @@ var messages_config_memo = func {
setprop("/ECAM/to-config-reset", 0);
}
if (getprop("/controls/autobrake/mode") == 3) {
if (systems.Autobrake.mode.getValue() == 3) {
toMemoLine1.msg = "T.O AUTO BRK MAX";
toMemoLine1.colour = "g";
} else {
@ -3411,14 +3412,20 @@ var messages_right_memo = func {
ldg_inhibit.active = 0;
}
if ((!pts.Gear.wow[1].getValue()) and (systems.ELEC.EmerElec.getValue() or getprop("/systems/fire/engine1/warning-active") == 1 or getprop("/systems/fire/engine2/warning-active") == 1 or getprop("/systems/fire/apu/warning-active") == 1 or getprop("/systems/failures/fire/cargo-aft-fire") == 1 or getprop("/systems/failures/fire/cargo-fwd-fire") == 1) or (((systems.HYD.Psi.green.getValue() < 1500 and pts.Engines.Engine.state[0].getValue() == 3) and (systems.HYD.Psi.yellow.getValue() < 1500 and pts.Engines.Engine.state[1].getValue() == 3)) or ((systems.HYD.Psi.green.getValue() < 1500 or systems.HYD.Psi.yellow.getValue() < 1500) and pts.Engines.Engine.state[0].getValue() == 3 and pts.Engines.Engine.state[1].getValue() == 3) and phaseVarMemo3 >= 3 and phaseVarMemo3 <= 8)) {
# todo: emer elec
if (!(FWC.Timer.gnd.getValue() == 1) and (systems.ELEC.EmerElec.getValue() or dualFailNode.getValue() == 1 or systems.eng1FireWarn.getValue() == 1 or systems.eng2FireWarn.getValue() == 1 or systems.apuFireWarn.getValue() == 1 or systems.aftCargoFireWarn.getValue() == 1 or systems.fwdCargoFireWarn.getValue() == 1 or (systems.HYD.Warnings.greenAbnormLoPr.getValue() and systems.HYD.Warnings.yellowAbnormLoPr.getValue()) or (systems.HYD.Warnings.greenAbnormLoPr.getValue() and systems.HYD.Warnings.blueAbnormLoPr.getValue()) or (systems.HYD.Warnings.blueAbnormLoPr.getValue() and systems.HYD.Warnings.yellowAbnormLoPr.getValue()))) {
land_asap_r.active = 1;
} else {
land_asap_r.active = 0;
}
if (land_asap_r.active == 0 and !pts.Gear.wow[1].getValue() and ((getprop("/fdm/jsbsim/propulsion/tank[0]/contents-lbs") < 1650 and getprop("/fdm/jsbsim/propulsion/tank[1]/contents-lbs") < 1650) or ((getprop("/systems/electrical/bus/dc-2") < 25 and (getprop("/systems/failures/fctl/elac1") == 1 or getprop("/systems/failures/fctl/sec1") == 1)) or (systems.HYD.Psi.green.getValue() < 1500 and (getprop("/systems/failures/fctl/elac1") == 1 and getprop("/systems/failures/fctl/sec1") == 1)) or (systems.HYD.Psi.yellow.getValue() < 1500 and (getprop("/systems/failures/fctl/elac1") == 1 and getprop("/systems/failures/fctl/sec1") == 1)) or (systems.HYD.Psi.blue.getValue() < 1500 and (getprop("/systems/failures/fctl/elac2") == 1 and getprop("/systems/failures/fctl/sec2") == 1))) or (phaseVarMemo3 >= 3 and phaseVarMemo3 <= 8 and (pts.Engines.Engine.state[0].getValue() != 3 or pts.Engines.Engine.state[1].getValue() != 3)))) {
if ((systems.ELEC.Bus.dc2.getValue() < 25 and (fbw.FBW.Failures.elac1.getValue() == 1 or fbw.FBW.Failures.sec1.getValue() == 1)) or ((systems.HYD.Psi.yellow.getValue() < 1500 or systems.HYD.Psi.green.getValue() < 1500) and (fbw.FBW.Failures.elac1.getValue() == 1 and fbw.FBW.Failures.sec1.getValue() == 1)) or (systems.HYD.Psi.blue.getValue() < 1500 and (fbw.FBW.Failures.elac2.getValue() == 1 and fbw.FBW.Failures.sec2.getValue() == 1))) {
fltCtlLandAsap = 1;
} else {
fltCtlLandAsap = 0;
}
if (land_asap_r.active == 0 and !(FWC.Timer.gnd.getValue() == 1) and (warningNodes.Timers.lowLevelBoth.getValue() == 1 or warningNodes.Logic.eng1Shutdown.getValue() or warningNodes.Logic.eng2Shutdown.getValue() or warningNodes.Logic.eng1Fail.getValue() or warningNodes.Logic.eng2Fail.getValue() or warningNodes.Timers.dcEmerConfig.getValue() == 1 or fltCtlLandAsap)) {
# todo avionics smoke and reverse unlocked
land_asap_a.active = 1;
} else {
land_asap_a.active = 0;
@ -3460,12 +3467,6 @@ var messages_right_memo = func {
park_brk.colour = "g";
}
if (getprop("/controls/gear/brake-fans") == 1) {
brk_fan.active = 1;
} else {
brk_fan.active = 0;
}
if (systems.HYD.Switch.ptu.getValue() == 1 and ((systems.HYD.Psi.yellow.getValue() < 1450 and systems.HYD.Psi.green.getValue() > 1450 and getprop("/controls/hydraulic/elec-pump-yellow") == 0) or (systems.HYD.Psi.yellow.getValue() > 1450 and systems.HYD.Psi.green.getValue() < 1450))) {
ptu.active = 1;
} else {
@ -3502,12 +3503,18 @@ var messages_right_memo = func {
nw_strg_disc.colour = "g";
}
if (getprop("/controls/pneumatics/switches/ram-air") == 1) {
if (systems.PNEU.Switch.ramAir.getValue() == 1) {
ram_air.active = 1;
} else {
ram_air.active = 0;
}
if (getprop("/systems/oxygen/passenger-oxygen/sys-on-light") == 1) {
pax_oxy.active = 1;
} else {
pax_oxy.active = 0;
}
if (getprop("/controls/engines/engine[0]/igniter-a") == 1 or getprop("/controls/engines/engine[0]/igniter-b") == 1 or getprop("/controls/engines/engine[1]/igniter-a") == 1 or getprop("/controls/engines/engine[1]/igniter-b") == 1) {
ignition.active = 1;
} else {
@ -3531,31 +3538,13 @@ var messages_right_memo = func {
company_call.active = 0;
}
if (getprop("/controls/pneumatics/switches/apu") == 1 and pts.APU.rpm.getValue() >= 95) {
apu_bleed.active = 1;
} else {
apu_bleed.active = 0;
}
if (apu_bleed.active == 0 and pts.APU.rpm.getValue() >= 95) {
apu_avail.active = 1;
} else {
apu_avail.active = 0;
}
if (getprop("/controls/lighting/landing-lights[1]") > 0 or getprop("/controls/lighting/landing-lights[2]") > 0) {
ldg_lt.active = 1;
} else {
ldg_lt.active = 0;
}
if (mcdu.ReceivedMessagesDatabase.firstUnviewed() != -99 and (phaseVarMemo2 <= 2 or phaseVarMemo2 == 6 or phaseVarMemo2 >= 9)) {
company_msg.active = 1;
} else {
company_msg.active = 0;
}
if (getprop("/controls/ice-protection/leng") == 1 or getprop("/controls/ice-protection/reng") == 1 or getprop("/systems/electrical/bus/dc-1") == 0 or getprop("/systems/electrical/bus/dc-2") == 0) {
if (getprop("/controls/ice-protection/leng") == 1 or getprop("/controls/ice-protection/reng") == 1 or systems.ELEC.Bus.dc1.getValue() < 25 or systems.ELEC.Bus.dc2.getValue() < 25) {
eng_aice.active = 1;
} else {
eng_aice.active = 0;
@ -3567,30 +3556,66 @@ var messages_right_memo = func {
wing_aice.active = 0;
}
if (!getprop("/systems/radio/vhf3-data-mode") and (phaseVarMemo3 == 1 or phaseVarMemo3 == 2 or phaseVarMemo3 == 6 or phaseVarMemo3 == 9 or phaseVarMemo3 == 10)) {
if (systems.PNEU.Switch.apu.getValue() == 1 and pts.APU.rpm.getValue() >= 95) {
apu_bleed.active = 1;
} else {
apu_bleed.active = 0;
}
if (apu_bleed.active == 0 and pts.APU.rpm.getValue() >= 95) {
apu_avail.active = 1;
} else {
apu_avail.active = 0;
}
if (pts.Controls.Lighting.landingLights[1].getValue() > 0 or pts.Controls.Lighting.landingLights[2].getValue() > 0) {
ldg_lt.active = 1;
} else {
ldg_lt.active = 0;
}
if (systems.BrakeSys.brakeFans.getValue() == 1) {
brk_fan.active = 1;
} else {
brk_fan.active = 0;
}
if (pts.Instrumentation.MKVII.Inputs.Discretes.flap3Override.getValue() == 1) { # todo: emer elec
gpws_flap3.active = 1;
} else {
gpws_flap3.active = 0;
}
if (!rmp.vhf3_data_mode.getValue() and (phaseVarMemo3 == 1 or phaseVarMemo3 == 2 or phaseVarMemo3 == 6 or phaseVarMemo3 == 9 or phaseVarMemo3 == 10)) {
vhf3_voice.active = 1;
} else {
vhf3_voice.active = 0;
}
if (getprop("/controls/autobrake/mode") == 1 and (phaseVarMemo3 == 7 or phaseVarMemo3 == 8)) {
if (systems.Autobrake.mode.getValue() == 1 and (phaseVarMemo3 == 7 or phaseVarMemo3 == 8)) {
auto_brk_lo.active = 1;
} else {
auto_brk_lo.active = 0;
}
if (getprop("/controls/autobrake/mode") == 2 and (phaseVarMemo3 == 7 or phaseVarMemo3 == 8)) {
if (systems.Autobrake.mode.getValue() == 2 and (phaseVarMemo3 == 7 or phaseVarMemo3 == 8)) {
auto_brk_med.active = 1;
} else {
auto_brk_med.active = 0;
}
if (getprop("/controls/autobrake/mode") == 3 and (phaseVarMemo3 == 7 or phaseVarMemo3 == 8)) {
if (systems.Autobrake.mode.getValue() == 3 and (phaseVarMemo3 == 7 or phaseVarMemo3 == 8)) {
auto_brk_max.active = 1;
} else {
auto_brk_max.active = 0;
}
if (phaseVarMemo3 >= 2 and phaseVarMemo3 <= 9 and systems.ELEC.Bus.ac1.getValue() >= 110 and systems.ELEC.Bus.ac2.getValue() >= 110 and (getprop("/systems/fuel/feed-center-1") or getprop("/systems/fuel/feed-center-2"))) {
ctr_tk_feedg.active = 1;
} else {
ctr_tk_feedg.active = 0;
}
if (systems.FUEL.Valves.crossfeed.getValue() != 0 and systems.FUEL.Switches.crossfeed.getValue()) {
fuelx.active = 1;
} else {
@ -3603,16 +3628,10 @@ var messages_right_memo = func {
fuelx.colour = "g";
}
if (getprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override") == 1) { # todo: emer elec
gpws_flap3.active = 1;
if (systems.SwitchingPanel.Switches.airData.getValue() != 0 or systems.SwitchingPanel.Switches.attHdg.getValue() != 0) {
adirs_switch.active = 1;
} else {
gpws_flap3.active = 0;
}
if (phaseVarMemo3 >= 2 and phaseVarMemo3 <= 9 and systems.ELEC.Bus.ac1.getValue() >= 110 and systems.ELEC.Bus.ac2.getValue() >= 110 and (getprop("/systems/fuel/feed-center-1") or getprop("/systems/fuel/feed-center-2"))) {
ctr_tk_feedg.active = 1;
} else {
ctr_tk_feedg.active = 0;
adirs_switch.active = 0;
}
}

View file

@ -796,8 +796,11 @@ var memos = std.Vector.new([
var rat = memo.new(msg: "RAT OUT" ),
var emer_gen = memo.new(msg: "EMER GEN" ),
var ram_air = memo.new(msg: "RAM AIR ON" ),
var pax_oxy = memo.new(msg: "OXY PAX ON" ),
var nw_strg_disc = memo.new(msg: "NW STRG DISC"),
var ignition = memo.new(msg: "IGNITION" ),
var eng1Cowl = memo.new(msg: "ENG 1 COWL" ), # Not yet implemented (NEO)
var eng2Cowl = memo.new(msg: "ENG 2 COWL" ), # Not yet implemented (NEO)
var cabin_ready = memo.new(msg: "CABIN READY" ), # Not yet implemented
var pred_ws_off = memo.new(msg: "PRED W/S OFF"), # Not yet implemented
var terr_stby = memo.new(msg: "TERR STBY" ), # Not yet implemented
@ -825,7 +828,8 @@ var memos = std.Vector.new([
var auto_brk_off = memo.new(msg: "AUTO BRK OFF"), # Not yet implemented
var man_ldg_elev = memo.new(msg: "MAN LDG ELEV"), # Not yet implemented
var ctr_tk_feedg = memo.new(msg: "CTR TK FEEDG"),
var fuelx = memo.new(msg: "FUEL X FEED" )
var fuelx = memo.new(msg: "FUEL X FEED" ),
var adirs_switch = memo.new(msg: "ADIRS SWTG" ) # Not yet implemented
]);
var clearWarnings = std.Vector.new();

View file

@ -460,6 +460,12 @@ var FCUController = {
}
}
},
MetricAlt: func() {
if (me.FCUworking) {
canvas_pfd.PFD_1.showMetricAlt = !canvas_pfd.PFD_1.showMetricAlt;
canvas_pfd.PFD_2.showMetricAlt = !canvas_pfd.PFD_2.showMetricAlt;
}
},
};
# Master / slave principle of operation depending on the autopilot / flight director engagement

View file

@ -653,7 +653,7 @@ var masterFMGC = maketimer(0.2, func {
}
} elsif (FMGCInternal.phase == 3) {
if (FMGCInternal.crzFl >= 200) {
if ((flightPlanController.arrivalDist <= 200 or altSel < 20000)) {
if ((flightPlanController.arrivalDist <= 200 and altSel < 20000)) {
newphase = 4;
systems.PNEU.pressMode.setValue("DE");
}
@ -667,10 +667,6 @@ var masterFMGC = maketimer(0.2, func {
if (getprop("/FMGC/internal/decel")) {
newphase = 5;
}
elsif (altSel == (FMGCInternal.crzFl * 100)) { # back to CRZ state
newphase = 3;
systems.PNEU.pressMode.setValue("CR");
}
} elsif (FMGCInternal.phase == 5) {
if (state1 == "TOGA" and state2 == "TOGA") {
newphase = 6;
@ -683,7 +679,6 @@ var masterFMGC = maketimer(0.2, func {
}
}
if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and
flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and pts.Position.gearAglFt.getValue() < 9500) { #todo decel pseudo waypoint
setprop("/FMGC/internal/decel", 1);

View file

@ -47,6 +47,13 @@ var MessageQueueController = {
me.messages.pop(index);
}
},
deleteWithText: func(text) {
foreach (var message; me.messages.vector) {
if (message.msgText == text) {
me.messages.remove(message);
}
}
},
clearQueue: func() {
me.messages.clear();
},
@ -190,6 +197,7 @@ var MessageController = {
TypeIIMessage.new("STEP NOW"),TypeIIMessage.new("TIME TO EXIT", "amb", 0),TypeIIMessage.new("V1/VR/V2 DISAGREE", "amb", 0),
TypeIIMessage.new("TO SPEED TOO LOW", "amb", 0),
TypeIIMessage.new("CHECK DEST DATA", "amb", 0), #p.533
TypeIIMessage.new("GPS PRIMARY"),TypeIIMessage.new("GPS PRIMARY LOST", "amb", 0),
]),
# to speed to low - new on a320, margin against vmcg / vs1g
@ -202,7 +210,7 @@ var MessageController = {
},
getMsgByText: func(text, theVector) {
foreach (var message; theVector) {
if (message.msgText = text) {
if (message.msgText == text) {
return message;
}
}

View file

@ -32,7 +32,6 @@ var variousReset = func() {
setprop("/controls/CVR/gndctl", 0);
setprop("/controls/CVR/erase", 0);
setprop("/controls/switches/pneumatics/cabin-fans", 1);
setprop("/controls/oxygen/crewOxyPB", 0); # 0 = OFF 1 = AUTO
setprop("/controls/switches/emerCallLtO", 0); # ON light, flashes white for 10s
setprop("/controls/switches/emerCallLtC", 0); # CALL light, flashes amber for 10s
setprop("/controls/switches/emerCall", 0);

View file

@ -176,7 +176,7 @@ var update_items = [
];
var systemsLoop = func(notification) {
if (!systemsInitialized) { return; }
if (!systemsInitialized and getprop("/systems/acconfig/mismatch-code") != "0x000") { return; }
systems.PNEU.loop(notification);
systems.ADIRS.loop(notification);
systems.BrakeSys.update(notification);

View file

@ -196,7 +196,7 @@ var Instrumentation = {
MKVII: {
Inputs: {
Discretes: {
flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap3-override"),
flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override"),
},
},
},
@ -204,6 +204,10 @@ var Instrumentation = {
gsDeflection: props.globals.getNode("/instrumentation/nav[0]/gs-needle-deflection-norm"),
locDeflection: props.globals.getNode("/instrumentation/nav[0]/heading-needle-deflection-norm"),
},
PFD: {
windDirection: props.globals.getNode("/instrumentation/pfd/wind-direction"),
windSpeed: props.globals.getNode("/instrumentation/pfd/wind-speed"),
},
TCAS: {
servicable: props.globals.getNode("/instrumentation/tcas/serviceable"),
Inputs: {

View file

@ -86,7 +86,14 @@ var atisPage = {
var pageMinusOne = (me.page - 1);
var numberExtraChar = pageMinusOne * 210;
me.L1 = [substr(message, numberExtraChar, 30), atsu.ATISInstances[me.index].station ~ "/" ~ (atsu.ATISInstances[me.index].type == 0 ? "ARR" : "DEP"), "wht"];
me.R1 = [" ",atsu.DictionaryString.fetchString1(atsu.ATISInstances[me.index].receivedCode).string2 ~ " " ~ atsu.ATISInstances[me.index].receivedTime ~ "Z", "wht"];
var code = atsu.DictionaryString.fetchString1(atsu.ATISInstances[me.index].receivedCode);
if (code != "") {
me.R1 = [" ",code.string2 ~ " " ~ atsu.ATISInstances[me.index].receivedTime ~ "Z", "wht"];
} else {
me.R1 = [" ",atsu.ATISInstances[me.index].receivedCode ~ " " ~ atsu.ATISInstances[me.index].receivedTime ~ "Z", "wht"];
}
if (size(message) > 30) {
me.L2[1] = substr(message, numberExtraChar + 30, 30);
}

View file

@ -60,3 +60,15 @@ var printInput2 = func(key, i) {
setprop("FMGC/print/mcdu/page2/R4req", 1);
}
}
var data2Input = func(key, i) {
if (key == "L5") {
if (canvas_mcdu.myCLBWIND[i] == nil) {
canvas_mcdu.myCLBWIND[i] = windCLBPage.new(i);
} else {
canvas_mcdu.myCLBWIND[i].reload();
}
fmgc.windController.accessPage[i] = "DATA2";
setprop("MCDU[" ~ i ~ "]/page", "WINDCLB");
}
}

View file

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

View file

@ -168,6 +168,7 @@ var MCDU_reset = func(i) {
setprop("/FMGC/internal/eng-out-reduc", "1500");
setprop("/MCDUC/reducacc-set", 0);
fmgc.FMGCInternal.transAlt = 18000;
fmgc.FMGCInternal.transAltSet = 0;
# CLB PERF
setprop("/FMGC/internal/activate-once", 0);
@ -217,14 +218,14 @@ var lskbutton = func(btn, i) {
setprop("/MCDU[" ~ i ~ "]/active", 1);
settimer(func(){
pageNode[i].setValue(getprop("/MCDU[" ~ i ~ "]/last-fmgc-page"));
mcdu_scratchpad.scratchpads[i].empty();
mcdu_scratchpad.scratchpads[i].clear();
setprop("/MCDU[" ~ i ~ "]/active", 2);
setprop("/MCDU[" ~ i ~ "]/active-system","fmgc");
}, 2);
} else {
pageNode[i].setValue(getprop("/MCDU[" ~ i ~ "]/last-fmgc-page"));
setprop("/MCDU[" ~ i ~ "]/active-system","fmgc");
mcdu_scratchpad.scratchpads[i].empty();
mcdu_scratchpad.scratchpads[i].clear();
}
}
} else if (page == "IRSINIT") {
@ -377,14 +378,14 @@ var lskbutton = func(btn, i) {
setprop("/MCDU[" ~ i ~ "]/atsu-active", 1);
settimer(func(){
pageNode[i].setValue(getprop("/MCDU[" ~ i ~ "]/last-atsu-page"));
mcdu_scratchpad.scratchpads[i].empty();
mcdu_scratchpad.scratchpads[i].clear();
setprop("/MCDU[" ~ i ~ "]/atsu-active", 2);
setprop("/MCDU[" ~ i ~ "]/active-system","atsu");
}, 2);
} else {
pageNode[i].setValue(getprop("/MCDU[" ~ i ~ "]/last-atsu-page"));
setprop("/MCDU[" ~ i ~ "]/active-system","atsu");
mcdu_scratchpad.scratchpads[i].empty();
mcdu_scratchpad.scratchpads[i].clear();
}
}
} else if (page == "INITA") {

View file

@ -48,6 +48,8 @@ var progCLBInput = func(key, i) {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
fmgc.FMGCNodes.phase.setValue(3);
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
@ -60,6 +62,8 @@ var progCLBInput = func(key, i) {
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
fmgc.FMGCNodes.phase.setValue(3);
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
@ -80,6 +84,8 @@ var progCRZInput = func(key, i) {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
fmgc.FMGCNodes.phase.setValue(3);
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
@ -92,6 +98,8 @@ var progCRZInput = func(key, i) {
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 5) {
fmgc.FMGCInternal.phase = 3;
fmgc.FMGCNodes.phase.setValue(3);
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
@ -112,6 +120,8 @@ var progDESInput = func(key, i) {
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
fmgc.FMGCInternal.phase = 3;
fmgc.FMGCNodes.phase.setValue(3);
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);
@ -124,6 +134,8 @@ var progDESInput = func(key, i) {
mcdu_scratchpad.scratchpads[i].empty();
if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
fmgc.FMGCInternal.phase = 3;
fmgc.FMGCNodes.phase.setValue(3);
systems.PNEU.pressMode.setValue("CR");
setprop("/FMGC/internal/activate-once", 0);
setprop("/FMGC/internal/activate-twice", 0);
setprop("/FMGC/internal/decel", 0);

View file

@ -110,7 +110,6 @@ var ADIRU = {
}
},
stopAlignNoAlign: func() {
print("Stopping alignment or setting unaligned state");
me.inAlign = 0;
me.aligned = 0;
ADIRSnodesND[me.num].setValue(0);
@ -154,7 +153,6 @@ var ADIRU = {
if (me._gs > 5 or abs(me._pitch) > 5 or abs(me._roll) > 10) {
me.stopAlignNoAlign();
me._excessMotion = 1;
print("Excessive motion, restarting");
me.update(); # update operative
me.align(calcAlignTime(pts.Position.latitude.getValue()));
} elsif (me.operative == 0) {
@ -324,6 +322,8 @@ var ADIRS = {
}
),
],
_hasGPSPrimLost: 0,
_hasGPSPrim: 0,
loop: func(notification) {
if (me._init) {
for (i = 0; i < _NUMADIRU; i = i + 1) {
@ -345,7 +345,32 @@ var ADIRS = {
me.Operating.adr[i].setValue(0);
}
}
if (!me.Operating.aligned[0].getBoolValue() and !me.Operating.aligned[1].getBoolValue() and !me.Operating.aligned[2].getBoolValue()) {
if (!me._hasGPSPrimLost) {
mcdu_scratchpad.messageQueues[0].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("GPS PRIMARY LOST"));
mcdu_scratchpad.messageQueues[1].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("GPS PRIMARY LOST"));
me._hasGPSPrimLost = 1;
}
} else {
if (me._hasGPSPrimLost) {
mcdu_scratchpad.messageQueues[0].deleteWithText("GPS PRIMARY LOST");
mcdu_scratchpad.messageQueues[1].deleteWithText("GPS PRIMARY LOST");
me._hasGPSPrimLost = 0;
}
}
if (me.Operating.aligned[0].getBoolValue() or me.Operating.aligned[1].getBoolValue() or me.Operating.aligned[2].getBoolValue()) {
if (!me._hasGPSPrim) {
mcdu_scratchpad.messageQueues[0].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("GPS PRIMARY"));
mcdu_scratchpad.messageQueues[1].addNewMsg(mcdu_scratchpad.MessageController.getTypeIIMsgByText("GPS PRIMARY"));
me._hasGPSPrim = 1;
}
} else {
me._hasGPSPrim = 0;
}
}
# Update VFE
foreach (var update_item; me.update_items) {

View file

@ -357,8 +357,8 @@ var ATIS = {
raw = split('"}', raw)[0];
} else {
if (me.type == 0) {
raw = split('{"arr":"', raw)[1];
raw = split('","dep":', raw)[0];
raw = split('"arr":"', raw)[1];
raw = split('","dep":"', raw)[0];
} else {
raw = split('","dep":"', raw)[1];
raw = split('"}', raw)[0];

View file

@ -32,8 +32,6 @@ var ELEC = {
acEssBusFault: props.globals.getNode("/systems/failures/electrical/ac-ess-bus"),
ac1BusFault: props.globals.getNode("/systems/failures/electrical/ac-1-bus"),
ac2BusFault: props.globals.getNode("/systems/failures/electrical/ac-2-bus"),
bat1Fault: props.globals.getNode("/systems/failures/electrical/bat-1"),
bat2Fault: props.globals.getNode("/systems/failures/electrical/bat-2"),
dcEssBusFault: props.globals.getNode("/systems/failures/electrical/dc-ess-bus"),
dc1BusFault: props.globals.getNode("/systems/failures/electrical/dc-1-bus"),
dc2BusFault: props.globals.getNode("/systems/failures/electrical/dc-2-bus"),
@ -194,8 +192,6 @@ var ELEC = {
me.Fail.acEssBusFault.setBoolValue(0);
me.Fail.ac1BusFault.setBoolValue(0);
me.Fail.ac2BusFault.setBoolValue(0);
me.Fail.bat1Fault.setBoolValue(0);
me.Fail.bat2Fault.setBoolValue(0);
me.Fail.dcEssBusFault.setBoolValue(0);
me.Fail.dc1BusFault.setBoolValue(0);
me.Fail.dc2BusFault.setBoolValue(0);

View file

@ -7,7 +7,7 @@ var HYD = {
lcont: 0,
rcont: 0,
Brakes: {
accumPressPsi: props.globals.initNode("/systems/hydraulic/yellow-accumulator-psi-cmd", 0, "INT"),
accumPressPsi: props.globals.initNode("/systems/hydraulic/yellow-accumulator-psi-cmd", 3000, "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"),
mode: props.globals.initNode("/systems/hydraulic/brakes/mode", 0, "INT"),
@ -62,6 +62,11 @@ var HYD = {
yellowFire: props.globals.getNode("/systems/hydraulic/sources/yellow-edp/fire-valve"),
greenFire: props.globals.getNode("/systems/hydraulic/sources/green-edp/fire-valve"),
},
Warnings: {
blueAbnormLoPr: props.globals.getNode("/ECAM/warnings/hyd/blue-abnorm-lo-pr"),
greenAbnormLoPr: props.globals.getNode("/ECAM/warnings/hyd/green-abnorm-lo-pr"),
yellowAbnormLoPr: props.globals.getNode("/ECAM/warnings/hyd/yellow-abnorm-lo-pr"),
},
init: func() {
me.resetFail();
me.Qty.blueInput.setValue(math.round((rand() * 2) + 6 , 0.1)); # Random between 6 and 8
@ -74,6 +79,7 @@ var HYD = {
me.Switch.rat.setValue(0);
me.Switch.yellowEDP.setValue(1);
me.Switch.yellowElec.setValue(0);
me.Brakes.accumPressPsi.setValue(3000);
},
resetFail: func() {
me.Fail.blueElec.setBoolValue(0);

View file

@ -140,10 +140,8 @@ var PNEU = {
#setprop("/systems/ventilation/cabin/fans", 0); # aircon fans
#setprop("/systems/ventilation/avionics/extractvalve", "0");
#setprop("/systems/ventilation/avionics/inletvalve", "0");
setprop("/controls/oxygen/masksDeploy", 0);
setprop("/controls/oxygen/masksDeployMan", 0);
setprop("/controls/oxygen/masksReset", 0); # this is the TMR RESET pb on the maintenance panel, needs 3D model
setprop("/controls/oxygen/masksSys", 0);
setprop("/controls/oxygen/passenger-mask-deploy-man", 0);
setprop("/controls/oxygen/passenger-mask-reset", 0); # this is the TMR RESET pb on the maintenance panel, needs 3D model
},
resetFail: func() {
me.Fail.apu.setBoolValue(0);
@ -206,41 +204,5 @@ var PNEU = {
#setprop("/systems/ventilation/avionics/extractvalve", "1");
#setprop("/systems/ventilation/avionics/inletvalve", "1");
#}
# Oxygen
if (cabinalt > 13500) {
setprop("/controls/oxygen/masksDeploy", 1);
setprop("/controls/oxygen/masksSys", 1);
}
},
};
# Oxygen (Cabin)
setlistener("/controls/oxygen/masksDeployMan", func {
guard = getprop("/controls/oxygen/masksGuard");
masks = getprop("/controls/oxygen/masksDeployMan");
if (guard and masks) {
setprop("/controls/oxygen/masksDeployMan", 0);
} else if (!guard and masks) {
setprop("/controls/oxygen/masksDeployMan", 1);
setprop("/controls/oxygen/masksDeploy", 1);
setprop("/controls/oxygen/masksSys", 1);
}
}, 0, 0);
setlistener("/controls/oxygen/masksDeployMan", func {
masks = getprop("/controls/oxygen/masksDeployMan");
if (!masks) {
setprop("/controls/oxygen/masksDeployMan", 1);
}
}, 0, 0);
setlistener("/controls/oxygen/masksDeploy", func {
autoMasks = getprop("/controls/oxygen/masksDeploy");
if (!autoMasks) {
setprop("/controls/oxygen/masksDeploy", 1);
}
}, 0, 0);

View file

@ -1490,7 +1490,7 @@
</condition>
<volume>
<property>/sim/current-view/internal</property>
<factor>0.75</factor>
<factor>1.5</factor>
</volume>
</switch>
@ -1516,7 +1516,7 @@
</condition>
<volume>
<property>/sim/current-view/internal</property>
<factor>0.75</factor>
<factor>1.5</factor>
</volume>
</switch>
@ -1529,7 +1529,7 @@
</condition>
<volume>
<property>/sim/current-view/internal</property>
<factor>0.75</factor>
<factor>1.5</factor>
</volume>
</switch>
@ -1542,7 +1542,7 @@
</condition>
<volume>
<property>/sim/current-view/internal</property>
<factor>0.6</factor>
<factor>1.0</factor>
</volume>
</switch>
@ -1555,7 +1555,7 @@
</condition>
<volume>
<property>/sim/current-view/internal</property>
<factor>0.75</factor>
<factor>1.5</factor>
</volume>
</switch>
@ -1929,6 +1929,22 @@
</volume>
</announcements>
<announcements>
<name>depressurization</name>
<mode>once</mode>
<path>Aircraft/A320-family/Sounds/Announce/depressurization.wav</path>
<condition>
<equals>
<property>/systems/oxygen/passenger-oxygen/sys-on-light</property>
<value>1</value>
</equals>
</condition>
<volume>
<property>/sim/current-view/internal</property>
<factor>2.0</factor>
</volume>
</announcements>
<chime>
<name>Click</name>
<path>Aircraft/A320-family/Sounds/Cockpit/click.wav</path>

Binary file not shown.

View file

@ -530,7 +530,7 @@
<property>/systems/navigation/probes/tat-1/tat</property>
<quotient>
<pow>
<property>/velocities/TAS</property>
<property>/instrumentation/airspeed-indicator/true-speed-kt</property>
<value>2</value>
</pow>
<value>7569</value>

View file

@ -25,14 +25,12 @@
</difference>
<table>
<independentVar lookup="row">/systems/electrical/sources/bat-1/percent</independentVar>
<independentVar lookup="column">/systems/failures/electrical/bat-1</independentVar>
<tableData>
0 1
0 0.0 0.0
10 24.0 4.0
50 25.5 5.0
85 26.5 6.0
100 31.0 7.0
0 0.0
10 24.0
50 25.5
85 26.5
100 31.0
</tableData>
</table>
</sum>
@ -270,14 +268,12 @@
</difference>
<table>
<independentVar lookup="row">/systems/electrical/sources/bat-2/percent</independentVar>
<independentVar lookup="column">/systems/failures/electrical/bat-2</independentVar>
<tableData>
0 1
0 0.0 0.0
10 24.0 4.0
50 25.5 5.0
85 26.5 6.0
100 31.0 7.0
0 0.0
10 24.0
50 25.5
85 26.5
100 31.0
</tableData>
</table>
</sum>

View file

@ -146,7 +146,7 @@
/systems/electrical/bus/ac-2 ge 110
</test>
<test logic="OR">
/controls/flight/slats-cmd ge 0
fcs/flap-pos-deg ge 15
/gear/gear[2]/wow eq 1
</test>
</test>

329
Systems/a320-oxygen.xml Normal file
View file

@ -0,0 +1,329 @@
<!-- Airbus A320 Fuel -->
<!-- Copyright (c) 2019 Jonathan Redpath -->
<system name="A320: Oxygen">
<property value="2183">/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<property value="15">/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<channel name="Cockpit Oxygen" execrate="8">
<!-- Bottle: 2183L @ 1850 psi NTPD -->
<!-- Regulator:
HP - transducer to ECAM
LP - 65 to 94 psi
flow: 0 to 300 L / min
Cyl PSI: 100 to 2030 psi
-->
<switch name="/systems/oxygen/cockpit-oxygen/supply-valve-cmd">
<default value="0"/>
<test logic="AND" value="1"> <!-- solenoid valve; when not energized, it shuts -->
/controls/oxygen/cockpit-oxygen-supply-pb eq 1
/systems/electrical/bus/dc-ess-shed ge 25
</test>
</switch>
<actuator name="/systems/oxygen/cockpit-oxygen/supply-valve">
<input>/systems/oxygen/cockpit-oxygen/supply-valve-cmd</input>
<rate_limit>10</rate_limit>
</actuator>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-1-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-1-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-1-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-2-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-2-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-2-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-3-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-3-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-3-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/mask-4-flow-rate">
<function>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>15</value>
</quotient>
<property>/controls/oxygen/cockpit-mask-4-on</property>
<table>
<independentVar lookup="row">/systems/pressurization/cabinalt</independentVar>
<independentVar lookup="column">/controls/oxygen/cockpit-mask-4-selector</independentVar>
<tableData>
0 1
0 0 29.5
5000 0.0 31.0
8000 0.17 36.4
10000 0.71 36.9
15000 5.60 37.9
20000 15.9 38.9
30000 30.4 39.9
35000 40.9 40.9
40000 41.9 41.9
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="Cockpit Oxygen Bottle">
<function>
<sum>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<product>
<quotient>
<property>-/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate</property>
<value>60</value>
</quotient>
<property>simulation/channel-dt</property>
</product>
</sum>
</function>
<output>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</output>
<clipto>
<min>0.0</min>
<max>2183.0</max>
</clipto>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/bottle-psi">
<function>
<product>
<value>58.58145</value>
<pow>
<property>/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</property>
<value>0.4512568</value>
</pow>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/bottle-flow-rate">
<function>
<table>
<independentVar lookup="row">/systems/oxygen/cockpit-oxygen/cockpit-bottle-L</independentVar>
<tableData>
0 0
500 200
1000 275
2000 300
2183 300
</tableData>
</table>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/distributor-fill-rate">
<function>
<product>
<property>/systems/oxygen/cockpit-oxygen/supply-valve</property>
<table>
<independentVar lookup="row">/systems/oxygen/cockpit-oxygen/distributor-manifold-L</independentVar>
<tableData>
0 300
14.5 170
15 0
</tableData>
</table>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate-calc">
<function>
<product>
<property>/systems/oxygen/cockpit-oxygen/bottle-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/supply-valve</property>
</product>
</function>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate">
<function>
<sum>
<property>/systems/oxygen/cockpit-oxygen/mask-1-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/mask-2-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/mask-3-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/mask-4-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/distributor-fill-rate</property>
</sum>
</function>
<clipto>
<min>0.0</min>
<max>/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate-calc</max>
</clipto>
</fcs_function>
<!-- Distributor -->
<fcs_function name="/systems/oxygen/cockpit-oxygen/distributor-manifold-rate">
<function>
<sum>
<property>-/systems/oxygen/cockpit-oxygen/mask-1-flow-rate</property>
<property>-/systems/oxygen/cockpit-oxygen/mask-2-flow-rate</property>
<property>-/systems/oxygen/cockpit-oxygen/mask-3-flow-rate</property>
<property>-/systems/oxygen/cockpit-oxygen/mask-4-flow-rate</property>
<property>/systems/oxygen/cockpit-oxygen/hp-regulator-flow-rate</property>
</sum>
</function>
</fcs_function>
<fcs_function name="Cockpit Oxygen Distributor">
<function>
<sum>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<product>
<quotient>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-rate</property>
<value>60</value>
</quotient>
<property>simulation/channel-dt</property>
</product>
</sum>
</function>
<output>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</output>
<clipto>
<min>0.0</min>
<max>15.0</max>
</clipto>
</fcs_function>
<fcs_function name="/systems/oxygen/cockpit-oxygen/distributor-psi">
<function>
<product>
<value>75</value>
<log10>
<sum>
<property>/systems/oxygen/cockpit-oxygen/distributor-manifold-L</property>
<value>1</value>
</sum>
</log10>
</product>
</function>
</fcs_function>
<switch name="/systems/oxygen/cockpit-oxygen/regul-lo-pr">
<default value="0"/>
<test logic="OR" value="1">
/systems/oxygen/cockpit-oxygen/distributor-psi lt 50
</test>
</switch>
</channel>
<channel name="Passenger Oxygen" execrate="8">
<switch name="/systems/oxygen/passenger-oxygen/pressure-switch">
<defualt value="0"/>
<test logic="AND" value="1">
/systems/pressurization/cabinalt ge 14000
/systems/electrical/bus/dc-ess ge 25
</test>
<!-- HI ALT 16000 -->
</switch>
<switch name="/systems/oxygen/passenger-oxygen/masks-deploy-cmd">
<default value="0"/>
<test logic="OR" value="1">
/systems/oxygen/passenger-oxygen/pressure-switch eq 1
/controls/oxygen/passenger-mask-deploy-man eq 1
</test>
</switch>
<switch name="/systems/oxygen/passenger-oxygen/masks-deploy">
<default value="/systems/oxygen/passenger-oxygen/masks-deploy"/>
<test logic="AND" value="1">
/systems/oxygen/passenger-oxygen/masks-deploy-cmd eq 1
/systems/electrical/bus/ac-ess-shed ge 110
</test>
</switch>
<switch name="Sys On Light">
<default value="/systems/oxygen/passenger-oxygen/sys-on-light"/>
<test logic="OR" value="0">
/controls/oxygen/passenger-mask-reset eq 1
/systems/electrical/bus/dc-ess lt 25
</test>
<test logic="AND" value="1">
/systems/oxygen/passenger-oxygen/masks-deploy-cmd eq 1
/systems/electrical/bus/dc-ess ge 25
</test>
<output>/systems/oxygen/passenger-oxygen/sys-on-light</output>
</switch>
</channel>
</system>

View file

@ -608,14 +608,6 @@
<output>/systems/pressurization/targetvs</output>
</filter>
<filter>
<name>TAS</name>
<type>gain</type>
<gain>1.0</gain>
<input>/instrumentation/airspeed-indicator/true-speed-kt</input>
<output>/velocities/TAS</output>
</filter>
<filter>
<name>LBtoKG</name>
<type>gain</type>

View file

@ -574,15 +574,107 @@
<output>/instrumentation/iesi/pitch-deg</output>
</filter>
<flipflop>
<type>monostable</type>
<time>
<value>1.5</value>
</time>
<S>
<property>/instrumentation/pfd/lights/autoland-armed</property>
</S>
<output>/instrumentation/pfd/lights/autoland-sw-pulse</output>
</flipflop>
<filter>
<name>Wind East</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<difference>
<product>
<property>/velocities/speed-east-fps</property>
<value>0.592484</value> <!-- fps to kt -->
</product>
<product>
<cos><deg2rad><property>/orientation/pitch-deg</property></deg2rad></cos>
<sin><deg2rad><property>/orientation/heading-deg</property></deg2rad></sin>
<!--<floor>-->
<property>/systems/navigation/adr/output/tas-3</property>
<!--<value>100</value>
</floor>-->
</product>
</difference>
</expression>
</input>
<output>/instrumentation/pfd/wind-speed-east</output>
<min>-4096</min>
<max>4096</max>
</filter>
<filter>
<name>Wind North</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<expression>
<difference>
<product>
<property>/velocities/speed-north-fps</property>
<value>0.592484</value> <!-- fps to kt -->
</product>
<product>
<cos><deg2rad><property>/orientation/pitch-deg</property></deg2rad></cos>
<cos><deg2rad><property>/orientation/heading-deg</property></deg2rad></cos>
<!--<floor>-->
<property>/systems/navigation/adr/output/tas-3</property>
<!--<value>100</value>
</floor>-->
</product>
</difference>
</expression>
</input>
<output>/instrumentation/pfd/wind-speed-north</output>
<min>-4096</min>
<max>4096</max>
</filter>
<filter>
<name>Wind Direction</name>
<type>exponential</type>
<filter-time>1.28</filter-time>
<input>
<expression>
<sum>
<rad2deg>
<atan2>
<property>/instrumentation/pfd/wind-speed-east</property>
<property>/instrumentation/pfd/wind-speed-north</property>
</atan2>
</rad2deg>
<value>180</value>
</sum>
</expression>
</input>
<output>/instrumentation/pfd/wind-direction</output>
<period>
<min>0</min>
<max>360</max>
</period>
</filter>
<filter>
<name>Wind Speed</name>
<type>exponential</type>
<filter-time>1.28</filter-time>
<input>
<expression>
<sqrt>
<sum>
<pow>
<property>/instrumentation/pfd/wind-speed-east</property>
<value>2</value>
</pow>
<pow>
<property>/instrumentation/pfd/wind-speed-north</property>
<value>2</value>
</pow>
</sum>
</sqrt>
</expression>
</input>
<output>/instrumentation/pfd/wind-speed</output>
<min>0</min>
<max>256</max>
</filter>
</PropertyList>

View file

@ -1 +1 @@
48
49