101 lines
2.8 KiB
Text
101 lines
2.8 KiB
Text
|
# See: http://wiki.flightgear.org/MapStructure
|
||
|
# Class things:
|
||
|
var name = 'HOLD';
|
||
|
var parents = [canvas.SymbolLayer.Controller];
|
||
|
var __self__ = caller(0)[0];
|
||
|
|
||
|
canvas.SymbolLayer.Controller.add(name, __self__);
|
||
|
canvas.SymbolLayer.add(name, {
|
||
|
parents: [MultiSymbolLayer],
|
||
|
type: name, # Symbol type
|
||
|
df_controller: __self__, # controller to use by default -- this one
|
||
|
});
|
||
|
var new = func(layer) {
|
||
|
var m = {
|
||
|
parents: [__self__],
|
||
|
layer: layer,
|
||
|
#map: layer.map,
|
||
|
listeners: [],
|
||
|
};
|
||
|
#debug.dump(layer.parents);
|
||
|
layer.searcher._equals = func(a,b) a.id == b.id;
|
||
|
#append(m.listeners, setlistener(layer.options.fplan_active, func m.layer.update() ));
|
||
|
#m.addVisibilityListener();
|
||
|
|
||
|
return m;
|
||
|
};
|
||
|
|
||
|
var del = func() {
|
||
|
foreach (var l; me.listeners)
|
||
|
removelistener(l);
|
||
|
};
|
||
|
|
||
|
var searchCmd = func {
|
||
|
var results = [];
|
||
|
var node = props.globals.getNode(me.layer.options.hold_node);
|
||
|
var wp_id = node.getValue('wp');
|
||
|
if(wp_id == nil or wp_id == '' or wp_id == '---'){
|
||
|
return [];
|
||
|
}
|
||
|
var pointsNode = node.getNode('points');
|
||
|
var pointNode = nil;
|
||
|
var lat = nil;
|
||
|
var lon = nil;
|
||
|
if(pointsNode != nil)
|
||
|
pointNode = pointsNode.getNode('point', 0);
|
||
|
if (pointNode != nil){
|
||
|
lat = pointNode.getValue('lat');
|
||
|
lon = pointNode.getValue('lon');
|
||
|
}
|
||
|
if (pointNode != nil and lat != nil and lon != nil){
|
||
|
var r = node.getValue('crs');
|
||
|
var d = node.getValue('dist');
|
||
|
var t = node.getValue('turn');
|
||
|
var model = {
|
||
|
parents: [geo.Coord],
|
||
|
id: wp_id~r~d~t,
|
||
|
pos: pointNode,
|
||
|
type: 'pattern',
|
||
|
latlon: func(){
|
||
|
return [
|
||
|
lat,
|
||
|
lon
|
||
|
];
|
||
|
},
|
||
|
radial: r,
|
||
|
dist: d,
|
||
|
turn: t,
|
||
|
equals: func(o){me.id == o.id and me.radial == o.radial}
|
||
|
};
|
||
|
append(results, model);
|
||
|
} else {
|
||
|
var wp_idx = node.getValue('wp_id');
|
||
|
var fp = flightplan();
|
||
|
var wp = fp.getWP(wp_idx);
|
||
|
#print("HOLD AT "~wp.wp_lat~", "~wp.wp_lon);
|
||
|
if(wp == nil or wp.id != wp_id)
|
||
|
return [];
|
||
|
var wp_lat = wp.wp_lat;
|
||
|
var wp_lon = wp.wp_lon;
|
||
|
var model = {
|
||
|
parents: [geo.Coord],
|
||
|
id: wp_id~'-'~wp_idx~'-inactive',
|
||
|
pos: nil,
|
||
|
type: 'hold_symbol',
|
||
|
latlon: func(){
|
||
|
return [
|
||
|
wp_lat,
|
||
|
wp_lon
|
||
|
];
|
||
|
},
|
||
|
radial: node.getValue('crs'),
|
||
|
dist: node.getValue('dist'),
|
||
|
turn: node.getValue('turn'),
|
||
|
equals: func(o){me.id == o.id}
|
||
|
};
|
||
|
append(results, model);
|
||
|
}
|
||
|
|
||
|
return results;
|
||
|
}
|