138 lines
4.4 KiB
Text
138 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();
|
||
|
}
|
||
|
}
|
||
|
}
|