diff --git a/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Exterior/A32NX_Exterior_Includes.xml b/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Exterior/A32NX_Exterior_Includes.xml
index cc74e51c4..c6a7b054c 100644
--- a/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Exterior/A32NX_Exterior_Includes.xml
+++ b/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Exterior/A32NX_Exterior_Includes.xml
@@ -1,2 +1,3 @@
+
diff --git a/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Interior/A32NX_Interior_Includes.xml b/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Interior/A32NX_Interior_Includes.xml
index 91b48e1cc..c472dc805 100644
--- a/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Interior/A32NX_Interior_Includes.xml
+++ b/hdw-a339x/src/base/headwindsim-aircraft-a330-900/ModelBehaviorDefs/A339X/Interior/A32NX_Interior_Includes.xml
@@ -17,4 +17,5 @@
+
diff --git a/hdw-a339x/src/base/headwindsim-aircraft-a330-900/SimObjects/Airplanes/Headwind_A330neo/model/A330_NEO_INTERIOR.xml b/hdw-a339x/src/base/headwindsim-aircraft-a330-900/SimObjects/Airplanes/Headwind_A330neo/model/A330_NEO_INTERIOR.xml
index 290213f21..e5e42e42a 100644
--- a/hdw-a339x/src/base/headwindsim-aircraft-a330-900/SimObjects/Airplanes/Headwind_A330neo/model/A330_NEO_INTERIOR.xml
+++ b/hdw-a339x/src/base/headwindsim-aircraft-a330-900/SimObjects/Airplanes/Headwind_A330neo/model/A330_NEO_INTERIOR.xml
@@ -5107,5 +5107,25 @@
+
+
+
+ CAPT
+ 77
+
+
+
+
+ FO
+ 80
+
+
+
+
+
+ 0
+
+
+
diff --git a/hdw-a339x/src/model/models.json b/hdw-a339x/src/model/models.json
index 9749721ba..2d7d611eb 100644
--- a/hdw-a339x/src/model/models.json
+++ b/hdw-a339x/src/model/models.json
@@ -19,6 +19,11 @@
]
},
"additions": [
+ {
+ "gltf": "./wipers/flight-deck-wipers.gltf",
+ "bin": "./wipers/flight-deck-wipers.bin",
+ "maxLod": 0
+ },
{
"gltf": "./efb/efb.gltf",
"bin": "./efb/efb.bin"
diff --git a/hdw-a339x/src/model/wipers/flight-deck-wipers.bin b/hdw-a339x/src/model/wipers/flight-deck-wipers.bin
new file mode 100644
index 000000000..a90e91198
Binary files /dev/null and b/hdw-a339x/src/model/wipers/flight-deck-wipers.bin differ
diff --git a/hdw-a339x/src/model/wipers/flight-deck-wipers.gltf b/hdw-a339x/src/model/wipers/flight-deck-wipers.gltf
new file mode 100644
index 000000000..18464d4ca
--- /dev/null
+++ b/hdw-a339x/src/model/wipers/flight-deck-wipers.gltf
@@ -0,0 +1,571 @@
+{
+ "accessors": [
+ {
+ "bufferView": 0,
+ "componentType": 5126,
+ "count": 116,
+ "min": [
+ -1.8077400922775269,
+ -0.8905844688415527,
+ -0.7256567478179932
+ ],
+ "max": [
+ 1.4397492408752441,
+ -0.1706918627023697,
+ 0.571297287940979
+ ],
+ "type": "VEC3",
+ "name": "WINDSHIELD_NO_WIPE_vertices#0_POSITION"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 12,
+ "componentType": 5120,
+ "count": 116,
+ "type": "VEC4",
+ "name": "WINDSHIELD_NO_WIPE_vertices#0_TANGENT"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 16,
+ "componentType": 5120,
+ "count": 116,
+ "type": "VEC4",
+ "name": "WINDSHIELD_NO_WIPE_vertices#0_NORMAL"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 20,
+ "componentType": 5122,
+ "count": 116,
+ "type": "VEC2",
+ "name": "WINDSHIELD_NO_WIPE_vertices#0_TEXCOORD_0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24,
+ "componentType": 5122,
+ "count": 116,
+ "type": "VEC2",
+ "name": "WINDSHIELD_NO_WIPE_vertices#0_TEXCOORD_1"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 28,
+ "componentType": 5123,
+ "count": 116,
+ "type": "VEC4",
+ "name": "WINDSHIELD_NO_WIPE_vertices#0_COLOR_0"
+ },
+ {
+ "bufferView": 1,
+ "componentType": 5123,
+ "count": 324,
+ "type": "SCALAR",
+ "name": "WINDSHIELD_NO_WIPE_indices#0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 4176,
+ "componentType": 5126,
+ "count": 279,
+ "min": [
+ 0.05638958513736725,
+ -0.20047706365585327,
+ 0.1056034117937088
+ ],
+ "max": [
+ 0.8472711443901062,
+ 0.31162047386169434,
+ 0.9498728513717651
+ ],
+ "type": "VEC3",
+ "name": "WINDSHIELD_CAPT_UNWIPED_vertices#0_POSITION"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 4188,
+ "componentType": 5120,
+ "count": 279,
+ "type": "VEC4",
+ "name": "WINDSHIELD_CAPT_UNWIPED_vertices#0_TANGENT"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 4192,
+ "componentType": 5120,
+ "count": 279,
+ "type": "VEC4",
+ "name": "WINDSHIELD_CAPT_UNWIPED_vertices#0_NORMAL"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 4196,
+ "componentType": 5122,
+ "count": 279,
+ "type": "VEC2",
+ "name": "WINDSHIELD_CAPT_UNWIPED_vertices#0_TEXCOORD_0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 4200,
+ "componentType": 5122,
+ "count": 279,
+ "type": "VEC2",
+ "name": "WINDSHIELD_CAPT_UNWIPED_vertices#0_TEXCOORD_1"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 4204,
+ "componentType": 5123,
+ "count": 279,
+ "type": "VEC4",
+ "name": "WINDSHIELD_CAPT_UNWIPED_vertices#0_COLOR_0"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 648,
+ "componentType": 5123,
+ "count": 279,
+ "type": "SCALAR",
+ "name": "WINDSHIELD_CAPT_UNWIPED_indices#0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 14220,
+ "componentType": 5126,
+ "count": 279,
+ "min": [
+ -0.8472711443901062,
+ -0.20047706365585327,
+ 0.1056034117937088
+ ],
+ "max": [
+ -0.05638958513736725,
+ 0.31162047386169434,
+ 0.9498728513717651
+ ],
+ "type": "VEC3",
+ "name": "WINDSHIELD_FO_UNWIPED_vertices#0_POSITION"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 14232,
+ "componentType": 5120,
+ "count": 279,
+ "type": "VEC4",
+ "name": "WINDSHIELD_FO_UNWIPED_vertices#0_TANGENT"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 14236,
+ "componentType": 5120,
+ "count": 279,
+ "type": "VEC4",
+ "name": "WINDSHIELD_FO_UNWIPED_vertices#0_NORMAL"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 14240,
+ "componentType": 5122,
+ "count": 279,
+ "type": "VEC2",
+ "name": "WINDSHIELD_FO_UNWIPED_vertices#0_TEXCOORD_0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 14244,
+ "componentType": 5122,
+ "count": 279,
+ "type": "VEC2",
+ "name": "WINDSHIELD_FO_UNWIPED_vertices#0_TEXCOORD_1"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 14248,
+ "componentType": 5123,
+ "count": 279,
+ "type": "VEC4",
+ "name": "WINDSHIELD_FO_UNWIPED_vertices#0_COLOR_0"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 1206,
+ "componentType": 5123,
+ "count": 279,
+ "type": "SCALAR",
+ "name": "WINDSHIELD_FO_UNWIPED_indices#0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24264,
+ "componentType": 5126,
+ "count": 281,
+ "min": [
+ -0.10657666623592377,
+ -0.20047706365585327,
+ 0.1056034117937088
+ ],
+ "max": [
+ 0.8472711443901062,
+ 0.31162047386169434,
+ 0.9498728513717651
+ ],
+ "type": "VEC3",
+ "name": "WINDSHIELD_CAPT_WIPED_vertices#0_POSITION"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24276,
+ "componentType": 5120,
+ "count": 281,
+ "type": "VEC4",
+ "name": "WINDSHIELD_CAPT_WIPED_vertices#0_TANGENT"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24280,
+ "componentType": 5120,
+ "count": 281,
+ "type": "VEC4",
+ "name": "WINDSHIELD_CAPT_WIPED_vertices#0_NORMAL"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24284,
+ "componentType": 5122,
+ "count": 281,
+ "type": "VEC2",
+ "name": "WINDSHIELD_CAPT_WIPED_vertices#0_TEXCOORD_0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24288,
+ "componentType": 5122,
+ "count": 281,
+ "type": "VEC2",
+ "name": "WINDSHIELD_CAPT_WIPED_vertices#0_TEXCOORD_1"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 24292,
+ "componentType": 5123,
+ "count": 281,
+ "type": "VEC4",
+ "name": "WINDSHIELD_CAPT_WIPED_vertices#0_COLOR_0"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 1764,
+ "componentType": 5123,
+ "count": 1071,
+ "type": "SCALAR",
+ "name": "WINDSHIELD_CAPT_WIPED_indices#0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 34380,
+ "componentType": 5126,
+ "count": 241,
+ "min": [
+ -0.8472711443901062,
+ -0.20047706365585327,
+ 0.1056034117937088
+ ],
+ "max": [
+ -0.05638958513736725,
+ 0.31162047386169434,
+ 0.9498728513717651
+ ],
+ "type": "VEC3",
+ "name": "WINDSHIELD_FO_WIPED_vertices#0_POSITION"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 34392,
+ "componentType": 5120,
+ "count": 241,
+ "type": "VEC4",
+ "name": "WINDSHIELD_FO_WIPED_vertices#0_TANGENT"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 34396,
+ "componentType": 5120,
+ "count": 241,
+ "type": "VEC4",
+ "name": "WINDSHIELD_FO_WIPED_vertices#0_NORMAL"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 34400,
+ "componentType": 5122,
+ "count": 241,
+ "type": "VEC2",
+ "name": "WINDSHIELD_FO_WIPED_vertices#0_TEXCOORD_0"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 34404,
+ "componentType": 5122,
+ "count": 241,
+ "type": "VEC2",
+ "name": "WINDSHIELD_FO_WIPED_vertices#0_TEXCOORD_1"
+ },
+ {
+ "bufferView": 0,
+ "byteOffset": 34408,
+ "componentType": 5123,
+ "count": 241,
+ "type": "VEC4",
+ "name": "WINDSHIELD_FO_WIPED_vertices#0_COLOR_0"
+ },
+ {
+ "bufferView": 1,
+ "byteOffset": 3906,
+ "componentType": 5123,
+ "count": 987,
+ "type": "SCALAR",
+ "name": "WINDSHIELD_FO_WIPED_indices#0"
+ }
+ ],
+ "asset": {
+ "generator": "Khronos glTF Blender I/O v3.3.36 and Asobo Studio MSFS Blender I/O v1.3.0",
+ "version": "2.0",
+ "extensions": {
+ "ASOBO_asset_optimized": {
+ "BoundingBoxMax": [
+ 1.4397492408752441,
+ 0.31162047386169434,
+ 0.9498728513717651
+ ],
+ "BoundingBoxMin": [
+ -1.8077400922775269,
+ -0.8905844688415527,
+ -0.7256567478179932
+ ],
+ "MajorVersion": 4,
+ "MinorVersion": 4,
+ "UseCheckerboardMaterialForMissingTextures": true,
+ "UseOnlyFilenameForImageURI": true
+ },
+ "ASOBO_normal_map_convention": {
+ "tangent_space_convention": "DirectX"
+ }
+ }
+ },
+ "bufferViews": [
+ {
+ "buffer": 0,
+ "byteLength": 43056,
+ "byteStride": 36,
+ "target": 34962,
+ "name": "BufferViewVertexND"
+ },
+ {
+ "buffer": 0,
+ "byteLength": 5880,
+ "byteOffset": 43056,
+ "target": 34963,
+ "name": "BufferViewIndex"
+ }
+ ],
+ "meshes": [
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "COLOR_0": 5,
+ "NORMAL": 2,
+ "POSITION": 0,
+ "TANGENT": 1,
+ "TEXCOORD_0": 3,
+ "TEXCOORD_1": 4
+ },
+ "indices": 6,
+ "material": "windshield",
+ "mode": 4,
+ "extras": {
+ "ASOBO_primitive": {
+ "PrimitiveCount": 108,
+ "VertexType": "VTX",
+ "VertexVersion": 2
+ }
+ }
+ }
+ ],
+ "name": "WINDSHIELD_NO_WIPE"
+ },
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "COLOR_0": 12,
+ "NORMAL": 9,
+ "POSITION": 7,
+ "TANGENT": 8,
+ "TEXCOORD_0": 10,
+ "TEXCOORD_1": 11
+ },
+ "indices": 13,
+ "material": "windshield",
+ "mode": 4,
+ "extras": {
+ "ASOBO_primitive": {
+ "PrimitiveCount": 93,
+ "VertexType": "VTX",
+ "VertexVersion": 2
+ }
+ }
+ }
+ ],
+ "name": "WINDSHIELD_CAPT_UNWIPED"
+ },
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "COLOR_0": 19,
+ "NORMAL": 16,
+ "POSITION": 14,
+ "TANGENT": 15,
+ "TEXCOORD_0": 17,
+ "TEXCOORD_1": 18
+ },
+ "indices": 20,
+ "material": "windshield",
+ "mode": 4,
+ "extras": {
+ "ASOBO_primitive": {
+ "PrimitiveCount": 93,
+ "VertexType": "VTX",
+ "VertexVersion": 2
+ }
+ }
+ }
+ ],
+ "name": "WINDSHIELD_FO_UNWIPED"
+ },
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "COLOR_0": 26,
+ "NORMAL": 23,
+ "POSITION": 21,
+ "TANGENT": 22,
+ "TEXCOORD_0": 24,
+ "TEXCOORD_1": 25
+ },
+ "indices": 27,
+ "material": "windshield",
+ "mode": 4,
+ "extras": {
+ "ASOBO_primitive": {
+ "PrimitiveCount": 357,
+ "VertexType": "VTX",
+ "VertexVersion": 2
+ }
+ }
+ }
+ ],
+ "name": "WINDSHIELD_CAPT_WIPED"
+ },
+ {
+ "primitives": [
+ {
+ "attributes": {
+ "COLOR_0": 33,
+ "NORMAL": 30,
+ "POSITION": 28,
+ "TANGENT": 29,
+ "TEXCOORD_0": 31,
+ "TEXCOORD_1": 32
+ },
+ "indices": 34,
+ "material": "windshield",
+ "mode": 4,
+ "extras": {
+ "ASOBO_primitive": {
+ "PrimitiveCount": 329,
+ "VertexType": "VTX",
+ "VertexVersion": 2
+ }
+ }
+ }
+ ],
+ "name": "WINDSHIELD_FO_WIPED"
+ }
+ ],
+ "nodes": [
+ {
+ "translation": [
+ 0.18399550020694733,
+ 2.191272735595703,
+ 20.4499454498291
+ ],
+ "mesh": 0,
+ "name": "WINDSHIELD_NO_WIPE"
+ },
+ {
+ "translation": [
+ 0,
+ 1.6614223718643188,
+ 20.67517471313477
+ ],
+ "mesh": 1,
+ "name": "WINDSHIELD_CAPT_UNWIPED"
+ },
+ {
+ "translation": [
+ 0,
+ 1.6614223718643188,
+ 20.67517471313477
+ ],
+ "mesh": 2,
+ "name": "WINDSHIELD_FO_UNWIPED"
+ },
+ {
+ "translation": [
+ 0,
+ 1.6614223718643188,
+ 20.67517471313477
+ ],
+ "mesh": 3,
+ "name": "WINDSHIELD_CAPT_WIPED"
+ },
+ {
+ "translation": [
+ 0,
+ 1.6614223718643188,
+ 20.67517471313477
+ ],
+ "mesh": 4,
+ "name": "WINDSHIELD_FO_WIPED"
+ }
+ ],
+ "scene": 0,
+ "scenes": [
+ {
+ "nodes": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4
+ ],
+ "name": "Scene"
+ }
+ ],
+ "extensionsUsed": [
+ "ASOBO_normal_map_convention",
+ "ASOBO_material_windshield",
+ "ASOBO_asset_optimized"
+ ],
+ "buffers": [
+ {
+ "byteLength": 48936,
+ "uri": "flight-deck-wipers.bin"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/hdw-a339x/src/wasm/systems/a320_systems/src/air_conditioning.rs b/hdw-a339x/src/wasm/systems/a320_systems/src/air_conditioning.rs
index b478f7c9c..769b041bb 100644
--- a/hdw-a339x/src/wasm/systems/a320_systems/src/air_conditioning.rs
+++ b/hdw-a339x/src/wasm/systems/a320_systems/src/air_conditioning.rs
@@ -446,7 +446,7 @@ impl A320AirConditioningSystem {
self.trim_air_system.update(
context,
&self.mixer_unit,
- &[
+ [
self.acsc[0].trim_air_pressure_regulating_valve_controller(),
self.acsc[1].trim_air_pressure_regulating_valve_controller(),
],