1
0
Fork 0
fgdata/Nasal/canvas/map/WPT-airbus.lcontroller

137 lines
4 KiB
Text

# See: http://wiki.flightgear.org/MapStructure
# Class things:
var name = 'WPT-airbus';
var parents = [canvas.SymbolLayer.Controller];
var __self__ = caller(0)[0];
canvas.SymbolLayer.Controller.add(name, __self__);
canvas.SymbolLayer.add(name, {
parents: [canvas.MultiSymbolLayer],
type: name, # Symbol type
df_controller: __self__, # controller to use by default -- this one
df_options: { # default configuration options
fix_symbol: func(group){
group.createChild('path')
.moveTo(-10,0)
.lineTo(0,-17)
.lineTo(10,0)
.lineTo(0,17)
.close()
.setStrokeLineWidth(3)
.setColor(1,1,1)
.setScale(1);
},
vor_symbol: 'Nasal/canvas/map/Airbus/Images/airbus_vor.svg',
airport_symbol: 'Nasal/canvas/map/Airbus/Images/airbus_airport.svg',
ndb_symbol: func(group){
group.createChild('path')
.moveTo(-15,15)
.lineTo(0,-15)
.lineTo(15,15)
.close()
.setStrokeLineWidth(3)
#.setColor(0.69,0,0.39)
#.setTranslation(-24, -24),
.setScale(1,1);
}
},
df_style: {
active_wp_color: [0.4,0.7,0.4],
current_wp_color: [1,1,1],
translation: {
'airport': [-24,-24],
'vor': [-24,-24]
}
},
toggle_cstr: 0
});
var new = func(layer) {
var m = {
parents: [__self__],
layer: layer,
map: layer.map,
listeners: [],
};
layer.searcher._equals = func(a,b) a.equals(b);
var driver = opt_member(m.layer.options, 'route_driver');
if(driver == nil){
driver = RouteDriver.new();
}
var driver_listeners = driver.getListeners();
foreach(var listener; driver_listeners){
append(m.listeners, setlistener(listener, func m.layer.update()));
}
m.route_driver = driver;
return m;
};
var del = func() {
foreach (var l; me.listeners)
removelistener(l);
};
var WPTModel = {
new: func(fp, idx) {
var m = { parents:[WPTModel] };
var wp = fp.getWP(idx);
m.id = wp.id;
m.name = wp.wp_name;
m.alt = wp.alt_cstr;
m.spd = wp.speed_cstr;
m.type = wp.wp_type;
(m.lat,m.lon) = (wp.wp_lat,wp.wp_lon);
var is_rwy = (m.type == 'runway');
var id_len = size(m.id);
if(!is_rwy and id_len < 5){
if(id_len == 4 and airportinfo(m.id) != nil)
m.navtype = 'airport';
else {
var navaid = nil;
foreach(var t; ['vor', 'ndb']){
navaid = navinfo(m.lat, m.lon, t, m.id);
if(navaid != nil and size(navaid)){
m.navtype = t;
break;
}
}
if(navaid == nil or !size(navaid)) m.navtype = 'fix';
}
} else {
m.navtype = (is_rwy ? 'rwy' : 'fix');
}
m.wp = wp;
idx = wp.index;
m.idx = idx;
m.is_departure = (idx == 0 and is_rwy);
m.is_destination = (idx > 0 and is_rwy);
return m;
},
equals: func(other) {
# this is set on symbol init, so use this for equality...
me.name == other.name and me.alt == other.alt and
me.type == other.type and me.idx == other.idx and
me.navtype == other.navtype
},
};
var searchCmd = func {
var driver = me.route_driver;
if(!driver.shouldUpdate()) return [];
driver.update();
var result = [];
var planCount = driver.getNumberOfFlightPlans();
for(var idx = 0; idx < planCount; idx += 1){
var fp = driver.getFlightPlan(idx);
if(fp == nil) continue;
var fpSize = fp.getPlanSize(idx);
for (var i = 0; i < fpSize; i+=1){
if(!driver.shouldUpdate()) return[];
append(result, WPTModel.new(fp, i));
}
}
return result;
}