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