1
0
Fork 0
fgdata/Nasal/canvas/map/GPS.lcontroller
2018-01-29 20:44:36 +00:00

82 lines
2.6 KiB
Text

# See: http://wiki.flightgear.org/MapStructure
# GPS line. Displays GPS leg information
# Class things:
var name = 'GPS';
var parents = [SymbolLayer.Controller];
var __self__ = caller(0)[0];
SymbolLayer.Controller.add(name, __self__);
SymbolLayer.add(name, {
parents: [MultiSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
df_options: { # default configuration options
from_node : "/instrumentation/gps/wp/wp[0]",
to_node : "/instrumentation/gps/wp/wp[1]",
trigger_node1 : "/instrumentation/gps/wp/wp[1]/longitude-deg",
trigger_node2 : "/instrumentation/gps/wp/wp[1]/latitude-deg",
trigger_node3 : "/instrumentation/gps/wp/wp[1]/altitude-ft",
}
});
var new = func(layer) {
var m = {
parents: [__self__],
layer: layer,
map: layer.map,
listeners: [],
last_result: [],
};
layer.searcher._equals = func(l,r) 0; # TODO: create model objects instead?
append(m.listeners, setlistener(layer.options.trigger_node1, func m.layer.update(), 0, 0));
append(m.listeners, setlistener(layer.options.trigger_node2, func m.layer.update(), 0, 0));
append(m.listeners, setlistener(layer.options.trigger_node3, func m.layer.update(), 0, 0));
m.addVisibilityListener();
return m;
};
var del = func() {
foreach (var l; me.listeners)
removelistener(l);
};
var searchCmd = func() {
var coords = [];
var from = props.globals.getNode(me.layer.options.from_node);
var to = props.globals.getNode(me.layer.options.to_node);
# Perform various checks for valid data. Unfortunately to avoid either
# having continual triggering every frame as the property values are updated
# (though not changed), we need to trigger this on any changes to the waypoint.
# In an initial case, not all the properties may have been initialized yet.
if ((from == nil) or (to == nil)) return [];
if (to.getNode("valid").getBoolValue() == 0) return [];
if (to.getValue("longitude-deg") == nil) return [];
if (to.getValue("latitude-deg") == nil) return [];
# Nil altitude is valid - set to 0.
# if (to.getValue("altitude-ft") == nil) return [];
append(coords, {lon: from.getValue("longitude-deg"),
lat: from.getValue("latitude-deg"),
alt: from.getValue("altitude-ft") });
append(coords, {lon: to.getValue("longitude-deg"),
lat: to.getValue("latitude-deg"),
alt: to.getValue("altitude-ft") or 0.0});
var lines = [];
append(lines, {
id: to.getNode("name", 1).getValue(),
type: "gps",
path: coords,
equals: func(o){
return (me.path == o.path and me.type == o.type);
}
});
return lines;
};