From a6420a44c6e2a67f3a5e07ab0217b7dcf3b1c922 Mon Sep 17 00:00:00 2001 From: Joshua Davidson <joshuadavidson2000@gmail.com> Date: Mon, 5 Jun 2017 15:59:40 -0400 Subject: [PATCH] A3XX: More overhead sounds, cockpit shaking --- A320-main.xml | 1 + Models/FlightDeck/a320.flightdeck.xml | 26 ++++++++++ Models/Instruments/OHpanel/OHpanel.xml | 45 ++++++++++++++-- Nasal/libraries.nas | 42 ++++++++++----- Nasal/shake.nas | 37 +++++++++++++ Sounds/A320-common-sound.xml | 52 ++++++++++++------- Sounds/{oh-button.wav => Cockpit/button.wav} | Bin Sounds/{ => Cockpit}/detenta.wav | Bin Sounds/{ => Cockpit}/detentb.wav | Bin Sounds/{ => Cockpit}/detentc.wav | Bin Sounds/{ => Cockpit}/detentd.wav | Bin Sounds/{oh-knob.wav => Cockpit/knob.wav} | Bin Sounds/Cockpit/switch.wav | Bin 0 -> 11070 bytes 13 files changed, 166 insertions(+), 37 deletions(-) create mode 100644 Nasal/shake.nas rename Sounds/{oh-button.wav => Cockpit/button.wav} (100%) rename Sounds/{ => Cockpit}/detenta.wav (100%) rename Sounds/{ => Cockpit}/detentb.wav (100%) rename Sounds/{ => Cockpit}/detentc.wav (100%) rename Sounds/{ => Cockpit}/detentd.wav (100%) rename Sounds/{oh-knob.wav => Cockpit/knob.wav} (100%) create mode 100644 Sounds/Cockpit/switch.wav diff --git a/A320-main.xml b/A320-main.xml index 3494da34..1507aa11 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -722,6 +722,7 @@ <file>Aircraft/A320Family/Nasal/gpws.nas</file> <file>Aircraft/A320Family/Nasal/efis.nas</file> <file>Aircraft/A320Family/Nasal/ECAM.nas</file> + <file>Aircraft/A320Family/Nasal/shake.nas</file> </libraries> <acconfig> <file>Aircraft/A320Family/AircraftConfig/acconfig.nas</file> diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index bbde178d..ba315382 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -4,6 +4,32 @@ <path>res/fd_complete.ac</path> + <animation> + <type>translate</type> + <property>/systems/shake/shaking</property> + <axis> + <x1-m> 0</x1-m> + <y1-m> 0</y1-m> + <z1-m> 0</z1-m> + <x2-m> 0.5</x2-m> + <y2-m>-0.5</y2-m> + <z2-m> 0.8</z2-m> + </axis> + </animation> + + <animation> + <type>translate</type> + <property>/systems/shake/shaking</property> + <axis> + <x1-m> 0</x1-m> + <y1-m> 0</y1-m> + <z1-m> 0</z1-m> + <x2-m> 0.5</x2-m> + <y2-m>-0.5</y2-m> + <z2-m> 0.8</z2-m> + </axis> + </animation> + <!-- Overhead Panel --> <model> diff --git a/Models/Instruments/OHpanel/OHpanel.xml b/Models/Instruments/OHpanel/OHpanel.xml index e0083742..8b336d81 100644 --- a/Models/Instruments/OHpanel/OHpanel.xml +++ b/Models/Instruments/OHpanel/OHpanel.xml @@ -2233,7 +2233,10 @@ <command>property-toggle</command> <property>controls/lighting/strobe</property> </binding> - + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2268,7 +2271,10 @@ <command>property-toggle</command> <property>controls/lighting/beacon</property> </binding> - + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2303,7 +2309,10 @@ <command>property-toggle</command> <property>controls/lighting/wing-lights</property> </binding> - + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2341,7 +2350,10 @@ <value>1</value> <value>2</value> </binding> - + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2378,6 +2390,10 @@ <command>property-toggle</command> <property>controls/lighting/landing-lights[2]</property> </binding> + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2413,7 +2429,10 @@ <command>property-toggle</command> <property>controls/lighting/landing-lights[1]</property> </binding> - + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2615,6 +2634,10 @@ <value>0.5</value> <value>1</value> </binding> + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/knb1", 1);</script> + </binding> </action> </animation> <animation> @@ -2653,6 +2676,10 @@ <value>0</value> <value>1</value> </binding> + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2689,6 +2716,10 @@ <command>property-toggle</command> <property>controls/switches/seatbelt-sign</property> </binding> + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> @@ -2723,6 +2754,10 @@ <command>property-toggle</command> <property>controls/switches/no-smoking-sign</property> </binding> + <binding> + <command>nasal</command> + <script>setprop("/sim/sounde/switch1", 1);</script> + </binding> </action> </animation> <animation> diff --git a/Nasal/libraries.nas b/Nasal/libraries.nas index 9a0b34e2..853ee14f 100644 --- a/Nasal/libraries.nas +++ b/Nasal/libraries.nas @@ -88,6 +88,15 @@ setlistener("/sim/sounde/knb1", func { }, 0.05); }); +setlistener("/sim/sounde/switch1", func { + if (!getprop("/sim/sounde/switch1")) { + return; + } + settimer(func { + props.globals.getNode("/sim/sounde/switch1").setBoolValue(0); + }, 0.05); +}); + setlistener("/controls/switches/seatbelt-sign", func { props.globals.getNode("/sim/sounde/seatbelt-sign").setBoolValue(1); settimer(func { @@ -154,7 +163,7 @@ setlistener("/sim/signals/fdm-initialized", func { systems.hyd_init(); systems.press_init(); fmgc.APinit(); - externalconnections.start(); + librariesLoop.start(); fmgc.FMGCinit(); mcdu1.MCDU_init(); mcdu2.MCDU_init(); @@ -165,6 +174,26 @@ setlistener("/sim/signals/fdm-initialized", func { libraries.variousReset(); }); +var librariesLoop = maketimer(0.1, func { + var groundpwr = getprop("/controls/switches/cart"); + var groundair = getprop("/controls/pneumatic/switches/groundair"); + var gs = getprop("/velocities/groundspeed-kt"); + var parkbrake = getprop("controls/gear/brake-parking"); + + if ((groundair or groundpwr) and ((gs > 2) or !parkbrake)) { + setprop("/controls/switches/cart", 0); + setprop("/controls/pneumatic/switches/groundair", 0); + } + + var V = getprop("/velocities/groundspeed-kt"); + + if (V > 15) { + setprop("/systems/shake/effect", 1); + } else { + setprop("/systems/shake/effect", 0); + } +}); + var variousReset = func { setprop("/modes/cpt-du-xfr", 0); setprop("/modes/fo-du-xfr", 0); @@ -182,17 +211,6 @@ var aglgears = func { aglgears(); -var externalconnections = maketimer(0.1, func { - var groundpwr = getprop("/controls/switches/cart"); - var groundair = getprop("/controls/pneumatic/switches/groundair"); - var gs = getprop("/velocities/groundspeed-kt"); - var parkbrake = getprop("controls/gear/brake-parking"); - if ((groundair or groundpwr) and ((gs > 2) or !parkbrake)) { - setprop("/controls/switches/cart", 0); - setprop("/controls/pneumatic/switches/groundair", 0); - } -}); - var mcpSPDKnbPull = func { setprop("/it-autoflight/input/spd-managed", 0); fmgc.ManagedSPD.stop(); diff --git a/Nasal/shake.nas b/Nasal/shake.nas new file mode 100644 index 00000000..1e008513 --- /dev/null +++ b/Nasal/shake.nas @@ -0,0 +1,37 @@ +# A3XX Shaking + +var shakeEffectA3XX = props.globals.initNode("/systems/shake/effect",0,"BOOL"); +var shakeA3XX = props.globals.initNode("/systems/shake/shaking",0,"DOUBLE"); +var rSpeed = 0; +var sf = 0; +var n_g_c = 0; +var n_g_l = 0; +var n_g_r = 0; + +var theShakeEffect = func{ + n_g_c = getprop("/gear/gear[0]/compression-norm") or 0; + n_g_l = getprop("/gear/gear[1]/compression-norm") or 0; + n_g_r = getprop("/gear/gear[2]/compression-norm") or 0; + rSpeed = getprop("/gear/gear[0]/rollspeed-ms") or 0; + sf = rSpeed / 94000; + + if (shakeEffectA3XX.getBoolValue() and (n_g_c > 0 or n_g_l > 0 or n_g_r > 0)) { + interpolate("/systems/shake/shaking", sf, 0.03); + settimer(func { + interpolate("/systems/shake/shaking", -sf * 2, 0.03); + }, 0.06); + settimer(func { + interpolate("/systems/shake/shaking", sf, 0.03); + }, 0.12); + settimer(theShakeEffect, 0.09); + } else { + setprop("/systems/shake/shaking", 0); + setprop("/systems/shake/effect",0); + } +} + +setlistener("/systems/shake/effect", func(state){ + if(state.getBoolValue()){ + theShakeEffect(); + } +}, 1, 0); diff --git a/Sounds/A320-common-sound.xml b/Sounds/A320-common-sound.xml index fd132c28..27de7ed1 100644 --- a/Sounds/A320-common-sound.xml +++ b/Sounds/A320-common-sound.xml @@ -394,7 +394,7 @@ <detenta> <mode>once</mode> <name>detendaa</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/systems/thrust/state1</property> @@ -409,7 +409,7 @@ <detentb> <mode>once</mode> <name>detendba</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/systems/thrust/state2</property> @@ -424,7 +424,7 @@ <detenta> <mode>once</mode> <name>detendab</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/systems/thrust/state1</property> @@ -439,7 +439,7 @@ <detentb> <mode>once</mode> <name>detendbb</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/systems/thrust/state2</property> @@ -454,7 +454,7 @@ <detenta> <mode>once</mode> <name>detendac</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/systems/thrust/state1</property> @@ -469,7 +469,7 @@ <detentb> <mode>once</mode> <name>detendbc</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/systems/thrust/state2</property> @@ -484,7 +484,7 @@ <detenta> <mode>once</mode> <name>detendad</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/systems/thrust/state1</property> @@ -499,7 +499,7 @@ <detentb> <mode>once</mode> <name>detendbd</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/systems/thrust/state2</property> @@ -514,7 +514,7 @@ <detenta> <mode>once</mode> <name>detendae</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/systems/thrust/state1</property> @@ -529,7 +529,7 @@ <detentb> <mode>once</mode> <name>detendbe</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/systems/thrust/state2</property> @@ -544,7 +544,7 @@ <detenta> <mode>once</mode> <name>detendaf</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/systems/thrust/state1</property> @@ -559,7 +559,7 @@ <detentb> <mode>once</mode> <name>detendbf</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/systems/thrust/state2</property> @@ -574,7 +574,7 @@ <detenta> <mode>once</mode> <name>detendag</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/controls/engines/engine[0]/reverser</property> @@ -589,7 +589,7 @@ <detentb> <mode>once</mode> <name>detendbg</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/controls/engines/engine[1]/reverser</property> @@ -604,7 +604,7 @@ <detenta> <mode>once</mode> <name>detendah</name> - <path>detenta.wav</path> + <path>Cockpit/detenta.wav</path> <condition> <equals> <property>/controls/engines/engine[0]/reverser</property> @@ -619,7 +619,7 @@ <detentb> <mode>once</mode> <name>detendbh</name> - <path>detentb.wav</path> + <path>Cockpit/detentb.wav</path> <condition> <equals> <property>/controls/engines/engine[1]/reverser</property> @@ -667,9 +667,9 @@ </ns> <switch> - <name>Overhead Button</name> + <name>Button</name> <mode>once</mode> - <path>Aircraft/A320Family/Sounds/oh-button.wav</path> + <path>Aircraft/A320Family/Sounds/Cockpit/button.wav</path> <condition> <property>/sim/sounde/btn1</property> </condition> @@ -679,9 +679,9 @@ </switch> <switch> - <name>Overhead Knob</name> + <name>Knob</name> <mode>once</mode> - <path>Aircraft/A320Family/Sounds/oh-knob.wav</path> + <path>Aircraft/A320Family/Sounds/Cockpit/knob.wav</path> <condition> <property>/sim/sounde/knb1</property> </condition> @@ -690,5 +690,17 @@ </volume> </switch> + <switch> + <name>Switch</name> + <mode>once</mode> + <path>Aircraft/A320Family/Sounds/Cockpit/switch.wav</path> + <condition> + <property>/sim/sounde/switch1</property> + </condition> + <volume> + <factor>0.60</factor> + </volume> + </switch> + </fx> </PropertyList> \ No newline at end of file diff --git a/Sounds/oh-button.wav b/Sounds/Cockpit/button.wav similarity index 100% rename from Sounds/oh-button.wav rename to Sounds/Cockpit/button.wav diff --git a/Sounds/detenta.wav b/Sounds/Cockpit/detenta.wav similarity index 100% rename from Sounds/detenta.wav rename to Sounds/Cockpit/detenta.wav diff --git a/Sounds/detentb.wav b/Sounds/Cockpit/detentb.wav similarity index 100% rename from Sounds/detentb.wav rename to Sounds/Cockpit/detentb.wav diff --git a/Sounds/detentc.wav b/Sounds/Cockpit/detentc.wav similarity index 100% rename from Sounds/detentc.wav rename to Sounds/Cockpit/detentc.wav diff --git a/Sounds/detentd.wav b/Sounds/Cockpit/detentd.wav similarity index 100% rename from Sounds/detentd.wav rename to Sounds/Cockpit/detentd.wav diff --git a/Sounds/oh-knob.wav b/Sounds/Cockpit/knob.wav similarity index 100% rename from Sounds/oh-knob.wav rename to Sounds/Cockpit/knob.wav diff --git a/Sounds/Cockpit/switch.wav b/Sounds/Cockpit/switch.wav new file mode 100644 index 0000000000000000000000000000000000000000..605e50063bccc5b3d2c7d94b16e305e6b991239a GIT binary patch literal 11070 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 literal 0 HcmV?d00001