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

137 lines
4.4 KiB
Text

# See: http://wiki.flightgear.org/MapStructure
# Class things:
var name = 'WPT-airbus';
var parents = [canvas.DotSym];
var __self__ = caller(0)[0];
canvas.DotSym.makeinstance( name, __self__ );
var element_type = "group";
var init = func {
var name = me.model.name;
var alt = me.model.alt;
var spd = me.model.spd;
var wp_group = me.element;
me.alt_path = nil;
var colors = [
'wp_color',
'current_wp_color',
'constraint_color',
'active_constraint_color',
'missed_constraint_color'
];
foreach(col; colors){
me[col] = me.getStyle(col, me.getOption(col));
}
var idLen = size(me.model.id);
var draw_sym = nil;
var navtype = me.model.navtype;
if (navtype == nil) navtype = 'fix';
if(navtype == 'airport')
draw_sym = me.options.airport_symbol;
elsif(navtype == 'vor')
draw_sym = me.options.vor_symbol;
elsif(navtype == 'ndb')
draw_sym = me.options.ndb_symbol;
else
draw_sym = me.options.fix_symbol;
me.wp_sym = me.element.createChild('group', 'wp-'~ me.model.idx);
if(typeof(draw_sym) == 'func')
draw_sym(me.wp_sym);
elsif(typeof(draw_sym) == 'scalar')
canvas.parsesvg(me.wp_sym, draw_sym);
var translation = me.getStyle('translation', {});
if(contains(translation, navtype)){
me.wp_sym.setTranslation(translation[navtype]);
}
me.text_wps = wp_group.createChild("text", "wp-text-" ~ me.model.idx)
.setDrawMode( canvas.Text.TEXT )
.setText(me.model.name)
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
.setFontSize(28)
.setTranslation(25,15)
.setColor(1,1,1);
me.text_alt = nil;
if(alt > 0 or spd > 0){
var cstr_txt = "\n";
if(alt > 0){
if(alt > 10000)
cstr_txt ~= sprintf('FL%3.0f', int(alt / 100));
else
cstr_txt ~= sprintf('%4.0f', int(alt));
}
if(spd > 0){
if(alt > 0) cstr_txt ~= "\n";
if(spd <= 1)
cstr_txt ~= sprintf('%1.2fM', spd);
else
cstr_txt ~= sprintf('%3.0fKT', int(spd));
}
me.text_alt = wp_group.createChild("text", "wp-alt-text-" ~ me.model.idx)
.setDrawMode( canvas.Text.TEXT )
.setText(cstr_txt)
.setFont("LiberationFonts/LiberationSans-Regular.ttf")
.setFontSize(28)
.setTranslation(25,15);
}
}
var draw = func{
var wp_group = me.element;
var alt = me.model.alt;
var i = me.model.idx;
var vnav_actv = getprop(me.options.ver_ctrl) == me.options.managed_val;
var curwp = getprop(me.options.current_wp);
if(alt > 0){
var wp_d = me.model.wp.distance_along_route;
var lvl_off_at = getprop(me.options.level_off_alt);
if(lvl_off_at == nil) lvl_off_at = 0;
if(me.alt_path == nil){
me.alt_path = wp_group.createChild("path").
setStrokeLineWidth(4).
moveTo(-22,0).
arcSmallCW(22,22,0,44,0).
arcSmallCW(22,22,0,-44,0);
}
if(vnav_actv){
if(lvl_off_at and (lvl_off_at - wp_d) > 0.5 and curwp == i)
me.alt_path.setColor(me.missed_constraint_color);
else
me.alt_path.setColor(me.active_constraint_color);
}
else
me.alt_path.setColor(me.constraint_color);
if(me.layer.toggle_cstr)
me.alt_path.show();
else
me.alt_path.hide();
} else {
if(me.alt_path != nil) me.alt_path.hide();
}
wp_group.set("z-index",4);
#var sym = me.element.getElementById('wp-' ~ me.model.idx);
if(alt > 0 and me.text_alt != nil){
if(vnav_actv)
me.text_alt.setColor(me.active_constraint_color);
else
me.text_alt.setColor(me.constraint_color);
}
if(i == curwp) {
me.wp_sym.setColor(me.current_wp_color);
me.text_wps.setColor(me.current_wp_color);
} else {
me.wp_sym.setColor(me.wp_color);
me.text_wps.setColor(me.wp_color);
}
if(me.model.is_departure or me.model.is_destination){
var prop = (me.model.is_departure ? 'departure' : 'destination');
var rwy = getprop("/autopilot/route-manager/"~prop~"/runway");
if(rwy != nil and size(rwy) > 0){
me.wp_sym.hide();
} else {
me.wp_sym.show();
}
}
}