Compare commits

...
This repository has been archived on 2021-09-26. You can view files and clone it, but cannot push or open issues or pull requests.

173 commits
FMGC ... master

Author SHA1 Message Date
Josh Davidson
3ce7862733 Aero: Fix backwrads CYdr 2019-10-02 18:30:38 -04:00
Josh Davidson
967b8d5f7e Sim: Fix bugs in sound NEO, fixes 2019-09-23 13:30:07 -04:00
Josh Davidson
4524a3a6e1 Sim: Revision 2019-09-08 17:09:14 -04:00
Josh Davidson
9d31d1c10a Sim: Meg, who let you out of the basement? 2019-09-06 15:38:59 -04:00
legoboyvdlp R
25bd391f0e Fix format 2019-09-06 20:24:55 +01:00
legoboyvdlp R
e1cbd717a8 Merge branch 'master' into soundfix 2019-09-01 18:48:20 +01:00
legoboyvdlp R
e977343119 Wingfwd 2019-08-21 16:39:18 +01:00
legoboyvdlp R
21ddeca0f3 CFM wing aft 2019-08-21 16:22:18 +01:00
legoboyvdlp R
2caad9c272 CFM external 2019-08-21 15:56:25 +01:00
legoboyvdlp R
2576fc617c Fix the flap sound 2019-08-20 17:23:52 +01:00
legoboyvdlp R
20a632f16c CFM cockpit 2019-08-20 17:09:59 +01:00
Josh Davidson
7d25b84762 Sim: Get out 2019-08-18 16:20:52 -04:00
Josh Davidson
1e755b1f57 Sim: Fix some fucking bullshit 2019-08-18 16:17:58 -04:00
legoboyvdlp R
594f20b1d2 Merge branch 'soundfix' of https://github.com/Octal450/IDG-A32X into soundfix 2019-08-14 13:00:41 +01:00
legoboyvdlp R
f3268de20c Startup sounds for V2500 2019-08-14 12:57:09 +01:00
Josh Davidson
db1d6c151f System: Fix FMGC bugs 2019-08-13 17:35:23 -04:00
Josh Davidson
d9e436c2fb Sim: Fix flap motor properly 2019-08-13 15:43:51 -04:00
legoboyvdlp R
2e4d31fb3c Fix flap motor 2019-08-12 18:56:07 +01:00
Josh Davidson
c34e854027 Sim: Rework IAE sounds and cleanup 2019-08-11 17:50:28 -04:00
legoboyvdlp R
162507f12f Revision 2019-08-01 15:08:13 +01:00
legoboyvdlp R
428522bb23 Fix oops 2019-08-01 15:07:51 +01:00
legoboyvdlp R
9ef4ec3f19 Increase minimum sound volume 2019-08-01 13:24:49 +01:00
legoboyvdlp R
75b60c2fda Bugfix wtf 2019-08-01 10:47:07 +01:00
legoboyvdlp R
3e18d0f44f Bugfix, replace all did this 2019-08-01 10:42:48 +01:00
legoboyvdlp R
50766340c5 Fix 2019-07-31 16:41:45 +01:00
legoboyvdlp R
c6bf6746e1 Merge branch 'ECAM3' 2019-07-31 16:37:30 +01:00
Josh Davidson
5a41093e8c GIT: Merge and VC: update fire bindings to match 2019-07-30 19:47:42 -04:00
Josh Davidson
1861c18e42 VC: Sort the OH Fire animations 2019-07-30 18:53:34 -04:00
Jonathan Redpath
23ca6b7c18
Merge pull request from Octal450/landing-light-drag
Landing light drag
2019-07-30 17:41:52 +01:00
legoboyvdlp R
4d1a512384 Merge branch 'master' into landing-light-drag 2019-07-30 17:32:28 +01:00
legoboyvdlp R
835778888e Sounds 2019-07-30 16:45:20 +01:00
legoboyvdlp R
c901cfbd23 Fix 2019-07-30 16:44:26 +01:00
legoboyvdlp R
1a3fa42735 bindings for guards 2019-07-29 20:22:05 +01:00
legoboyvdlp R
b3b29207fa me is stupido 2019-07-27 16:11:30 +01:00
legoboyvdlp R
606402dde8 fix 2019-07-27 15:58:05 +01:00
legoboyvdlp R
933914c732 Fix 2019-07-26 21:08:49 +01:00
legoboyvdlp R
43f620365e Fix 2019-07-26 21:06:32 +01:00
legoboyvdlp R
3216713848 Fix bindings 2019-07-26 20:57:29 +01:00
legoboyvdlp R
dc3393a909 Temporary binding for covers 2019-07-26 17:49:55 +01:00
legoboyvdlp R
d318fa0275 Fix 2019-07-26 16:43:46 +01:00
legoboyvdlp R
507b1d88c1 Fix 2019-07-26 16:41:50 +01:00
legoboyvdlp R
5de209928a New warning sounds 2 2019-07-26 16:40:30 +01:00
legoboyvdlp R
30d9d6ec64 New warning sounds 2 2019-07-26 16:38:55 +01:00
legoboyvdlp R
738063a227 New warning sounds 2019-07-26 16:38:27 +01:00
legoboyvdlp R
67ead7aa7c Merge branch 'master' into ecam3 2019-07-26 16:27:16 +01:00
legoboyvdlp R
6a7e9720e4 Fix sounds - sorry! 2019-07-23 17:37:27 +01:00
legoboyvdlp R
9c9f2df7a2 Fix acconfig 2019-07-22 21:17:22 +01:00
legoboyvdlp R
ba856b039c Tune flaps 2019-07-21 19:45:06 +01:00
legoboyvdlp R
618900d681 Re-export pack, since it was wrong format 2019-07-21 19:27:50 +01:00
legoboyvdlp R
e3a2a8bb25 Improve much things, add new pack sound by CaptB 2019-07-21 19:11:58 +01:00
legoboyvdlp R
9364d0298b Add sound dialog 2019-07-04 19:52:38 +01:00
legoboyvdlp R
c3007f9217 Merge branch 'master' into sounds 2019-07-04 19:52:11 +01:00
Josh Davidson
e49660a10f Sim: Add Shift-Click functionality to FCP, remove unused laptop mode 2019-06-24 14:44:48 -04:00
legoboyvdlp R
4dacf33728 Merge branch 'master' into sounds 2019-06-19 16:19:18 +01:00
Josh Davidson
0caba60353 Sim: revision 2019-06-13 18:55:23 -04:00
TH-555
b1ae50e4b5 VC: Some positions fixed to reduce ZFighting 2019-06-14 00:04:28 +02:00
Josh Davidson
a4dcaa20b4 Sim: Notice 2019-06-10 22:58:07 -04:00
legoboyvdlp R
70f798050d Fix stupid bug 3! 2019-06-10 11:19:30 +01:00
legoboyvdlp R
44ba703139 Merge branch 'sounds' of https://github.com/Octal450/IDG-A32X into sounds 2019-06-10 11:17:42 +01:00
legoboyvdlp R
2daf78702a Fix stupid bug 2! 2019-06-10 11:16:41 +01:00
legoboyvdlp R
b70dd34702 Fix stupid bug! 2019-06-10 11:16:19 +01:00
Josh Davidson
2a27baad6c Merge branch 'sounds' of github.com:Octal450/IDG-A32X into sounds 2019-06-08 22:09:46 -04:00
Josh Davidson
54e4aeb087 VC: Fix accidently reversed push and pull for ALT knob 2019-06-08 20:21:44 -04:00
legoboyvdlp R
74aac4d4ee NEOS: fix 2019-06-04 17:21:52 +01:00
legoboyvdlp R
0069d2d4c1 Clean-up sounds 2019-06-04 17:10:07 +01:00
legoboyvdlp R
86fe023912 Merge branch 'master' into sounds 2019-06-01 16:18:46 +01:00
legoboyvdlp R
469380047c Move transponder code up a little more 2019-06-01 16:17:38 +01:00
legoboyvdlp R
ffa486d168 Add external IAE sounds 2019-06-01 16:15:51 +01:00
legoboyvdlp R
67bcd8b277 Merge branch 'master' into sounds 2019-05-30 10:59:03 +01:00
legoboyvdlp R
225bd09d96 Fix 2019-05-30 10:58:55 +01:00
legoboyvdlp R
d6189c099e Merge branch 'master' into sounds 2019-05-30 10:57:54 +01:00
legoboyvdlp R
62f7a108bd ATC: fix issues 2019-05-30 10:57:28 +01:00
legoboyvdlp R
786a5055d6 ATC: fix issues 2019-05-30 10:56:22 +01:00
legoboyvdlp R
16edee3c39 Merge branch 'master' into sounds 2019-05-29 17:35:01 +01:00
legoboyvdlp R
04f9b63354 TCAS: fix property names, revision 2019-05-29 17:33:42 +01:00
Jonathan Redpath
1db48daccb
ATC: add transponder system ()
* ATC: add transponder system

* I know you want to be but you are not a RMP, ATC

* Update atc.nas

* Update A320-main.xml

* fix

* Disable radios in menubar, change TCAS mode according to transponder switch

* Add new TCAS flags, will be uncommented in 2019.3

* Fix

* Fix

* Hook TCAS to electrical system

* Fix

* Resetting after failure

* Fix

* electrical output now controlled by transponder itself

* Fix

* fix

* fix

* Fix

* Fix

* Bugfixes, add to acconfig

* Re-add radio dialog

* Prevent radio dialog from modifying mode

* Fix clear display

* Remove conflict between dialog and setting the code on the panel

* VC: Cleanup transponder bindings

* Fixes

* Fix

* Fix finally

* Transponder: realign
2019-05-29 17:31:25 +01:00
legoboyvdlp R
d2045197c9 Add wingfwd 2019-05-23 16:05:41 +01:00
legoboyvdlp R
a097f45abd Bugfix aft sounds 2019-05-23 15:02:43 +01:00
legoboyvdlp R
4725254376 Add wing aft sounds 2019-05-23 14:49:11 +01:00
legoboyvdlp R
41640b0aab Add IAE cockpit sounds 2019-05-23 14:29:14 +01:00
legoboyvdlp R
d137f20fad Gitignore 2019-05-22 17:14:35 +01:00
legoboyvdlp R
2999109d74 Remove un-needed sounds, neos will now use the old sounds, seperate to cfm sound. Prepare for v2500 sound. 2019-05-22 11:33:17 +01:00
legoboyvdlp R
71f1667536 Fix wingaft, do CFM56A 2019-05-21 18:52:43 +01:00
legoboyvdlp R
06c859da1f Edit sounds to remove noise and make them loop better 2019-05-21 18:50:04 +01:00
legoboyvdlp R
6724db09d0 Fix seatbelt 2019-05-21 18:42:56 +01:00
legoboyvdlp R
7b0a235066 Fix 2019-05-18 10:01:56 +01:00
legoboyvdlp R
5ccf1f5bb2 Re-organize sound folder, add wingfwd sounds 2019-05-18 09:56:41 +01:00
legoboyvdlp R
4d2f11db02 Further improvements 2019-05-18 08:57:55 +01:00
legoboyvdlp R
b3893e706c Wingaft 2019-05-18 08:47:50 +01:00
legoboyvdlp R
593ada8a6a Re-tune idle sounds, replace spool with lowspool 2019-05-18 08:45:31 +01:00
legoboyvdlp R
3756828f33 Tune a little, boost lowspool and spool 2019-05-17 21:32:03 +01:00
legoboyvdlp R
6497f72a3b Merge branch 'master' into sounds 2019-05-17 21:22:27 +01:00
legoboyvdlp R
63b4077df5 Boost idle sound volume 2019-05-17 21:20:56 +01:00
legoboyvdlp R
74155d36ea Add aft wing sounds 2019-05-17 20:59:08 +01:00
legoboyvdlp R
923ef6e89e Remove un-needed stuff, add seperate cfm56a sound 2019-05-17 17:59:53 +01:00
legoboyvdlp R
cce888f5ab Fix 2019-05-17 17:12:57 +01:00
legoboyvdlp R
30d136b7b1 Fix idle sound 2019-05-17 16:53:27 +01:00
legoboyvdlp R
f5a7a9e6ae Refactor sounds; now they match original soundpack inside and out 2019-05-17 16:50:03 +01:00
legoboyvdlp R
4c79f9b983 Sounds: fix reversed idle sound, fix wind and roll 2019-05-16 21:17:27 +01:00
Josh Davidson
846005a217 Sim: Formatting 2019-05-16 16:16:03 -04:00
TH-555
19af3617e3 VC: Normal face orientation fixed 2019-05-16 21:06:39 +02:00
legoboyvdlp R
23717ec9b3 RMP: getBoolValue() doesn't need to have == 1 or != 1 2019-05-15 17:25:13 +01:00
legoboyvdlp R
453fa34d6e Bugfix: radio xfer should not be repeatable 2019-05-15 17:22:03 +01:00
legoboyvdlp R
07216d3e44 SD ELEC: bugfix 2019-05-14 12:33:51 +01:00
legoboyvdlp R
22996ffb73 Add aft wing sounds 2019-05-11 11:10:35 +01:00
legoboyvdlp R
8b12b615ca Fix flap lever, startup, tune 2019-05-10 17:53:17 +01:00
legoboyvdlp R
40852707fa Keep tuning sounds 2019-05-10 17:14:59 +01:00
legoboyvdlp R
3c98ff0ace In theory fixes apu fire test. In practice who knows? 2019-05-10 14:00:24 +01:00
legoboyvdlp R
4d9a784ef2 more tune 2019-05-09 17:52:49 +01:00
legoboyvdlp R
9252a9cde9 keep tuning 2019-05-09 17:47:49 +01:00
legoboyvdlp R
e7a7c8964e keep tuning 2019-05-09 17:45:17 +01:00
legoboyvdlp R
e501d3e4d8 keep tuning 2019-05-09 17:41:36 +01:00
legoboyvdlp R
1b11c6e3fe Merge branch 'master' into sounds 2019-05-09 17:33:17 +01:00
legoboyvdlp R
725d2ef01a Separate exterior, wing, interior, keep fixing / tuning 2019-05-09 17:32:53 +01:00
Josh Davidson
819a75ed55 Merge branch 'master' into ECAM3 2019-05-08 19:29:29 -04:00
legoboyvdlp R
9cc0a1f785 Tune and fix stuff 2019-05-08 17:07:35 +01:00
legoboyvdlp R
3cfa545688 Add combustion sound, make buzz more prominent, add flap click sound 2019-05-08 11:00:14 +01:00
legoboyvdlp R
550219c95c Tune sounds, add whine sound 30-50%, add startup sound (very quiet) 2019-05-08 10:00:29 +01:00
legoboyvdlp R
bef293a873 Turn down rumble 2019-05-07 15:58:31 +01:00
legoboyvdlp R
4de20021f7 Fix stuff 2019-05-07 15:53:18 +01:00
legoboyvdlp R
567fad1c46 Fix the xml 2019-05-07 15:45:03 +01:00
legoboyvdlp R
a4af9156aa Xbuzz 2019-05-07 15:39:46 +01:00
legoboyvdlp R
5d9287e7d2 Add SASA sounds 2019-05-07 14:56:03 +01:00
legoboyvdlp R
1d618d5e95 change to particle based engine fire 2019-05-05 19:36:37 +01:00
legoboyvdlp R
6ce9f68b95 Bugfix loop failure, fix ECAM warnings (elec failure does not cause them) 2019-05-03 12:17:56 +01:00
legoboyvdlp R
655762a461 Bugfixes 2019-05-02 16:03:57 +01:00
legoboyvdlp R
0292b48767 Make bugs better 2019-05-02 14:36:02 +01:00
legoboyvdlp R
1861639991 Add fire button, fix major bug in engine fire 2019-05-02 12:31:26 +01:00
legoboyvdlp R
ed54d8d047 Merge branch 'master' into ECAM3 2019-05-02 09:31:11 +01:00
legoboyvdlp R
57d53da6f5 CARGO SMOKE DET FAULT, fix bugs 2019-05-01 15:26:15 +01:00
legoboyvdlp R
8e8f063f5d Bugfix 2019-05-01 13:43:33 +01:00
legoboyvdlp R
8b003bf8af Add fire detection warnings to engine system 2019-05-01 12:59:05 +01:00
legoboyvdlp R
0b87833218 Cargo smoke test 2019-04-30 19:30:34 +01:00
legoboyvdlp R
29bb3f547a Bugfixes 2019-04-30 17:58:03 +01:00
legoboyvdlp R
259c9a3e17 Make it not go CRC when it goes CRC when it should not go CRC (hopefully it will stop going CRC) 2019-04-30 11:00:49 +01:00
legoboyvdlp R
402159dfa5 apu autoshutdown improved, warning 2019-04-29 17:21:17 +01:00
legoboyvdlp R
543a950b9c Many improvements, add a proper CRC sound 2019-04-29 15:13:56 +01:00
legoboyvdlp R
884891f694 Merge branch 'master' into ECAM3 2019-04-27 17:57:23 +01:00
legoboyvdlp R
8e0173ec03 Fix fire test 2019-04-27 13:02:59 +01:00
legoboyvdlp R
718962e2fb Prevent crc sounding when master warning is on but sound is off 2019-04-26 10:45:17 +01:00
legoboyvdlp R
741e579113 Merge branch 'master' into ECAM3 2019-04-26 09:05:26 +01:00
legoboyvdlp R
baef2f21af Fire going out should reset warning 2019-04-26 09:05:06 +01:00
legoboyvdlp R
0bd902fbe7 30 sec timer works 2019-04-26 08:55:55 +01:00
legoboyvdlp R
882740c02a Fix 2019-04-25 15:14:03 +01:00
legoboyvdlp R
cc13067a49 Agent 1 timer works, need to fix agent 2 timer 2019-04-25 15:10:54 +01:00
legoboyvdlp R
4b96cde9da apu fire works 100% 2019-04-24 16:16:31 +01:00
legoboyvdlp R
009c98832f Bugfix 2019-04-22 20:58:02 +01:00
legoboyvdlp R
f0a812d85f APU fire warn works 2019-04-22 20:56:31 +01:00
legoboyvdlp R
c6af8d90f5 fix messages 2019-04-19 17:40:20 +01:00
legoboyvdlp R
c05eaeacaa Major bugfix 2019-04-17 17:40:49 +01:00
legoboyvdlp R
acdc4cb925 Fix conditions for fire, fix severe bug 2019-04-16 17:43:36 +01:00
legoboyvdlp R
8dfc6bc93d Add jsbsim part, fix severe bugs 2019-04-16 16:42:59 +01:00
legoboyvdlp R
679e1d5f19 Add APU fire, fix for non-IAE 2019-04-16 16:22:06 +01:00
legoboyvdlp R
8e7dfdfbf5 Add engine fire. Still need to make temperature simulation and fix messages 2019-04-15 19:58:54 +01:00
legoboyvdlp R
584860d422 Bugfix dual fail 2019-04-08 16:57:34 +01:00
legoboyvdlp R
f9afa68519 Rework dual failure, add new font 2019-04-08 16:19:28 +01:00
Josh Davidson
2a73b57ac5 Merge branch 'master' into ECAM3 2019-03-24 00:06:54 -04:00
legoboyvdlp R
461bc61fda Merge branch 'master' into ECAM3 2019-03-23 15:26:27 +00:00
legoboyvdlp R
0f26acf4b9 Failures call status properly, fix large bug in thrust lock 2019-03-20 16:29:54 +00:00
legoboyvdlp R
3ea6a4c3ce Finish thrust lock, fix sounds 2019-03-19 18:19:50 +00:00
Joshua Davidson
66976ff081 Merge branch 'master' into ECAM3 2019-03-16 22:47:32 -04:00
legoboyvdlp R
1c41124eac fix stupid 2019-03-16 17:13:35 +00:00
legoboyvdlp R
6dce56234f finish thrust lock 2019-03-16 16:39:29 +00:00
legoboyvdlp R
2c659c9deb Merge branch 'master' into ECAM3 2019-03-16 10:58:11 +00:00
legoboyvdlp R
859bc8febc Thrust Lock logic improve 2019-03-16 10:43:52 +00:00
legoboyvdlp R
95be0a6fbe Merge branch 'master' into ECAM3 2019-03-15 12:28:53 +00:00
legoboyvdlp R
5fb7d35b5c add hasSubmsg to dual fail 2019-03-14 16:36:31 +00:00
legoboyvdlp R
c8ab79c268 Add dual-fail again, cleanup messy code using default arguments 2019-03-12 13:05:56 +00:00
legoboyvdlp R
4db1094b48 Re-add dual-fail 2019-03-11 17:54:01 +00:00
legoboyvdlp R
28b59a8dfc Merge branch 'master' into ECAM3 2019-03-11 17:11:59 +00:00
legoboyvdlp R
ca62307d09 Add sub-message to new() parameter as an optional argument 2019-03-11 17:11:06 +00:00
Jonathan Redpath
0fd0e9148d Add drag from extended landing lights. Tuned to 250fpm impact in idle descent maintaining 250 knots at 10000 feet. 2018-12-10 11:09:07 +00:00
Jonathan Redpath
858fb41824 Add drag due to landing lights. 2018-12-08 17:38:14 +00:00
238 changed files with 14312 additions and 3150 deletions
.gitignoreA320-100-CFM-set.xmlA320-100-CFM.xmlA320-200-CFM-set.xmlA320-200-CFM.xmlA320-200-IAE-set.xmlA320-200-IAE.xmlA320-main.xmlA320neo-CFM-set.xmlA320neo-CFM.xmlA320neo-PW-set.xmlA320neo-PW.xml
AircraftConfig
FAQ.md
Fonts
Models
Nasal
README.md
Sounds

2
.gitignore vendored
View file

@ -2,8 +2,6 @@
*.*~
.*~
MyDevWIP
SHS
AKV.*
# ignore swap files
*.swp
*.swo

View file

@ -21,6 +21,13 @@
</livery>
</model>
<rating>
<FDM type="int">4</FDM>
<systems type="int">5</systems>
<cockpit type="int">5</cockpit>
<model type="int">4</model>
</rating>
<previews>
<preview>
<type>exterior</type>

View file

@ -138,6 +138,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-spoiler"/>
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<flight_control name="none"/>

View file

@ -21,6 +21,13 @@
</livery>
</model>
<rating>
<FDM type="int">4</FDM>
<systems type="int">5</systems>
<cockpit type="int">5</cockpit>
<model type="int">4</model>
</rating>
<previews>
<preview>
<type>exterior</type>

View file

@ -138,6 +138,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-spoiler"/>
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<flight_control name="none"/>

View file

@ -21,6 +21,13 @@
</livery>
</model>
<rating>
<FDM type="int">4</FDM>
<systems type="int">5</systems>
<cockpit type="int">5</cockpit>
<model type="int">4</model>
</rating>
<previews>
<preview>
<type>exterior</type>

View file

@ -138,6 +138,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-spoiler"/>
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<flight_control name="none"/>
<aerodynamics file="Systems/a320-aerodynamics.xml"/>

View file

@ -3,20 +3,12 @@
<!-- Copyright (c) 2019 Joshua Davidson (Octal450) -->
<PropertyList>
<sim>
<author>Immersive Design Group: Joshua Davidson (Octal450), Jonathan Redpath (legoboyvdlp), Thorsten Herrmann (TH-555)</author>
<status>Pre V1.0</status>
<rating>
<FDM type="int">4</FDM>
<systems type="int">5</systems>
<cockpit type="int">5</cockpit>
<model type="int">4</model>
</rating>
<hud n="0">
<enable3d n="0">false</enable3d>
<enable3d n="1">false</enable3d>
@ -95,6 +87,17 @@
<output-property>/systems/pitot/icing</output-property>
</iceable>
</icing>
<flame>
<red-high type="double">1.0</red-high>
<red-low type="double">0.95</red-low>
<red-base type="double">1.0</red-base>
<green-high type="double">0.741</green-high>
<green-low type="double">0.32</green-low>
<green-base type="double">0.741</green-base>
<blue-high type="double">0.10</blue-high>
<blue-low type="double">0.02</blue-low>
<blue-base type="double">0.09</blue-base>
</flame>
</model>
<startup>
@ -157,8 +160,15 @@
<path>Aircraft/IDG-A32X/Systems/pfd.xml</path>
</autopilot>
<!-- 10 is sound -->
<autopilot n="11">
<path>Aircraft/IDG-A32X/Systems/sound-common.xml</path>
</autopilot>
</systems>
<sound>
<suppress-warning type="bool">1</suppress-warning>
</sound>
<sounde>
<seatbelt-sign type="bool">0</seatbelt-sign>
<no-smoking-sign type="bool">0</no-smoking-sign>
@ -168,6 +178,7 @@
<knb1 type="bool">0</knb1>
<oh-btn type="bool">0</oh-btn>
<switch1 type="bool">0</switch1>
<flaps-click type="bool">0</flaps-click>
</sounde>
<instrumentation>
@ -352,6 +363,15 @@
</script>
</binding>
</item>
<item>
<label>Adjust Sound Volumes</label>
<binding>
<command>nasal</command>
<script>
acconfig.sound_config_dlg.open();
</script>
</binding>
</item>
<item>
<label>Skip ADIRS</label>
<binding>
@ -568,6 +588,10 @@
<onbat type="bool">false</onbat>
<skip type="bool">0</skip>
</adirs>
<atc>
<system-knob type="int">0</system-knob>
<mode-knob type="int">0</mode-knob>
</atc>
<APU>
<fire-btn type="bool">0</fire-btn>
<fire-btn-cover type="bool">0</fire-btn-cover>
@ -584,6 +608,12 @@
<electric>
<avionics-switch type="bool">true</avionics-switch>
</electric>
<electrical>
<idg>
<left-idg-disc type="bool">false</left-idg-disc>
<right-idg-disc type="bool">false</right-idg-disc>
</idg>
</electrical>
<engines>
<engine-start-switch type="int">1</engine-start-switch>
<engine n="0">
@ -613,6 +643,11 @@
<throttle-fdm type="double">0</throttle-fdm>
</engine>
</engines>
<fire>
<apu-test-btn type="bool">0</apu-test-btn>
<test-btn-1 type="bool">0</test-btn-1>
<test-btn-2 type="bool">0</test-btn-2>
</fire>
<flight>
<aileron-drives-tiller type="bool">0</aileron-drives-tiller>
<aileron-input>0</aileron-input>
@ -767,6 +802,13 @@
<acconfig n="0">
<autoconfig-running>0</autoconfig-running>
</acconfig>
<atc>
<transponder-code type="string">2000</transponder-code>
<failed type="bool">0</failed>
</atc>
<apu n="0">
<emer-shutdown type="bool">false</emer-shutdown>
</apu>
<electrical n="0">
<bus n="0">
<dc-ess>0</dc-ess>
@ -790,11 +832,36 @@
<spoiler-r3 type="bool">0</spoiler-r3>
<spoiler-r4 type="bool">0</spoiler-r4>
<spoiler-r5 type="bool">0</spoiler-r5>
<engine-left-fire type="bool">0</engine-left-fire>
<engine-right-fire type="bool">0</engine-right-fire>
<apu-fire type="bool">0</apu-fire>
<cargo-fwd-fire type="bool">0</cargo-fwd-fire>
<cargo-aft-fire type="bool">0</cargo-aft-fire>
</failures>
<fctl n="0">
<fac1 type="bool">0</fac1>
<fac2 type="bool">0</fac2>
</fctl>
<fire n="0">
<apu>
<temperature type="double">0</temperature>
</apu>
<engine1>
<temperature type="double">0</temperature>
</engine1>
<engine2>
<temperature type="double">0</temperature>
</engine2>
<cargo>
<disch type="bool">0</disch>
<aft>
<temperature type="double">0</temperature>
</aft>
<fwd>
<temperature type="double">0</temperature>
</fwd>
</cargo>
</fire>
<fuel n="0">
<only-use-ctr-tank type="bool">0</only-use-ctr-tank>
<tank n="0">
@ -972,7 +1039,7 @@
<tcas><!-- http://wiki.flightgear.org/index.php/TCAS -->
<serviceable type="bool">true</serviceable><!-- TCAS ENABLE -->
<inputs>
<mode type="int">3</mode><!-- 0=off, 1=standby, 2=TA-only, 3=auto(TA/RA) -->
<mode type="int">1</mode><!-- 0=off, 1=standby, 2=TA-only, 3=auto(TA/RA) -->
</inputs>
<voice>
<file-prefix type="string">Sounds/tcas/female/</file-prefix>
@ -1563,6 +1630,9 @@
<acp>
<file>Aircraft/IDG-A32X/Nasal/acp.nas</file>
</acp>
<atc>
<file>Aircraft/IDG-A32X/Nasal/atc.nas</file>
</atc>
</nasal>
</PropertyList>

View file

@ -21,6 +21,13 @@
</livery>
</model>
<rating>
<FDM type="int">4</FDM>
<systems type="int">5</systems>
<cockpit type="int">5</cockpit>
<model type="int">4</model>
</rating>
<previews>
<preview>
<type>exterior</type>
@ -161,7 +168,7 @@
<path>Aircraft/IDG-A32X/Systems/fadec-cfm.xml</path>
</autopilot>
<autopilot n="10">
<path>Aircraft/IDG-A32X/Systems/cfm56-sound.xml</path>
<path>Aircraft/IDG-A32X/Systems/leapx-sound.xml</path>
</autopilot>
</systems>

View file

@ -138,6 +138,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-spoiler"/>
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<flight_control name="none"/>

View file

@ -21,6 +21,13 @@
</livery>
</model>
<rating>
<FDM type="int">4</FDM>
<systems type="int">5</systems>
<cockpit type="int">5</cockpit>
<model type="int">4</model>
</rating>
<previews>
<preview>
<type>exterior</type>
@ -161,7 +168,7 @@
<path>Aircraft/IDG-A32X/Systems/fadec-cfm.xml</path>
</autopilot>
<autopilot n="10">
<path>Aircraft/IDG-A32X/Systems/cfm56-sound.xml</path>
<path>Aircraft/IDG-A32X/Systems/leapx-sound.xml</path>
</autopilot>
</systems>

View file

@ -138,6 +138,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<system file="a320-fcs"/>
<system file="a320-spoiler"/>
<system file="a320-lights"/>
<system file="a320-engine-fire"/>
<flight_control name="none"/>

View file

@ -73,6 +73,8 @@ var failReset = func {
setprop("/systems/failures/fuelmode", 0);
setprop("/systems/failures/cargo-aft-fire", 0);
setprop("/systems/failures/cargo-fwd-fire", 0);
setprop("/systems/failures/engine-left-fire", 0);
setprop("/systems/failures/engine-right-fire", 0);
}
failReset();
@ -85,7 +87,6 @@ setprop("/systems/acconfig/out-of-date", 0);
setprop("/systems/acconfig/mismatch-code", "0x000");
setprop("/systems/acconfig/mismatch-reason", "XX");
setprop("/systems/acconfig/options/keyboard-mode", 0);
setprop("/systems/acconfig/options/laptop-mode", 0);
setprop("/systems/acconfig/options/adirs-skip", 0);
setprop("/systems/acconfig/options/welcome-skip", 0);
setprop("/systems/acconfig/options/no-rendering-warn", 0);
@ -113,7 +114,6 @@ var du_quality = gui.Dialog.new("sim/gui/dialogs/acconfig/du-quality/dialog", "A
var rendering_dlg = gui.Dialog.new("sim/gui/dialogs/rendering/dialog", "Aircraft/IDG-A32X/AircraftConfig/rendering.xml");
spinning.start();
init_dlg.open();
http.load("https://raw.githubusercontent.com/Octal450/IDG-A32X/master/revision.txt").done(func(r) setprop("/systems/acconfig/new-revision", r.response));
var revisionFile = (getprop("/sim/aircraft-dir") ~ "/revision.txt");
var current_revision = io.readfile(revisionFile);
@ -215,7 +215,6 @@ var renderingSettings = {
var readSettings = func {
io.read_properties(getprop("/sim/fg-home") ~ "/Export/IDG-A32X-config.xml", "/systems/acconfig/options");
setprop("/options/system/keyboard-mode", getprop("/systems/acconfig/options/keyboard-mode"));
setprop("/options/system/laptop-mode", getprop("/systems/acconfig/options/laptop-mode"));
setprop("/controls/adirs/skip", getprop("/systems/acconfig/options/adirs-skip"));
setprop("/sim/model/autopush/route/show", getprop("/systems/acconfig/options/autopush/show-route"));
setprop("/sim/model/autopush/route/show-wingtip", getprop("/systems/acconfig/options/autopush/show-wingtip"));
@ -224,7 +223,6 @@ var readSettings = func {
var writeSettings = func {
setprop("/systems/acconfig/options/keyboard-mode", getprop("/options/system/keyboard-mode"));
setprop("/systems/acconfig/options/laptop-mode", getprop("/options/system/laptop-mode"));
setprop("/systems/acconfig/options/adirs-skip", getprop("/controls/adirs/skip"));
setprop("/systems/acconfig/options/autopush/show-route", getprop("/sim/model/autopush/route/show"));
setprop("/systems/acconfig/options/autopush/show-wingtip", getprop("/sim/model/autopush/route/show-wingtip"));
@ -266,6 +264,8 @@ var colddark = func {
setprop("/controls/lighting/taxi-light-switch", 0.0);
setprop("/controls/switches/landing-lights-l", 0.0);
setprop("/controls/switches/landing-lights-r", 0.0);
setprop("/controls/atc/mode-knob", 0);
atc.transponderPanel.modeSwitch(1);
libraries.systemsInit();
failReset();
if (getprop("/engines/engine[1]/n2-actual") < 2) {
@ -447,6 +447,8 @@ var taxi_b = func {
setprop("/controls/radio/rmp[0]/on", 1);
setprop("/controls/radio/rmp[1]/on", 1);
setprop("/controls/radio/rmp[2]/on", 1);
setprop("/controls/atc/mode-knob", 2);
atc.transponderPanel.modeSwitch(3);
setprop("/systems/fadec/power-avail", 1);
setprop("/systems/fadec/powered-time", -310);
setprop("/controls/lighting/turnoff-light-switch", 1);
@ -495,6 +497,8 @@ var takeoff = func {
setprop("/controls/flight/flap-lever", 1);
setprop("/controls/flight/flap-pos", 2);
setprop("/controls/flight/flap-txt", "1+F");
setprop("/controls/atc/mode-knob", 4);
atc.transponderPanel.modeSwitch(5);
libraries.flaptimer.start();
setprop("/controls/flight/elevator-trim", -0.07);
systems.arm_autobrake(3);

View file

@ -487,6 +487,49 @@
</binding>
<live>true</live>
</checkbox>
<group>
<layout>hbox</layout>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
<text>
<label>Engine Fire</label>
</text>
<hrule>
<stretch type="bool">true</stretch>
</hrule>
</group>
<checkbox>
<label>Left Engine</label>
<halign>left</halign>
<property>/systems/failures/engine-left-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>APU</label>
<halign>left</halign>
<property>/systems/failures/apu-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>Right Engine</label>
<halign>left</halign>
<property>/systems/failures/engine-right-fire</property>
<binding>
<command>dialog-apply</command>
</binding>
<live>true</live>
</checkbox>
<hrule/>
@ -502,9 +545,7 @@
</script>
</binding>
</button>
</group>
</group>
</PropertyList>

View file

@ -49,11 +49,6 @@
<label>Keyboard Mode: Maps flight controls to number pad, and number rows, instead of view shortucts.</label>
</text>
<text>
<halign>left</halign>
<label>Laptop Mode: Not implemented yet. When implemented, will allow easier operation on laptops.</label>
</text>
<hrule/>
<text>

View file

@ -380,29 +380,6 @@
<live>true</live>
</checkbox>
<checkbox>
<label>Laptop Mode (See Aircraft Help)</label>
<halign>left</halign>
<enable>
<property>/systems/acconfig/extra-stuff</property>
</enable>
<property>/options/system/laptop-mode</property>
<binding>
<command>property-toggle</command>
<property>/options/system/laptop-mode</property>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
<binding>
<command>nasal</command>
<script>
acconfig.writeSettings();
</script>
</binding>
<live>true</live>
</checkbox>
<checkbox>
<label>ADIRS Aligns Instantly</label>
<halign>left</halign>

10
FAQ.md
View file

@ -1,5 +1,15 @@
# Frequently Asked Questions
## Download
### Q. The download will not extract or is corrupted. Why?
Try to download the aircraft again. The download may have failed for some reason.
### Q. I found other distributors offering downloads of the this IDG aircraft. Can I use them?
**Using other distributors is strongly discouraged and you will not receive any support from IDG!** You should get the aircraft from [Octal450's repo](https://github.com/Octal450/IDG-A32X.git).
## Startup
### Q. Error Code: 0x121 appears. Why?

Binary file not shown.

View file

@ -404,5 +404,4 @@
</and>
</condition>
</animation>
</PropertyList>

View file

@ -434,5 +434,4 @@
</and>
</condition>
</animation>
</PropertyList>

View file

@ -433,5 +433,4 @@
</and>
</condition>
</animation>
</PropertyList>

View file

@ -414,5 +414,4 @@
</and>
</condition>
</animation>
</PropertyList>

View file

@ -420,5 +420,4 @@
</and>
</condition>
</animation>
</PropertyList>

View file

@ -0,0 +1,35 @@
<?xml version="1.0"?>
<PropertyList>
<path>Aircraft/Generic/Effects/Thruster/thrust_flame.ac</path>
<nopreview/>
<animation>
<type>scale</type>
<property>systems/failures/apu-fire</property>
<x-min>0.2</x-min>
<y-min>0.3</y-min>
<z-min>0.3</z-min>
<y-max>0.8</y-max>
<z-max>0.8</z-max>
<x-factor>0.2</x-factor>
<y-factor>0.2</y-factor>
<z-factor>0.2</z-factor>
</animation>
<animation>
<type>select</type>
<object-name>Bounding_box</object-name>
<condition>
<greater-than>
<property>systems/failures/apu-fire</property>
<value>0.8</value>
</greater-than>
</condition>
</animation>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/flame-apu</inherits-from>
<object-name>Bounding_box</object-name>
</effect>
</PropertyList>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>AB-flame</name>
<inherits-from>Effects/thrust-flame</inherits-from>
<parameters>
<base_flame_b type="float"><use>/sim/model/flame/blue-base</use></base_flame_b>
<base_flame_density type="float">0.01</base_flame_density>
<base_flame_g type="float"><use>/sim/model/flame/green-base</use></base_flame_g>
<base_flame_r type="float"><use>/sim/model/flame/red-base</use></base_flame_r>
<deflection_coeff type="float">0</deflection_coeff>
<flame_color_high_b type="float"><use>/sim/model/flame/blue-high</use></flame_color_high_b>
<flame_color_high_g type="float"><use>/sim/model/flame/green-high</use></flame_color_high_g>
<flame_color_high_r type="float"><use>/sim/model/flame/red-high</use></flame_color_high_r>
<flame_color_low_b type="float"><use>/sim/model/flame/blue-low</use></flame_color_low_b>
<flame_color_low_g type="float"><use>/sim/model/flame/green-low</use></flame_color_low_g>
<flame_color_low_r type="float"><use>/sim/model/flame/red-low</use></flame_color_low_r>
<flame_radius_fraction type="float">0.7</flame_radius_fraction>
<noise_scale type="float">0.8</noise_scale>
<noise_strength type="float">0.4</noise_strength>
<thrust_collimation type="float">0.2</thrust_collimation>
<thrust_density type="float">0.8</thrust_density>
<use_noise type="int">1</use_noise>
<use_shocks type="int">0</use_shocks>
</parameters>
</PropertyList>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>AB-flame</name>
<inherits-from>Effects/thrust-flame</inherits-from>
<parameters>
<base_flame_b type="float"><use>/sim/model/flame/blue-base</use></base_flame_b>
<base_flame_density type="float">0.01</base_flame_density>
<base_flame_g type="float"><use>/sim/model/flame/green-base</use></base_flame_g>
<base_flame_r type="float"><use>/sim/model/flame/red-base</use></base_flame_r>
<deflection_coeff type="float">0</deflection_coeff>
<flame_color_high_b type="float"><use>/sim/model/flame/blue-high</use></flame_color_high_b>
<flame_color_high_g type="float"><use>/sim/model/flame/green-high</use></flame_color_high_g>
<flame_color_high_r type="float"><use>/sim/model/flame/red-high</use></flame_color_high_r>
<flame_color_low_b type="float"><use>/sim/model/flame/blue-low</use></flame_color_low_b>
<flame_color_low_g type="float"><use>/sim/model/flame/green-low</use></flame_color_low_g>
<flame_color_low_r type="float"><use>/sim/model/flame/red-low</use></flame_color_low_r>
<flame_radius_fraction type="float">0.4</flame_radius_fraction>
<noise_scale type="float">0.8</noise_scale>
<noise_strength type="float">0.2</noise_strength>
<thrust_collimation type="float">0.5</thrust_collimation>
<thrust_density type="float">0.8</thrust_density>
<use_noise type="int">1</use_noise>
<use_shocks type="int">0</use_shocks>
</parameters>
</PropertyList>

25
Models/Effects/flame.eff Normal file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<PropertyList>
<name>AB-flame</name>
<inherits-from>Effects/thrust-flame</inherits-from>
<parameters>
<base_flame_b type="float"><use>/sim/model/flame/blue-base</use></base_flame_b>
<base_flame_density type="float">0.01</base_flame_density>
<base_flame_g type="float"><use>/sim/model/flame/green-base</use></base_flame_g>
<base_flame_r type="float"><use>/sim/model/flame/red-base</use></base_flame_r>
<deflection_coeff type="float">0</deflection_coeff>
<flame_color_high_b type="float"><use>/sim/model/flame/blue-high</use></flame_color_high_b>
<flame_color_high_g type="float"><use>/sim/model/flame/green-high</use></flame_color_high_g>
<flame_color_high_r type="float"><use>/sim/model/flame/red-high</use></flame_color_high_r>
<flame_color_low_b type="float"><use>/sim/model/flame/blue-low</use></flame_color_low_b>
<flame_color_low_g type="float"><use>/sim/model/flame/green-low</use></flame_color_low_g>
<flame_color_low_r type="float"><use>/sim/model/flame/red-low</use></flame_color_low_r>
<flame_radius_fraction type="float">0.82</flame_radius_fraction>
<noise_scale type="float">0.8</noise_scale>
<noise_strength type="float">0.2</noise_strength>
<thrust_collimation type="float">0.2</thrust_collimation>
<thrust_density type="float">0.8</thrust_density>
<use_noise type="int">1</use_noise>
<use_shocks type="int">0</use_shocks>
</parameters>
</PropertyList>

View file

@ -8,7 +8,7 @@
<params>
<n1>engines/engine[3]/n1</n1>
<on-fire>engines/engine[0]/on-fire</on-fire>
<on-fire>systems/failures/engine-left-fire</on-fire>
<contrail>engines/engine[0]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
</params>

View file

@ -8,7 +8,7 @@
<params>
<n1>engines/engine[4]/n1</n1>
<on-fire>engines/engine[1]/on-fire</on-fire>
<on-fire>systems/failures/engine-right-fire</on-fire>
<contrail>engines/engine[1]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
</params>

View file

@ -13,7 +13,7 @@
<params>
<n1>engines/engine[3]/n1</n1>
<on-fire>engines/engine[0]/on-fire</on-fire>
<on-fire>systems/failures/engine-left-fire</on-fire>
<contrail>engines/engine[0]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
</params>

View file

@ -13,7 +13,7 @@
<params>
<n1>engines/engine[4]/n1</n1>
<on-fire>engines/engine[1]/on-fire</on-fire>
<on-fire>systems/failures/engine-right-fire</on-fire>
<contrail>engines/engine[1]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
</params>

View file

@ -10,7 +10,7 @@
<params>
<n1>engines/engine[3]/n1</n1>
<on-fire>engines/engine[0]/on-fire</on-fire>
<on-fire>systems/failures/engine-left-fire</on-fire>
<contrail>engines/engine[0]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
<pylon-model-path>Aircraft/IDG-A32X/Models/Engines/XMLs/a320.pylon.cfm.left.xml</pylon-model-path>

View file

@ -10,7 +10,7 @@
<params>
<n1>engines/engine[4]/n1</n1>
<on-fire>engines/engine[1]/on-fire</on-fire>
<on-fire>systems/failures/engine-right-fire</on-fire>
<contrail>engines/engine[1]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
<pylon-model-path>Aircraft/IDG-A32X/Models/Engines/XMLs/a320.pylon.cfm.right.xml</pylon-model-path>

View file

@ -10,7 +10,7 @@
<params>
<n1>engines/engine[3]/n1</n1>
<on-fire>engines/engine[0]/on-fire</on-fire>
<on-fire>systems/failures/engine-left-fire</on-fire>
<contrail>engines/engine[0]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[2]</reverser-pos-norm>
<pylon-model-path>Aircraft/IDG-A32X/Models/Engines/XMLs/a320.pylon.iae.left.xml</pylon-model-path>

View file

@ -10,7 +10,7 @@
<params>
<n1>engines/engine[4]/n1</n1>
<on-fire>engines/engine[1]/on-fire</on-fire>
<on-fire>systems/failures/engine-right-fire</on-fire>
<contrail>engines/engine[1]/contrail</contrail>
<reverser-pos-norm>sim/multiplay/generic/float[3]</reverser-pos-norm>
<pylon-model-path>Aircraft/IDG-A32X/Models/Engines/XMLs/a320.pylon.iae.right.xml</pylon-model-path>

File diff suppressed because it is too large Load diff

View file

@ -32,7 +32,7 @@
<z-m>0.95</z-m>
</offsets>
<condition>
<property>engines/apu/on-fire</property>
<property>systems/failures/apu-fire</property>
</condition>
</model>

View file

@ -32,7 +32,7 @@
<z-m>0.95</z-m>
</offsets>
<condition>
<property>engines/apu/on-fire</property>
<property>systems/failures/apu-fire</property>
</condition>
</model>

View file

@ -32,7 +32,7 @@
<z-m>0.95</z-m>
</offsets>
<condition>
<property>engines/apu/on-fire</property>
<property>systems/failures/apu-fire</property>
</condition>
</model>

View file

@ -1268,7 +1268,7 @@ var canvas_lowerECAM_elec = {
# TODO add correct A
if (dc1.getValue() < 25) {
me["ESSTR-group"].show();
me["ESSTR-Volt"].setText(sprintf("%s", math.round(dc_essgetValue())));
me["ESSTR-Volt"].setText(sprintf("%s", math.round(dc_ess.getValue())));
if (dc_ess.getValue() < 25 or dc_ess.getValue() > 31) {
me["ESSTR-Volt"].setColor(0.7333,0.3803,0);

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,23 @@
<animation>
<name>Panel lighting</name>
<type>material</type>
<object-name>atc_0</object-name>
<object-name>atc_1</object-name>
<object-name>atc_2</object-name>
<object-name>atc_3</object-name>
<object-name>atc_4</object-name>
<object-name>atc_5</object-name>
<object-name>atc_6</object-name>
<object-name>atc_7</object-name>
<object-name>atc_abv</object-name>
<object-name>atc_body</object-name>
<object-name>atc_clr</object-name>
<object-name>atc_fail</object-name>
<object-name>atc_ident</object-name>
<object-name>atc_screen</object-name>
<object-name>atc_stby</object-name>
<object-name>atc_sys</object-name>
<object-name>atc_thrt</object-name>
<object-name>ecam_body</object-name>
<object-name>ecam_switch_body</object-name>
<object-name>engine_body</object-name>
@ -79,7 +95,6 @@
<object-name>radar_glare</object-name>
</effect>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/cockpit-irradiance</inherits-from>
<object-name>ecam_body</object-name>
@ -106,4 +121,388 @@
<object-name>vu112_aids</object-name>
<object-name>vu112_dfdr</object-name>
</effect>
<animation>
<type>select</type>
<object-name>engine_fire_1</object-name>
<condition>
<property>systems/fire/engine1/warning-active</property>
</condition>
</animation>
<animation>
<type>material</type>
<object-name>engine_fire_1</object-name>
<condition>
<property>systems/fire/engine1/warning-active</property>
</condition>
<emission>
<red>1.0</red>
<green>1.0</green>
<blue>1.0</blue>
</emission>
</animation>
<animation>
<type>select</type>
<object-name>engine_fault_1</object-name>
<condition>
<property>systems/unused/unused-ped</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>engine_fire_1</object-name>
<condition>
<property>systems/fire/engine1/warning-active</property>
</condition>
</animation>
<animation>
<type>material</type>
<object-name>engine_fire_1</object-name>
<condition>
<property>systems/fire/engine1/warning-active</property>
</condition>
<emission>
<red>1.0</red>
<green>1.0</green>
<blue>1.0</blue>
</emission>
</animation>
<animation>
<type>select</type>
<object-name>engine_fault_2</object-name>
<condition>
<property>systems/unused/unused-ped</property>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>engine_fire_2</object-name>
<condition>
<property>systems/fire/engine2/warning-active</property>
</condition>
</animation>
<animation>
<type>material</type>
<object-name>engine_fire_2</object-name>
<condition>
<property>systems/fire/engine2/warning-active</property>
</condition>
<emission>
<red>1.0</red>
<green>1.0</green>
<blue>1.0</blue>
</emission>
</animation>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/cockpit-irradiance</inherits-from>
<object-name>atc_0</object-name>
<object-name>atc_1</object-name>
<object-name>atc_2</object-name>
<object-name>atc_3</object-name>
<object-name>atc_4</object-name>
<object-name>atc_5</object-name>
<object-name>atc_6</object-name>
<object-name>atc_7</object-name>
<object-name>atc_abv</object-name>
<object-name>atc_body</object-name>
<object-name>atc_clr</object-name>
<object-name>atc_fail</object-name>
<object-name>atc_ident</object-name>
<object-name>atc_screen</object-name>
<object-name>atc_stby</object-name>
<object-name>atc_sys</object-name>
<object-name>atc_thrt</object-name>
</effect>
<text>
<name>atc-code</name>
<offsets>
<x-m>-0.01279</x-m>
<y-m>0.20</y-m>
<z-m>-0.13325</z-m>
<heading-deg>90</heading-deg>
</offsets>
<alignment>left-center</alignment>
<axis-alignment>xy-plane</axis-alignment>
<type type="string">text-value</type>
<property type="string">/systems/atc/transponder-code</property>
<format>%s</format>
<truncate type="bool">false</truncate>
<font type="string">led.txf</font>
<draw-text type="bool">true</draw-text>
<draw-alignment type="bool">false</draw-alignment>
<draw-boundingbox type="bool">false</draw-boundingbox>
<character-size>0.009</character-size>
<font-resolution>
<width type="int">32</width>
<height type="int">32</height>
</font-resolution>
</text>
<text>
<name>atc-test</name>
<offsets>
<x-m>-0.01279</x-m>
<y-m>0.20</y-m>
<z-m>-0.13325</z-m>
<heading-deg>90</heading-deg>
</offsets>
<alignment>left-center</alignment>
<axis-alignment>xy-plane</axis-alignment>
<type type="string">literal</type>
<text type="string">8888</text>
<font type="string">led.txf</font>
<draw-text type="bool">true</draw-text>
<draw-alignment type="bool">false</draw-alignment>
<draw-boundingbox type="bool">false</draw-boundingbox>
<character-size>0.009</character-size>
<font-resolution>
<width type="int">32</width>
<height type="int">32</height>
</font-resolution>
</text>
<animation>
<type>pick</type>
<object-name>atc_0</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(0);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_1</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(1);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_2</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(2);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_3</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(3);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_4</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(4);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_5</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(5);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_6</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(6);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_7</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.keypad(7);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_clr</object-name>
<action>
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.clearKey();</script>
</binding>
</action>
</animation>
<animation>
<type>rotate</type>
<object-name>atc_sys</object-name>
<factor>-30</factor>
<offset-deg>30</offset-deg>
<center>
<x-m>-0.003352</x-m>
<y-m>0.131446</y-m>
<z-m>-0.13275</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
<property>controls/atc/system-knob</property>
</animation>
<animation>
<type>pick</type>
<object-name>atc_sys</object-name>
<action>
<button>0</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/system-knob</property>
<value>0</value>
<value>1</value>
</binding>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.atcSwitch(getprop("/controls/atc/system-knob") + 1);</script>
</binding>
</action>
</animation>
<animation>
<type>rotate</type>
<object-name>atc_stby</object-name>
<factor>-35</factor>
<offset-deg>70</offset-deg>
<center>
<x-m>0.01146</x-m>
<y-m>0.213663</y-m>
<z-m>-0.13086</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
<property>controls/atc/mode-knob</property>
</animation>
<animation>
<type>pick</type>
<object-name>atc_stby</object-name>
<action>
<button>0</button>
<button>3</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/mode-knob</property>
<value>0</value>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
</binding>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.modeSwitch(getprop("/controls/atc/mode-knob") + 1);</script>
</binding>
</action>
<action>
<button>1</button>
<button>4</button>
<binding>
<command>property-cycle</command>
<property>controls/atc/mode-knob</property>
<value>4</value>
<value>3</value>
<value>2</value>
<value>1</value>
<value>0</value>
</binding>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.modeSwitch(getprop("/controls/atc/mode-knob") + 1);</script>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>atc_ident</object-name>
<action>
<button>0</button>
<binding>
<command>nasal</command>
<script>atc.transponderPanel.identSwitch();</script>
</binding>
</action>
</animation>
<animation>
<type>select</type>
<object-name>atc_fail</object-name>
<condition>
<and>
<property>systems/atc/failed</property>
<greater-than>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than>
</and>
</condition>
</animation>
</PropertyList>

View file

@ -3415,26 +3415,26 @@ numvert 1425
-0.02886 -0.13358 -0.25116
-0.02835 -0.13358 -0.25155
-0.02775 -0.13358 -0.25181
-0.00304 -0.13406 -0.19445
-0.00226 -0.13406 -0.1946
-0.00163 -0.13406 -0.19503
-0.0012 -0.13406 -0.19567
-0.00104 -0.13406 -0.19645
-0.00104 -0.13406 -0.22995
-0.0012 -0.13406 -0.23072
-0.00163 -0.13406 -0.23136
-0.00226 -0.13406 -0.23179
-0.02254 -0.13406 -0.23195
-0.02332 -0.13406 -0.23179
-0.02395 -0.13406 -0.23136
-0.02438 -0.13406 -0.23072
-0.02454 -0.13406 -0.22995
-0.02454 -0.13406 -0.19645
-0.02438 -0.13406 -0.19567
-0.02395 -0.13406 -0.19503
-0.02332 -0.13406 -0.1946
-0.02254 -0.13406 -0.19445
-0.00304 -0.13406 -0.23195
-0.00304 -0.13424 -0.19445
-0.00226 -0.13424 -0.1946
-0.00163 -0.13424 -0.19503
-0.0012 -0.13424 -0.19567
-0.00104 -0.13424 -0.19645
-0.00104 -0.13424 -0.22995
-0.0012 -0.13424 -0.23072
-0.00163 -0.13424 -0.23136
-0.00226 -0.13424 -0.23179
-0.02254 -0.13424 -0.23195
-0.02332 -0.13424 -0.23179
-0.02395 -0.13424 -0.23136
-0.02438 -0.13424 -0.23072
-0.02454 -0.13424 -0.22995
-0.02454 -0.13424 -0.19645
-0.02438 -0.13424 -0.19567
-0.02395 -0.13424 -0.19503
-0.02332 -0.13424 -0.1946
-0.02254 -0.13424 -0.19445
-0.00304 -0.13424 -0.23195
0.01146 -0.13344 -0.19663
0.01191 -0.13344 -0.19657
0.01231 -0.13344 -0.1964
@ -14545,18 +14545,18 @@ crease 40.0
texture "ATC.png"
texrep 1 1
numvert 4
-0.00163 -0.13391 -0.19503
-0.00163 -0.13391 -0.23136
-0.02395 -0.13391 -0.23136
-0.02395 -0.13391 -0.19503
-0.00163 -0.13373 -0.19503
-0.00163 -0.13373 -0.23136
-0.02395 -0.13373 -0.23136
-0.02395 -0.13373 -0.19503
numsurf 1
SURF 0X0
mat 1
refs 4
0 0.800057 0.332447
3 0.64241 0.332447
2 0.64241 0.588943
1 0.800057 0.588943
2 0.64241 0.588943
3 0.64241 0.332447
kids 0
OBJECT poly
name "atc_stby"
@ -20239,8 +20239,8 @@ name "ECAM"
kids 38
OBJECT poly
name "ecam_air_data"
data 14
CU1_curve_.024
data 18
ecam_air_data.mesh
crease 40.0
texture "ECAM.png"
texrep 1 1
@ -23146,8 +23146,8 @@ refs 4
kids 0
OBJECT poly
name "ecam_att_hdg"
data 14
CU1_curve_.559
data 17
ecam_att_hdg.mesh
crease 40.0
texture "ECAM.png"
texrep 1 1
@ -41003,8 +41003,8 @@ refs 4
kids 0
OBJECT poly
name "ecam_brt_upper"
data 23
ecam_brt_upper.mesh.002
data 19
ecam_brt_upper.mesh
crease 40.0
texture "ECAM.png"
texrep 1 1
@ -45289,8 +45289,8 @@ refs 4
kids 0
OBJECT poly
name "ecam_eis_dmc"
data 14
CU1_curve_.025
data 17
ecam_eis_dmc.mesh
crease 40.0
texture "ECAM.png"
texrep 1 1
@ -52025,8 +52025,8 @@ refs 4
kids 0
OBJECT poly
name "ecam_nd_xfr"
data 14
CU1_curve_.026
data 16
ecam_nd_xfr.mesh
crease 40.0
texture "ECAM.png"
texrep 1 1
@ -77057,43 +77057,58 @@ refs 24
SURF 0X12
mat 7
refs 2
396 0 0
397 0 0
377 0 0
378 0 0
SURF 0X12
mat 7
refs 2
397 0 0
398 0 0
318 0 0
319 0 0
SURF 0X12
mat 7
refs 2
440 0 0
441 0 0
319 0 0
320 0 0
SURF 0X12
mat 7
refs 2
432 0 0
433 0 0
372 0 0
373 0 0
SURF 0X12
mat 7
refs 2
269 0 0
270 0 0
320 0 0
321 0 0
SURF 0X12
mat 7
refs 2
405 0 0
406 0 0
324 0 0
325 0 0
SURF 0X12
mat 7
refs 2
407 0 0
408 0 0
326 0 0
327 0 0
SURF 0X12
mat 7
refs 2
408 0 0
409 0 0
334 0 0
335 0 0
SURF 0X12
mat 7
refs 2
337 0 0
338 0 0
SURF 0X12
mat 7
refs 2
343 0 0
344 0 0
SURF 0X12
mat 7
refs 2
344 0 0
345 0 0
SURF 0X12
mat 7
refs 2
@ -77112,16 +77127,16 @@ refs 2
SURF 0X12
mat 7
refs 2
273 0 0
274 0 0
SURF 0X12
mat 7
refs 2
274 0 0
275 0 0
SURF 0X12
mat 7
refs 2
273 0 0
274 0 0
SURF 0X12
mat 7
refs 2
276 0 0
277 0 0
SURF 0X12
@ -77287,8 +77302,8 @@ refs 2
SURF 0X12
mat 7
refs 2
417 0 0
418 0 0
309 0 0
310 0 0
SURF 0X12
mat 7
refs 2
@ -77377,8 +77392,8 @@ refs 2
SURF 0X12
mat 7
refs 2
421 0 0
422 0 0
335 0 0
336 0 0
SURF 0X12
mat 7
refs 2
@ -77387,8 +77402,8 @@ refs 2
SURF 0X12
mat 7
refs 2
335 0 0
336 0 0
345 0 0
346 0 0
SURF 0X12
mat 7
refs 2
@ -77417,8 +77432,8 @@ refs 2
SURF 0X12
mat 7
refs 2
345 0 0
346 0 0
355 0 0
356 0 0
SURF 0X12
mat 7
refs 2
@ -77427,8 +77442,8 @@ refs 2
SURF 0X12
mat 7
refs 2
355 0 0
356 0 0
364 0 0
317 0 0
SURF 0X12
mat 7
refs 2
@ -77442,11 +77457,6 @@ refs 2
SURF 0X12
mat 7
refs 2
362 0 0
363 0 0
SURF 0X12
mat 7
refs 2
361 0 0
362 0 0
SURF 0X12
@ -77457,6 +77467,11 @@ refs 2
SURF 0X12
mat 7
refs 2
362 0 0
363 0 0
SURF 0X12
mat 7
refs 2
366 0 0
367 0 0
SURF 0X12
@ -77557,33 +77572,33 @@ refs 2
SURF 0X12
mat 7
refs 2
297 0 0
298 0 0
SURF 0X12
mat 7
refs 2
391 0 0
392 0 0
SURF 0X12
mat 7
refs 2
395 0 0
396 0 0
SURF 0X12
mat 7
refs 2
394 0 0
395 0 0
SURF 0X12
mat 7
refs 2
395 0 0
396 0 0
SURF 0X12
mat 7
refs 2
389 0 0
390 0 0
SURF 0X12
mat 7
refs 2
398 0 0
399 0 0
SURF 0X12
mat 7
refs 2
299 0 0
300 0 0
399 0 0
400 0 0
SURF 0X12
mat 7
refs 2
@ -77612,8 +77627,8 @@ refs 2
SURF 0X12
mat 7
refs 2
399 0 0
400 0 0
374 0 0
375 0 0
SURF 0X12
mat 7
refs 2
@ -77752,8 +77767,8 @@ refs 2
SURF 0X12
mat 7
refs 2
307 0 0
308 0 0
442 0 0
443 0 0
SURF 0X12
mat 7
refs 2
@ -77782,8 +77797,8 @@ refs 2
SURF 0X12
mat 7
refs 2
309 0 0
310 0 0
440 0 0
441 0 0
SURF 0X12
mat 7
refs 2
@ -77807,13 +77822,13 @@ refs 2
SURF 0X12
mat 7
refs 2
457 0 0
458 0 0
454 0 0
455 0 0
SURF 0X12
mat 7
refs 2
454 0 0
455 0 0
457 0 0
458 0 0
SURF 0X12
mat 7
refs 2
@ -77827,11 +77842,166 @@ refs 2
SURF 0X12
mat 7
refs 2
385 0 0
386 0 0
SURF 0X12
mat 7
refs 2
459 0 0
460 0 0
SURF 0X12
mat 7
refs 2
353 0 0
354 0 0
SURF 0X12
mat 7
refs 2
392 0 0
393 0 0
SURF 0X12
mat 7
refs 2
393 0 0
394 0 0
SURF 0X12
mat 7
refs 2
396 0 0
397 0 0
SURF 0X12
mat 7
refs 2
397 0 0
398 0 0
SURF 0X12
mat 7
refs 2
269 0 0
270 0 0
SURF 0X12
mat 7
refs 2
405 0 0
406 0 0
SURF 0X12
mat 7
refs 2
407 0 0
408 0 0
SURF 0X12
mat 7
refs 2
357 0 0
358 0 0
SURF 0X12
mat 7
refs 2
358 0 0
359 0 0
SURF 0X12
mat 7
refs 2
408 0 0
409 0 0
SURF 0X12
mat 7
refs 2
410 0 0
411 0 0
SURF 0X12
mat 7
refs 2
275 0 0
276 0 0
SURF 0X12
mat 7
refs 2
277 0 0
278 0 0
SURF 0X12
mat 7
refs 2
415 0 0
416 0 0
SURF 0X12
mat 7
refs 2
282 0 0
283 0 0
SURF 0X12
mat 7
refs 2
417 0 0
418 0 0
SURF 0X12
mat 7
refs 2
421 0 0
422 0 0
SURF 0X12
mat 7
refs 2
379 0 0
380 0 0
SURF 0X12
mat 7
refs 2
287 0 0
288 0 0
SURF 0X12
mat 7
refs 2
347 0 0
348 0 0
SURF 0X12
mat 7
refs 2
349 0 0
350 0 0
SURF 0X12
mat 7
refs 2
432 0 0
433 0 0
SURF 0X12
mat 7
refs 2
297 0 0
298 0 0
SURF 0X12
mat 7
refs 2
434 0 0
435 0 0
SURF 0X12
mat 7
refs 2
299 0 0
300 0 0
SURF 0X12
mat 7
refs 2
301 0 0
302 0 0
SURF 0X12
mat 7
refs 2
441 0 0
442 0 0
SURF 0X12
mat 7
refs 2
307 0 0
308 0 0
SURF 0X12
mat 7
refs 2
444 0 0
445 0 0
SURF 0X12
mat 7
refs 2
312 0 0
313 0 0
SURF 0X12
@ -77844,176 +78014,6 @@ mat 7
refs 2
450 0 0
451 0 0
SURF 0X12
mat 7
refs 2
442 0 0
443 0 0
SURF 0X12
mat 7
refs 2
441 0 0
442 0 0
SURF 0X12
mat 7
refs 2
318 0 0
319 0 0
SURF 0X12
mat 7
refs 2
319 0 0
320 0 0
SURF 0X12
mat 7
refs 2
415 0 0
416 0 0
SURF 0X12
mat 7
refs 2
320 0 0
321 0 0
SURF 0X12
mat 7
refs 2
324 0 0
325 0 0
SURF 0X12
mat 7
refs 2
326 0 0
327 0 0
SURF 0X12
mat 7
refs 2
444 0 0
445 0 0
SURF 0X12
mat 7
refs 2
282 0 0
283 0 0
SURF 0X12
mat 7
refs 2
334 0 0
335 0 0
SURF 0X12
mat 7
refs 2
337 0 0
338 0 0
SURF 0X12
mat 7
refs 2
410 0 0
411 0 0
SURF 0X12
mat 7
refs 2
343 0 0
344 0 0
SURF 0X12
mat 7
refs 2
344 0 0
345 0 0
SURF 0X12
mat 7
refs 2
347 0 0
348 0 0
SURF 0X12
mat 7
refs 2
301 0 0
302 0 0
SURF 0X12
mat 7
refs 2
349 0 0
350 0 0
SURF 0X12
mat 7
refs 2
277 0 0
278 0 0
SURF 0X12
mat 7
refs 2
353 0 0
354 0 0
SURF 0X12
mat 7
refs 2
287 0 0
288 0 0
SURF 0X12
mat 7
refs 2
357 0 0
358 0 0
SURF 0X12
mat 7
refs 2
275 0 0
276 0 0
SURF 0X12
mat 7
refs 2
358 0 0
359 0 0
SURF 0X12
mat 7
refs 2
364 0 0
317 0 0
SURF 0X12
mat 7
refs 2
372 0 0
373 0 0
SURF 0X12
mat 7
refs 2
374 0 0
375 0 0
SURF 0X12
mat 7
refs 2
377 0 0
378 0 0
SURF 0X12
mat 7
refs 2
379 0 0
380 0 0
SURF 0X12
mat 7
refs 2
385 0 0
386 0 0
SURF 0X12
mat 7
refs 2
389 0 0
390 0 0
SURF 0X12
mat 7
refs 2
434 0 0
435 0 0
SURF 0X12
mat 7
refs 2
392 0 0
393 0 0
SURF 0X12
mat 7
refs 2
393 0 0
394 0 0
kids 0
OBJECT poly
name "engine_fault_1"

View file

@ -219,7 +219,7 @@
<object-name>radio_exchange</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>rmp.transfer(1);</script>

View file

@ -219,7 +219,7 @@
<object-name>radio_exchange</object-name>
<action>
<button>0</button>
<repeatable>true</repeatable>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>rmp.transfer(2);</script>

View file

@ -22,9 +22,9 @@ SURF 0X0
mat 1
refs 4
0 0.924845 0.951366
1 0.924845 0.974681
2 0.99963 0.974681
3 0.99963 0.951366
2 0.99963 0.974681
1 0.924845 0.974681
kids 0
OBJECT poly
name "radio_adf"
@ -17595,9 +17595,9 @@ SURF 0X0
mat 1
refs 4
1 1.000099 0.999363
0 1.000099 0.975954
3 0.925013 0.975954
2 0.925013 0.999363
3 0.925013 0.975954
0 1.000099 0.975954
kids 0
OBJECT poly
name "radio_vhf1"

View file

@ -106,6 +106,25 @@ var canvas_upperECAM_base = {
foreach(var key; svg_keys) {
me[key] = canvas_group.getElementById(key);
}
# set font
me["ECAML1"].setFont("LiberationMonoCustom.ttf");
me["ECAML2"].setFont("LiberationMonoCustom.ttf");
me["ECAML3"].setFont("LiberationMonoCustom.ttf");
me["ECAML4"].setFont("LiberationMonoCustom.ttf");
me["ECAML5"].setFont("LiberationMonoCustom.ttf");
me["ECAML6"].setFont("LiberationMonoCustom.ttf");
me["ECAML7"].setFont("LiberationMonoCustom.ttf");
me["ECAML8"].setFont("LiberationMonoCustom.ttf");
me["ECAMR1"].setFont("LiberationMonoCustom.ttf");
me["ECAMR2"].setFont("LiberationMonoCustom.ttf");
me["ECAMR3"].setFont("LiberationMonoCustom.ttf");
me["ECAMR4"].setFont("LiberationMonoCustom.ttf");
me["ECAMR5"].setFont("LiberationMonoCustom.ttf");
me["ECAMR6"].setFont("LiberationMonoCustom.ttf");
me["ECAMR7"].setFont("LiberationMonoCustom.ttf");
me["ECAMR8"].setFont("LiberationMonoCustom.ttf");
me.page = canvas_group;

View file

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<PropertyList>
<path>Aircraft/Generic/Effects/Thruster/thrust_flame.ac</path>
<nopreview/>
<animation>
<type>scale</type>
<property>systems/failures/engine-left-fire</property>
<x-min>0.2</x-min>
<y-min>0.3</y-min>
<z-min>0.3</z-min>
<y-max>0.8</y-max>
<z-max>0.8</z-max>
<x-factor>0.4</x-factor>
<y-factor>0.35</y-factor>
<z-factor>0.35</z-factor>
</animation>
<animation>
<type>select</type>
<object-name>Bounding_box</object-name>
<condition>
<property>systems/failures/engine-left-fire</property>
</condition>
</animation>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/flame-cfm</inherits-from>
<object-name>Bounding_box</object-name>
</effect>
</PropertyList>

View file

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<PropertyList>
<path>Aircraft/Generic/Effects/Thruster/thrust_flame.ac</path>
<nopreview/>
<animation>
<type>scale</type>
<property>systems/failures/engine-left-fire</property>
<x-min>0.2</x-min>
<y-min>0.3</y-min>
<z-min>0.3</z-min>
<y-max>0.8</y-max>
<z-max>0.8</z-max>
<x-factor>0.4</x-factor>
<y-factor>0.7</y-factor>
<z-factor>0.7</z-factor>
</animation>
<animation>
<type>select</type>
<object-name>Bounding_box</object-name>
<condition>
<property>systems/failures/engine-left-fire</property>
</condition>
</animation>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/flame</inherits-from>
<object-name>Bounding_box</object-name>
</effect>
</PropertyList>

View file

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<PropertyList>
<path>Aircraft/Generic/Effects/Thruster/thrust_flame.ac</path>
<nopreview/>
<animation>
<type>scale</type>
<property>systems/failures/engine-right-fire</property>
<x-min>0.2</x-min>
<y-min>0.3</y-min>
<z-min>0.3</z-min>
<y-max>0.8</y-max>
<z-max>0.8</z-max>
<x-factor>0.4</x-factor>
<y-factor>0.35</y-factor>
<z-factor>0.35</z-factor>
</animation>
<animation>
<type>select</type>
<object-name>Bounding_box</object-name>
<condition>
<property>systems/failures/engine-right-fire</property>
</condition>
</animation>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/flame-cfm</inherits-from>
<object-name>Bounding_box</object-name>
</effect>
</PropertyList>

View file

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<PropertyList>
<path>Aircraft/Generic/Effects/Thruster/thrust_flame.ac</path>
<nopreview/>
<animation>
<type>scale</type>
<property>systems/failures/engine-right-fire</property>
<x-min>0.2</x-min>
<y-min>0.3</y-min>
<z-min>0.3</z-min>
<y-max>0.8</y-max>
<z-max>0.8</z-max>
<x-factor>0.4</x-factor>
<y-factor>0.7</y-factor>
<z-factor>0.7</z-factor>
</animation>
<animation>
<type>select</type>
<object-name>Bounding_box</object-name>
<condition>
<property>systems/failures/engine-right-fire</property>
</condition>
</animation>
<effect>
<inherits-from>Aircraft/IDG-A32X/Models/Effects/flame</inherits-from>
<object-name>Bounding_box</object-name>
</effect>
</PropertyList>

View file

@ -24,7 +24,7 @@
<z-m>-1.0170087</z-m>
</offsets>
</model>
<!-- ANIMATIONS -->
<!-- Ailerons -->
<animation>

View file

@ -24,7 +24,7 @@
<z-m>-1.0170087</z-m>
</offsets>
</model>
<!-- ANIMATIONS -->
<!-- Ailerons -->
<animation>

View file

@ -24,7 +24,7 @@
<z-m>-1.0170087</z-m>
</offsets>
</model>
<!-- ANIMATIONS -->
<!-- Ailerons -->
<animation>

View file

@ -301,20 +301,19 @@ var LowerECAM = {
setprop("/it-autoflight/output/athr-warning", 0);
setprop("/ECAM/Lower/light/clr", 0);
setprop("/ECAM/warnings/master-caution-light", 0);
LowerECAM.failCall("sts");
return;
}
if (b == "clr" and getprop("/it-autoflight/output/ap-warning") == 2) {
setprop("/it-autoflight/output/ap-warning", 0);
setprop("/ECAM/Lower/light/clr", 0);
setprop("/ECAM/warnings/master-warning-light", 0);
LowerECAM.failCall("sts");
return;
}
if (b == "clr" and getprop("/ECAM/Lower/man-select") == 0 and getprop("/ECAM/Lower/fault-select") == 0) {
ecam.ECAM_controller.clear();
return;
}
if (getprop("/ECAM/Lower/fault-select") == 0) {

View file

@ -25,22 +25,31 @@ var lineIndex = 0;
var rightLineIndex = 0;
var statusIndex = 0;
var flash = 0;
var hasCleared = 0;
var statusFlag = 0;
var warning = {
new: func(msg,colour,aural,light) {
new: func(msg,colour = "g",aural = 9,light = 9,hasSubmsg = 0,lastSubmsg = 0, sdPage = "nil") {
var t = {parents:[warning]};
t.msg = msg;
t.active = 0;
t.colour = colour;
t.aural = aural;
t.light = light;
t.hasSubmsg = hasSubmsg;
t.lastSubmsg = lastSubmsg;
t.active = 0;
t.noRepeat = 0;
t.noRepeat2 = 0;
t.clearFlag = 0;
t.sdPage = sdPage;
t.hasCalled = 0;
return t
},
write: func() {
if (me.active == 0) {return;}
if (me.active == 0) { return; }
lineIndex = 0;
while (lineIndex < 7 and lines[lineIndex].getValue() != "") {
lineIndex = lineIndex + 1; # go to next line until empty line
@ -58,29 +67,34 @@ var warning = {
}
},
warnlight: func() {
if (me.light >= 1) {return;}
if (me.active == 1 and me.noRepeat == 0) { # only toggle light once per message, allows canceling
lights[me.light].setBoolValue(1);
me.noRepeat = 1;
}
if (me.light > 1 or me.noRepeat == 1 or me.active == 0) {return;}
lights[me.light].setBoolValue(1);
me.noRepeat = 1;
},
sound: func() {
if (me.aural > 1) {return;}
if (me.active == 1) {
if (!aural[me.aural].getBoolValue()) {
aural[me.aural].setBoolValue(1);
}
if (me.aural > 1 or me.noRepeat2 == 1 or me.active == 0) {return;}
if (me.aural != 0) {
aural[me.aural].setBoolValue(0);
}
},
me.noRepeat2 = 1;
settimer(func() {
aural[me.aural].setBoolValue(1);
}, 0.15);
},
callPage: func() {
if (me.sdPage == "nil" or me.hasCalled == 1) { return; }
#libraries.LowerECAM.failCall(me.sdPage);
me.hasCalled = 1;
}
};
var memo = {
new: func(msg,colour) {
new: func(msg,colour = "g") {
var t = {parents:[memo]};
t.msg = msg;
t.active = 0;
t.colour = colour;
t.active = 0;
return t
},
@ -110,8 +124,8 @@ var status = {
var t = {parents:[status]};
t.msg = msg;
t.active = 0;
t.colour = colour;
t.active = 0;
return t
},
@ -156,14 +170,19 @@ var ECAM_controller = {
}
# write to ECAM
var counter = 0;
foreach (var w; warnings.vector) {
w.write();
w.warnlight();
w.sound();
if (counter >= 9) { break; }
if (w.active == 1) {
w.write();
w.warnlight();
w.sound();
counter += 1;
}
}
if (lines[0].getValue() == "") { # disable left memos if a warning exists. Warnings are processed first, so this stops leftmemos if line1 is not empty
if (lines[0].getValue() == "" and flash == 0) { # disable left memos if a warning exists. Warnings are processed first, so this stops leftmemos if line1 is not empty
foreach (var l; leftmemos.vector) {
l.write();
}
@ -219,13 +238,21 @@ var ECAM_controller = {
}
},
clear: func() {
hasCleared = 0;
foreach (var w; warnings.vector) {
if (w.active == 1) {
# if (w.msg == "ENG DUAL FAILURE") { continue; }
if (w.hasSubmsg == 1) { continue; }
w.clearFlag = 1;
hasCleared = 1;
statusFlag = 1;
break;
}
}
if (hasCleared == 0 and statusFlag == 1) {
libraries.LowerECAM.failCall("sts");
statusFlag = 0;
}
},
recall: func() {
foreach (var w; warnings.vector) {
@ -236,6 +263,11 @@ var ECAM_controller = {
}
}
},
warningReset: func(warning) {
warning.active = 0;
warning.noRepeat = 0;
warning.noRepeat2 = 0;
},
};
setlistener("/systems/electrical/bus/dc-ess", func {
@ -244,11 +276,15 @@ setlistener("/systems/electrical/bus/dc-ess", func {
}
}, 0, 0);
var ECAMloopTimer = maketimer(0.2, func {
var ECAMloopTimer = maketimer(0.15, func {
ECAM_controller.loop();
});
# Flash Master Warning Light
var shutUpYou = func() {
lights[0].setBoolValue(0);
}
var warnTimer = maketimer(0.25, func {
if (!lights[0].getBoolValue()) {
warnTimer.stop();

View file

@ -11,8 +11,18 @@ var apWarn = props.globals.getNode("/it-autoflight/output/ap-warning", 1);
var athrWarn = props.globals.getNode("/it-autoflight/output/athr-warning", 1);
var emerGen = props.globals.getNode("/controls/electrical/switches/emer-gen", 1);
var fac1Node = props.globals.getNode("/controls/fctl/fac1", 1);
var fac1Node = props.globals.getNode("/controls/fctl/fac1", 1);
var state1Node = props.globals.getNode("/engines/engine[0]/state", 1);
var state2Node = props.globals.getNode("/engines/engine[1]/state", 1);
var wowNode = props.globals.getNode("/fdm/jsbsim/position/wow", 1);
var apu_rpm = props.globals.getNode("/systems/apu/rpm", 1);
var wing_pb = props.globals.getNode("/controls/switches/wing", 1);
var apumaster = props.globals.getNode("/controls/APU/master", 1);
var apu_bleedSw = props.globals.getNode("/controls/pneumatic/switches/bleedapu", 1);
var gear = props.globals.getNode("/gear/gear-pos-norm", 1);
var cutoff1 = props.globals.getNode("/controls/engines/engine[0]/cutoff-switch", 1);
var cutoff2 = props.globals.getNode("/controls/engines/engine[1]/cutoff-switch", 1);
var engOpt = props.globals.getNode("/options/eng", 1);
# local variables
var phaseVar = nil;
var dualFailFACActive = 1;
@ -24,19 +34,15 @@ var messages_priority_3 = func {
if ((flap_not_zero.clearFlag == 0) and phaseVar == 6 and getprop("/controls/flight/flap-lever") != 0 and getprop("/instrumentation/altimeter/indicated-altitude-ft") > 22000) {
flap_not_zero.active = 1;
} else {
flap_not_zero.active = 0;
flap_not_zero.noRepeat = 0;
flap_not_zero.clearFlag = 0;
ECAM_controller.warningReset(flap_not_zero);
}
# ENG DUAL FAIL
if (phaseVar >= 5 and phaseVar <= 7 and dualFailNode.getBoolValue()) {
dualFail.active = 1;
} elsif (dualFail.clearFlag == 1) {
dualFail.active = 0;
dualFail.noRepeat = 0;
dualFail.clearFlag = 0;
} elsif (dualFailbatt.clearFlag == 1 or !dualFailNode.getBoolValue()) {
ECAM_controller.warningReset(dualFail);
dualFailFACActive = 1; # reset FAC local variable
}
@ -45,116 +51,594 @@ var messages_priority_3 = func {
if (getprop("/controls/engines/engine-start-switch") != 2 and dualFailModeSel.clearFlag == 0) {
dualFailModeSel.active = 1;
} else {
dualFailModeSel.active = 0;
ECAM_controller.warningReset(dualFailModeSel);
}
if (getprop("/fdm/jsbsim/fcs/throttle-lever[0]") > 0.01 and getprop("/fdm/jsbsim/fcs/throttle-lever[1]") > 0.01 and dualFailLevers.clearFlag == 0) {
dualFailLevers.active = 1;
} else {
dualFailLevers.active = 0;
ECAM_controller.warningReset(dualFailLevers);
}
if (getprop("/options/eng") == "IAE" and dualFailRelightSPD.clearFlag == 0) {
if (engOpt.getValue() == "IAE" and dualFailRelightSPD.clearFlag == 0) {
dualFailRelightSPD.active = 1;
} else {
dualFailRelightSPD.active = 0;
ECAM_controller.warningReset(dualFailRelightSPD);
}
if (getprop("/options/eng") != "IAE" and dualFailRelightSPDCFM.clearFlag == 0) {
if (engOpt.getValue() != "IAE" and dualFailRelightSPDCFM.clearFlag == 0) {
dualFailRelightSPDCFM.active = 1;
} else {
dualFailRelightSPDCFM.active = 0;
ECAM_controller.warningReset(dualFailRelightSPDCFM);
}
if (emerGen.getValue() == 0 and dualFailElec.clearFlag == 0) {
dualFailElec.active = 1;
} else {
dualFailElec.active = 0;
ECAM_controller.warningReset(dualFailElec);
}
if (dualFailRadio.clearFlag == 0) {
dualFailRadio.active = 1;
} else {
dualFailRadio.active = 0;
ECAM_controller.warningReset(dualFailRadio);
}
if (dualFailFACActive == 1 and dualFailFAC.clearFlag == 0) {
dualFailFAC.active = 1;
} else {
dualFailFAC.active = 0;
ECAM_controller.warningReset(dualFailFAC);
}
if (dualFailAPU.clearFlag == 0) { # assumption - not cleared till you clear APU message
dualFailRelight.active = 1;
if (dualFailMasters.clearFlag == 0) {
dualFailRelight.active = 1; # assumption
dualFailMasters.active = 1;
dualFailSuccess.active = 1;
} else {
ECAM_controller.warningReset(dualFailRelight);
ECAM_controller.warningReset(dualFailMasters);
}
if (dualFailSPDGD.clearFlag == 0) {
dualFailSuccess.active = 1; # assumption
dualFailSPDGD.active = 1;
} else {
ECAM_controller.warningReset(dualFailSuccess);
ECAM_controller.warningReset(dualFailSPDGD);
}
if (dualFailAPU.clearFlag == 0) {
dualFailAPU.active = 1;
} else {
dualFailRelight.active = 1;
dualFailMasters.active = 1;
dualFailSuccess.active = 1;
dualFailAPU.active = 1;
ECAM_controller.warningReset(dualFailAPU);
}
if (dualFailAPUwing.clearFlag == 0 and apu_rpm.getValue() > 94.9 and wing_pb.getBoolValue()) {
dualFailAPUwing.active = 1;
} else {
ECAM_controller.warningReset(dualFailAPUwing);
}
if (dualFailAPUbleed.clearFlag == 0 and apu_rpm.getValue() > 94.9 and !apu_bleedSw.getBoolValue()) {
dualFailAPUbleed.active = 1;
} else {
ECAM_controller.warningReset(dualFailAPUbleed);
}
if (dualFailMastersAPU.clearFlag == 0) {
dualFailMastersAPU.active = 1;
} else {
dualFailMastersAPU.active = 0;
}
if (dualFailSPDGD.clearFlag == 0) {
dualFailSPDGD.active = 1;
} else {
dualFailSPDGD.active = 0;
ECAM_controller.warningReset(dualFailMastersAPU);
}
if (dualFailflap.clearFlag == 0) {
dualFailAPPR.active = 1;
dualFailAPPR.active = 1; # assumption
dualFailflap.active = 1;
} else {
dualFailAPPR.active = 0;
ECAM_controller.warningReset(dualFailAPPR);
ECAM_controller.warningReset(dualFailflap);
}
if (dualFailcabin.clearFlag == 0) {
dualFailcabin.active = 1;
} else {
dualFailcabin.active = 0;
ECAM_controller.warningReset(dualFailcabin);
}
if (dualFailrudd.clearFlag == 0) {
dualFailrudd.active = 1;
} else {
dualFailrudd.active = 0;
ECAM_controller.warningReset(dualFailrudd);
}
if (dualFailflap.clearFlag == 0) {
dualFailflap.active = 1;
} else {
dualFailflap.active = 0;
}
if (dualFailfinalspeed.clearFlag == 0) {
dualFail5000.active = 1;
} else {
dualFail5000.active = 0;
}
if (dualFailgear.clearFlag == 0) {
if (dualFailgear.clearFlag == 0 and gear.getValue() != 1) {
dualFail5000.active = 1; # according to doc
dualFailgear.active = 1;
} else {
dualFailgear.active = 0;
ECAM_controller.warningReset(dualFailgear);
ECAM_controller.warningReset(dualFail5000);
}
if (dualFailfinalspeed.clearFlag == 0) {
dualFailfinalspeed.active = 1;
} else {
dualFailfinalspeed.active = 0;
ECAM_controller.warningReset(dualFailfinalspeed);
}
dualFailtouch.active = 1;
dualFailmasteroff.active = 1;
dualFailapuoff.active = 1;
dualFailevac.active = 1;
dualFailbatt.active = 1;
if (dualFailmasteroff.clearFlag == 0 and (!cutoff1.getBoolValue() or !cutoff2.getBoolValue())) {
dualFailmasteroff.active = 1;
} else {
ECAM_controller.warningReset(dualFailmasteroff);
}
if (dualFailapuoff.clearFlag == 0 and apumaster.getBoolValue()) {
dualFailapuoff.active = 1;
} else {
ECAM_controller.warningReset(dualFailapuoff);
}
if (dualFailevac.clearFlag == 0) {
dualFailevac.active = 1;
} else {
ECAM_controller.warningReset(dualFailevac);
}
if (dualFailbatt.clearFlag == 0) { # elec power lost when batt goes off anyway I guess
dualFailbatt.active = 1;
dualFailtouch.active = 1;
} else {
ECAM_controller.warningReset(dualFailbatt);
ECAM_controller.warningReset(dualFailtouch);
}
} else {
ECAM_controller.warningReset(dualFailModeSel);
ECAM_controller.warningReset(dualFailLevers);
ECAM_controller.warningReset(dualFailRelightSPD);
ECAM_controller.warningReset(dualFailRelightSPDCFM);
ECAM_controller.warningReset(dualFailElec);
ECAM_controller.warningReset(dualFailRadio);
ECAM_controller.warningReset(dualFailFAC);
ECAM_controller.warningReset(dualFailRelight);
ECAM_controller.warningReset(dualFailMasters);
ECAM_controller.warningReset(dualFailSuccess);
ECAM_controller.warningReset(dualFailSPDGD);
ECAM_controller.warningReset(dualFailAPU);
ECAM_controller.warningReset(dualFailAPUwing);
ECAM_controller.warningReset(dualFailAPUbleed);
ECAM_controller.warningReset(dualFailMastersAPU);
ECAM_controller.warningReset(dualFailAPPR);
ECAM_controller.warningReset(dualFailflap);
ECAM_controller.warningReset(dualFailcabin);
ECAM_controller.warningReset(dualFailrudd);
ECAM_controller.warningReset(dualFailgear);
ECAM_controller.warningReset(dualFail5000);
ECAM_controller.warningReset(dualFailfinalspeed);
ECAM_controller.warningReset(dualFailmasteroff);
ECAM_controller.warningReset(dualFailapuoff);
ECAM_controller.warningReset(dualFailevac);
ECAM_controller.warningReset(dualFailbatt);
ECAM_controller.warningReset(dualFailtouch);
}
# ENG FIRE
if ((eng1FireFlAgent2.clearFlag == 0 and getprop("/systems/fire/engine1/warning-active") == 1 and phaseVar >= 5 and phaseVar <= 7) or (eng1FireGnevacBat.clearFlag == 0 and getprop("/systems/fire/engine1/warning-active") == 1 and (phaseVar < 5 or phaseVar > 7))) {
eng1Fire.active = 1;
} else {
ECAM_controller.warningReset(eng1Fire);
}
if ((eng2FireFlAgent2.clearFlag == 0 and getprop("/systems/fire/engine2/warning-active") == 1 and phaseVar >= 5 and phaseVar <= 7) or (eng2FireGnevacBat.clearFlag == 0 and getprop("/systems/fire/engine2/warning-active") == 1 and (phaseVar < 5 or phaseVar > 7))) {
eng2Fire.active = 1;
} else {
ECAM_controller.warningReset(eng2Fire);
}
if (apuFireMaster.clearFlag == 0 and getprop("/systems/fire/apu/warning-active")) {
apuFire.active = 1;
} else {
ECAM_controller.warningReset(apuFire);
}
if (eng1Fire.active == 1) {
if (phaseVar >= 5 and phaseVar <= 7) {
if (eng1FireFllever.clearFlag == 0 and getprop("/fdm/jsbsim/fcs/throttle-lever[0]") > 0.01) {
eng1FireFllever.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFllever);
}
if (eng1FireFlmaster.clearFlag == 0 and getprop("/controls/engines/engine[0]/cutoff-switch") == 0) {
eng1FireFlmaster.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFlmaster);
}
if (eng1FireFlPB.clearFlag == 0 and getprop("/controls/engines/engine[0]/fire-btn") == 0) {
eng1FireFlPB.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFlPB);
}
if (getprop("/systems/fire/engine1/agent1-timer") != 0 and getprop("/systems/fire/engine1/agent1-timer") != 99) {
eng1FireFlAgent1Timer.msg = " -AGENT AFT " ~ getprop("/systems/fire/engine1/agent1-timer") ~ " S...DISCH";
}
if (eng1FireFlAgent1.clearFlag == 0 and getprop("/controls/engines/engine[0]/fire-btn") == 1 and !getprop("/systems/fire/engine1/disch1") and getprop("/systems/fire/engine1/agent1-timer") != 0 and getprop("/systems/fire/engine1/agent1-timer") != 99) {
eng1FireFlAgent1Timer.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFlAgent1Timer);
}
if (eng1FireFlAgent1.clearFlag == 0 and !getprop("/systems/fire/engine1/disch1") and (getprop("/systems/fire/engine1/agent1-timer") == 0 or getprop("/systems/fire/engine1/agent1-timer") == 99)) {
eng1FireFlAgent1.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFlAgent1);
}
if (eng1FireFlATC.clearFlag == 0) {
eng1FireFlATC.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFlATC);
}
if (getprop("/systems/fire/engine1/agent2-timer") != 0 and getprop("/systems/fire/engine1/agent2-timer") != 99) {
eng1FireFl30Sec.msg = "•IF FIRE AFTER " ~ getprop("/systems/fire/engine1/agent2-timer") ~ " S:";
}
if (eng1FireFlAgent2.clearFlag == 0 and getprop("/systems/fire/engine1/disch1") and !getprop("/systems/fire/engine1/disch2") and getprop("/systems/fire/engine1/agent2-timer") > 0) {
eng1FireFl30Sec.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFl30Sec);
}
if (eng1FireFlAgent2.clearFlag == 0 and getprop("/systems/fire/engine1/disch1") and !getprop("/systems/fire/engine1/disch2")) {
eng1FireFlAgent2.active = 1;
} else {
ECAM_controller.warningReset(eng1FireFlAgent2);
}
} else {
ECAM_controller.warningReset(eng1FireFllever);
ECAM_controller.warningReset(eng1FireFlmaster);
ECAM_controller.warningReset(eng1FireFlPB);
ECAM_controller.warningReset(eng1FireFlAgent1);
ECAM_controller.warningReset(eng1FireFlATC);
ECAM_controller.warningReset(eng1FireFl30Sec);
ECAM_controller.warningReset(eng1FireFlAgent2);
}
if (phaseVar < 5 or phaseVar > 7) {
if (eng1FireGnlever.clearFlag == 0 and getprop("/fdm/jsbsim/fcs/throttle-lever[0]") > 0.01 and getprop("/fdm/jsbsim/fcs/throttle-lever[1]") > 0.01) {
eng1FireGnlever.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnlever);
}
if (eng1FireGnparkbrk.clearFlag == 0 and getprop("/controls/gear/brake-parking") == 0) {
eng1FireGnstopped.active = 1;
eng1FireGnparkbrk.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnstopped);
ECAM_controller.warningReset(eng1FireGnparkbrk);
}
if (eng1FireGnmaster.clearFlag == 0 and getprop("/controls/engines/engine[0]/cutoff-switch") == 0) {
eng1FireGnmaster.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnmaster);
}
if (eng1FireGnPB.clearFlag == 0 and getprop("/controls/engines/engine[0]/fire-btn") == 0) {
eng1FireGnPB.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnPB);
}
if (eng1FireGnAgent1.clearFlag == 0 and !getprop("/systems/fire/engine1/disch1")) {
eng1FireGnAgent1.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnAgent1);
}
if (eng1FireGnAgent2.clearFlag == 0 and !getprop("/systems/fire/engine1/disch2")) {
eng1FireGnAgent2.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnAgent2);
}
if (eng1FireGnmaster2.clearFlag == 0 and getprop("/controls/engines/engine[1]/cutoff-switch") == 0) {
eng1FireGnmaster2.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnmaster2);
}
if (eng1FireGnATC.clearFlag == 0) {
eng1FireGnATC.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnATC);
}
if (eng1FireGncrew.clearFlag == 0) {
eng1FireGncrew.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGncrew);
}
if (eng1FireGnevacSw.clearFlag == 0) {
eng1FireGnevac.active = 1;
eng1FireGnevacSw.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnevac);
ECAM_controller.warningReset(eng1FireGnevacSw);
}
if (eng1FireGnevacApu.clearFlag == 0 and getprop("/controls/APU/master") and getprop("/systems/apu/rpm") > 99) {
eng1FireGnevacApu.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnevacApu);
}
if (eng1FireGnevacBat.clearFlag == 0 and (getprop("/controls/electrical/switches/battery1") or getprop("/controls/electrical/switches/battery2"))) {
eng1FireGnevacBat.active = 1;
} else {
ECAM_controller.warningReset(eng1FireGnevacBat);
}
} else {
ECAM_controller.warningReset(eng1FireGnlever);
ECAM_controller.warningReset(eng1FireGnstopped);
ECAM_controller.warningReset(eng1FireGnparkbrk);
ECAM_controller.warningReset(eng1FireGnmaster);
ECAM_controller.warningReset(eng1FireGnPB);
ECAM_controller.warningReset(eng1FireGnAgent1);
ECAM_controller.warningReset(eng1FireGnAgent2);
ECAM_controller.warningReset(eng1FireGnmaster2);
ECAM_controller.warningReset(eng1FireGnATC);
ECAM_controller.warningReset(eng1FireGncrew);
ECAM_controller.warningReset(eng1FireGnevac);
ECAM_controller.warningReset(eng1FireGnevacSw);
ECAM_controller.warningReset(eng1FireGnevacApu);
ECAM_controller.warningReset(eng1FireGnevacBat);
}
} else {
ECAM_controller.warningReset(eng1FireFllever);
ECAM_controller.warningReset(eng1FireFlmaster);
ECAM_controller.warningReset(eng1FireFlPB);
ECAM_controller.warningReset(eng1FireFlAgent1);
ECAM_controller.warningReset(eng1FireFlATC);
ECAM_controller.warningReset(eng1FireFl30Sec);
ECAM_controller.warningReset(eng1FireFlAgent2);
ECAM_controller.warningReset(eng1FireGnlever);
ECAM_controller.warningReset(eng1FireGnstopped);
ECAM_controller.warningReset(eng1FireGnparkbrk);
ECAM_controller.warningReset(eng1FireGnmaster);
ECAM_controller.warningReset(eng1FireGnPB);
ECAM_controller.warningReset(eng1FireGnAgent1);
ECAM_controller.warningReset(eng1FireGnAgent2);
ECAM_controller.warningReset(eng1FireGnmaster2);
ECAM_controller.warningReset(eng1FireGnATC);
ECAM_controller.warningReset(eng1FireGncrew);
ECAM_controller.warningReset(eng1FireGnevac);
ECAM_controller.warningReset(eng1FireGnevacSw);
ECAM_controller.warningReset(eng1FireGnevacApu);
ECAM_controller.warningReset(eng1FireGnevacBat);
}
if (eng2Fire.active == 1) {
if (phaseVar >= 5 and phaseVar <= 7) {
if (eng2FireFllever.clearFlag == 0 and getprop("/fdm/jsbsim/fcs/throttle-lever[1]") > 0.01) {
eng2FireFllever.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFllever);
}
if (eng2FireFlmaster.clearFlag == 0 and getprop("/controls/engines/engine[1]/cutoff-switch") == 0) {
eng2FireFlmaster.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFlmaster);
}
if (eng2FireFlPB.clearFlag == 0 and getprop("/controls/engines/engine[1]/fire-btn") == 0) {
eng2FireFlPB.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFlPB);
}
if (getprop("/systems/fire/engine2/agent1-timer") != 0 and getprop("/systems/fire/engine2/agent1-timer") != 99) {
eng2FireFlAgent1Timer.msg = " -AGENT AFT " ~ getprop("/systems/fire/engine2/agent1-timer") ~ " S...DISCH";
}
if (eng2FireFlAgent1.clearFlag == 0 and getprop("/controls/engines/engine[1]/fire-btn") == 1 and !getprop("/systems/fire/engine2/disch1") and getprop("/systems/fire/engine2agent1-timer") != 0 and getprop("/systems/fire/engine2/agent1-timer") != 99) {
eng2FireFlAgent1Timer.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFlAgent1Timer);
}
if (eng2FireFlAgent1.clearFlag == 0 and !getprop("/systems/fire/engine2/disch1") and (getprop("/systems/fire/engine2/agent1-timer") == 0 or getprop("/systems/fire/engine2/agent1-timer") == 99)) {
eng2FireFlAgent1.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFlAgent1);
}
if (eng2FireFlATC.clearFlag == 0) {
eng2FireFlATC.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFlATC);
}
if (getprop("/systems/fire/engine2/agent2-timer") != 0 and getprop("/systems/fire/engine2/agent2-timer") != 99) {
eng2FireFl30Sec.msg = "•IF FIRE AFTER " ~ getprop("/systems/fire/engine2/agent2-timer") ~ " S:";
}
if (eng2FireFlAgent2.clearFlag == 0 and getprop("/systems/fire/engine2/disch1") and !getprop("/systems/fire/engine2/disch2") and getprop("/systems/fire/engine2/agent2-timer") > 0) {
eng2FireFl30Sec.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFl30Sec);
}
if (eng2FireFlAgent2.clearFlag == 0 and getprop("/systems/fire/engine2/disch1") and !getprop("/systems/fire/engine2/disch2")) {
eng2FireFlAgent2.active = 1;
} else {
ECAM_controller.warningReset(eng2FireFlAgent2);
}
} else {
ECAM_controller.warningReset(eng2FireFllever);
ECAM_controller.warningReset(eng2FireFlmaster);
ECAM_controller.warningReset(eng2FireFlPB);
ECAM_controller.warningReset(eng2FireFlAgent1);
ECAM_controller.warningReset(eng2FireFlATC);
ECAM_controller.warningReset(eng2FireFl30Sec);
ECAM_controller.warningReset(eng2FireFlAgent2);
}
if (phaseVar < 5 or phaseVar > 7) {
if (eng2FireGnlever.clearFlag == 0 and getprop("/fdm/jsbsim/fcs/throttle-lever[0]") > 0.01 and getprop("/fdm/jsbsim/fcs/throttle-lever[1]") > 0.01) {
eng2FireGnlever.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnlever);
}
if (eng2FireGnparkbrk.clearFlag == 0 and getprop("/controls/gear/brake-parking") == 0) {
eng2FireGnstopped.active = 1;
eng2FireGnparkbrk.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnstopped);
ECAM_controller.warningReset(eng2FireGnparkbrk);
}
if (eng2FireGnmaster.clearFlag == 0 and getprop("/controls/engines/engine[1]/cutoff-switch") == 0) {
eng2FireGnmaster.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnmaster);
}
if (eng2FireGnPB.clearFlag == 0 and getprop("/controls/engines/engine[1]/fire-btn") == 0) {
eng2FireGnPB.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnPB);
}
if (eng2FireGnAgent1.clearFlag == 0 and !getprop("/systems/fire/engine2/disch1")) {
eng2FireGnAgent1.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnAgent1);
}
if (eng2FireGnAgent2.clearFlag == 0 and !getprop("/systems/fire/engine2/disch2")) {
eng2FireGnAgent2.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnAgent2);
}
if (eng2FireGnmaster2.clearFlag == 0 and getprop("/controls/engines/engine[0]/cutoff-switch") == 0) {
eng2FireGnmaster2.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnmaster2);
}
if (eng2FireGnATC.clearFlag == 0) {
eng2FireGnATC.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnATC);
}
if (eng2FireGncrew.clearFlag == 0) {
eng2FireGncrew.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGncrew);
}
if (eng2FireGnevacSw.clearFlag == 0) {
eng2FireGnevac.active = 1;
eng2FireGnevacSw.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnevac);
ECAM_controller.warningReset(eng2FireGnevacSw);
}
if (eng2FireGnevacApu.clearFlag == 0 and getprop("/controls/APU/master") and getprop("/systems/apu/rpm") > 99) {
eng2FireGnevacApu.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnevacApu);
}
if (eng2FireGnevacBat.clearFlag == 0 and (getprop("/controls/electrical/switches/battery1") or getprop("/controls/electrical/switches/battery2"))) {
eng2FireGnevacBat.active = 1;
} else {
ECAM_controller.warningReset(eng2FireGnevacBat);
}
} else {
ECAM_controller.warningReset(eng2FireGnlever);
ECAM_controller.warningReset(eng2FireGnstopped);
ECAM_controller.warningReset(eng2FireGnparkbrk);
ECAM_controller.warningReset(eng2FireGnmaster);
ECAM_controller.warningReset(eng2FireGnPB);
ECAM_controller.warningReset(eng2FireGnAgent1);
ECAM_controller.warningReset(eng2FireGnAgent2);
ECAM_controller.warningReset(eng2FireGnmaster2);
ECAM_controller.warningReset(eng2FireGnATC);
ECAM_controller.warningReset(eng2FireGncrew);
ECAM_controller.warningReset(eng2FireGnevac);
ECAM_controller.warningReset(eng2FireGnevacSw);
ECAM_controller.warningReset(eng2FireGnevacApu);
ECAM_controller.warningReset(eng2FireGnevacBat);
}
} else {
ECAM_controller.warningReset(eng2FireFllever);
ECAM_controller.warningReset(eng2FireFlmaster);
ECAM_controller.warningReset(eng2FireFlPB);
ECAM_controller.warningReset(eng2FireFlAgent1);
ECAM_controller.warningReset(eng2FireFlATC);
ECAM_controller.warningReset(eng2FireFl30Sec);
ECAM_controller.warningReset(eng2FireFlAgent2);
ECAM_controller.warningReset(eng2FireGnlever);
ECAM_controller.warningReset(eng2FireGnstopped);
ECAM_controller.warningReset(eng2FireGnparkbrk);
ECAM_controller.warningReset(eng2FireGnmaster);
ECAM_controller.warningReset(eng2FireGnPB);
ECAM_controller.warningReset(eng2FireGnAgent1);
ECAM_controller.warningReset(eng2FireGnAgent2);
ECAM_controller.warningReset(eng2FireGnmaster2);
ECAM_controller.warningReset(eng2FireGnATC);
ECAM_controller.warningReset(eng2FireGncrew);
ECAM_controller.warningReset(eng2FireGnevac);
ECAM_controller.warningReset(eng2FireGnevacSw);
ECAM_controller.warningReset(eng2FireGnevacApu);
ECAM_controller.warningReset(eng2FireGnevacBat);
}
# APU Fire
if (apuFire.active == 1) {
if (apuFirePB.clearFlag == 0 and !getprop("/controls/APU/fire-btn")) {
apuFirePB.active = 1;
} else {
ECAM_controller.warningReset(apuFirePB);
}
if (getprop("/systems/fire/apu/agent-timer") != 0 and getprop("/systems/fire/apu/agent-timer") != 99) {
apuFireAgentTimer.msg = " -AGENT AFT " ~ getprop("/systems/fire/apu/agent-timer") ~ " S...DISCH";
}
if (apuFireAgent.clearFlag == 0 and getprop("/controls/APU/fire-btn") and !getprop("/systems/fire/apu/disch") and getprop("/systems/fire/apu/agent-timer") != 0) {
apuFireAgentTimer.active = 1;
} else {
ECAM_controller.warningReset(apuFireAgentTimer);
}
if (apuFireAgent.clearFlag == 0 and getprop("/controls/APU/fire-btn") and !getprop("/systems/fire/apu/disch") and getprop("/systems/fire/apu/agent-timer") == 0) {
apuFireAgent.active = 1;
} else {
ECAM_controller.warningReset(apuFireAgent);
}
if (apuFireMaster.clearFlag == 0 and getprop("/controls/APU/master")) {
apuFireMaster.active = 1;
} else {
ECAM_controller.warningReset(apuFireMaster);
}
} else {
ECAM_controller.warningReset(apuFirePB);
ECAM_controller.warningReset(apuFireAgentTimer);
ECAM_controller.warningReset(apuFireAgent);
ECAM_controller.warningReset(apuFireMaster);
}
# CONFIG
@ -162,99 +646,220 @@ var messages_priority_3 = func {
slats_config.active = 1;
slats_config_1.active = 1;
} else {
slats_config.active = 0;
slats_config.noRepeat = 0;
slats_config_1.active = 0;
slats_config_1.noRepeat = 0;
ECAM_controller.warningReset(slats_config);
ECAM_controller.warningReset(slats_config_1);
}
if ((flaps_config.clearFlag == 0) and (getprop("/controls/flight/flap-lever") == 0 or getprop("/controls/flight/flap-lever") == 4) and phaseVar >= 3 and phaseVar <= 4) {
flaps_config.active = 1;
flaps_config_1.active = 1;
} else {
flaps_config.active = 0;
flaps_config.noRepeat = 0;
flaps_config_1.active = 0;
flaps_config_1.noRepeat = 0;
ECAM_controller.warningReset(flaps_config);
ECAM_controller.warningReset(flaps_config_1);
}
if ((spd_brk_config.clearFlag == 0) and getprop("/controls/flight/speedbrake") != 0 and phaseVar >= 3 and phaseVar <= 4) {
spd_brk_config.active = 1;
spd_brk_config_1.active = 1;
} else {
spd_brk_config.active = 0;
spd_brk_config.noRepeat = 0;
spd_brk_config_1.active = 0;
spd_brk_config_1.noRepeat = 0;
ECAM_controller.warningReset(spd_brk_config);
ECAM_controller.warningReset(spd_brk_config_1);
}
if ((pitch_trim_config.clearFlag == 0) and (getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") > 1.75 or getprop("/fdm/jsbsim/hydraulics/elevator-trim/final-deg") < -3.65) and phaseVar >= 3 and phaseVar <= 4) {
pitch_trim_config.active = 1;
pitch_trim_config_1.active = 1;
} else {
pitch_trim_config.active = 0;
pitch_trim_config.noRepeat = 0;
pitch_trim_config_1.active = 0;
pitch_trim_config_1.noRepeat = 0;
ECAM_controller.warningReset(pitch_trim_config);
ECAM_controller.warningReset(pitch_trim_config_1);
}
if ((rud_trim_config.clearFlag == 0) and (getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") < -3.55 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") > 3.55) and phaseVar >= 3 and phaseVar <= 4) {
rud_trim_config.active = 1;
rud_trim_config_1.active = 1;
} else {
rud_trim_config.active = 0;
rud_trim_config.noRepeat = 0;
rud_trim_config_1.active = 0;
rud_trim_config_1.noRepeat = 0;
ECAM_controller.warningReset(rud_trim_config);
ECAM_controller.warningReset(rud_trim_config_1);
}
if ((park_brk_config.clearFlag == 0) and getprop("/controls/gear/brake-parking") == 1 and phaseVar >= 3 and phaseVar <= 4) {
park_brk_config.active = 1;
} else {
park_brk_config.active = 0;
park_brk_config.noRepeat = 0;
ECAM_controller.warningReset(park_brk_config);
}
# AUTOFLT
if ((ap_offw.clearFlag == 0) and apWarn.getValue() == 2) {
ap_offw.active = 1;
} else {
ap_offw.active = 0;
ap_offw.noRepeat = 0;
ECAM_controller.warningReset(ap_offw);
if (getprop("/it-autoflight/output/ap-warning") == 2) {
setprop("/it-autoflight/output/ap-warning", 0);
setprop("/ECAM/Lower/light/clr", 0);
setprop("/ECAM/warnings/master-warning-light", 0);
}
}
if ((athr_lock.clearFlag == 0) and phaseVar >= 5 and phaseVar <= 7 and getprop("/systems/thrust/thr-locked") == 1) {
if ((athr_lock.clearFlag == 0) and phaseVar >= 5 and phaseVar <= 7 and getprop("/systems/thrust/thr-locked-alert") == 1) {
if (getprop("/systems/thrust/thr-locked-flash") == 0) {
athr_lock.msg = " ";
} else {
athr_lock.msg = msgSave
}
athr_lock.active = 1;
athr_lock_1.active = 1;
} else {
athr_lock.active = 0;
athr_lock_1.active = 0;
athr_lock.noRepeat = 0;
athr_lock_1.noRepeat = 0;
ECAM_controller.warningReset(athr_lock);
ECAM_controller.warningReset(athr_lock_1);
}
if ((athr_offw.clearFlag == 0) and athrWarn.getValue() == 2 and phaseVar != 4 and phaseVar != 8 and phaseVar != 10) {
athr_offw.active = 1;
athr_offw_1.active = 1;
} else {
athr_offw.active = 0;
athr_offw_1.active = 0;
athr_offw.noRepeat = 0;
athr_offw_1.noRepeat = 0;
ECAM_controller.warningReset(athr_offw);
ECAM_controller.warningReset(athr_offw_1);
if (getprop("/it-autoflight/output/athr-warning") == 2) {
setprop("/it-autoflight/output/athr-warning", 0);
setprop("/ECAM/Lower/light/clr", 0);
setprop("/ECAM/warnings/master-caution-light", 0);
}
}
if ((athr_lim.clearFlag == 0) and getprop("/it-autoflight/output/athr") == 1 and ((getprop("/systems/thrust/eng-out") != 1 and (getprop("/systems/thrust/state1") == "MAN" or getprop("/systems/thrust/state2") == "MAN")) or (getprop("/systems/thrust/eng-out") == 1 and (getprop("/systems/thrust/state1") == "MAN" or getprop("/systems/thrust/state2") == "MAN" or (getprop("/systems/thrust/state1") == "MAN THR" and getprop("/controls/engines/engine[0]/throttle-pos") <= 0.83) or (getprop("/systems/thrust/state2") == "MAN THR" and getprop("/controls/engines/engine[0]/throttle-pos") <= 0.83)))) and (phaseVar >= 5 and phaseVar <= 7)) {
athr_lim.active = 1;
athr_lim_1.active = 1;
} else {
athr_lim.active = 0;
athr_lim_1.active = 0;
athr_lim.noRepeat = 0;
athr_lim_1.noRepeat = 0;
ECAM_controller.warningReset(athr_lim);
ECAM_controller.warningReset(athr_lim_1);
}
if (!systems.cargoTestBtn.getBoolValue()) {
if (cargoSmokeFwd.clearFlag == 0 and systems.fwdCargoFireWarn.getBoolValue() and (getprop("/ECAM/warning-phase") <= 3 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") == 6)) {
cargoSmokeFwd.active = 1;
} elsif (cargoSmokeFwd.clearFlag == 1 or systems.cargoTestBtnOff.getBoolValue()) {
ECAM_controller.warningReset(cargoSmokeFwd);
cargoSmokeFwd.hasSubmsg = 1;
}
if (cargoSmokeFwdAgent.clearFlag == 0 and cargoSmokeFwd.active == 1 and !getprop("/systems/fire/cargo/disch")) {
cargoSmokeFwdAgent.active = 1;
} else {
ECAM_controller.warningReset(cargoSmokeFwdAgent);
cargoSmokeFwd.hasSubmsg = 0;
}
if (cargoSmokeAft.clearFlag == 0 and systems.aftCargoFireWarn.getBoolValue() and (getprop("/ECAM/warning-phase") <= 3 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") == 6)) {
cargoSmokeAft.active = 1;
} elsif (cargoSmokeAft.clearFlag == 1 or systems.cargoTestBtnOff.getBoolValue()) {
ECAM_controller.warningReset(cargoSmokeAft);
cargoSmokeAft.hasSubmsg = 1;
systems.cargoTestBtnOff.setBoolValue(0);
}
if (cargoSmokeAftAgent.clearFlag == 0 and cargoSmokeAft.active == 1 and !getprop("/systems/fire/cargo/disch")) {
cargoSmokeAftAgent.active = 1;
} else {
ECAM_controller.warningReset(cargoSmokeAftAgent);
cargoSmokeAft.hasSubmsg = 0;
}
} else {
if (systems.aftCargoFireWarn.getBoolValue()) {
cargoSmokeFwd.active = 1;
cargoSmokeFwdAgent.active = 1;
cargoSmokeAft.active = 1;
cargoSmokeAftAgent.active = 1;
} else {
ECAM_controller.warningReset(cargoSmokeFwd);
ECAM_controller.warningReset(cargoSmokeFwdAgent);
ECAM_controller.warningReset(cargoSmokeAft);
ECAM_controller.warningReset(cargoSmokeAftAgent);
}
}
}
var messages_priority_2 = func {
if (apuEmerShutdown.clearFlag == 0 and systems.apuEmerShutdown.getBoolValue() and !getprop("/systems/fire/apu/warning-active") and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
apuEmerShutdown.active = 1;
} elsif (apuEmerShutdown.clearFlag == 1) {
ECAM_controller.warningReset(apuEmerShutdown);
apuEmerShutdown.hasSubmsg = 1;
}
if (apuEmerShutdownMast.clearFlag == 0 and getprop("/controls/APU/master") and apuEmerShutdown.active == 1) {
apuEmerShutdownMast.active = 1;
} else {
ECAM_controller.warningReset(apuEmerShutdownMast);
apuEmerShutdown.hasSubmsg = 0;
}
if (eng1FireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[0].condition == 0 or (systems.engFireDetectorUnits.vector[0].loopOne == 9 and systems.engFireDetectorUnits.vector[0].loopTwo == 9 and systems.eng1Inop.getBoolValue())) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
eng1FireDetFault.active = 1;
} else {
ECAM_controller.warningReset(eng1FireDetFault);
}
if (eng1LoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[0].loopOne == 9 and systems.engFireDetectorUnits.vector[0].loopTwo != 9 and !systems.eng1Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
eng1LoopAFault.active = 1;
} else {
ECAM_controller.warningReset(eng1LoopAFault);
}
if (eng1LoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[0].loopOne != 9 and systems.engFireDetectorUnits.vector[0].loopTwo == 9 and !systems.eng1Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
eng1LoopBFault.active = 1;
} else {
ECAM_controller.warningReset(eng1LoopBFault);
}
if (eng2FireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[1].condition == 0 or (systems.engFireDetectorUnits.vector[1].loopOne == 9 and systems.engFireDetectorUnits.vector[1].loopTwo == 9 and systems.eng2Inop.getBoolValue())) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
eng2FireDetFault.active = 1;
} else {
ECAM_controller.warningReset(eng2FireDetFault);
}
if (eng2LoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[1].loopOne == 9 and systems.engFireDetectorUnits.vector[1].loopTwo != 9 and !systems.eng2Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
eng2LoopAFault.active = 1;
} else {
ECAM_controller.warningReset(eng2LoopAFault);
}
if (eng2LoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[1].loopOne != 9 and systems.engFireDetectorUnits.vector[1].loopTwo == 9 and !systems.eng2Inop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
eng2LoopBFault.active = 1;
} else {
ECAM_controller.warningReset(eng2LoopBFault);
}
if (apuFireDetFault.clearFlag == 0 and (systems.engFireDetectorUnits.vector[2].condition == 0 or (systems.engFireDetectorUnits.vector[2].loopOne == 9 and systems.engFireDetectorUnits.vector[2].loopTwo == 9 and systems.apuInop.getBoolValue())) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
apuFireDetFault.active = 1;
} else {
ECAM_controller.warningReset(apuFireDetFault);
}
if (apuLoopAFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[2].loopOne == 9 and systems.engFireDetectorUnits.vector[2].loopTwo != 9 and !systems.apuInop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
apuLoopAFault.active = 1;
} else {
ECAM_controller.warningReset(apuLoopAFault);
}
if (apuLoopBFault.clearFlag == 0 and systems.engFireDetectorUnits.vector[2].loopOne != 9 and systems.engFireDetectorUnits.vector[2].loopTwo == 9 and !systems.apuInop.getBoolValue() and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
apuLoopBFault.active = 1;
} else {
ECAM_controller.warningReset(apuLoopBFault);
}
if (crgAftFireDetFault.clearFlag == 0 and (systems.cargoSmokeDetectorUnits.vector[0].condition == 0 or systems.cargoSmokeDetectorUnits.vector[1].condition == 0) and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
crgAftFireDetFault.active = 1;
} else {
ECAM_controller.warningReset(crgAftFireDetFault);
}
if (crgFwdFireDetFault.clearFlag == 0 and systems.cargoSmokeDetectorUnits.vector[2].condition == 0 and (getprop("/ECAM/warning-phase") == 6 or getprop("/ECAM/warning-phase") >= 9 or getprop("/ECAM/warning-phase") <= 2)) {
crgFwdFireDetFault.active = 1;
} else {
ECAM_controller.warningReset(crgFwdFireDetFault);
}
}
var messages_priority_2 = func {}
var messages_priority_1 = func {}
var messages_priority_0 = func {}
@ -318,7 +923,7 @@ var messages_right_memo = func {
ldg_inhibit.active = 0;
}
if ((getprop("/gear/gear[1]/wow") == 0) and (getprop("/systems/failures/cargo-aft-fire") == 1 or getprop("/systems/failures/cargo-fwd-fire") == 1) or (((getprop("/systems/hydraulic/green-psi") < 1500 and getprop("/engines/engine[0]/state") == 3) and (getprop("/systems/hydraulic/yellow-psi") < 1500 and getprop("/engines/engine[1]/state") == 3)) or ((getprop("/systems/hydraulic/green-psi") < 1500 or getprop("/systems/hydraulic/yellow-psi") < 1500) and getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") == 3) and phaseVar >= 3 and phaseVar <= 8)) {
if ((getprop("/gear/gear[1]/wow") == 0) and (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/cargo-aft-fire") == 1 or getprop("/systems/failures/cargo-fwd-fire") == 1) or (((getprop("/systems/hydraulic/green-psi") < 1500 and getprop("/engines/engine[0]/state") == 3) and (getprop("/systems/hydraulic/yellow-psi") < 1500 and getprop("/engines/engine[1]/state") == 3)) or ((getprop("/systems/hydraulic/green-psi") < 1500 or getprop("/systems/hydraulic/yellow-psi") < 1500) and getprop("/engines/engine[0]/state") == 3 and getprop("/engines/engine[1]/state") == 3) and phaseVar >= 3 and phaseVar <= 8)) {
# todo: emer elec
land_asap_r.active = 1;
} else {
@ -492,7 +1097,7 @@ var messages_right_memo = func {
}
}
# Listener
# Listeners
setlistener("/controls/fctl/fac1", func() {
if (dualFail.active == 0) { return; }
@ -501,4 +1106,20 @@ setlistener("/controls/fctl/fac1", func() {
} else {
dualFailFACActive = 1;
}
}, 0, 0);
setlistener("/engines/engine[0]/state", func() {
if ((state1Node.getValue() != 3 and state2Node.getValue() != 3) and wowNode.getValue() == 0) {
dualFailNode.setBoolValue(1);
} else {
dualFailNode.setBoolValue(0);
}
}, 0, 0);
setlistener("/engines/engine[1]/state", func() {
if ((state1Node.getValue() != 3 and state2Node.getValue() != 3) and wowNode.getValue() == 0) {
dualFailNode.setBoolValue(1);
} else {
dualFailNode.setBoolValue(0);
}
}, 0, 0);

View file

@ -13,32 +13,95 @@ var warnings = std.Vector.new([
var flap_not_zero = warning.new(msg: "F/CTL FLAP LVR NOT ZERO", colour: "r", aural: 0, light: 0),
# DUAL ENG FAIL
var dualFail = warning.new(msg: "ENG DUAL FAILURE", colour: "r", aural: 0, light: 0),
var dualFailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c", aural: 9, light: 9),
var dualFailLevers = warning.new(msg: " -THR LEVERS........IDLE", colour: "c", aural: 9, light: 9),
var dualFailRelightSPD = warning.new(msg: " OPTIMUM RELIGHT SPD.280", colour: "c", aural: 9, light: 9),
var dualFailRelightSPDCFM = warning.new(msg: " OPTIMUM RELIGHT SPD.300", colour: "c", aural: 9, light: 9),
var dualFailElec = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c", aural: 9, light: 9),
var dualFailRadio = warning.new(msg: " -VHF1/ATC1..........USE", colour: "c", aural: 9, light: 9),
var dualFailFAC = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c", aural: 9, light: 9),
var dualFailRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w", aural: 9, light: 9),
var dualFailMasters = warning.new(msg: " -ENG MASTERS.OFF 30S/ON", colour: "c", aural: 9, light: 9),
var dualFailSuccess = warning.new(msg: " •IF UNSUCCESSFUL : ", colour: "w", aural: 9, light: 9),
var dualFailAPU = warning.new(msg: " -APU (IF AVAIL)...START", colour: "c", aural: 9, light: 9),
var dualFailMastersAPU = warning.new(msg: " -ENG MASTERS.OFF 30S/ON", colour: "c", aural: 9, light: 9),
var dualFailSPDGD = warning.new(msg: " OPTIMUM SPEED.....G DOT", colour: "c", aural: 9, light: 9),
var dualFailAPPR = warning.new(msg: " •EARLY IN APPR : ", colour: "w", aural: 9, light: 9),
var dualFailcabin = warning.new(msg: " -CAB SECURE.......ORDER", colour: "c", aural: 9, light: 9),
var dualFailrudd = warning.new(msg: " -USE RUDDER WITH CARE ", colour: "c", aural: 9, light: 9),
var dualFailflap = warning.new(msg: " -FOR LDG.....USE FLAP 3", colour: "c", aural: 9, light: 9),
var dualFail5000 = warning.new(msg: " •AT 5000 FT AGL : ", colour: "w", aural: 9, light: 9),
var dualFailgear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c", aural: 9, light: 9),
var dualFailfinalspeed = warning.new(msg: " TARGET SPEED.....150 KT", colour: "c", aural: 9, light: 9),
var dualFailtouch = warning.new(msg: " •AT TOUCH DOWN : ", colour: "w", aural: 9, light: 9),
var dualFailmasteroff = warning.new(msg: " -ENG MASTERS........OFF", colour: "c", aural: 9, light: 9),
var dualFailapuoff = warning.new(msg: " -APU MASTER SW......OFF", colour: "c", aural: 9, light: 9),
var dualFailevac = warning.new(msg: " -EVAC..........INITIATE", colour: "c", aural: 9, light: 9),
var dualFailbatt = warning.new(msg: " -BAT 1+2............OFF", colour: "c", aural: 9, light: 9),
var dualFail = warning.new(msg: "ENG DUAL FAILURE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
var dualFailModeSel = warning.new(msg: " -ENG MODE SEL.......IGN", colour: "c"),
var dualFailLevers = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var dualFailRelightSPD = warning.new(msg: " OPTIMUM RELIGHT SPD.280", colour: "c"),
var dualFailRelightSPDCFM = warning.new(msg: " OPTIMUM RELIGHT SPD.300", colour: "c"),
var dualFailElec = warning.new(msg: " -EMER ELEC PWR...MAN ON", colour: "c"),
var dualFailRadio = warning.new(msg: " -VHF1/ATC1..........USE", colour: "c"),
var dualFailFAC = warning.new(msg: " -FAC 1......OFF THEN ON", colour: "c"),
var dualFailRelight = warning.new(msg: "•IF NO RELIGHT AFTER 30S", colour: "w", hasSubmsg: 1),
var dualFailMasters = warning.new(msg: " -ENG MASTERS.OFF 30S/ON", colour: "c"),
var dualFailSuccess = warning.new(msg: " •IF UNSUCCESSFUL : ", colour: "w", hasSubmsg: 1),
var dualFailAPU = warning.new(msg: " -APU (IF AVAIL)...START", colour: "c"),
var dualFailAPUwing = warning.new(msg: " -WING ANTI ICE......OFF", colour: "c"),
var dualFailAPUbleed = warning.new(msg: " -APU BLEED...........ON", colour: "c"),
var dualFailMastersAPU = warning.new(msg: " -ENG MASTERS.OFF 30S/ON", colour: "c"),
var dualFailSPDGD = warning.new(msg: " OPTIMUM SPEED.....G DOT", colour: "c"),
var dualFailAPPR = warning.new(msg: " •EARLY IN APPR : ", colour: "w", hasSubmsg: 1),
var dualFailcabin = warning.new(msg: " -CAB SECURE.......ORDER", colour: "c"),
var dualFailrudd = warning.new(msg: " -USE RUDDER WITH CARE ", colour: "c"),
var dualFailflap = warning.new(msg: " -FOR LDG.....USE FLAP 3", colour: "c"),
var dualFail5000 = warning.new(msg: " •AT 5000 FT AGL : ", colour: "w", hasSubmsg: 1),
var dualFailgear = warning.new(msg: " -L/G.........GRVTY EXTN", colour: "c"),
var dualFailfinalspeed = warning.new(msg: " TARGET SPEED.....150 KT", colour: "c"),
var dualFailtouch = warning.new(msg: " •AT TOUCH DOWN : ", colour: "w", hasSubmsg: 1),
var dualFailmasteroff = warning.new(msg: " -ENG MASTERS........OFF", colour: "c"),
var dualFailapuoff = warning.new(msg: " -APU MASTER SW......OFF", colour: "c"),
var dualFailevac = warning.new(msg: " -EVAC..........INITIATE", colour: "c"),
var dualFailbatt = warning.new(msg: " -BAT 1+2............OFF", colour: "c"),
# ENG 1 FIRE (flight)
var eng1Fire = warning.new(msg: "ENG 1 FIRE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
var eng1FireFllever = warning.new(msg: " -THR LEVER 1.......IDLE", colour: "c"),
var eng1FireFlmaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
var eng1FireFlPB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
var eng1FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
var eng1FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng1FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", hasSubmsg: 1),
var eng1FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
# ENG 1 FIRE (ground)
var eng1FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng1FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", hasSubmsg: 1),
var eng1FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng1FireGnmaster = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
var eng1FireGnPB = warning.new(msg: " -ENG 1 FIRE P/B....PUSH", colour: "c"),
var eng1FireGnAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng1FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng1FireGnmaster2 = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
var eng1FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng1FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
var eng1FireGnevac = warning.new(msg: " •IF EVAC RQRD:", colour: "w", hasSubmsg: 1),
var eng1FireGnevacSw = warning.new(msg: " -EVAC COMMAND........ON", colour: "c"),
var eng1FireGnevacApu = warning.new(msg: " -APU MASTER SW......OFF", colour: "c"),
var eng1FireGnevacBat = warning.new(msg: " -BAT 1+2............OFF", colour: "c"),
# ENG 2 FIRE (flight)
var eng2Fire = warning.new(msg: "ENG 2 FIRE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
var eng2FireFllever = warning.new(msg: " -THR LEVER 2.......IDLE", colour: "c"),
var eng2FireFlmaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
var eng2FireFlPB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
var eng2FireFlAgent1Timer = warning.new(msg: " -AGENT 1 AFT 10 S.DISCH", colour: "w"),
var eng2FireFlAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng2FireFlATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireFl30Sec = warning.new(msg: " •IF FIRE AFTER 30 S:", colour: "w", hasSubmsg: 1),
var eng2FireFlAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
# ENG 2 FIRE (ground)
var eng2FireGnlever = warning.new(msg: " -THR LEVERS........IDLE", colour: "c"),
var eng2FireGnstopped = warning.new(msg: " •WHEN A/C IS STOPPED:", colour: "w", hasSubmsg: 1),
var eng2FireGnparkbrk = warning.new(msg: " -PARKING BRK.........ON", colour: "c"),
var eng2FireGnmaster = warning.new(msg: " -ENG MASTER 2.......OFF", colour: "c"),
var eng2FireGnPB = warning.new(msg: " -ENG 2 FIRE P/B....PUSH", colour: "c"),
var eng2FireGnAgent1 = warning.new(msg: " -AGENT 1..........DISCH", colour: "c"),
var eng2FireGnAgent2 = warning.new(msg: " -AGENT 2..........DISCH", colour: "c"),
var eng2FireGnmaster2 = warning.new(msg: " -ENG MASTER 1.......OFF", colour: "c"),
var eng2FireGnATC = warning.new(msg: " -ATC.............NOTIFY", colour: "c"),
var eng2FireGncrew = warning.new(msg: " -CABIN CREW.......ALERT", colour: "c"),
var eng2FireGnevac = warning.new(msg: " •IF EVAC RQRD:", colour: "w", hasSubmsg: 1),
var eng2FireGnevacSw = warning.new(msg: " -EVAC COMMAND........ON", colour: "c"),
var eng2FireGnevacApu = warning.new(msg: " -APU MASTER SW......OFF", colour: "c"),
var eng2FireGnevacBat = warning.new(msg: " -BAT 1+2............OFF", colour: "c"),
# APU FIRE
var apuFire = warning.new(msg: "APU FIRE ", colour: "r", aural: 0, light: 0, hasSubmsg: 1, sdPage: "apu"),
var apuFirePB = warning.new(msg: " -APU FIRE P/B......PUSH", colour: "c"),
var apuFireAgentTimer = warning.new(msg: " -AGENT AFT 10 S...DISCH", colour: "c"),
var apuFireAgent = warning.new(msg: " -AGENT............DISCH", colour: "c"),
var apuFireMaster = warning.new(msg: " -MASTER SW..........OFF", colour: "c"),
# Config
var slats_config = warning.new(msg: "CONFIG", colour: "r", aural: 0, light: 0),
@ -54,28 +117,51 @@ var warnings = std.Vector.new([
var park_brk_config = warning.new(msg: "CONFIG PARK BRK ON", colour: "r", aural: 0, light: 0),
# Autopilot
var ap_offw = warning.new(msg: "AUTO FLT AP OFF", colour: "r", aural: 9, light: 0),
var ap_offw = warning.new(msg: "AUTO FLT AP OFF", colour: "r", light: 0),
var athr_offw = warning.new(msg: "AUTO FLT A/THR OFF", colour: "a", aural: 1, light: 1),
var athr_offw_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c", aural: 9, light: 9),
var athr_offw_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
var athr_lock = warning.new(msg: "ENG THRUST LOCKED", colour: "a", aural: 1, light: 1),
var athr_lock_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c", aural: 9, light: 9),
var athr_lock_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
var athr_lim = warning.new(msg: "AUTO FLT A/THR LIMITED", colour: "a", aural: 1, light: 1),
var athr_lim_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c", aural: 9, light: 9)
var athr_lim_1 = warning.new(msg: "-THR LEVERS........MOVE", colour: "c"),
# Cargo smoke
var cargoSmokeFwd = warning.new(msg: "SMOKE FWD CARGO SMOKE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
var cargoSmokeFwdAgent = warning.new(msg: "-AGENT............DISCH", colour: "c"),
var cargoSmokeAft = warning.new(msg: "SMOKE AFT CARGO SMOKE", colour: "r", aural: 0, light: 0, hasSubmsg: 1),
var cargoSmokeAftAgent = warning.new(msg: "-AGENT............DISCH", colour: "c"),
# APU shutdown
var apuEmerShutdown = warning.new(msg: "APU EMER SHUT DOWN", colour: "a", aural: 1, light: 1, hasSubmsg: 1),
var apuEmerShutdownMast = warning.new(msg: " -MASTER SW..........OFF", colour: "c"),
# FIRE det fault
var eng1FireDetFault = warning.new(msg: "ENG 1 FIRE DET FAULT", colour: "a", aural: 1, light: 1),
var eng1LoopAFault = warning.new(msg: "ENG 1 FIRE LOOP A FAULT", colour: "a"),
var eng1LoopBFault = warning.new(msg: "ENG 1 FIRE LOOP B FAULT", colour: "a"),
var eng2FireDetFault = warning.new(msg: "ENG 2 FIRE DET FAULT", colour: "a", aural: 1, light: 1),
var eng2LoopAFault = warning.new(msg: "ENG 2 FIRE LOOP A FAULT", colour: "a"),
var eng2LoopBFault = warning.new(msg: "ENG 2 FIRE LOOP B FAULT", colour: "a"),
var apuFireDetFault = warning.new(msg: "APU FIRE DET FAULT", colour: "a", aural: 1, light: 1),
var apuLoopAFault = warning.new(msg: "APU FIRE LOOP A FAULT", colour: "a"),
var apuLoopBFault = warning.new(msg: "APU FIRE LOOP B FAULT", colour: "a"),
var crgFwdFireDetFault = warning.new(msg: "FWD CRG DET FAULT", colour: "a"),
var crgAftFireDetFault = warning.new(msg: "AFT CRG DET FAULT", colour: "a"),
]);
var leftmemos = std.Vector.new([
var company_alert = warning.new(msg: "COMPANY ALERT", colour: "g", aural: 9, light: 9), # Not yet implemented, buzzer sound
var refuelg = warning.new(msg: "REFUELG", colour: "g", aural: 9, light: 9),
var irs_in_align = warning.new(msg: "IRS IN ALIGN", colour: "g", aural: 9, light: 9), # Not yet implemented
var gnd_splrs = warning.new(msg: "GND SPLRS ARMED", colour: "g", aural: 9, light: 9),
var seatbelts = warning.new(msg: "SEAT BELTS", colour: "g", aural: 9, light: 9),
var nosmoke = warning.new(msg: "NO SMOKING", colour: "g", aural: 9, light: 9),
var strobe_lt_off = warning.new(msg: "STROBE LT OFF", colour: "g", aural: 9, light: 9),
var outr_tk_fuel_xfrd = warning.new(msg: "OUTR TK FUEL XFRD", colour: "g", aural: 9, light: 9), # Not yet implemented
var fob_3T = warning.new(msg: "FOB BELOW 3T", colour: "g", aural: 9, light: 9),
var gpws_flap_mode_off = warning.new(msg: "GPWS FLAP MODE OFF", colour: "g", aural: 9, light: 9),
var atc_datalink_stby = warning.new(msg: "ATC DATALINK STBY", colour: "g", aural: 9, light: 9), # Not yet implemented
var company_datalink_stby = warning.new(msg: "COMPANY DATALINK STBY", colour: "g", aural: 9, light: 9) # Not yet implemented
var company_alert = warning.new(msg: "COMPANY ALERT" ), # Not yet implemented, buzzer sound
var refuelg = warning.new(msg: "REFUELG" ),
var irs_in_align = warning.new(msg: "IRS IN ALIGN" ), # Not yet implemented
var gnd_splrs = warning.new(msg: "GND SPLRS ARMED" ),
var seatbelts = warning.new(msg: "SEAT BELTS" ),
var nosmoke = warning.new(msg: "NO SMOKING" ),
var strobe_lt_off = warning.new(msg: "STROBE LT OFF" ),
var outr_tk_fuel_xfrd = warning.new(msg: "OUTR TK FUEL XFRD" ), # Not yet implemented
var fob_3T = warning.new(msg: "FOB BELOW 3T" ),
var gpws_flap_mode_off = warning.new(msg: "GPWS FLAP MODE OFF" ),
var atc_datalink_stby = warning.new(msg: "ATC DATALINK STBY" ), # Not yet implemented
var company_datalink_stby = warning.new(msg: "COMPANY DATALINK STBY") # Not yet implemented
]);
# Right E/WD
@ -103,45 +189,45 @@ var secondaryFailures = std.Vector.new([
]);
var memos = std.Vector.new([
var spd_brk = memo.new(msg: "SPEED BRK", colour: "g"),
var park_brk = memo.new(msg: "PARK BRK", colour: "g"),
var ptu = memo.new(msg: "HYD PTU", colour: "g"),
var rat = memo.new(msg: "RAT OUT", colour: "g"),
var emer_gen = memo.new(msg: "EMER GEN", colour: "g"),
var ram_air = memo.new(msg: "RAM AIR ON", colour: "g"),
var nw_strg_disc = memo.new(msg: "NW STRG DISC", colour: "g"),
var ignition = memo.new(msg: "IGNITION", colour: "g"),
var cabin_ready = memo.new(msg: "CABIN READY", colour: "g"), # Not yet implemented
var pred_ws_off = memo.new(msg: "PRED W/S OFF", colour: "g"), # Not yet implemented
var terr_stby = memo.new(msg: "TERR STBY", colour: "g"), # Not yet implemented
var tcas_stby = memo.new(msg: "TCAS STBY", colour: "g"), # Not yet implemented
var acars_call = memo.new(msg: "ACARS CALL", colour: "g"), # Not yet implemented
var company_call = memo.new(msg: "COMPANY CALL", colour: "g"), # Not yet implemented
var satcom_alert = memo.new(msg: "SATCOM ALERT", colour: "g"), # Not yet implemented
var acars_msg = memo.new(msg: "ACARS MSG", colour: "g"), # Not yet implemented
var company_msg = memo.new(msg: "COMPANY MSG", colour: "g"), # Not yet implemented
var eng_aice = memo.new(msg: "ENG A.ICE", colour: "g"),
var wing_aice = memo.new(msg: "WING A.ICE", colour: "g"),
var ice_not_det = memo.new(msg: "ICE NOT DET", colour: "g"), # Not yet implemented
var hi_alt = memo.new(msg: "HI ALT", colour: "g"), # Not yet implemented
var apu_avail = memo.new(msg: "APU AVAIL", colour: "g"),
var apu_bleed = memo.new(msg: "APU BLEED", colour: "g"),
var ldg_lt = memo.new(msg: "LDG LT", colour: "g"),
var brk_fan = memo.new(msg: "BRK FAN", colour: "g"), # Not yet implemented
var audio3_xfrd = memo.new(msg: "AUDIO 3 XFRD", colour: "g"), # Not yet implemented
var switchg_pnl = memo.new(msg: "SWITCHG PNL", colour: "g"), # Not yet implemented
var gpws_flap3 = memo.new(msg: "GPWS FLAP 3", colour: "g"),
var hf_data_ovrd = memo.new(msg: "HF DATA OVRD", colour: "g"), # Not yet implemented
var hf_voice = memo.new(msg: "HF VOICE", colour: "g"), # Not yet implemented
var acars_stby = memo.new(msg: "ACARS STBY", colour: "g"), # Not yet implemented
var vhf3_voice = memo.new(msg: "VHF3 VOICE", colour: "g"),
var auto_brk_lo = memo.new(msg: "AUTO BRK LO", colour: "g"),
var auto_brk_med = memo.new(msg: "AUTO BRK MED", colour: "g"),
var auto_brk_max = memo.new(msg: "AUTO BRK MAX", colour: "g"),
var auto_brk_off = memo.new(msg: "AUTO BRK OFF", colour: "g"), # Not yet implemented
var man_ldg_elev = memo.new(msg: "MAN LDG ELEV", colour: "g"), # Not yet implemented
var ctr_tk_feedg = memo.new(msg: "CTR TK FEEDG", colour: "g"),
var fuelx = memo.new(msg: "FUEL X FEED", colour: "g")
var spd_brk = memo.new(msg: "SPEED BRK" ),
var park_brk = memo.new(msg: "PARK BRK" ),
var ptu = memo.new(msg: "HYD PTU" ),
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 nw_strg_disc = memo.new(msg: "NW STRG DISC"),
var ignition = memo.new(msg: "IGNITION" ),
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
var tcas_stby = memo.new(msg: "TCAS STBY" ), # Not yet implemented
var acars_call = memo.new(msg: "ACARS CALL" ), # Not yet implemented
var company_call = memo.new(msg: "COMPANY CALL"), # Not yet implemented
var satcom_alert = memo.new(msg: "SATCOM ALERT"), # Not yet implemented
var acars_msg = memo.new(msg: "ACARS MSG" ), # Not yet implemented
var company_msg = memo.new(msg: "COMPANY MSG" ), # Not yet implemented
var eng_aice = memo.new(msg: "ENG A.ICE" ),
var wing_aice = memo.new(msg: "WING A.ICE" ),
var ice_not_det = memo.new(msg: "ICE NOT DET" ), # Not yet implemented
var hi_alt = memo.new(msg: "HI ALT" ), # Not yet implemented
var apu_avail = memo.new(msg: "APU AVAIL" ),
var apu_bleed = memo.new(msg: "APU BLEED" ),
var ldg_lt = memo.new(msg: "LDG LT" ),
var brk_fan = memo.new(msg: "BRK FAN" ), # Not yet implemented
var audio3_xfrd = memo.new(msg: "AUDIO 3 XFRD"), # Not yet implemented
var switchg_pnl = memo.new(msg: "SWITCHG PNL" ), # Not yet implemented
var gpws_flap3 = memo.new(msg: "GPWS FLAP 3" ),
var hf_data_ovrd = memo.new(msg: "HF DATA OVRD"), # Not yet implemented
var hf_voice = memo.new(msg: "HF VOICE" ), # Not yet implemented
var acars_stby = memo.new(msg: "ACARS STBY" ), # Not yet implemented
var vhf3_voice = memo.new(msg: "VHF3 VOICE" ),
var auto_brk_lo = memo.new(msg: "AUTO BRK LO" ),
var auto_brk_med = memo.new(msg: "AUTO BRK MED"),
var auto_brk_max = memo.new(msg: "AUTO BRK MAX"),
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 clearWarnings = std.Vector.new();
@ -278,4 +364,7 @@ var statusProc = std.Vector.new();
var statusInfo = std.Vector.new();
var statusCancelled = std.Vector.new();
var statusInop = std.Vector.new();
var statusMaintenance = std.Vector.new();
var statusMaintenance = std.Vector.new();
# hack thrust lock message:
var msgSave = athr_lock.msg;

View file

@ -180,6 +180,7 @@ var Custom = {
athrOff: props.globals.initNode("/it-autoflight/sound/athrsound", 0, "BOOL"),
enableAthrOff: 0,
},
ThrLock: props.globals.getNode("/systems/thrust/thr-locked", 1)
};
var ITAF = {
@ -330,13 +331,13 @@ var ITAF = {
if (Internal.altTemp >= Position.indicatedAltitudeFtTemp) {
Output.thrMode.setValue(2);
Text.thr.setValue("PITCH");
if (Internal.flchActive) {
if (Internal.flchActive) { # Set before mode change to prevent it from overwriting by mistake
Text.vert.setValue("SPD CLB");
}
} else {
Output.thrMode.setValue(1);
Text.thr.setValue("PITCH");
if (Internal.flchActive) {
if (Internal.flchActive) { # Set before mode change to prevent it from overwriting by mistake
Text.vert.setValue("SPD DES");
}
}
@ -492,6 +493,7 @@ var ITAF = {
if (s == 1) {
if (Misc.acEss.getValue() >= 110) {
Output.athr.setBoolValue(1);
Custom.ThrLock.setValue(0);
Custom.Sound.enableAthrOff = 1;
Custom.Sound.athrOff.setBoolValue(0);
}
@ -647,10 +649,12 @@ var ITAF = {
Text.vert.setValue("ALT CAP");
} else if (n == 4) { # FLCH
Output.apprArm.setBoolValue(0);
Output.vert.setValue(1);
Internal.alt.setValue(Input.alt.getValue());
Internal.altDiff = Internal.alt.getValue() - Position.indicatedAltitudeFt.getValue();
if (abs(Internal.altDiff) >= 250) { # SPD CLB or SPD DES
if (abs(Input.altDiff) >= 125) { # SPD CLB or SPD DES
if (Input.alt.getValue() >= Position.indicatedAltitudeFt.getValue()) { # Usually set Thrust Mode Selector, but we do it now due to timer lag
Text.vert.setValue("SPD CLB");
} else {
Text.vert.setValue("SPD DES");
}
Internal.altCaptureActive = 0;
Output.vert.setValue(4);
Internal.flchActive = 1;

245
Nasal/atc.nas Normal file
View file

@ -0,0 +1,245 @@
# A3XX ATC Panel
# Jonathan Redpath
# Copyright (c) 2019 Jonathan Redpath
var idCode = props.globals.getNode("/instrumentation/transponder/id-code", 1);
var guiModes = ['OFF', 'STANDBY', 'TEST', 'GROUND', 'ON', 'ALTITUDE'];
var guiNode = props.globals.getNode("/sim/gui/dialogs/radios/transponder-mode", 1);
var forLoopFlag = 0;
var Transponder = {
mode: 0,
code: "2000",
selected: 0,
electricalSrc: "",
activeADIRS: 0,
condition: 0,
failed: 0,
codeDigitsNodes: [props.globals.getNode("/instrumentation/transponder/inputs/digit[0]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[1]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[2]", 1), props.globals.getNode("/instrumentation/transponder/inputs/digit[3]", 1)],
serviceableNode: props.globals.getNode("/instrumentation/transponder/serviceable", 1),
knobNode: props.globals.getNode("instrumentation/transponder/inputs/knob-mode", 1),
identNode: props.globals.getNode("/instrumentation/transponder/inputs/ident-btn", 1),
wowNode: props.globals.getNode("/fdm/jsbsim/position/wow"),
ac1Node: props.globals.getNode("/systems/electrical/bus/ac1", 1),
tcasNode: props.globals.getNode("/instrumentation/tcas/inputs/mode"),
aglNode: props.globals.getNode("/position/gear-agl-ft", 1),
electricNode: props.globals.getNode("/systems/electrical/outputs/transponder", 1),
new: func(elecSrc, ADIRS) {
var t = {parents:[Transponder]};
t.mode = 1;
t.code = "2000";
t.selected = 0;
t.condition = 100;
t.failed = 0;
t.electricalSrc = props.globals.getNode(elecSrc, 1);
t.activeADIRS = ADIRS;
return t;
},
update: func() {
# TCAS - on seperate electrical source, so has to be before transponder electrical checking
if (me.ac1Node.getValue() < 110) {
me.tcasNode.setValue(0); # off
} else {
if (me.mode >= 1 and me.mode <= 3) {
me.tcasNode.setValue(1); # stby
} else if (me.mode == 4 or (me.mode == 5 and me.aglNode.getValue() < 1000)) {
me.tcasNode.setValue(2); # TA only
} else if (me.mode == 5) {
me.tcasNode.setValue(3); # TA/RA
}
}
if (me.electricalSrc.getValue() > 110 and me.failed == 0) {
me.condition = 100;
transponderPanel.atcFailLight(0);
me.electricNode.setValue(28);
transponderPanel.modeSwitch(transponderPanel.modeSel);
} else {
me.condition = 0;
transponderPanel.atcFailLight(1);
me.setMode(0); # off
if (me.electricalSrc.getValue() < 110) {
me.electricNode.setValue(0);
} else {
me.electricNode.setValue(28);
}
}
if (me.condition == 0 or me.selected != 1) {
return;
}
if (me.mode == 1) {
if (me.knobNode.getValue() != 1) {
me.setMode(1); # stby
}
} else if (me.mode == 2) {
if (me.knobNode.getValue() != 4) {
me.setMode(4); # on
}
} else if (me.mode >= 3) {
if (me.wowNode.getBoolValue()) {
if (me.knobNode.getValue() != 3) {
me.setMode(3); # gnd
}
} else {
if (me.knobNode.getValue() != 5) {
me.setMode(5); # alt
}
}
}
},
switchADIRS: func(newADIRS) {
if (newADIRS < 1 or newADIRS > 3) {
return;
}
me.activeADIRS = newADIRS;
},
modeSwitch: func(newMode) {
me.mode = newMode;
},
setCode: func(newCode) {
me.code = newCode;
forLoopFlag = 1;
for (index = 0; index < 4; index = index + 1) {
me.codeDigitsNodes[3 - index].setValue(substr(me.code, index, 1));
}
forLoopFlag = 0;
},
setMode: func(m) {
me.knobNode.setValue(m);
guiNode.setValue(guiModes[m]);
},
fail: func() {
me.failed = 1;
me.serviceableNode.setBoolValue(0);
transponderPanel.atcFailLight(1);
},
restore: func() {
me.failed = 0;
me.serviceableNode.setBoolValue(1);
transponderPanel.atcFailLight(0);
},
ident: func() {
me.identNode.setValue(0);
settimer(func() {
me.identNode.setValue(1);
}, 0.1);
},
};
var transponderPanel = {
atcSel: 1,
modeSel: 1,
identBtn: 0,
code: "2000",
codeDisp: "2000",
codeProp: props.globals.initNode("/systems/atc/transponder-code", "2000", "STRING"),
failLight: 0,
clearFlag: 0,
keypad: func(keyNum) {
if (props.globals.getNode("/controls/switches/annun-test", 1).getBoolValue() or props.globals.getNode("/systems/electrical/bus/dc-ess", 1).getValue() < 25) {
return;
}
if (keyNum < 0 or keyNum > 7) {
return;
}
if (size(me.codeDisp) < 3) {
me.codeDisp = me.codeDisp ~ keyNum;
me.codeProp.setValue(sprintf("%s", me.codeDisp));
} elsif (size(me.codeDisp) == 3) {
me.codeDisp = me.codeDisp ~ keyNum;
me.codeProp.setValue(sprintf("%s", me.codeDisp));
me.code = me.codeDisp;
Transponders.vector[me.atcSel - 1].setCode(me.code);
}
},
clearKey: func() {
if (props.globals.getNode("/controls/switches/annun-test", 1).getBoolValue() or props.globals.getNode("/systems/electrical/bus/dc-ess", 1).getValue() < 25) {
return;
}
if (me.codeDisp != "") {
if (me.clearFlag == 0) {
me.codeDisp = left(me.codeDisp, size(me.codeDisp) - 1);
me.codeProp.setValue(sprintf("%s", me.codeDisp));
me.clearFlag = 1;
} else {
me.codeDisp = "";
me.codeProp.setValue(sprintf("%s", me.codeDisp));
}
}
},
atcSwitch: func(newSel) {
if (newSel < 1 or newSel > 2) {
return;
}
me.atcSel = newSel;
# update code
if (me.newSel = 1) {
Transponders.vector[1].selected = 0;
} else {
Transponders.vector[0].selected = 0;
}
Transponders.vector[me.atcSel - 1].selected = 1;
me.code = Transponders.vector[me.atcSel - 1].code;
me.codeDisp = me.code;
me.codeProp.setValue(sprintf("%s", me.codeDisp));
Transponders.vector[me.atcSel - 1].setCode(me.code); # update transmitted code to other transponders code
me.clearFlag = 0;
# update newly selected transponder
Transponders.vector[me.atcSel - 1].modeSwitch(me.modeSel);
me.atcFailLight(Transponders.vector[me.atcSel - 1].failed);
},
modeSwitch: func(newMode) {
if (newMode < 0 or newMode > 5) {
return;
}
me.modeSel = newMode;
Transponders.vector[me.atcSel - 1].modeSwitch(me.modeSel);
},
atcFailLight: func(newFail) {
if (newFail < 0 or newFail > 1) {
return;
}
me.failLight = newFail;
props.globals.getNode("/systems/atc/failed").setBoolValue(me.failLight);
},
identSwitch: func() {
Transponders.vector[me.atcSel - 1].ident();
},
fastSetCode: func(newCode) {
if (size(newCode) != 4 or size(me.codeDisp) != 4) {
return;
}
me.clearFlag = 0;
me.code = newCode;
me.codeDisp = me.code;
me.codeProp.setValue(sprintf("%s", me.codeDisp));
Transponders.vector[me.atcSel - 1].setCode(me.code);
}
};
var init = func() {
transponderPanel.atcSwitch(1);
transponderTimer.start();
}
# Handler for code change from generic dialog
setlistener("/instrumentation/transponder/id-code", func {
if (transponderPanel.code != idCode.getValue() and forLoopFlag == 0) {
transponderPanel.fastSetCode(sprintf("%04d", idCode.getValue()));
}
}, 0, 0);
var Transponders = std.Vector.new([Transponder.new("/systems/electrical/bus/ac-ess-shed", 1), Transponder.new("/systems/electrical/bus/ac2", 2)]);
var transponderTimer = maketimer(0.1, func() {
Transponders.vector[transponderPanel.atcSel - 1].update();
});

View file

@ -638,20 +638,98 @@ var lockThr = func() {
state1 = getprop("/systems/thrust/state1");
state2 = getprop("/systems/thrust/state2");
if ((state1 == "CL" and state2 == "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 == "MCT" and state2 == "MCT" and getprop("/systems/thrust/eng-out") == 1)) {
setprop("/systems/thrust/thr-lock-time", getprop("/sim/time/elapsed-sec"));
setprop("/systems/thrust/thr-locked", 1);
lockTimer.start();
}
lockTimer.start();
}
var checkLockThr = func() {
if (getprop("/systems/thrust/thr-lock-time") + 5 > getprop("/sim/time/elapsed-sec")) { return; }
if (fmgc.Output.athr.getBoolValue()) {
lockTimer.stop();
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
return;
}
if (getprop("/systems/thrust/thr-locked") == 0) {
lockTimer.stop();
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
return;
}
state1 = getprop("/systems/thrust/state1");
state2 = getprop("/systems/thrust/state2");
if ((state1 != "CL" and state2 != "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 != "MCT" and state2 != "MCT" and getprop("/systems/thrust/eng-out") == 1)) {
setprop("/systems/thrust/thr-locked", 0);
lockTimer.stop();
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
} elsif ((state1 == "CL" and state2 == "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 == "MCT" and state2 == "MCT" and getprop("/systems/thrust/eng-out") == 1)) {
setprop("/systems/thrust/thr-locked-alert", 1);
setprop("/systems/thrust/thr-lock-time", getprop("/sim/time/elapsed-sec"));
setprop("/systems/thrust/thr-locked-flash", 1);
lockTimer.stop();
lockTimer2.start();
}
}
var checkLockThr2 = func() {
if (fmgc.Output.athr.getBoolValue()) {
lockTimer2.stop();
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
return;
}
if (getprop("/systems/thrust/thr-locked") == 0) {
lockTimer2.stop();
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
return;
}
if (getprop("/systems/thrust/thr-lock-time") + 5 < getprop("/sim/time/elapsed-sec")) {
setprop("/systems/thrust/thr-locked-flash", 0);
settimer(func() {
setprop("/systems/thrust/thr-locked-flash", 1);
setprop("/systems/thrust/thr-lock-time", getprop("/sim/time/elapsed-sec"));
ecam.athr_lock.noRepeat = 0;
ecam.athr_lock.noRepeat2 = 0;
}, 0.2);
}
state1 = getprop("/systems/thrust/state1");
state2 = getprop("/systems/thrust/state2");
if ((state1 != "CL" and state2 != "CL" and getprop("/systems/thrust/eng-out") == 0) or (state1 != "MCT" and state2 != "MCT" and getprop("/systems/thrust/eng-out") == 1)) {
lockTimer2.stop();
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
}
}
var lockTimer = maketimer(0.02, checkLockThr);
setlistener("/controls/APU/master", func() {
if (!getprop("/controls/APU/master") and systems.apuEmerShutdown.getBoolValue()) {
systems.apuEmerShutdown.setBoolValue(0);
}
}, 0, 0);
var lockTimer = maketimer(0.1, checkLockThr);
var lockTimer2 = maketimer(0.1, checkLockThr2);

View file

@ -731,7 +731,6 @@ var ELEC = {
setprop("/systems/electrical/outputs/stobe-lights", 0);
setprop("/systems/electrical/outputs/tacan", 0);
setprop("/systems/electrical/outputs/taxi-lights", 0);
setprop("/systems/electrical/outputs/transponder", 0);
setprop("/systems/electrical/outputs/turn-coordinator", 0);
setprop("/controls/lighting/fcu-panel-norm", 0);
setprop("/controls/lighting/main-panel-norm", 0);
@ -767,7 +766,6 @@ var ELEC = {
setprop("/systems/electrical/outputs/stobe-lights", dc_volt_std);
setprop("/systems/electrical/outputs/tacan", dc_volt_std);
setprop("/systems/electrical/outputs/taxi-lights", dc_volt_std);
setprop("/systems/electrical/outputs/transponder", dc_volt_std);
setprop("/systems/electrical/outputs/turn-coordinator", dc_volt_std);
setprop("/controls/lighting/fcu-panel-norm", getprop("/controls/lighting/fcu-panel-knb"));
setprop("/controls/lighting/main-panel-norm", getprop("/controls/lighting/main-panel-knb"));

View file

@ -52,6 +52,9 @@ setprop("/systems/thrust/lim-flex", 0);
setprop("/engines/flex-derate", 0);
setprop("/systems/thrust/eng-out", 0);
setprop("/systems/thrust/thr-locked", 0);
setprop("/systems/thrust/thr-locked-alert", 0);
setprop("/systems/thrust/thr-locked-flash", 0);
setprop("/systems/thrust/thr-lock-time", 0);
setprop("/systems/thrust/thr-lock-cmd[0]", 0);
setprop("/systems/thrust/thr-lock-cmd[1]", 0);

View file

@ -3,205 +3,818 @@
# Copyright (c) 2019 Joshua Davidson (Octal450)
#############
# Init Vars #
#############
var level = 0;
var fwdsquib = 0;
var aftsquib = 0;
var fwddet = 0;
var aftdet = 0;
var test = 0;
var guard1 = 0;
var guard2 = 0;
var dischpb1 = 0;
var dischpb2 = 0;
var smokedet1 = 0;
var smokedet2 = 0;
var bottleIsEmpty = 0;
var WeCanExt = 0;
var test2 = 0;
var state = 0;
var dc1 = 0;
var dc2 = 0;
var dcbat = 0;
var pause = 0;
var elapsedTime = props.globals.getNode("/sim/time/elapsed-sec");
var apuTestBtn = props.globals.getNode("/controls/fire/apu-test-btn", 1);
var testBtn = props.globals.getNode("/controls/fire/test-btn-1", 1);
var testBtn2 = props.globals.getNode("/controls/fire/test-btn-2", 1);
var dischTest = props.globals.initNode("/systems/fire/cargo/disch-test", 0, "BOOL");
var cargoTestBtn = props.globals.initNode("/controls/fire/cargo/test", 0, "BOOL");
var cargoTestTime = props.globals.initNode("/controls/fire/cargo/test-time", 0, "DOUBLE");
var cargoTestTime2 = props.globals.initNode("/controls/fire/cargo/test-time2", 0, "DOUBLE");
var cargoTestTime3 = props.globals.initNode("/controls/fire/cargo/test-time3", 0, "DOUBLE");
var cargoTestTime4 = props.globals.initNode("/controls/fire/cargo/test-time4", 0, "DOUBLE");
var cargoTestBtnOff = props.globals.initNode("/controls/fire/cargo/test-off", 0, "BOOL");
var eng1FireWarn = props.globals.initNode("/systems/fire/engine1/warning-active", 0, "BOOL");
var eng2FireWarn = props.globals.initNode("/systems/fire/engine2/warning-active", 0, "BOOL");
var apuFireWarn = props.globals.initNode("/systems/fire/apu/warning-active", 0, "BOOL");
var eng1Inop = props.globals.initNode("/systems/fire/engine1/det-inop", 0, "BOOL");
var eng2Inop = props.globals.initNode("/systems/fire/engine2/det-inop", 0, "BOOL");
var apuInop = props.globals.initNode("/systems/fire/apu/det-inop", 0, "BOOL");
var aftCargoFireWarn = props.globals.initNode("/systems/fire/cargo/aft/warning-active", 0, "BOOL");
var fwdCargoFireWarn = props.globals.initNode("/systems/fire/cargo/fwd/warning-active", 0, "BOOL");
var apuEmerShutdown = props.globals.getNode("/systems/apu/emer-shutdown", 1);
var eng1AgentTimer = props.globals.initNode("/systems/fire/engine1/agent1-timer", 99, "INT");
var eng2AgentTimer = props.globals.initNode("/systems/fire/engine2/agent1-timer", 99, "INT");
var eng1Agent2Timer = props.globals.initNode("/systems/fire/engine1/agent2-timer", 99, "INT");
var eng2Agent2Timer = props.globals.initNode("/systems/fire/engine2/agent2-timer", 99, "INT");
var apuAgentTimer = props.globals.initNode("/systems/fire/apu/agent-timer", 99, "INT");
var eng1AgentTimerTime = props.globals.initNode("/systems/fire/engine1/agent1-timer-time", 0, "INT");
var eng2AgentTimerTime = props.globals.initNode("/systems/fire/engine2/agent1-timer-time", 0, "INT");
var eng1Agent2TimerTime = props.globals.initNode("/systems/fire/engine1/agent2-timer-time", 0, "INT");
var eng2Agent2TimerTime = props.globals.initNode("/systems/fire/engine2/agent2-timer-time", 0, "INT");
var apuAgentTimerTime = props.globals.initNode("/systems/fire/apu/agent-timer-time", 0, "INT");
var wow = props.globals.getNode("/fdm/jsbsim/position/wow", 1);
var dcbatNode = props.globals.getNode("systems/electrical/bus/dcbat", 1);
var dcessNode = props.globals.getNode("systems/electrical/bus/dc-ess", 1);
var apuBleedNode = props.globals.getNode("/systems/apu/bleed-used", 1);
var apuMaster = props.globals.getNode("/controls/APU/master", 1);
var fire_init = func {
setprop("/controls/OH/protectors/fwddisch", 0);
setprop("/controls/OH/protectors/aftdisch", 0);
setprop("/controls/fire/cargo/fwddisch", 0);
setprop("/controls/fire/cargo/aftdisch", 0);
setprop("/systems/failures/cargo-fwd-fire", 0);
setprop("/systems/failures/cargo-aft-fire", 0);
setprop("/systems/fire/cargo/fwdsquib", 0);
setprop("/systems/fire/cargo/aftsquib", 0);
setprop("/systems/fire/cargo/bottlelevel", 100);
setprop("/systems/fire/cargo/test", 0);
setprop("/controls/fire/cargo/test", 0);
setprop("/controls/fire/cargo/fwddisch", 0); # pushbutton
setprop("/controls/fire/cargo/aftdisch", 0);
setprop("/controls/fire/cargo/fwddischLight", 0);
setprop("/controls/fire/cargo/aftdischLight", 0);
setprop("/controls/fire/cargo/fwdsmokeLight", 0);
setprop("/controls/fire/cargo/aftsmokeLight", 0);
setprop("/controls/fire/cargo/bottleempty", 0);
# status: 1 is ready, 0 is already disch
setprop("/controls/fire/cargo/status", 1);
setprop("/controls/fire/cargo/warnfwd", 0);
setprop("/controls/fire/cargo/warnaft", 0);
setprop("/controls/fire/cargo/squib1fault", 0);
setprop("/controls/fire/cargo/squib2fault", 0);
setprop("/controls/fire/cargo/detfault", 0);
setprop("/controls/fire/cargo/test/state", 0);
fire_timer.start();
}
##############
# Main Loops #
##############
var master_fire = func {
level = getprop("/systems/fire/cargo/bottlelevel");
fwdsquib = getprop("/systems/fire/cargo/fwdsquib");
aftsquib = getprop("/systems/fire/cargo/aftsquib");
fwddet = getprop("/systems/failures/cargo-fwd-fire");
aftdet = getprop("/systems/failures/cargo-aft-fire");
test = getprop("/controls/fire/cargo/test");
guard1 = getprop("/controls/fire/cargo/fwdguard");
guard2 = getprop("/controls/fire/cargo/aftguard");
dischpb1 = getprop("/controls/fire/cargo/fwddisch");
dischpb2 = getprop("/controls/fire/cargo/aftdisch");
smokedet1 = getprop("/controls/fire/cargo/fwdsmokeLight");
smokedet2 = getprop("/controls/fire/cargo/aftsmokeLight");
bottleIsEmpty = getprop("/controls/fire/cargo/bottleempty");
WeCanExt = getprop("/controls/fire/cargo/status");
test2 = getprop("/systems/fire/cargo/test");
state = getprop("/controls/fire/cargo/test/state");
dc1 = getprop("/systems/electrical/bus/dc1");
dc2 = getprop("/systems/electrical/bus/dc2");
dcbat = getprop("/systems/electrical/bus/dcbat");
pause = getprop("/sim/freeze/master");
###################
# Fire System #
###################
var engFireDetectorUnit = {
sys: 0,
active: 0,
loopOne: 0,
loopTwo: 0,
condition: 100,
fireProp: "",
wow: "",
new: func(sys, fireProp, testProp) {
var eF = {parents:[engFireDetectorUnit]};
eF.sys = sys;
eF.active = 0;
eF.loopOne = 0;
eF.loopTwo = 0;
eF.fireProp = props.globals.getNode(fireProp, 1);
eF.testProp = props.globals.getNode(testProp, 1);
eF.wow = props.globals.getNode("/fdm/jsbsim/position/wow", 1);
eF.condition = 100;
return eF;
},
update: func() {
if (me.condition == 0) { return; }
foreach(var detector; engDetectorLoops.vector) {
detector.updateTemp(detector.sys, detector.type);
}
if (me.fireProp.getValue() == 0 and me.testProp.getValue() == 0 and (me.loopOne != 9 and me.loopOne != 8) and (me.loopTwo != 9 and me.loopTwo != 8)) {
me.loopOne = 0;
me.loopTwo = 0;
me.reset(me.sys);
return;
}
if ((me.loopOne == 1 and me.loopTwo == 1) or ((me.loopOne == 9 or me.loopOne == 8) and me.loopTwo == 1) or (me.loopOne == 1 and (me.loopTwo == 9 or me.loopTwo == 8))) {
me.TriggerWarning(me.sys);
}
},
receiveSignal: func(type) {
if (type == 1 and me.loopOne != 9 and me.loopOne != 8 and me.condition != 0) {
me.loopOne = 1;
} elsif (type == 2 and me.loopTwo != 9 and me.loopTwo != 8 and me.condition != 0) {
me.loopTwo = 1;
}
},
failUnit: func() {
me.condition = 0;
},
recoverUnit: func() {
me.condition = 100;
},
fail: func(loop) {
if (loop != 1 and loop != 2) { return; }
if (loop == 1) { me.loopOne = 9; }
else { me.loopTwo = 9; }
me.startFailTimer(loop);
},
restore: func(loop) {
if (loop != 1 and loop != 2) { return; }
if (loop == 1) { me.loopOne = 0; }
else { me.loopTwo = 0; }
if (me.sys == 0) {
eng1Inop.setBoolValue(0);
checkTwoInop1Timer.stop();
} elsif (me.sys == 1) {
eng2Inop.setBoolValue(0);
checkTwoInop2Timer.stop();
} elsif (me.sys == 2) {
apuInop.setBoolValue(0);
checkTwoInop3Timer.stop();
}
},
noElec: func(loop) {
if (loop != 1 and loop != 2) { return; }
###############
# Discharging #
###############
if (dischpb1) {
if (WeCanExt == 1 and !fwdsquib and !bottleIsEmpty and (dc1 > 0 or dc2 > 0 or dcbat > 0)) {
setprop("/systems/fire/cargo/fwdsquib", 1);
if (loop == 1) { me.loopOne = 8; }
else { me.loopTwo = 8; }
},
restoreElec: func(loop) {
if (loop != 1 and loop != 2) { return; }
if (loop == 1 and me.loopOne != 9) { me.loopOne = 0; }
elsif (loop == 2 and me.loopTwo != 9) { me.loopTwo = 0; }
},
startFailTimer: func(loop) {
if (loop == 1 and me.loopTwo == 9) { return; }
if (loop == 2 and me.loopOne == 9) { return; }
if (me.sys != 2) {
if (loop == 1) {
propsNasFireTime.vector[me.sys].setValue(elapsedTime.getValue());
} elsif (loop == 2) {
propsNasFireTime.vector[me.sys + 1].setValue(elapsedTime.getValue());
}
if (me.sys == 0) {
if (!fireTimer1.isRunning) {
fireTimer1.start();
}
} elsif (me.sys == 1) {
if (!fireTimer2.isRunning) {
fireTimer2.start();
}
}
} else {
if (loop == 1) {
propsNasFireTime.vector[4].setValue(elapsedTime.getValue());
} elsif (loop == 2) {
propsNasFireTime.vector[5].setValue(elapsedTime.getValue());
}
if (!fireTimer3.isRunning) {
fireTimer3.start();
}
}
},
TriggerWarning: func(system) {
if (system == 0) {
eng1FireWarn.setBoolValue(1);
} elsif (system == 1) {
eng2FireWarn.setBoolValue(1);
} elsif (system == 2) {
apuFireWarn.setBoolValue(1);
if (me.wow.getValue() == 1) {
if (apuMaster.getBoolValue()) {
apuBleedNode.setValue(0);
systems.apu_stop();
apuEmerShutdown.setBoolValue(1);
settimer(func() { # 3 sec delay - source TTM ATA 26 FIRE PROTECTION p102
extinguisherBottles.vector[4].discharge();
}, 3);
} else {
settimer(func() {
extinguisherBottles.vector[4].discharge();
}, 3);
}
}
}
},
reset: func(system) {
if (system == 0) {
eng1FireWarn.setBoolValue(0);
} elsif (system == 1) {
eng2FireWarn.setBoolValue(0);
} elsif (system == 2) {
apuFireWarn.setBoolValue(0);
}
}
if (dischpb1 and fwdsquib and !bottleIsEmpty and !pause) {
setprop("/systems/fire/cargo/bottlelevel", getprop("/systems/fire/cargo/bottlelevel") - 0.33);
}
if (dischpb2) {
if (WeCanExt == 1 and !aftsquib and !bottleIsEmpty and (dc1 > 0 or dc2 > 0 or dcbat > 0)) {
setprop("/systems/fire/cargo/aftsquib", 1);
};
var CIDSchannel = {
elecProp: "",
condition: 100,
new: func(elecProp) {
var cC = {parents:[CIDSchannel]};
cC.elecProp = props.globals.getNode(elecProp, 1);
return cC;
},
update: func() {
if (me.condition == 0 or me.elecProp.getValue() < 25) { return; }
if ((cargoSmokeDetectorUnits.vector[0].loopOne == 1 and cargoSmokeDetectorUnits.vector[0].loopTwo == 1) or (cargoSmokeDetectorUnits.vector[0].loopOne == 1 and cargoSmokeDetectorUnits.vector[0].loopTwo == 9) or (cargoSmokeDetectorUnits.vector[0].loopOne == 9 and cargoSmokeDetectorUnits.vector[0].loopTwo == 1) or (cargoSmokeDetectorUnits.vector[1].loopOne == 1 and cargoSmokeDetectorUnits.vector[1].loopTwo == 1) or (cargoSmokeDetectorUnits.vector[1].loopOne == 1 and cargoSmokeDetectorUnits.vector[1].loopTwo == 9) or (cargoSmokeDetectorUnits.vector[1].loopOne == 9 and cargoSmokeDetectorUnits.vector[1].loopTwo == 1)) {
aftCargoFireWarn.setBoolValue(1);
}
}
if ((cargoSmokeDetectorUnits.vector[2].loopOne == 1 and cargoSmokeDetectorUnits.vector[2].loopTwo == 1) or (cargoSmokeDetectorUnits.vector[2].loopOne == 1 and cargoSmokeDetectorUnits.vector[2].loopTwo == 9) or (cargoSmokeDetectorUnits.vector[2].loopOne == 9 and cargoSmokeDetectorUnits.vector[2].loopTwo == 1)) {
fwdCargoFireWarn.setBoolValue(1);
}
}
};
var cargoSmokeDetectorUnit = {
sys: 0,
active: 0,
loopOne: 0,
loopTwo: 0,
condition: 100,
new: func(sys) {
var cF = {parents:[cargoSmokeDetectorUnit]};
cF.sys = sys;
cF.active = 0;
cF.loopOne = 0;
cF.loopTwo = 0;
cF.condition = 100;
return cF;
},
receiveSignal: func(type) {
if (type == 1 and me.loopOne != 9 and me.condition != 0) {
me.loopOne = 1;
} elsif (type == 2 and me.loopTwo != 9 and me.condition != 0) {
me.loopTwo = 1;
}
},
failUnit: func() {
me.condition = 0;
},
recoverUnit: func() {
me.condition = 100;
},
failLoop: func(loop) {
if (loop != 1 and loop != 2) { return; }
if (loop == 1) { me.loopOne = 9; }
else { me.loopTwo = 9; }
},
};
var detectorLoop = {
sys: 9,
type: 0,
temperature: "",
elecProp: "",
fireProp: "",
new: func(sys, type, temperature, elecProp, fireProp) {
var dL = {parents:[detectorLoop]};
dL.sys = sys;
dL.type = type;
dL.temperature = props.globals.getNode(temperature, 1);
dL.elecProp = props.globals.getNode(elecProp, 1);
dL.fireProp = props.globals.getNode(fireProp, 1);
return dL;
},
updateTemp: func(system, typeLoop) {
if ((me.temperature.getValue() > 250 and me.fireProp.getBoolValue()) and me.elecProp.getValue() >= 25) {
if (rand() >= 0.98) { # flame damage may possibly fail the loop
engFireDetectorUnits.vector[system].fail(1);
engFireDetectorUnits.vector[system].fail(2);
}
me.sendSignal(system, typeLoop);
} elsif (me.elecProp.getValue() >= 25) {
engFireDetectorUnits.vector[system].restoreElec(typeLoop);
} else {
engFireDetectorUnits.vector[system].noElec(typeLoop);
}
},
sendSignal: func(system, typeLoop) {
if (system == 0 and !getprop("/systems/failures/engine-left-fire")) { return; }
elsif (system == 1 and !getprop("/systems/failures/engine-right-fire")) { return; }
elsif (system == 2 and !getprop("/systems/failures/apu-fire")) { return; }
engFireDetectorUnits.vector[system].receiveSignal(typeLoop);
}
};
var cargoDetectorLoop = {
sys: 9,
type: 0,
temperature: "",
fireProp: "",
new: func(sys, type, temperature, fireProp) {
var cdL = {parents:[cargoDetectorLoop]};
cdL.sys = sys;
cdL.type = type;
cdL.temperature = props.globals.getNode(temperature, 1);
cdL.fireProp = props.globals.getNode(fireProp, 1);
return cdL;
},
updateTemp: func(system, typeLoop) {
if (me.temperature.getValue() > 250 and me.fireProp.getBoolValue()) {
me.sendSignal(system, typeLoop);
}
},
sendSignal: func(system, typeLoop) {
if ((system == 0 or system == 1) and !getprop("/systems/failures/cargo-aft-fire")) { return; }
elsif (system == 2 and !getprop("/systems/failures/cargo-fwd-fire")) { return; }
cargoSmokeDetectorUnits.vector[system].receiveSignal(typeLoop);
}
};
var extinguisherBottle = {
quantity: 100,
squib: 0,
number: 0,
lightProp: "",
elecProp: "",
failProp: "",
warningProp: "",
hack: 0,
new: func(number, lightProp, elecProp, failProp, warningProp, quantity = 100, hack = 0) {
var eB = {parents:[extinguisherBottle]};
eB.quantity = quantity;
eB.squib = 0;
eB.number = number;
eB.lightProp = props.globals.getNode(lightProp, 1);
eB.elecProp = props.globals.getNode(elecProp, 1);
eB.failProp = props.globals.getNode(failProp, 1);
eB.warningProp = props.globals.getNode(warningProp, 1);
eB.hack = hack;
return eB;
},
emptyBottle: func() {
# reduce quantity
me.quantity -= 10;
# quick hack for cargo bottles
if (me.number == 7) {
cargoExtinguisherBottles.vector[0].quantity -= 10;
} elsif (me.number == 8) {
cargoExtinguisherBottles.vector[1].quantity -= 10;
}
if (me.quantity > 0) {
settimer(func() {
me.emptyBottle()
}, 0.05);
} elsif (me.hack == 0) {
me.lightProp.setValue(1);
# make things interesting. If your fire won't go out you should play the lottery
if (me.number == 0) {
if (rand() < 0.90) {
settimer(func() {
me.failProp.setValue(0);
me.warningProp.setValue(0);
}, rand() * 3);
}
} elsif (me.number == 1) {
if (rand() < 0.999) {
settimer(func() {
me.failProp.setValue(0);
me.warningProp.setValue(0);
}, rand() * 3);
}
} elsif (me.number == 7) {
if (rand() <= 0.95) {
settimer(func() {
me.failProp.setValue(0);
if (rand() <= 0.20) {
me.warningProp.setValue(0); # extinguishing agent detected as smoke, so warning likely to stay on
}
}, rand() * 3);
cargoExtinguisherBottles.vector[0].hack == 1;
}
} elsif (me.number == 8) {
if (rand() <= 0.95) {
settimer(func() {
me.failProp.setValue(0);
if (rand() <= 0.20) {
me.warningProp.setValue(0);
}
}, rand() * 3);
cargoExtinguisherBottles.vector[1].hack == 1;
}
} elsif (me.number == 9) {
if (rand() <= 0.999) {
settimer(func() {
me.failProp.setValue(0);
me.warningProp.setValue(0);
}, rand() * 3);
}
}
}
},
discharge: func() {
if (me.elecProp.getValue() < 25) { return; }
me.squib = 1;
me.emptyBottle();
}
};
# If two loops fail within five seconds then assume there is a fire
var propsNasFireTime = std.Vector.new([
props.globals.initNode("/systems/fire/engine1/loop1-failtime", 0, "DOUBLE"), props.globals.initNode("/systems/fire/engine1/loop2-failtime", 0, "DOUBLE"),
props.globals.initNode("/systems/fire/engine2/loop1-failtime", 0, "DOUBLE"), props.globals.initNode("/systems/fire/engine2/loop2-failtime", 0, "DOUBLE"),
props.globals.initNode("/systems/fire/apu/loop1-failtime", 0, "DOUBLE"), props.globals.initNode("/systems/fire/apu/loop2-failtime", 0, "DOUBLE")
]);
var checkTimeFire1 = func() {
et = elapsedTime.getValue();
var loop1 = propsNasFireTime.vector[0].getValue();
var loop2 = propsNasFireTime.vector[1].getValue();
if (dischpb2 and aftsquib and !bottleIsEmpty and !pause) {
setprop("/systems/fire/cargo/bottlelevel", getprop("/systems/fire/cargo/bottlelevel") - 0.33);
if ((loop1 != 0 and et > loop1 + 5) or (loop2 != 0 and et > loop2 + 5)) {
fireTimer1.stop();
checkTwoInop1Timer.start();
}
#################
# Test Sequence #
#################
if (test) {
setprop("/systems/fire/cargo/test", 1);
} else {
setprop("/systems/fire/cargo/test", 0);
if (engFireDetectorUnits.vector[0].loopOne == 9 and engFireDetectorUnits.vector[0].loopTwo == 9) {
fireTimer1.stop();
engFireDetectorUnits.vector[0].TriggerWarning(engFireDetectorUnits.vector[0].sys);
}
if (test2 and state == 0) {
setprop("/controls/fire/cargo/fwddischLight", 1);
setprop("/controls/fire/cargo/aftdischLight", 1);
settimer(func(){
setprop("/controls/fire/cargo/fwddischLight", 0);
setprop("/controls/fire/cargo/aftdischLight", 0);
setprop("/controls/fire/cargo/test/state", 1);
}, 5);
} else if (test2 and state == 1) {
setprop("/controls/fire/cargo/fwdsmokeLight", 1);
setprop("/controls/fire/cargo/warnfwd", 1);
setprop("/controls/fire/cargo/aftsmokeLight", 1);
setprop("/controls/fire/cargo/warnaft", 1);
settimer(func(){
setprop("/controls/fire/cargo/fwdsmokeLight", 0);
setprop("/controls/fire/cargo/aftsmokeLight", 0);
setprop("/controls/fire/cargo/warnfwd", 0);
setprop("/controls/fire/cargo/warnaft", 0);
setprop("/controls/fire/cargo/test/state", 2);
}, 5);
} else if (test2 and state == 2) {
settimer(func(){
setprop("/controls/fire/cargo/test/state", 3);
}, 5);
} else if (test2 and state == 3) {
setprop("/controls/fire/cargo/fwdsmokeLight", 1);
setprop("/controls/fire/cargo/warnfwd", 1);
setprop("/controls/fire/cargo/aftsmokeLight", 1);
setprop("/controls/fire/cargo/warnaft", 1);
settimer(func(){
setprop("/controls/fire/cargo/fwdsmokeLight", 0);
setprop("/controls/fire/cargo/aftsmokeLight", 0);
setprop("/controls/fire/cargo/warnfwd", 0);
setprop("/controls/fire/cargo/warnaft", 0);
setprop("/systems/fire/cargo/test", 0);
setprop("/controls/fire/cargo/test", 0);
setprop("/controls/fire/cargo/test/state", 0);
}, 5);
}
##########
# Status #
##########
if (level < 0.1 and !test) {
setprop("/controls/fire/cargo/bottleempty", 1);
setprop("/controls/fire/cargo/status", 0);
setprop("/controls/fire/cargo/fwddischLight", 1);
setprop("/controls/fire/cargo/aftdischLight", 1);
} else if (!test) {
setprop("/controls/fire/cargo/bottleempty", 0);
setprop("/controls/fire/cargo/status", 1);
setprop("/controls/fire/cargo/fwddischLight", 0);
setprop("/controls/fire/cargo/aftdischLight", 0);
}
}
###################
# Detection Logic #
###################
setlistener("/systems/failures/cargo-fwd-fire", func() {
if (getprop("/systems/failures/cargo-fwd-fire")) {
setprop("/controls/fire/cargo/fwdsmokeLight", 1);
setprop("/controls/fire/cargo/warnfwd", 1);
} else {
setprop("/controls/fire/cargo/fwdsmokeLight", 0);
var checkTwoInop1 = func() {
if (engFireDetectorUnits.vector[0].loopOne == 9 and engFireDetectorUnits.vector[0].loopTwo == 9) {
eng1Inop.setBoolValue(1);
checkTwoInop1Timer.stop();
}
}, 0, );
}
setlistener("/systems/failures/cargo-aft-fire", func() {
if (getprop("/systems/failures/cargo-aft-fire")) {
setprop("/controls/fire/cargo/aftsmokeLight", 1);
setprop("/controls/fire/cargo/warnaft", 1);
} else {
setprop("/controls/fire/cargo/aftsmokeLight", 0);
var checkTimeFire2 = func() {
et = elapsedTime.getValue();
var loop3 = propsNasFireTime.vector[2].getValue();
var loop4 = propsNasFireTime.vector[3].getValue();
if ((loop3 != 0 and et > loop3 + 5) or (loop4 != 0 and et > loop4 + 5)) {
fireTimer2.stop();
checkTwoInop2Timer.start();
}
}, 0, );
if (engFireDetectorUnits.vector[1].loopOne == 9 and engFireDetectorUnits.vector[1].loopTwo == 9) {
fireTimer2.stop();
engFireDetectorUnits.vector[1].TriggerWarning(engFireDetectorUnits.vector[1].sys);
}
}
var checkTwoInop2 = func() {
if (engFireDetectorUnits.vector[1].loopOne == 9 and engFireDetectorUnits.vector[1].loopTwo == 9) {
eng2Inop.setBoolValue(1);
checkTwoInop2Timer.stop();
}
}
var checkTimeFire3 = func() {
et = elapsedTime.getValue();
var loop5 = propsNasFireTime.vector[4].getValue();
var loop6 = propsNasFireTime.vector[5].getValue();
if ((loop5 != 0 and et > loop6 + 5) or (loop6 != 0 and et > loop6 + 5)) {
fireTimer3.stop();
checkTwoInop3Timer.start();
}
if (engFireDetectorUnits.vector[2].loopOne == 9 and engFireDetectorUnits.vector[2].loopTwo == 9) {
fireTimer3.stop();
engFireDetectorUnits.vector[2].TriggerWarning(engFireDetectorUnits.vector[2].sys);
}
}
var checkTwoInop3 = func() {
if (engFireDetectorUnits.vector[2].loopOne == 9 and engFireDetectorUnits.vector[2].loopTwo == 9) {
apuInop.setBoolValue(1);
checkTwoInop3Timer.stop();
}
}
var fireTimer1 = maketimer(0.1, checkTimeFire1);
fireTimer1.simulatedTime = 1;
var fireTimer2 = maketimer(0.1, checkTimeFire2);
fireTimer2.simulatedTime = 1;
var fireTimer3 = maketimer(0.1, checkTimeFire3);
fireTimer3.simulatedTime = 1;
var checkTwoInop1Timer = maketimer(0.1, checkTwoInop1);
var checkTwoInop2Timer = maketimer(0.1, checkTwoInop2);
var checkTwoInop3Timer = maketimer(0.1, checkTwoInop3);
# Create fire systems
var engFireDetectorUnits = std.Vector.new([ engFireDetectorUnit.new(0, "/systems/failures/engine-left-fire", "/controls/fire/test-btn-1"), engFireDetectorUnit.new(1, "/systems/failures/engine-right-fire", "/controls/fire/test-btn-2"), engFireDetectorUnit.new(2, "/systems/failures/apu-fire", "/controls/fire/apu-test-btn") ]);
var cargoSmokeDetectorUnits = std.Vector.new([cargoSmokeDetectorUnit.new(0, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-aft-fire"), cargoSmokeDetectorUnit.new(1, "/systems/failures/cargo-fwd-fire")]);
# Create detector loops
var engDetectorLoops = std.Vector.new([
detectorLoop.new(0, 1, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-left-fire"), detectorLoop.new(0, 2, "/systems/fire/engine1/temperature", "/systems/electrical/bus/dc2", "/systems/failures/engine-left-fire"),
detectorLoop.new(1, 1, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc2", "/systems/failures/engine-right-fire"), detectorLoop.new(1, 2, "/systems/fire/engine2/temperature", "/systems/electrical/bus/dc-ess", "/systems/failures/engine-right-fire"),
detectorLoop.new(2, 1, "/systems/fire/apu/temperature", "/systems/electrical/bus/dcbat", "/systems/failures/apu-fire"), detectorLoop.new(2, 2, "/systems/fire/apu/temperature", "/systems/electrical/bus/dcbat", "/systems/failures/apu-fire")
]);
var cargoDetectorLoops = std.Vector.new([
cargoDetectorLoop.new(0, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(0, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
cargoDetectorLoop.new(1, 1, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"), cargoDetectorLoop.new(1, 2, "/systems/fire/cargo/aft/temperature", "/systems/failures/cargo-aft-fire"),
cargoDetectorLoop.new(2, 1, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire"), cargoDetectorLoop.new(2, 2, "/systems/fire/cargo/fwd/temperature", "/systems/failures/cargo-fwd-fire")
]);
# Create extinguisher bottles
var extinguisherBottles = std.Vector.new([extinguisherBottle.new(0, "/systems/fire/engine1/disch1", "/systems/electrical/bus/dcbat", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine1/disch2", "/systems/electrical/bus/dc2", "/systems/failures/engine-left-fire", "/systems/fire/engine1/warning-active"),
extinguisherBottle.new(0, "/systems/fire/engine2/disch1", "/systems/electrical/bus/dcbat", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"), extinguisherBottle.new(1, "/systems/fire/engine2/disch2", "/systems/electrical/bus/dc2", "/systems/failures/engine-right-fire", "/systems/fire/engine2/warning-active"),
extinguisherBottle.new(9, "/systems/fire/apu/disch", "/systems/electrical/bus/dcbat", "/systems/failures/apu-fire", "/systems/fire/apu/warning-active") ]);
# There is only one bottle but the system will think there are two, so other parts work
var cargoExtinguisherBottles = std.Vector.new([extinguisherBottle.new(8, "/systems/fire/cargo/disch", "/systems/electrical/bus/dcbat", "/systems/failures/cargo-aft-fire", "/systems/fire/cargo/aft/warning-active", 250), extinguisherBottle.new(7, "/systems/fire/cargo/disch", "/systems/electrical/bus/dcbat", "/systems/failures/cargo-fwd-fire", "/systems/fire/cargo/fwd/warning-active", 250)]);
# Create CIDS channels
var CIDSchannels = std.Vector.new([CIDSchannel.new("/systems/electrical/bus/dc-ess"), CIDSchannel.new("/systems/electrical/bus/dc2")]);
# Setlistener helper
var createFireBottleListener = func(prop, fireBtnProp, index) {
if (index >= extinguisherBottles.size()) {
print("Error - calling listener on non-existent fire extinguisher bottle, index: " ~ index);
return;
}
setlistener(prop, func() {
if (getprop(prop) == 1 and getprop(fireBtnProp) == 1) {
extinguisherBottles.vector[index].discharge();
}
}, 0, 0);
}
var createCargoFireBottleListener = func(prop, index) {
if (index >= extinguisherBottles.size()) {
print("Error - calling listener on non-existent fire extinguisher bottle, index: " ~ index);
return;
}
setlistener(prop, func() {
if (getprop(prop) == 1) {
cargoExtinguisherBottles.vector[index].discharge();
}
}, 0, 0);
}
# Listeners
setlistener("/controls/engines/engine[0]/fire-btn", func() {
if (getprop("/controls/engines/engine[0]/fire-btn") == 1) {
ecam.shutUpYou();
eng1AgentTimerMakeTimer.stop();
eng1AgentTimer.setValue(10);
eng1AgentTimerTime.setValue(elapsedTime.getValue() + 11);
eng1AgentTimerMakeTimer.start();
}
}, 0, 0);
setlistener("/systems/fire/engine1/disch1", func() {
if (getprop("/systems/fire/engine1/disch1") == 1) {
eng1Agent2TimerMakeTimer.stop();
eng1Agent2Timer.setValue(30);
eng1Agent2TimerTime.setValue(elapsedTime.getValue() + 31);
eng1Agent2TimerMakeTimer.start();
}
}, 0, 0);
eng1AgentTimerMakeTimerFunc = func() {
if (eng1AgentTimer.getValue() > 0) {
var eng1Time = eng1AgentTimerTime.getValue();
var etEng1 = elapsedTime.getValue();
var timeToSetEng1 = eng1Time - etEng1;
eng1AgentTimer.setValue(timeToSetEng1);
} else {
eng1AgentTimerMakeTimer.stop();
}
}
eng1Agent2TimerMakeTimerFunc = func() {
if (eng1Agent2Timer.getValue() > 0) {
var eng1Time2 = eng1Agent2TimerTime.getValue();
var etEng12 = elapsedTime.getValue();
var timeToSetEng12 = eng1Time2 - etEng12;
eng1Agent2Timer.setValue(timeToSetEng12);
} else {
eng1Agent2TimerMakeTimer.stop();
}
}
setlistener("/controls/engines/engine[1]/fire-btn", func() {
if (getprop("/controls/engines/engine[1]/fire-btn") == 1) {
ecam.shutUpYou();
eng2AgentTimerMakeTimer.stop();
eng2AgentTimer.setValue(10);
eng2AgentTimerTime.setValue(elapsedTime.getValue() + 11);
eng2AgentTimerMakeTimer.start();
}
}, 0, 0);
setlistener("/systems/fire/engine2/disch1", func() {
if (getprop("/systems/fire/engine2/disch1") == 1) {
eng2Agent2TimerMakeTimer.stop();
eng2Agent2Timer.setValue(30);
eng2Agent2TimerTime.setValue(elapsedTime.getValue() + 31);
eng2Agent2TimerMakeTimer.start();
}
}, 0, 0);
eng2AgentTimerMakeTimerFunc = func() {
if (eng2AgentTimer.getValue() > 0) {
var eng2Time = eng2AgentTimerTime.getValue();
var etEng2 = elapsedTime.getValue();
var timeToSetEng2 = eng2Time - etEng2;
eng2AgentTimer.setValue(timeToSetEng2);
} else {
eng2AgentTimerMakeTimer.stop();
}
}
eng2Agent2TimerMakeTimerFunc = func() {
if (eng2Agent2Timer.getValue() > 0) {
var eng2Time2 = eng2Agent2TimerTime.getValue();
var etEng22 = elapsedTime.getValue();
var timeToSetEng22 = eng2Time2 - etEng22;
eng2Agent2Timer.setValue(timeToSetEng22);
} else {
eng2Agent2TimerMakeTimer.stop();
}
}
setlistener("/controls/APU/fire-btn", func() {
if (getprop("/controls/APU/fire-btn") == 1) {
ecam.shutUpYou();
apuAgentTimerMakeTimer.stop();
apuAgentTimer.setValue(10);
apuAgentTimerTime.setValue(elapsedTime.getValue() + 11);
apuAgentTimerMakeTimer.start();
}
}, 0, 0);
apuAgentTimerMakeTimerFunc = func() {
if (apuAgentTimer.getValue() > 0) {
var apuTime = apuAgentTimerTime.getValue();
var etApu = elapsedTime.getValue();
var timeToSetApu = apuTime - etApu;
apuAgentTimer.setValue(timeToSetApu);
} else {
apuAgentTimerMakeTimer.stop();
}
}
setlistener("/controls/fire/test-btn-1", func() {
if (getprop("/systems/failures/engine-left-fire")) { return; }
if (testBtn.getValue() == 1) {
if (dcbatNode.getValue() > 25 or dcessNode.getValue() > 25) {
eng1FireWarn.setBoolValue(1);
}
} else {
eng1FireWarn.setBoolValue(0);
ecam.shutUpYou();
}
}, 0, 0);
setlistener("/controls/fire/test-btn-2", func() {
if (getprop("/systems/failures/engine-right-fire")) { return; }
if (testBtn2.getValue() == 1) {
if (dcbatNode.getValue() > 25 or dcessNode.getValue() > 25) {
eng2FireWarn.setBoolValue(1);
}
} else {
eng2FireWarn.setBoolValue(0);
ecam.shutUpYou();
}
}, 0, 0);
setlistener("/controls/fire/apu-test-btn", func() {
if (getprop("/systems/failures/apu-fire")) { return; }
if (apuTestBtn.getValue() == 1) {
if (dcbatNode.getValue() > 25 or dcessNode.getValue() > 25) {
apuFireWarn.setBoolValue(1);
}
} else {
apuFireWarn.setBoolValue(0);
ecam.shutUpYou();
}
}, 0, 0);
setlistener("/controls/fire/cargo/test", func() {
if (getprop("/systems/failures/aft-cargo-fire") or getprop("/systems/failures/fwd-cargo-fire") or dcbatNode.getValue() < 25 or dcessNode.getValue() < 25) { return; }
if (cargoTestBtn.getBoolValue()) {
cargoTestTime.setValue(elapsedTime.getValue());
cargoTestChecker.start();
} else {
aftCargoFireWarn.setBoolValue(0);
fwdCargoFireWarn.setBoolValue(0);
dischTest.setBoolValue(0);
ecam.shutUpYou();
cargoTestBtnOff.setBoolValue(1);
}
}, 0, 0);
var doCargoTest = func() {
if (dcbatNode.getValue() >= 25 or dcessNode.getValue() >= 25) {
aftCargoFireWarn.setBoolValue(1);
fwdCargoFireWarn.setBoolValue(1);
cargoTestTime2.setValue(elapsedTime.getValue());
cargoTestChecker2.start();
}
}
var doCargoTest2 = func() {
aftCargoFireWarn.setBoolValue(0);
fwdCargoFireWarn.setBoolValue(0);
ecam.shutUpYou();
cargoTestTime3.setValue(elapsedTime.getValue());
dischTest.setBoolValue(1);
cargoTestChecker3.start();
}
var doCargoTest3 = func() {
dischTest.setBoolValue(0);
if (dcbatNode.getValue() >= 25 or dcessNode.getValue() >= 25) {
aftCargoFireWarn.setBoolValue(1);
fwdCargoFireWarn.setBoolValue(1);
cargoTestTime4.setValue(elapsedTime.getValue());
cargoTestChecker4.start();
}
}
var doCargoTest4 = func() {
aftCargoFireWarn.setBoolValue(0);
fwdCargoFireWarn.setBoolValue(0);
}
var cargoTestCheckerFunc = func() {
if (!cargoTestBtn.getBoolValue()) {
cargoTestChecker.stop();
} elsif (elapsedTime.getValue() > (cargoTestTime.getValue() + 3)) {
doCargoTest();
cargoTestChecker.stop();
}
}
var cargoTestCheckerFunc2 = func() {
if (!cargoTestBtn.getBoolValue()) {
cargoTestChecker2.stop();
} elsif (elapsedTime.getValue() > (cargoTestTime2.getValue() + 3)) {
doCargoTest2();
cargoTestChecker2.stop();
}
}
var cargoTestCheckerFunc3 = func() {
if (!cargoTestBtn.getBoolValue()) {
cargoTestChecker3.stop();
} elsif (elapsedTime.getValue() > (cargoTestTime3.getValue() + 3)) {
doCargoTest3();
cargoTestChecker3.stop();
}
}
var cargoTestCheckerFunc4 = func() {
if (!cargoTestBtn.getBoolValue()) {
cargoTestChecker4.stop();
} elsif (elapsedTime.getValue() > (cargoTestTime4.getValue() + 3)) {
doCargoTest4();
cargoTestChecker4.stop();
}
}
createFireBottleListener("/controls/engines/engine[0]/agent1-btn", "/controls/engines/engine[0]/fire-btn", 0);
createFireBottleListener("/controls/engines/engine[0]/agent2-btn", "/controls/engines/engine[0]/fire-btn", 1);
createFireBottleListener("/controls/engines/engine[1]/agent1-btn", "/controls/engines/engine[1]/fire-btn", 2);
createFireBottleListener("/controls/engines/engine[1]/agent2-btn", "/controls/engines/engine[1]/fire-btn", 3);
createFireBottleListener("/controls/APU/agent-btn", "/controls/APU/fire-btn", 4);
createCargoFireBottleListener("/controls/fire/cargo/aftdisch", 0);
createCargoFireBottleListener("/controls/fire/cargo/fwddisch", 1);
var updateUnitsAndChannels = func() {
foreach (var units; engFireDetectorUnits.vector) {
units.update();
}
foreach(var CargoDetector; cargoDetectorLoops.vector) {
CargoDetector.updateTemp(CargoDetector.sys, CargoDetector.type);
}
foreach (var channels; CIDSchannels.vector) {
channels.update();
}
}
###################
# Update Function #
###################
var update_fire = func {
master_fire();
}
var fire_timer = maketimer(0.2, update_fire);
var fire_timer = maketimer(0.25, updateUnitsAndChannels);
var eng1AgentTimerMakeTimer = maketimer(0.1, eng1AgentTimerMakeTimerFunc);
var eng2AgentTimerMakeTimer = maketimer(0.1, eng2AgentTimerMakeTimerFunc);
var eng1Agent2TimerMakeTimer = maketimer(0.1, eng1Agent2TimerMakeTimerFunc);
var eng2Agent2TimerMakeTimer = maketimer(0.1, eng2Agent2TimerMakeTimerFunc);
var apuAgentTimerMakeTimer = maketimer(0.1, apuAgentTimerMakeTimerFunc);
var cargoTestChecker = maketimer(0.1, cargoTestCheckerFunc);
var cargoTestChecker2 = maketimer(0.2, cargoTestCheckerFunc2);
var cargoTestChecker3 = maketimer(0.2, cargoTestCheckerFunc3);
var cargoTestChecker4 = maketimer(0.2, cargoTestCheckerFunc4);

View file

@ -136,6 +136,18 @@ setlistener("/controls/lighting/no-smoking-sign", func {
}, 1);
}, 0, 0);
setlistener("/controls/flight/flap-lever", func {
props.globals.getNode("/sim/sounde/flaps-click").setBoolValue(1);
}, 0, 0);
setlistener("/sim/sounde/flaps-click", func {
if (!getprop("/sim/sounde/flaps-click")) {
return;
}
settimer(func {
props.globals.getNode("/sim/sounde/flaps-click").setBoolValue(0);
}, 0.4);
});
#########
# Doors #
#########
@ -205,6 +217,7 @@ var systemsInit = func {
rmp.init();
acp.init();
ecam.ECAM_controller.init();
atc.init();
}
setlistener("/sim/signals/fdm-initialized", func {
@ -606,6 +619,18 @@ var lightsLoop = maketimer(0.2, func {
setprop("/controls/lighting/no-smoking-sign", 0); # sign stays on in cabin but sound still occurs
}
}
if (getprop("controls/lighting/landing-lights[1]") >= 0.5) {
setprop("/fdm/jsbsim/rubbish/landL", 1);
} else {
setprop("/fdm/jsbsim/rubbish/landL", 0);
}
if (getprop("controls/lighting/landing-lights[2]") >= 0.5) {
setprop("/fdm/jsbsim/rubbish/landR", 1);
} else {
setprop("/fdm/jsbsim/rubbish/landR", 0);
}
});
var lTray = func {

View file

@ -70,37 +70,37 @@ var rmpUpdate = func() {
# SEL lights
if (chan_rmp1_v == "vhf2" or chan_rmp1_v == "vhf3" or chan_rmp1_v == "hf1" or chan_rmp1_v == "hf2" or chan_rmp2_v == "vhf1" or chan_rmp2_v == "vhf3" or chan_rmp2_v == "hf1" or chan_rmp2_v == "hf2" or chan_rmp3_v == "vhf1" or chan_rmp3_v == "vhf2") {
if (sel_light_rmp1.getBoolValue() != 1) {
if (!sel_light_rmp1.getBoolValue()) {
sel_light_rmp1.setBoolValue(1);
}
if (sel_light_rmp2.getBoolValue() != 1) {
if (!sel_light_rmp2.getBoolValue()) {
sel_light_rmp2.setBoolValue(1);
}
if (sel_light_rmp3.getBoolValue() != 1) {
if (!sel_light_rmp3.getBoolValue()) {
sel_light_rmp3.setBoolValue(1);
}
} else {
if (sel_light_rmp1.getBoolValue() != 0) {
if (sel_light_rmp1.getBoolValue()) {
sel_light_rmp1.setBoolValue(0);
}
if (sel_light_rmp2.getBoolValue() != 0) {
if (sel_light_rmp2.getBoolValue()) {
sel_light_rmp2.setBoolValue(0);
}
if (sel_light_rmp3.getBoolValue() != 0) {
if (sel_light_rmp3.getBoolValue()) {
sel_light_rmp3.setBoolValue(0);
}
}
# Disable AM mode if not in HF
if (chan_rmp1_v != "hf1" and chan_rmp1_v != "hf2" and am_mode_rmp1.getBoolValue() == 1) {
if (chan_rmp1_v != "hf1" and chan_rmp1_v != "hf2" and am_mode_rmp1.getBoolValue()) {
am_mode_rmp1.setBoolValue(0);
}
if (chan_rmp2_v != "hf1" and chan_rmp2_v != "hf2" and am_mode_rmp2.getBoolValue() == 1) {
if (chan_rmp2_v != "hf1" and chan_rmp2_v != "hf2" and am_mode_rmp2.getBoolValue()) {
am_mode_rmp2.setBoolValue(0);
}
if (chan_rmp3_v != "hf1" and chan_rmp3_v != "hf2" and am_mode_rmp3.getBoolValue() == 1) {
if (chan_rmp3_v != "hf1" and chan_rmp3_v != "hf2" and am_mode_rmp3.getBoolValue()) {
am_mode_rmp3.setBoolValue(0);
}
}

View file

@ -15,3 +15,6 @@ Present pack includes the following Airbus A320 Family variants:
## Frequently Asked Questions
For answers on frequently asked questions, refer to our [FAQ page](https://github.com/Octal450/IDG-A32X/blob/master/FAQ.md).
## Unapproved Distributors
If you get this aircraft from **anywhere but** [Octal450's repo](https://github.com/Octal450/IDG-A32X.git) you are not getting the aircraft from IDG, but from a 3rd party distributor. **This is strongly discouraged and you will not receive any support from IDG!**

View file

@ -5,49 +5,48 @@
<apu>
<name>apu_in</name>
<mode>looped</mode>
<path>apu/apu_inside.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320.wav</path>
<condition>
<property>sim/current-view/internal</property>
<property>/sim/current-view/internal</property>
</condition>
<volume>
<property>/systems/apu/rpm</property>
<factor>0.005</factor>
<min>0</min>
<max>0.25</max>
</volume>
<pitch>
<property>/systems/apu/rpm</property>
<factor>0.01</factor>
<offset>0</offset>
<factor>0.05</factor>
<offset>-2</offset>
</pitch>
</apu>
<apu>
<name>apu_out</name>
<mode>looped</mode>
<path>apu/turbine.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/x320_apu.wav</path>
<condition>
<not><property>sim/current-view/internal</property></not>
<not><property>/sim/current-view/internal</property></not>
</condition>
<volume>
<property>/systems/apu/rpm</property>
<factor>0.005</factor>
<min>0</min>
</volume>
<pitch>
<property>/systems/apu/rpm</property>
<factor>0.01</factor>
<offset>0</offset>
</pitch>
<reference-dist>60</reference-dist>
</apu>
<hyd-yellow>
<name>yellowHydPump</name>
<mode>looped</mode>
<path>yellowHydPump.wav</path>
<path>Aircraft/IDG-A32X/Sounds/yellowHydPump.wav</path>
<condition>
<and>
<equals>
<property>sim/current-view/internal</property>
<property>/sim/current-view/internal</property>
<value>1</value>
</equals>
<equals>
@ -76,7 +75,7 @@
<announcement>
<name>PurserSnacks</name>
<mode>once</mode>
<path>purserSnacks.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/purserSnacks.wav</path>
<condition>
<equals>
<property>/controls/switches/cabinCall</property>
@ -93,7 +92,7 @@
<announcement>
<name>MechCall</name>
<mode>once</mode>
<path>mechCall.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/mechCall.wav</path>
<condition>
<equals>
<property>/controls/switches/mechCall</property>
@ -110,7 +109,7 @@
<announcement>
<name>EmerCall</name>
<mode>once</mode>
<path>tripleBelt.wav</path>
<path>Aircraft/IDG-A32X/Sounds/tripleBelt.wav</path>
<condition>
<equals>
<property>/controls/switches/emerCall</property>
@ -127,7 +126,7 @@
<callout>
<name>V1</name>
<mode>once</mode>
<path>V1.wav</path>
<path>Aircraft/IDG-A32X/Sounds/V1.wav</path>
<condition>
<and>
<equals>
@ -815,7 +814,7 @@
<apoff>
<name>apoff-looped</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/apoff.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/calvary-charge-loop.wav</path>
<condition>
<and>
<equals>
@ -844,7 +843,7 @@
<apoff>
<name>apoff-single</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/apoff.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/calvary-charge-once.wav</path>
<condition>
<and>
<equals>
@ -870,74 +869,82 @@
</volume>
</apoff>
<apoff>
<name>athroff</name>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/chime.wav</path>
<condition>
<and>
<equals>
<property>/it-autoflight/output/athr</property>
<value>0</value>
</equals>
<property>/it-autoflight/sound/athrsound</property>
</and>
</condition>
<volume>
<factor>40.0</factor>
</volume>
</apoff>
<gear>
<name>gear0</name>
<mode>in-transit</mode>
<path>FL2070/320gear.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320_gear.wav</path>
<property>gear/gear[0]/position-norm</property>
<volume>
<property>sim/sounde/gear-vol</property>
<property>/sim/sounde/gear-vol</property>
</volume>
</gear>
<gear>
<name>gear1</name>
<mode>in-transit</mode>
<path>FL2070/320gear.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320_gear.wav</path>
<property>gear/gear[1]/position-norm</property>
<volume>
<property>sim/sounde/gear-vol</property>
<property>/sim/sounde/gear-vol</property>
</volume>
</gear>
<gear>
<name>gear2</name>
<mode>in-transit</mode>
<path>FL2070/320gear.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320_gear.wav</path>
<property>gear/gear[2]/position-norm</property>
<volume>
<property>sim/sounde/gear-vol</property>
<property>/sim/sounde/gear-vol</property>
</volume>
</gear>
<wind>
<path>FL2070/320wind.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/wind_cockpit.wav</path>
<mode>looped</mode>
<name>wind</name>
<condition>
<property>sim/current-view/internal</property>
<property>/sim/current-view/internal</property>
</condition>
<volume>
<property>sim/sound/other/wind</property>
<offset>0</offset>
<property>/sim/sound/other/cockpit-wind-v</property>
</volume>
<pitch>
<property>sim/sound/other/windp</property>
<offset>0</offset>
<property>/sim/sound/other/wind-p</property>
</pitch>
</wind>
<wind>
<path>Aircraft/IDG-A32X/Sounds/SASA/wind_cabin.wav</path>
<mode>looped</mode>
<name>wind</name>
<condition>
<property>/sim/current-view/internal</property>
</condition>
<volume>
<property>/sim/sound/other/wind-v</property>
</volume>
<pitch>
<property>/sim/sound/other/wind-p</property>
</pitch>
</wind>
<ac>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320_aircond.wav</path>
<mode>looped</mode>
<name>air conditioning</name>
<condition>
<property>/sim/current-view/internal</property>
</condition>
<volume>
<property>/sim/sound/other/air-con</property>
</volume>
</ac>
<wow>
<mode>once</mode>
<name>wow0</name>
<path>FL2070/320touch.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/Touch-Main.wav</path> <!-- Nose seemed to harsh -->
<condition>
<property>gear/gear[0]/wow</property>
</condition>
@ -946,7 +953,7 @@
<wow>
<mode>once</mode>
<name>wow1</name>
<path>FL2070/320touch.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/Touch-Main.wav</path>
<condition>
<property>gear/gear[1]/wow</property>
</condition>
@ -955,12 +962,91 @@
<wow>
<mode>once</mode>
<name>wow2</name>
<path>FL2070/320touch.wav</path>
<path>Aircraft/IDG-A32X/Sounds/SASA/Touch-Main.wav</path>
<condition>
<property>gear/gear[2]/wow</property>
</condition>
</wow>
<roll>
<name>roll1c</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/Cockpit_Roll.wav</path>
<property>gear/gear[0]/wow</property>
<volume>
<property>/sim/sound/other/cockpit-roll-v</property>
</volume>
<pitch>
<property>/sim/sound/other/roll-p</property>
</pitch>
</roll>
<roll>
<name>roll2c</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/Cockpit_Roll.wav</path>
<property>gear/gear[1]/wow</property>
<volume>
<property>/sim/sound/other/cockpit-roll-v</property>
</volume>
<pitch>
<property>/sim/sound/other/roll-p</property>
</pitch>
</roll>
<roll>
<name>roll3c</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/Cockpit_Roll.wav</path>
<property>gear/gear[2]/wow</property>
<volume>
<property>/sim/sound/other/cockpit-roll-v</property>
</volume>
<pitch>
<property>/sim/sound/other/roll-p</property>
</pitch>
</roll>
<roll>
<name>roll1</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/Roll.wav</path>
<property>gear/gear[0]/wow</property>
<volume>
<property>/sim/sound/other/roll-v</property>
</volume>
<pitch>
<property>/sim/sound/other/roll-p</property>
</pitch>
</roll>
<roll>
<name>roll2</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/Roll.wav</path>
<property>gear/gear[1]/wow</property>
<volume>
<property>/sim/sound/other/roll-v</property>
</volume>
<pitch>
<property>/sim/sound/other/roll-p</property>
</pitch>
</roll>
<roll>
<name>roll3</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/Roll.wav</path>
<property>gear/gear[2]/wow</property>
<volume>
<property>/sim/sound/other/roll-v</property>
</volume>
<pitch>
<property>/sim/sound/other/roll-p</property>
</pitch>
</roll>
<detenta>
<mode>once</mode>
<name>detendaa</name>
@ -971,9 +1057,6 @@
<value>IDLE</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -986,9 +1069,6 @@
<value>IDLE</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1001,9 +1081,6 @@
<value>MAN</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1016,9 +1093,6 @@
<value>MAN</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1031,9 +1105,6 @@
<value>CL</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1046,9 +1117,6 @@
<value>CL</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1061,9 +1129,6 @@
<value>MAN THR</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1076,9 +1141,6 @@
<value>MAN THR</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1091,9 +1153,6 @@
<value>MCT</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1106,9 +1165,6 @@
<value>MCT</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1121,9 +1177,6 @@
<value>TOGA</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1136,9 +1189,6 @@
<value>TOGA</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1151,9 +1201,6 @@
<value>0</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1166,9 +1213,6 @@
<value>0</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<detenta>
@ -1181,9 +1225,6 @@
<value>1</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detenta>
<detentb>
@ -1196,9 +1237,6 @@
<value>1</value>
</equals>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</detentb>
<sb>
@ -1214,9 +1252,6 @@
<property>/sim/sounde/seatbelt-sign</property>
</and>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</sb>
<ns>
<mode>once</mode>
@ -1231,9 +1266,6 @@
<property>/sim/sounde/no-smoking-sign</property>
</and>
</condition>
<volume>
<property>/sim/sound/effects/volume</property>
</volume>
</ns>
<switch>
@ -1280,7 +1312,7 @@
<property>/sim/sounde/knb1</property>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</switch>
@ -1296,13 +1328,38 @@
</volume>
</switch>
<switch>
<name>Flaps Lever</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320_flaplever.wav</path>
<condition>
<and>
<property>/sim/sounde/flaps-click</property>
<property>/sim/current-view/internal</property>
</and>
</condition>
<volume>
<factor>0.75</factor>
</volume>
</switch>
<switch>
<name>Flaps Motor</name>
<mode>in-transit</mode>
<path>Aircraft/IDG-A32X/Sounds/SASA/A320_flapmotor.wav</path>
<property>/surface-positions/flap-pos-norm</property>
<volume>
<property>sim/sound/wingview</property>
</volume>
</switch>
<cvrtone>
<name>CVRtone</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/700hz.wav</path>
<condition>
<and>
<property>sim/current-view/internal</property>
<property>/sim/current-view/internal</property>
<equals>
<property>controls/CVR/tone</property>
<value>1</value>
@ -1310,7 +1367,7 @@
</and>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</cvrtone>
@ -1325,7 +1382,7 @@
</greater-than>
</condition>
<volume>
<factor>0.80</factor>
<factor>0.8</factor>
</volume>
</relay>
@ -1340,7 +1397,7 @@
</greater-than>
</condition>
<volume>
<factor>0.80</factor>
<factor>0.8</factor>
</volume>
</relay>
@ -1361,7 +1418,7 @@
</and>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</relay>
@ -1376,17 +1433,17 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</relay>
<relay>
<name>Avionics</name>
<mode>looped</mode>
<path>Aircraft/IDG-A32X/Sounds/FL2070/320efis.wav</path>
<path>Aircraft/IDG-A32X/Sounds/320efis.wav</path>
<condition>
<and>
<property>sim/current-view/internal</property>
<property>/sim/current-view/internal</property>
<or>
<greater-than>
<property>/systems/electrical/bus/ac1</property>
@ -1400,14 +1457,14 @@
</and>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</relay>
<announcements>
<name>welcomeFA</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/welcome.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/welcome.wav</path>
<condition>
<equals>
<property>/sim/sounde/welcomefa</property>
@ -1415,14 +1472,14 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</announcements>
<announcements>
<name>welcomeCA</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/captwelcome.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/captwelcome.wav</path>
<condition>
<equals>
<property>/sim/sounde/welcomecapt</property>
@ -1430,14 +1487,14 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</announcements>
<announcements>
<name>doorsDep</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/doorsdepart.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/doorsdepart.wav</path>
<condition>
<equals>
<property>/sim/sounde/doors</property>
@ -1445,14 +1502,14 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</announcements>
<announcements>
<name>PrepTo</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/takeoff.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/takeoff.wav</path>
<condition>
<equals>
<property>/sim/sounde/prepareto</property>
@ -1460,14 +1517,14 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</announcements>
<announcements>
<name>seatbeltOff</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/belt10k.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/belt10k.wav</path>
<condition>
<equals>
<property>/sim/sounde/seatbelt-10k</property>
@ -1475,14 +1532,14 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</announcements>
<announcements>
<name>safety</name>
<mode>once</mode>
<path>Aircraft/IDG-A32X/Sounds/safety.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Announce/safety.wav</path>
<condition>
<equals>
<property>/sim/sounde/safety</property>
@ -1490,7 +1547,7 @@
</equals>
</condition>
<volume>
<factor>0.60</factor>
<factor>0.6</factor>
</volume>
</announcements>
@ -1502,9 +1559,6 @@
<condition>
<property>/sim/sound/warnings/chime</property>
</condition>
<volume>
<property>sim/sound/effects/volume</property>
</volume>
<reference-dist>10</reference-dist>
<max-dist>100</max-dist>
</chime>
@ -1515,11 +1569,13 @@
<mode>looped</mode>
<type>avionics</type>
<condition>
<property>/ECAM/warnings/master-warning-light</property>
<property>/sim/sound/warnings/crc</property>
<and>
<property>/ECAM/warnings/master-warning-light</property>
<property>/sim/sound/warnings/crc</property>
</and>
</condition>
<volume>
<property>sim/sound/effects/volume</property>
<factor>0.8</factor>
</volume>
<reference-dist>10</reference-dist>
<max-dist>100</max-dist>
@ -1528,22 +1584,13 @@
<stall-voice>
<name>stall-voice</name>
<mode>looped</mode>
<path>/Aircraft/IDG-A32X/Sounds/Cockpit/stall_voice.wav</path>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/stall_voice.wav</path>
<type>avionics</type>
<condition>
<property>warnings/stall/active</property>
</condition>
<volume>
<property>sim/sound/effects/volume</property>
<factor>3</factor>
<!--offset>1</offset-->
<min>1</min>
<max>6</max>
</volume>
<reference-dist>10</reference-dist>
<max-dist>100.0</max-dist>
</stall-voice>
</fx>
</PropertyList>

BIN
Sounds/Cockpit/c-chord.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Sounds/Cockpit/click.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
Sounds/Cockpit/cricket.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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