83 lines
2.6 KiB
Text
83 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;
|
||
|
};
|