From a6420a44c6e2a67f3a5e07ab0217b7dcf3b1c922 Mon Sep 17 00:00:00 2001 From: Joshua Davidson 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 @@ Aircraft/A320Family/Nasal/gpws.nas Aircraft/A320Family/Nasal/efis.nas Aircraft/A320Family/Nasal/ECAM.nas + Aircraft/A320Family/Nasal/shake.nas Aircraft/A320Family/AircraftConfig/acconfig.nas 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 @@ res/fd_complete.ac + + translate + /systems/shake/shaking + + 0 + 0 + 0 + 0.5 + -0.5 + 0.8 + + + + + translate + /systems/shake/shaking + + 0 + 0 + 0 + 0.5 + -0.5 + 0.8 + + + 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 @@ property-toggle controls/lighting/strobe - + + nasal + + @@ -2268,7 +2271,10 @@ property-toggle controls/lighting/beacon - + + nasal + + @@ -2303,7 +2309,10 @@ property-toggle controls/lighting/wing-lights - + + nasal + + @@ -2341,7 +2350,10 @@ 1 2 - + + nasal + + @@ -2378,6 +2390,10 @@ property-toggle controls/lighting/landing-lights[2] + + nasal + + @@ -2413,7 +2429,10 @@ property-toggle controls/lighting/landing-lights[1] - + + nasal + + @@ -2615,6 +2634,10 @@ 0.5 1 + + nasal + + @@ -2653,6 +2676,10 @@ 0 1 + + nasal + + @@ -2689,6 +2716,10 @@ property-toggle controls/switches/seatbelt-sign + + nasal + + @@ -2723,6 +2754,10 @@ property-toggle controls/switches/no-smoking-sign + + nasal + + 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 @@ once detendaa - detenta.wav + Cockpit/detenta.wav /systems/thrust/state1 @@ -409,7 +409,7 @@ once detendba - detentb.wav + Cockpit/detentb.wav /systems/thrust/state2 @@ -424,7 +424,7 @@ once detendab - detenta.wav + Cockpit/detenta.wav /systems/thrust/state1 @@ -439,7 +439,7 @@ once detendbb - detentb.wav + Cockpit/detentb.wav /systems/thrust/state2 @@ -454,7 +454,7 @@ once detendac - detenta.wav + Cockpit/detenta.wav /systems/thrust/state1 @@ -469,7 +469,7 @@ once detendbc - detentb.wav + Cockpit/detentb.wav /systems/thrust/state2 @@ -484,7 +484,7 @@ once detendad - detenta.wav + Cockpit/detenta.wav /systems/thrust/state1 @@ -499,7 +499,7 @@ once detendbd - detentb.wav + Cockpit/detentb.wav /systems/thrust/state2 @@ -514,7 +514,7 @@ once detendae - detenta.wav + Cockpit/detenta.wav /systems/thrust/state1 @@ -529,7 +529,7 @@ once detendbe - detentb.wav + Cockpit/detentb.wav /systems/thrust/state2 @@ -544,7 +544,7 @@ once detendaf - detenta.wav + Cockpit/detenta.wav /systems/thrust/state1 @@ -559,7 +559,7 @@ once detendbf - detentb.wav + Cockpit/detentb.wav /systems/thrust/state2 @@ -574,7 +574,7 @@ once detendag - detenta.wav + Cockpit/detenta.wav /controls/engines/engine[0]/reverser @@ -589,7 +589,7 @@ once detendbg - detentb.wav + Cockpit/detentb.wav /controls/engines/engine[1]/reverser @@ -604,7 +604,7 @@ once detendah - detenta.wav + Cockpit/detenta.wav /controls/engines/engine[0]/reverser @@ -619,7 +619,7 @@ once detendbh - detentb.wav + Cockpit/detentb.wav /controls/engines/engine[1]/reverser @@ -667,9 +667,9 @@ - Overhead Button + Button once - Aircraft/A320Family/Sounds/oh-button.wav + Aircraft/A320Family/Sounds/Cockpit/button.wav /sim/sounde/btn1 @@ -679,9 +679,9 @@ - Overhead Knob + Knob once - Aircraft/A320Family/Sounds/oh-knob.wav + Aircraft/A320Family/Sounds/Cockpit/knob.wav /sim/sounde/knb1 @@ -690,5 +690,17 @@ + + Switch + once + Aircraft/A320Family/Sounds/Cockpit/switch.wav + + /sim/sounde/switch1 + + + 0.60 + + + \ 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