prepare for adopting MapStructure
[fg:hoorays-fgdata.git] / Nasal / canvas / map / aircraftpos.controller
1 # Class things:
2 var parents = [Map.Controller];
3 var __self__ = caller(0)[0];
4 Map.Controller.add("Aircraft position", __self__);
5 Map.df_controller = __self__;
6 var new = func(map) {
7         var m = {
8                 parents: [__self__],
9                 map: map,
10                 _pos: nil, _time: nil,
11         };
12         m.timer = maketimer(0, m, update_pos);
13         m.timer.start();
14         return m;
15 };
16 var del = func(map) {
17         if (map != me.map) die();
18         me.timer.stop();
19 };
20
21 # Controller methods
22 var update_pos = func {
23         var (lat,lon) = (var pos = geo.aircraft_position()).latlon();
24         var time = systime();
25         me.map.setPos(lat, lon, getprop("/orientation/heading-deg"));
26         if (me._pos == nil)
27                 me._pos = geo.Coord.new(pos);
28         else {
29                 var dist = me._pos.direct_distance_to(pos);
30                 # 2 NM until we update again
31                 if (dist < 2 * NM2M) return;
32                 # Update at most every 4 seconds to avoid escessive stutter:
33                 elsif (time - me._time < 4) return;
34         }
35         #print("update aircraft position");
36         var (x,y,z) = pos.xyz();
37         me._pos.set_xyz(x,y,z);
38         me._time = time;
39         me.map.update();
40 };
41