zkv1000 / Nasal / maps / tcas.nas /
Newer Older
117 lines | 3.777kb
add TCAS
Sébastien MARQUE authored on 2017-12-21
1
# vim: set foldmethod=marker foldmarker={{{,}}} :
2

            
3
var TcasItemClass = {
4
# get data from AI and multiplayers {{{
5
    new : func(canvasGroup, index) {
6
        var m = {parents : [TcasItemClass]};
7
        m._group = canvasGroup.createChild("group", "TcasItem_" ~ index);
8

            
relocate SVG files in Models...
Sébastien MARQUE authored on 2017-12-31
9
        canvas.parsesvg(m._group, data.zkv1000_reldir ~ "Models/tcas.svg");
add TCAS
Sébastien MARQUE authored on 2017-12-21
10
        m._can = {
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
11
            Alt : m._group.getElementById("Alt_above").setVisible(0),
add TCAS
Sébastien MARQUE authored on 2017-12-21
12
            Arrow : [
13
                m._group.getElementById("Arrow_climb").setVisible(0),
14
                m._group.getElementById("Arrow_descent").setVisible(0)
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
15
            ],
16
            Callsign: m._group.getElementById("Callsign").setVisible(0),
17
            ThreadLevel: [],
add TCAS
Sébastien MARQUE authored on 2017-12-21
18
        };
19

            
20
        for (var i=0; i<4; i+=1)
21
            append(m._can.ThreadLevel,
22
                    m._group.getElementById("Thread_Level_" ~ i).setVisible(0));
23

            
24
        m._colors = [ '#00ffff', '#00ffff', '#ff7f2a', '#ff0000' ];
25

            
26
        return m;
27
    },
28

            
fix bad orientation on tcas ...
Sébastien MARQUE authored on 2021-03-22
29
    setData : func(lat, lon, alt, vs, level, callsign, orientation) {
add TCAS
Sébastien MARQUE authored on 2017-12-21
30
        me._group.setVisible(1);
31
        me._group.setGeoPosition(lat, lon);
32
        
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
33
        if (alt and level)
34
            me._can.Alt
add TCAS
Sébastien MARQUE authored on 2017-12-21
35
                .setText(sprintf("%+i", alt))
36
                .set('fill', me._colors[level])
fix traffic display orientat...
Sébastien MARQUE authored on 2021-04-12
37
                .setRotation(orientation)
add TCAS
Sébastien MARQUE authored on 2017-12-21
38
                .setVisible(1);
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
39
        else
40
            me._can.Alt.setVisible(0);
add TCAS
Sébastien MARQUE authored on 2017-12-21
41
                
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
42
        if (abs(vs) > 50 and level > 1) {
43
            me._can.Arrow[vs < 0]
add TCAS
Sébastien MARQUE authored on 2017-12-21
44
                .set('fill', me._colors[level])
45
                .set('stroke', me._colors[level])
fix traffic display orientat...
Sébastien MARQUE authored on 2021-04-12
46
                .setRotation(orientation)
add TCAS
Sébastien MARQUE authored on 2017-12-21
47
                .setVisible(1);
48

            
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
49
            me._can.Arrow[vs > 0].setVisible(0);
add TCAS
Sébastien MARQUE authored on 2017-12-21
50
        }
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
51
        else {
52
            me._can.Arrow[0].setVisible(0);
53
            me._can.Arrow[1].setVisible(0);
54
        }
55

            
56
        for (var i = 0; i < 4; i += 1)
fix traffic display orientat...
Sébastien MARQUE authored on 2021-04-12
57
            me._can.ThreadLevel[i]
58
                .setRotation(orientation)
59
                .setVisible(level == i);
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
60

            
61
        me._can.Callsign
62
            .setText(callsign)
63
            .set('fill', me._colors[level])
fix traffic display orientat...
Sébastien MARQUE authored on 2021-04-12
64
            .setRotation(orientation)
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
65
            .setVisible(1);
add TCAS
Sébastien MARQUE authored on 2017-12-21
66
    },
67
};
68
# }}} 
69

            
70
var MapTcas = {
71
# init TCAS layer and update {{{
72
    new : func(device, group) {
73
        var m = {parents:[MapTcas]}; 
fix when TCAS isn't availabl...
Sébastien MARQUE authored on 2020-04-21
74
        m.device = device;
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
75
        m.visibility = 0;
76
        m.group = group.createChild('map', 'tcas')
77
            .setTranslation(
78
                m.device.role == 'MFD' ? (m.device.data.mapview[0] + m.device.data.mapclip.left)/2 : 120,
79
                m.device.role == 'MFD' ? 400 : 600)
80
            .setVisible(m.visibility);
81
        m._item      = [];
82
        m._itemIndex = 0;
83
        m._itemCount = 0;
add TCAS
Sébastien MARQUE authored on 2017-12-21
84
        return m;
85
    },
86

            
poweroff improved
Sébastien MARQUE authored on 2020-05-16
87
    off: func {
88
        me.setVisible(0);
89
    },
90

            
add TCAS
Sébastien MARQUE authored on 2017-12-21
91
    update : func() {
traffic alert and display
Sébastien MARQUE authored on 2020-06-08
92
        if (me.group.getVisible() == 0)
add TCAS
Sébastien MARQUE authored on 2017-12-21
93
            return;
94
        me.group._node.getNode('ref-lat', 1).setDoubleValue(data.lat);
95
        me.group._node.getNode('ref-lon', 1).setDoubleValue(data.lon);
close issue with misplacing ...
Sébastien MARQUE authored on 2020-06-22
96
        me.group.setRange(me.device.data['range-nm']/2);
add TCAS
Sébastien MARQUE authored on 2017-12-21
97
        me._itemIndex = 0;
fix traffic display orientat...
Sébastien MARQUE authored on 2021-04-12
98
        var normOrientation = -me.device.data.orientation.map * D2R;
add TCAS
Sébastien MARQUE authored on 2017-12-21
99
        foreach (var ac; data.tcas) {
100
            if (me._itemIndex >= me._itemCount) {
101
                append(me._item, TcasItemClass.new(me.group, me._itemIndex));
102
                me._itemCount += 1;
103
            }
fix traffic display orientat...
Sébastien MARQUE authored on 2021-04-12
104
            me._item[me._itemIndex].setData(ac.lat, ac.lon, ac.alt, ac.vs, ac.level, ac.callsign, normOrientation);
add TCAS
Sébastien MARQUE authored on 2017-12-21
105
            me._itemIndex += 1;
106
        }
107
                
108
        for (; me._itemIndex < me._itemCount; me._itemIndex += 1) {
109
            me._item[me._itemIndex]._group.setVisible(0);
110
        }
111
    },
112

            
113
    setVisible : func (v) {
114
        me.group.setVisible(v);
115
    },
116
};
117
# }}}