# 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(); } } }