Skip to content

Commit 43ee59f

Browse files
Revyn112liz3
andauthored
feat(a339x/atsaw): make atsaw for fo available, seperate selection (#118)
* feat(a339x/atsaw): make atsaw for fo available, seperate selection * simply logic * change switch condition * fixes for vatsim and re add clear when switching to no source. * move activeTrafficId to SimVar for feeding global activeTrafficId fix types * rename traffic sim variables to a339x namespace --------- Co-authored-by: Liz3 <accs@liz3.net>
1 parent 6c51af0 commit 43ee59f

File tree

7 files changed

+89
-64
lines changed

7 files changed

+89
-64
lines changed

hdw-a339x-common/src/systems/instruments/src/ND/shared/map/CanvasMap.tsx

+9-7
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,17 @@ export class CanvasMap extends DisplayComponent<CanvasMapProps> {
145145
sub.on('set_map_range_radius').handle((v) => this.mapRangeRadius.set(v));
146146
sub.on('traffic_selector_state').handle((v) => {
147147
if(!v) {
148-
if(this.trafficLayer.activeTrafficId === this.selectedTrafficId) {
149-
this.trafficLayer.activeTrafficId = "";
148+
const activeTrafficId = String(SimVar.GetSimVarValue('L:A339X_TRAFFIC_ACTIVE_ID', 'number'));
149+
if(activeTrafficId === this.selectedTrafficId) {
150+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_ACTIVE_ID', 'number', '-1');
150151
return;
151152
}
152153
this.selectedTrafficIndex = -1;
153154
this.selectedTrafficId = "";
154155
this.trafficLayer.selectedTrafficId = "";
155156
}
156-
if(v && this.selectedTrafficIndex !== -1){
157-
this.trafficLayer.activeTrafficId = this.trafficLayer.selectedTrafficId;
157+
if(v && this.trafficLayer.selectedTrafficId === this.selectedTrafficId){
158+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_ACTIVE_ID', 'number', parseInt(this.trafficLayer.selectedTrafficId));
158159
}
159160
});
160161
// sub.on('set_map_efis_mode').handle((v) => this.mapMode.set(v));
@@ -252,7 +253,7 @@ export class CanvasMap extends DisplayComponent<CanvasMapProps> {
252253
});
253254

254255
sub.on('traffic').handle((data: NdTraffic[]) => {
255-
this.trafficLayer.displayHideCallsign = SimVar.GetSimVarValue('L:A32NX_TRAFFIC_SELECTOR_DISPLAY_HIDE_CALLSIGN', 'number') === 1;
256+
this.trafficLayer.displayHideCallsign = SimVar.GetSimVarValue('L:A339X_TRAFFIC_SELECTOR_DISPLAY_HIDE_CALLSIGN', 'number') === 1;
256257
this.handleNewTraffic(data);
257258
});
258259

@@ -429,8 +430,9 @@ export class CanvasMap extends DisplayComponent<CanvasMapProps> {
429430
this.traffic.push(intruder);
430431
});
431432
}
432-
if(this.trafficLayer.activeTrafficId.length && !this.traffic.find(e => e.ID === this.trafficLayer.activeTrafficId)) {
433-
this.trafficLayer.activeTrafficId = "";
433+
const activeTrafficId = String(SimVar.GetSimVarValue('L:A339X_TRAFFIC_ACTIVE_ID', 'number'));
434+
if(activeTrafficId !== "-1" && activeTrafficId.length && !this.traffic.find(e => String(e.ID) === activeTrafficId)) {
435+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_ACTIVE_ID', 'number', '-1');
434436
}
435437
if(this.selectedTrafficId.length) {
436438
this.selectedTrafficIndex = -1;

hdw-a339x-common/src/systems/instruments/src/ND/shared/map/TrafficLayer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ export class TrafficLayer implements MapLayer<NdTraffic> {
2323
public trafficIsSelected: boolean = false;
2424
public displayHideCallsign: boolean = false;
2525
public selectedTrafficId: string = "";
26-
public activeTrafficId: string = "";
2726

2827
constructor(private readonly canvasMap: CanvasMap) {}
2928

@@ -57,9 +56,10 @@ export class TrafficLayer implements MapLayer<NdTraffic> {
5756
intruder: NdTraffic,
5857
) {
5958
let color;
59+
const activeTrafficId = String(SimVar.GetSimVarValue('L:A339X_TRAFFIC_ACTIVE_ID', 'number'));
6060
const ownHeading = Math.round(SimVar.GetSimVarValue('PLANE HEADING DEGREES MAGNETIC', 'degree'));
6161
const trafficRotation = 360 - ((ownHeading - intruder.heading) % 360);
62-
const trafficActive = this.activeTrafficId === intruder.ID;
62+
const trafficActive = activeTrafficId === intruder.ID;
6363
const isSelected = trafficActive || this.selectedTrafficId === intruder.ID;
6464

6565
switch (intruder.intrusionLevel) {

hdw-a339x/src/base/headwindsim-aircraft-a330-900/SimObjects/Airplanes/Headwind_A330neo/model/A330_NEO_INTERIOR.xml

+22-3
Original file line numberDiff line numberDiff line change
@@ -799,11 +799,12 @@
799799
<!-- Effects such as pixels and glass reflections require the screen brightness to be increased -->
800800
<EMISSIVE_CODE>12</EMISSIVE_CODE>
801801
</UseTemplate>
802-
803-
<!-- ATSAW TRAFFIC SELECTOR PB -->
802+
803+
<!-- CPT ATSAW TRAFFIC SELECTOR PB -->
804804
<UseTemplate Name="HDW_Airbus_ATSAW_TrafficSelector_Knob">
805+
<SIDE>L</SIDE>
805806
<NODE_ID>KNOB_TRAFFICSELECTOR_CAPT</NODE_ID>
806-
<PART_ID>KNOB_ATSAW_KNOB_TRAFFICSELECTOR</PART_ID>
807+
<PART_ID>KNOB_ATSAW_KNOB_TRAFFICSELECTOR_CAPT</PART_ID>
807808
<ANIM_NAME_KNOB>KNOB_TRAFFICSELECTOR_CAPT</ANIM_NAME_KNOB>
808809
<ANIM_NAME_PUSHPULL>PUSH_TRAFFICSELECTOR_CAPT</ANIM_NAME_PUSHPULL>
809810
<ANIMREF_ID>-1</ANIMREF_ID>
@@ -1016,6 +1017,24 @@
10161017
<POTENTIOMETER>90</POTENTIOMETER>
10171018
</UseTemplate>
10181019

1020+
<!-- F/O ATSAW TRAFFIC SELECTOR PB -->
1021+
<UseTemplate Name="HDW_Airbus_ATSAW_TrafficSelector_Knob">
1022+
<SIDE>R</SIDE>
1023+
<NODE_ID>KNOB_TRAFFICSELECTOR_FO</NODE_ID>
1024+
<PART_ID>KNOB_ATSAW_KNOB_TRAFFICSELECTOR_FO</PART_ID>
1025+
<ANIM_NAME_KNOB>KNOB_TRAFFICSELECTOR_FO</ANIM_NAME_KNOB>
1026+
<ANIM_NAME_PUSHPULL>PUSH_TRAFFICSELECTOR_FO</ANIM_NAME_PUSHPULL>
1027+
<ANIMREF_ID>-1</ANIMREF_ID>
1028+
<ANIMTIP_0>TT:COCKPIT.TOOLTIPS.AUTOPILOT_PANEL_ALT_DECREASE</ANIMTIP_0>
1029+
<ANIMTIP_0_ON_CURSOR>TurnLeft</ANIMTIP_0_ON_CURSOR>
1030+
<ANIMTIP_1>TT:COCKPIT.TOOLTIPS.AUTOPILOT_PANEL_ALT_INCREASE</ANIMTIP_1>
1031+
<ANIMTIP_1_ON_CURSOR>TurnRight</ANIMTIP_1_ON_CURSOR>
1032+
<ANIMTIP_2>TT:COCKPIT.TOOLTIPS.AUTOPILOT_PANEL_ENGAGE_MANAGED_ALTITUDE_MODE</ANIMTIP_2>
1033+
<ANIMTIP_2_ON_CURSOR>UpArrow</ANIMTIP_2_ON_CURSOR>
1034+
<ANIMTIP_3>TT:COCKPIT.TOOLTIPS.AUTOPILOT_PANEL_ENGAGE_SELECTED_ALTITUDE_MODE</ANIMTIP_3>
1035+
<ANIMTIP_3_ON_CURSOR>DownArrow</ANIMTIP_3_ON_CURSOR>
1036+
</UseTemplate>
1037+
10191038
<!-- F/O EFIS BKUP SPD ALT -->
10201039
<UseTemplate Name="FBW_Anim_Interactions">
10211040
<ANIM_TYPE>KORRY_BUTTON</ANIM_TYPE>

hdw-a339x/src/behavior/src/A339X_Interior_ATSAW.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@
2525
<Component ID="#NODE_ID#" Node="#NODE_ID#">
2626
<UseTemplate Name="ASOBO_GT_Knob_Infinite_PushPull">
2727
<ANTICLOCKWISE_CODE>
28-
(&gt;H:A330_Neo_ATSAW_TRAFFIC_DEC)
28+
(&gt;H:A330_Neo_#SIDE#_ATSAW_TRAFFIC_DEC)
2929
</ANTICLOCKWISE_CODE>
3030
<CLOCKWISE_CODE>
31-
(&gt;H:A330_Neo_ATSAW_TRAFFIC_INC)
31+
(&gt;H:A330_Neo_#SIDE#_ATSAW_TRAFFIC_INC)
3232
</CLOCKWISE_CODE>
3333
<PULL_CODE>
34-
(&gt;H:A330_Neo_ATSAW_TRAFFIC_PULL)
34+
(&gt;H:A330_Neo_#SIDE#_ATSAW_TRAFFIC_PULL)
3535
</PULL_CODE>
3636
<PUSH_CODE>
37-
(&gt;H:A330_Neo_ATSAW_TRAFFIC_PUSH)
37+
(&gt;H:A330_Neo_#SIDE#_ATSAW_TRAFFIC_PUSH)
3838
</PUSH_CODE>
3939

4040
<CENTER_RADIUS>0</CENTER_RADIUS>
@@ -45,4 +45,4 @@
4545
</UseTemplate>
4646
</Component>
4747
</Template>
48-
</ModelBehaviors>
48+
</ModelBehaviors>

hdw-a339x/src/systems/instruments/src/ND/instrument.tsx

+18-10
Original file line numberDiff line numberDiff line change
@@ -188,16 +188,24 @@ class NDInstrument implements FsInstrument {
188188
}
189189

190190
public onInteractionEvent(args: string[]): void {
191-
const trafficSelectorMap = {
192-
"A330_Neo_ATSAW_TRAFFIC_DEC": ["traffic_selector_value", -1],
193-
"A330_Neo_ATSAW_TRAFFIC_INC": ["traffic_selector_value", 1],
194-
"A330_Neo_ATSAW_TRAFFIC_PULL": ["traffic_selector_state", true],
195-
"A330_Neo_ATSAW_TRAFFIC_PUSH": ["traffic_selector_state", false],
196-
}
197-
if (args[0].endsWith(`A32NX_EFIS_${this.efisSide}_CHRONO_PUSHED`)) {
198-
this.bus.getPublisher<NDControlEvents>().pub('chrono_pushed', undefined);
199-
} else if (trafficSelectorMap[args[0]]) {
200-
this.bus.getPublisher<NDControlEvents>().pub(trafficSelectorMap[args[0]][0], trafficSelectorMap[args[0]][1]);
191+
switch(true) {
192+
case args[0].endsWith(`A32NX_EFIS_${this.efisSide}_CHRONO_PUSHED`):
193+
this.bus.getPublisher<NDControlEvents>().pub('chrono_pushed', undefined);
194+
break;
195+
case args[0].endsWith(`A330_Neo_${this.efisSide}_ATSAW_TRAFFIC_DEC`):
196+
this.bus.getPublisher<NDControlEvents>().pub('traffic_selector_value', -1);
197+
break;
198+
case args[0].endsWith(`A330_Neo_${this.efisSide}_ATSAW_TRAFFIC_INC`):
199+
this.bus.getPublisher<NDControlEvents>().pub('traffic_selector_value', 1);
200+
break;
201+
case args[0].endsWith(`A330_Neo_${this.efisSide}_ATSAW_TRAFFIC_PULL`):
202+
this.bus.getPublisher<NDControlEvents>().pub('traffic_selector_state', true);
203+
break;
204+
case args[0].endsWith(`A330_Neo_${this.efisSide}_ATSAW_TRAFFIC_PUSH`):
205+
this.bus.getPublisher<NDControlEvents>().pub('traffic_selector_state', false);
206+
break;
207+
default:
208+
break;
201209
}
202210

203211
this.hEventPublisher.dispatchHEvent(args[0]);

hdw-a339x/src/systems/tcas/src/components/TcasComputer.ts

+31-35
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ export class TcasComputer implements TcasComponent {
293293
this.upAdvisoryStatus = new LocalSimVar('L:A32NX_TCAS_RA_UP_ADVISORY_STATUS', 'Enum');
294294
this.downAdvisoryStatus = new LocalSimVar('L:A32NX_TCAS_RA_DOWN_ADVISORY_STATUS', 'Enum');
295295
this.selectedTrafficDataSource = ({"NONE": 0, "SIM": 1, "VATSIM": 2, "IVAO": 3})[NXDataStore.get("CONFIG_TRAFFIC_SOURCE", "NONE")];
296-
SimVar.SetSimVarValue('L:A32NX_TRAFFIC_SELECTOR_SOURCE', 'number', this.selectedTrafficDataSource);
297-
SimVar.SetSimVarValue('L:A32NX_TRAFFIC_SELECTOR_DISPLAY_HIDE_CALLSIGN', 'number', NXDataStore.get("CONFIG_TRAFFIC_DISPLAY_HIDE_CALLSIGN", "YES") === "YES" ? 1 : 0);
296+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_SELECTOR_SOURCE', 'number', this.selectedTrafficDataSource);
297+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_SELECTOR_DISPLAY_HIDE_CALLSIGN', 'number', NXDataStore.get("CONFIG_TRAFFIC_DISPLAY_HIDE_CALLSIGN", "YES") === "YES" ? 1 : 0);
298298
this.airTraffic = [];
299299
this.raTraffic = [];
300300
this.sensitivity = new LocalSimVar('L:A32NX_TCAS_SENSITIVITY', 'number');
@@ -316,7 +316,7 @@ export class TcasComputer implements TcasComponent {
316316
}
317317

318318
this.secondsSinceLastTrafficDataUpdate += _deltaTime / 1000;
319-
if(this.secondsSinceLastTrafficDataUpdate < 5) {
319+
if (this.secondsSinceLastTrafficDataUpdate < 5) {
320320
return;
321321
}
322322

@@ -334,47 +334,39 @@ export class TcasComputer implements TcasComponent {
334334
(traffic) =>
335335
new Promise((resolve) => {
336336
const existing = traffic.trafficData;
337-
fetchPilotInfo(
338-
traffic.ID,
339-
port,
340-
this.selectedTrafficDataSource
341-
)
337+
fetchPilotInfo(traffic.ID, port, this.selectedTrafficDataSource)
342338
.then((resp) => {
343339
const data = resp.data;
344-
if (existing) {
345-
existing.groundspeed = data.groundSpeed;
346-
traffic.setTrafficData(existing);
347-
} else {
348-
let callsign = data.msfs.callsign;
349-
const groundspeed = data.groundSpeed;
350-
const transponder = data.transponder;
351-
let wtc = data.msfs.wtc;
352-
353-
if (this.selectedTrafficDataSource === 2 && data.vatsim.callsign && data.vatsim.wtc) {
354-
callsign = data.vatsim.callsign;
355-
wtc = data.vatsim.wtc;
356-
} else if (this.selectedTrafficDataSource === 3 && data.ivao.callsign && data.ivao.wtc) {
357-
callsign = data.ivao.callsign;
358-
wtc = data.ivao.wtc;
359-
}
360-
traffic.setTrafficData({
361-
callsign,
362-
groundspeed,
363-
wtc,
364-
transponder,
365-
});
340+
341+
const trafficData = {
342+
groundspeed: data.groundSpeed,
343+
transponder: data.transponder,
344+
wtc: 'M',
345+
};
346+
if (data.msfs) {
347+
trafficData.callsign = data.msfs.callsign;
348+
trafficData.wtc = data.msfs.wtc;
349+
}
350+
351+
if (this.selectedTrafficDataSource === 2 && data.vatsim.callsign && data.vatsim.wtc) {
352+
trafficData.callsign = data.vatsim.callsign;
353+
trafficData.wtc = data.vatsim.wtc;
354+
} else if (this.selectedTrafficDataSource === 3 && data.ivao.callsign && data.ivao.wtc) {
355+
trafficData.callsign = data.ivao.callsign;
356+
trafficData.wtc = data.ivao.wtc;
366357
}
358+
traffic.setTrafficData(trafficData);
359+
367360
resolve(null);
368361
})
369362
.catch((err) => {
370363
resolve(null);
371364
});
372365
}),
373366
),
374-
)
375-
.then((_unused) => {
367+
).then((_unused) => {
376368
this.secondsSinceLastTrafficDataUpdate = 0;
377-
})
369+
});
378370
}
379371
}
380372
/**
@@ -421,8 +413,12 @@ export class TcasComputer implements TcasComponent {
421413
? TcasMode.STBY
422414
: this.tcasSwitchPos,
423415
); // 34-43-00:A32
424-
425-
this.selectedTrafficDataSource = SimVar.GetSimVarValue("L:A32NX_TRAFFIC_SELECTOR_SOURCE", 'number');
416+
const currentSource = this.selectedTrafficDataSource;
417+
this.selectedTrafficDataSource = SimVar.GetSimVarValue("L:A339X_TRAFFIC_SELECTOR_SOURCE", 'number');
418+
if(this.selectedTrafficDataSource === 0 && currentSource > 0) {
419+
for(const entry of this.airTraffic)
420+
entry.setTrafficData(null);
421+
}
426422
}
427423

428424
/**

hdw-common/src/systems/instruments/src/EFB/Settings/Pages/AtsuAocPage.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ export const AtsuAocPage = () => {
4343
const handleTrafficSourceChange = (entry: string) => {
4444
const map = {"NONE": 0, "SIM":1, "VATSIM": 2, "IVAO": 3};
4545
setTrafficSource(entry);
46-
SimVar.SetSimVarValue('L:A32NX_TRAFFIC_SELECTOR_SOURCE', 'number', map[entry]);
46+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_SELECTOR_SOURCE', 'number', map[entry]);
4747
}
4848

4949
const handleTrafficDefaultChange = (entry: string) => {
5050
setTrafficDisplayHideCallsign(entry);
51-
SimVar.SetSimVarValue('L:A32NX_TRAFFIC_SELECTOR_DISPLAY_HIDE_CALLSIGN', 'number', entry === "YES" ? 1 : 0);
51+
SimVar.SetSimVarValue('L:A339X_TRAFFIC_SELECTOR_DISPLAY_HIDE_CALLSIGN', 'number', entry === "YES" ? 1 : 0);
5252
}
5353

5454
const handleAcarsIdentifierInput = (network: string | AcarsNetwork, value: string) => {

0 commit comments

Comments
 (0)