From 1f109377135e8dbd4f4875eda67def74721f7d78 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Mar 2021 00:06:33 +0100 Subject: [PATCH 1/6] Some optimization with peak calc --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 6d226040..dca0c272 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -87,7 +87,7 @@ var updateTerrain = func { #var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 40); # if me.tileradiusw == 20 - var range_20f = range / 18.75; + var range_20f = range / 19.70; #18.75; var heading_sin = math.sin(DEG2RAD * heading); var heading_cos = math.cos(DEG2RAD * heading); @@ -184,7 +184,7 @@ var update_altitudes = func { else me.terrain_maxcol.setValue(1); } - if (me.min_altitude == 9999) { + if (me.avg_maxalt == -9999) { me.avg_minalt = me.min_altitude; me.avg_maxalt = me.max_altitude; } else { @@ -197,9 +197,10 @@ var update_altitudes = func { me.avg_peakalt = me.avg_maxalt - me.avg_minalt; if (me.onground == 0 and (me.max_altitude + 250) < me.refaltitudeft) { # 250 ft tollerance - me.hialtmode = 1; - var range = math.min(2400,(me.avg_maxalt - me.avg_minalt)) - 400; - if (range < 400) { # min elev number + me.hialtmode = 1; + var mxrange = math.max(2400,int(me.avg_peakalt*0.25)); + var range = math.min(mxrange,(me.avg_maxalt - me.avg_minalt)) - 250; + if (range < 360) { # min elev number me.bands_range = 0; } else { me.bands_range = int(range / 4); @@ -350,7 +351,7 @@ var draw = func { if (me.min_altitude != 9999) me.update_altitudes(); - var flatalt = (me.avg_peakalt != nil and me.avg_peakalt>499) ? 400 : 140; + var flatalt = (me.avg_peakalt == nil or me.avg_peakalt>499) ? 400 : 140; var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); if (vspeed30s<-500) me.refaltitudeft = math.max(me.avg_minalt , me.refaltitudeft + vspeed30s); From ec7850ba370000c0a9eb68a0fb6db605a23db5f9 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Mar 2021 00:07:20 +0100 Subject: [PATCH 2/6] VOR frequency change detection --- .../ND/canvas/framework/navdisplay.nas | 103 +++++++++++++----- 1 file changed, 74 insertions(+), 29 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 01569ad3..031ba7a6 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -25,58 +25,98 @@ var easeArrow = { m.duration = 0; m.startval = 0; m.diffval = 0; + m.nav = ""; + m.mhz = 0; + m.changed = 1; return m; }, setVisible: func(v) { - if (v == 1 and me.last_rot_deg == nil) me.reset(); + if (v == 1 and me.last_rot_deg == nil) me.setzero(); me.element.setVisible(v); }, hide: func { me.element.hide(); }, reset: func { + #me.element.hide(); + me.duration = 0; + me.changed = 1; + print("VOR reset"); + }, + setzero: func { + me.duration = 0; me.last_rot_deg = 360 - getprop("orientation/heading-deg"); me.last_rot_rad = me.last_rot_deg * D2R; - me.duration = 0; - print("VOR reset"); + me.req_rot_rad = me.last_rot_rad; + me.element.setRotation(me.last_rot_rad); + }, + listen: func (path) { + me.nav = path ~ "/frequencies/selected-mhz"; + setlistener(me.nav, func { + var freq = getprop(me.nav); + if (me.mhz != freq) { + me.mhz = freq; + me.reset(); + } + }); }, setRotation: func(rad) { var deg = 0; var gap = 0; + if (me.last_rot_deg == nil) me.setzero(); + rad = math.round(rad * 1000) / 1000; gap = math.abs(rad - me.req_rot_rad); - if (gap>0.001) { - if (me.duration>0) gap = math.abs(rad - me.last_rot_rad); - if (gap>=180*D2R) gap = 360*D2R - gap; + #if (gap>=180*D2R) gap = 360*D2R - gap; + if (gap>0.0009) { + #print("VOR rotation"); + #else if (me.duration>0) gap = math.abs(rad - me.last_rot_rad); deg = rad * 57.29578; - me.req_rot_rad = rad; - me.req_rot_deg = deg; - me.duration = 0; - if (gap>0.2) { - if (me.last_rot_deg == nil) me.reset(); + #me.duration = 0; + if (me.duration > 0) { + var add = deg - me.req_rot_deg; + if (add>=180) add = add - 360; + me.diffval += add; + me.duration = math.abs( math.round(me.diffval * 0.19) ); # rad 36/3 + } + else if (me.changed == 1) { + #if (me.last_rot_deg == nil) me.reset(); me.startval = me.last_rot_deg; me.diffval = deg - me.last_rot_deg; - if (me.diffval<0) me.diffval += 360; - me.time = 0; - me.duration = math.round(me.diffval * 0.21); # rad 36/3 + while (me.diffval<0) me.diffval += 360; + if (me.changed == 1 and me.diffval < 180) me.diffval += 360; + #print("VOR animation:" ~ me.diffval); + #me.time = 0; + me.duration = math.abs( math.round(me.diffval * 0.19) ); # rad 36/3 + } else { + me.duration = 0; } if (me.duration < 2) { me.last_rot_rad = rad; me.last_rot_deg = deg; me.element.setRotation(rad); me.duration = 0; + me.time = 0; + me.changed = 0; } + me.req_rot_rad = rad; + me.req_rot_deg = deg; } if (me.duration > 0) { var tx = me.time / me.duration; + if (tx>1) tx = 1; #thanks to https://easings.net/#easeOutCubic deg = (1 - math.pow(1 - tx, 3)) * me.diffval + me.startval; deg = math.mod(deg,360); #print("DEG: " ~ deg); - me.last_rot_deg = deg; - me.last_rot_rad = deg * D2R; - me.element.setRotation(me.last_rot_rad); + me.element.setRotation(deg * D2R); me.time += 1; - if (tx>=1) me.duration = 0; + if (tx>=1) { + me.duration = 0; + me.time = 0; + me.changed = 0; + me.last_rot_deg = deg; + me.last_rot_rad = rad; + } } } @@ -193,7 +233,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update foreach(var element; ["staArrowL2","staArrowR2","staArrowL","staArrowR"] ) me.symbols[element] = easeArrow.new( me.nd.getElementById(element).updateCenter() ); - + me.map = me.nd.createChild("map","map") .set("clip", "rect(124, 1024, 1024, 0)") .set("screen-range", 700) @@ -213,6 +253,12 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update return 0; } + # listen for (VOR) NAV frequency change + me.symbols.staArrowL.listen(vor1_path); + me.symbols.staArrowL2.listen(vor1_path); + me.symbols.staArrowR.listen(vor2_path); + me.symbols.staArrowR2.listen(vor2_path); + # another predicate for the draw controller var get_course_by_freq = func(freq) { if (freq == getprop(vor1_path~ "frequencies/selected-mhz")) @@ -610,36 +656,35 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec } var adf0hdg = getprop("/instrumentation/adf/indicated-bearing-deg"); var adf1hdg = getprop("/instrumentation/adf[1]/indicated-bearing-deg"); - if(!me.get_switch("toggle_centered")) - { + if(!me.get_switch("toggle_centered")) { if(me.in_mode("toggle_display_mode", ["PLAN"]) or (me.adirs_property.getValue() != 1 or (me.change_phase == 1) and (adirs_3.getValue() != 1 or att_switch.getValue() != me.attitude_heading_setting))) me.symbols.trkInd.hide(); else me.symbols.trkInd.show(); if((getprop("/instrumentation/nav[2]/in-range") and me.get_switch("toggle_lh_vor_adf") == 1)) { - me.symbols.staArrowL.setVisible(staPtrVis); me.symbols.staToL.setColor(0.195,0.96,0.097); me.symbols.staFromL.setColor(0.195,0.96,0.097); me.symbols.staArrowL.setRotation(nav0hdg*D2R); + me.symbols.staArrowL.setVisible(staPtrVis); } elsif(getprop("/instrumentation/adf/in-range") and (me.get_switch("toggle_lh_vor_adf") == -1)) { - me.symbols.staArrowL.setVisible(staPtrVis); me.symbols.staToL.setColor(0,0.6,0.85); me.symbols.staFromL.setColor(0,0.6,0.85); me.symbols.staArrowL.setRotation(adf0hdg*D2R); + me.symbols.staArrowL.setVisible(staPtrVis); } else { me.symbols.staArrowL.hide(); } if((getprop("/instrumentation/nav[3]/in-range") and me.get_switch("toggle_rh_vor_adf") == 1)) { - me.symbols.staArrowR.setVisible(staPtrVis); me.symbols.staToR.setColor(0.195,0.96,0.097); me.symbols.staFromR.setColor(0.195,0.96,0.097); me.symbols.staArrowR.setRotation(nav1hdg*D2R); - } elsif(getprop("/instrumentation/adf[1]/in-range") and (me.get_switch("toggle_rh_vor_adf") == -1)) { me.symbols.staArrowR.setVisible(staPtrVis); + } elsif(getprop("/instrumentation/adf[1]/in-range") and (me.get_switch("toggle_rh_vor_adf") == -1)) { me.symbols.staToR.setColor(0,0.6,0.85); me.symbols.staFromR.setColor(0,0.6,0.85); me.symbols.staArrowR.setRotation(adf1hdg*D2R); + me.symbols.staArrowR.setVisible(staPtrVis); } else { me.symbols.staArrowR.hide(); } @@ -671,28 +716,28 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec } else { me.symbols.trkInd.hide(); if((getprop("/instrumentation/nav[2]/in-range") and me.get_switch("toggle_lh_vor_adf") == 1)) { - me.symbols.staArrowL2.setVisible(staPtrVis); me.symbols.staFromL2.setColor(0.195,0.96,0.097); me.symbols.staToL2.setColor(0.195,0.96,0.097); me.symbols.staArrowL2.setRotation(nav0hdg*D2R); - } elsif(getprop("/instrumentation/adf/in-range") and (me.get_switch("toggle_lh_vor_adf") == -1)) { me.symbols.staArrowL2.setVisible(staPtrVis); + } elsif(getprop("/instrumentation/adf/in-range") and (me.get_switch("toggle_lh_vor_adf") == -1)) { me.symbols.staFromL2.setColor(0,0.6,0.85); me.symbols.staToL2.setColor(0,0.6,0.85); me.symbols.staArrowL2.setRotation(adf0hdg*D2R); + me.symbols.staArrowL2.setVisible(staPtrVis); } else { me.symbols.staArrowL2.hide(); } if((getprop("/instrumentation/nav[3]/in-range") and me.get_switch("toggle_rh_vor_adf") == 1)) { - me.symbols.staArrowR2.setVisible(staPtrVis); me.symbols.staFromR2.setColor(0.195,0.96,0.097); me.symbols.staToR2.setColor(0.195,0.96,0.097); me.symbols.staArrowR2.setRotation(nav1hdg*D2R); - } elsif(getprop("/instrumentation/adf[1]/in-range") and (me.get_switch("toggle_rh_vor_adf") == -1)) { me.symbols.staArrowR2.setVisible(staPtrVis); + } elsif(getprop("/instrumentation/adf[1]/in-range") and (me.get_switch("toggle_rh_vor_adf") == -1)) { me.symbols.staFromR2.setColor(0,0.6,0.85); me.symbols.staToR2.setColor(0,0.6,0.85); me.symbols.staArrowR2.setRotation(adf1hdg*D2R); + me.symbols.staArrowR2.setVisible(staPtrVis); } else { me.symbols.staArrowR2.hide(); } From 188808ce3bb840c1547497001c49515d92f7ada9 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Mar 2021 23:01:42 +0100 Subject: [PATCH 3/6] TERR fix for mode/range change On mode/range change display TERR only, hide numbers. --- .../ND/canvas/framework/navdisplay.nas | 2 +- .../Instruments/ND/canvas/map/TERRAIN.symbol | 2 +- Models/Instruments/ND/canvas/res/airbusND.svg | 61 ++++++++++--------- Models/Instruments/ND/canvas/style.nas | 44 +++++++------ 4 files changed, 58 insertions(+), 51 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 031ba7a6..8c4063d8 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -213,7 +213,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update # because things are much better configurable that way # now look up all required SVG elements and initialize member fields using the same name to have a convenient handle foreach(var element; ["dmeL","dmeR","vorL","vorR","vorLId","vorRId", - "status.wxr","status.wpt","status.sta","status.arpt","terrHI","terrLO","TerrLabel","terrAhead"]) + "status.wxr","status.wpt","status.sta","status.arpt","terrHI","terrLO","TerrLabel","terrAhead","terrAltGroup"]) me.symbols[element] = me.nd.getElementById(element); foreach(var element; ["dmeLDist","dmeRDist"]) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index dca0c272..0eeff7e9 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -18,7 +18,7 @@ var element_type = "group"; var terrain_minalt = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/min-altitude", 0,"INT"); var terrain_maxalt = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-altitude", -9999,"INT"); -var terrain_maxcol = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-color", 0,"INT"); # 0= grn, 1= yel, 2= red +var terrain_maxcol = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-color", -1,"INT"); # 0= grn, 1= yel, 2= red var terrain_alert = props.globals.getNode("/instrumentation/mk-viii/outputs/alert-mode"); diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index 8197f17a..c93d3d05 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -298,40 +298,41 @@ sodipodi:role="line" id="tspan1994" x="952.74292" - y="826.34009">TERRTERR000000000000 Date: Wed, 24 Mar 2021 22:04:08 +0100 Subject: [PATCH 4/6] TERR - separated values from each ND --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 30 ++++++++------ Models/Instruments/ND/canvas/style.nas | 41 ++++++++++--------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 0eeff7e9..f55dba20 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -16,10 +16,6 @@ DotSym.makeinstance( name, __self__ ); var element_type = "group"; -var terrain_minalt = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/min-altitude", 0,"INT"); -var terrain_maxalt = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-altitude", -9999,"INT"); -var terrain_maxcol = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-color", -1,"INT"); # 0= grn, 1= yel, 2= red - var terrain_alert = props.globals.getNode("/instrumentation/mk-viii/outputs/alert-mode"); var tile_list = [ @@ -91,8 +87,10 @@ var updateTerrain = func { var heading_sin = math.sin(DEG2RAD * heading); var heading_cos = math.cos(DEG2RAD * heading); - var proj_lon = pos_lon + ((col * range_20f * math.sin(DEG2RAD * (heading - 90))) / 60); - var proj_lat = pos_lat + ((col * range_20f * math.cos(DEG2RAD * (heading - 90))) / 60); + var col_x_range20f = col * range_20f; + + var proj_lon = pos_lon + ((col_x_range20f * math.sin(DEG2RAD * (heading - 90))) / 60); + var proj_lat = pos_lat + ((col_x_range20f * math.cos(DEG2RAD * (heading - 90))) / 60); var elevft = []; @@ -105,8 +103,10 @@ var updateTerrain = func { continue; } - var point_lon = proj_lon + ((row * range_20f / 60) * heading_sin); - var point_lat = proj_lat + ((row * range_20f / 60) * heading_cos); + var row_x_r20f_60th = (row * range_20f / 60); + + var point_lon = proj_lon + (row_x_r20f_60th * heading_sin); + var point_lat = proj_lat + (row_x_r20f_60th * heading_cos); var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black @@ -224,7 +224,9 @@ var restart_beacon = func { }; var init = func { - #print('TERRAIN init'); + print('TERRAIN init'); + #print(me.layer.efis_path); + me.tile = 33; me.fetching = 0; me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch @@ -251,6 +253,10 @@ var init = func { me.checkarrival = 0; me.onground = 1; + me.terrain_minalt = props.globals.initNode(me.layer.efis_path ~ "/nd/terrain-on-nd/min-altitude", 0,"INT"); + me.terrain_maxalt = props.globals.initNode(me.layer.efis_path ~ "/nd/terrain-on-nd/max-altitude", -9999,"INT"); + me.terrain_maxcol = props.globals.initNode(me.layer.efis_path ~ "/nd/terrain-on-nd/max-color", -1,"INT"); # 0= grn, 1= yel, 2= red + var tile = me.tile; var gx = int(me.viewport_radius / tile); @@ -326,12 +332,12 @@ var draw = func { return; } - if (me.layer.display_changed == 1) { - me.layer.display_changed = 0; + if (me.layer.display_hidden == 1) { + me.layer.display_hidden = 0; me.clear(); me.min_altitude = 9999; me.max_altitude = -9999; - terrain_maxalt.setValue(-9999); + me.terrain_maxalt.setValue(-9999); me.reference = nil; } diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index d957c012..7f4579f9 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -12,9 +12,6 @@ var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1); var vhdg_bug = props.globals.getNode("/it-autoflight/input/hdg",0); # ND compass position deg -var terrain_minalt = props.globals.getNode("/instrumentation/efis[0]/nd/terrain-on-nd/min-altitude", 0); -var terrain_maxalt = props.globals.getNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-altitude", -9999); -var terrain_maxcol = props.globals.getNode("/instrumentation/efis[0]/nd/terrain-on-nd/max-color", -1); var terrain_alert = props.globals.getNode("/instrumentation/mk-viii/outputs/alert-mode",0); var GREEN = [0.0509,0.7529,0.2941]; @@ -97,14 +94,15 @@ canvas.NDStyles["Airbus"] = { isMapStructure: 1, update_on:[ {rate_hz: 10}, "toggle_range","toggle_display_mode","toggle_terrain"], predicate: func(nd, layer) { - #print("TERRAIN TOGGLE: " ~ nd.get_switch("toggle_terrain")); + #print("TERRAIN TOGGLE: " ~ nd.get_switch("toggle_terrain")); var visible = nd.get_switch("toggle_terrain") and nd.get_switch("toggle_display_mode") != "PLAN" and (nd.rangeNm() <= 40) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); - if (visible) { + if (visible) { layer.update(); } else { - layer.display_changed = 1; + layer.efis_path = nd.efis_path; + layer.display_hidden = 1; } layer.group.setVisible(visible); }, # end of layer update predicate @@ -2003,6 +2001,7 @@ canvas.NDStyles["Airbus"] = { nd.get_switch("toggle_display_mode") != "PLAN" and (nd.rangeNm() <= 40) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)) ), is_true: func(nd){ + var terrain_maxalt = props.globals.initNode(nd.efis_path ~ "/nd/terrain-on-nd/max-altitude", -9999,"INT"); var alert = terrain_alert.getValue(); if (alert == 0) { nd.symbols.TerrLabel.setVisible(1); @@ -2013,24 +2012,28 @@ canvas.NDStyles["Airbus"] = { if (alert == 1) nd.symbols.terrAhead.setColor(YELLOW[0],YELLOW[1],YELLOW[2]); else nd.symbols.terrAhead.setColor(RED[0],RED[1],RED[2]); } - if (nd.change_phase != 1) { - if (terrain_maxalt.getValue() != -9999) { - nd.symbols.terrLO.setText(sprintf("%03d",math.round(terrain_minalt.getValue()/100))); - nd.symbols.terrHI.setText(sprintf("%03d",math.round(terrain_maxalt.getValue()/100))); - if (terrain_maxcol.getValue() == 0) nd.symbols.terrHI.setColor(GREEN[0],GREEN[1],GREEN[2]); - else if (terrain_maxcol.getValue() == 1) nd.symbols.terrHI.setColor(YELLOW[0],YELLOW[1],YELLOW[2]); - else nd.symbols.terrHI.setColor(RED[0],RED[1],RED[2]); - terrain_maxalt.setValue(-9999); #update visual at radar cycle - } - if (terrain_maxcol != -1) nd.symbols.terrAltGroup.show(); - else nd.symbols.terrAltGroup.hide(); - } else{ + + if (terrain_maxalt.getValue() != -9999) { + var terrain_minalt = getprop(nd.efis_path ~ "/nd/terrain-on-nd/min-altitude"); + var terrain_maxcol = getprop(nd.efis_path ~ "/nd/terrain-on-nd/max-color"); + nd.symbols.terrLO.setText(sprintf("%03d",math.round(terrain_minalt/100))); + nd.symbols.terrHI.setText(sprintf("%03d",math.round(terrain_maxalt.getValue()/100))); + if (terrain_maxcol == 0) nd.symbols.terrHI.setColor(GREEN[0],GREEN[1],GREEN[2]); + else if (terrain_maxcol == 1) nd.symbols.terrHI.setColor(YELLOW[0],YELLOW[1],YELLOW[2]); + else nd.symbols.terrHI.setColor(RED[0],RED[1],RED[2]); + terrain_maxalt.setValue(-9999); #update visual at radar cycle + nd.symbols.terrAltGroup.show(); + } + + if (nd.change_phase == 1) { nd.symbols.terrAltGroup.hide(); - } + } + nd.symbols.terrGroup.show(); }, is_false: func(nd){ nd.symbols.terrGroup.hide(); + nd.symbols.terrAltGroup.hide(); } } }, From ada64f22b76c964279c459167a51fddc22d03ac7 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 11 Apr 2021 23:19:25 +0200 Subject: [PATCH 5/6] TERR - more consistent green areas display --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 109 ++++++++++-------- 1 file changed, 61 insertions(+), 48 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index f55dba20..9a652d4b 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -96,6 +96,9 @@ var updateTerrain = func { me.radar_cleared = 0; + var altmin = 9999; + var altmax = -9999; + for (var row = 0; row < len; row += 1) { if (trn[row] == nil) { @@ -111,17 +114,17 @@ var updateTerrain = func { var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black if (elev != nil) { - if (elev>me.max_altitude) me.max_altitude = elev; + if (elev>altmax) altmax = elev; if (me.is_terrain) { - if (elev=0) { grad = int(diff/1000) + 3; if (grad>5) grad = 5; - if (alert_level > 0 and a < 6 and grad > 3) { - if (alert_level == 1 and (grad == 3 or grad == 4)) grad = 12; # solid yellow + if (alert_level > 0 and a <= 6) { + if (alert_level == 1 and grad != 5) grad = 12; # solid yellow else if (alert_level == 2 and grad == 5) grad = 13; # solid red } } else { @@ -135,9 +138,13 @@ var updateTerrain = func { if (diff>=lowaltft) grad = 3; # lite yellow else { if (me.bands_range > 0 and elev > me.bands_minalt) { - grad = 9 - int((me.bands_maxalt - elev) / me.bands_range); - if (grad>9) grad = 9; # solid green - else if (grad<6) grad = 6; #light green + if (elev >= me.green_altitude) grad = 9; # solid green + else { + grad = 8 - int((me.bands_maxalt - elev) / me.bands_range); # 9 - + #if (grad>9) grad = 9; # solid green + if (grad>8) grad = 8; # high green + else if (grad<6) grad = 6; #light green + } } } } @@ -153,8 +160,6 @@ var updateTerrain = func { } - if (me.min_altitude > me.max_altitude) me.min_altitude = me.max_altitude; # occurs on sea areas - for (var r=0; r < len; r+=1) { var imgx = elevft[r]; if (imgx == -1) continue; @@ -162,6 +167,20 @@ var updateTerrain = func { else trn[r].setFile(me.imgpath ~ me.tile_list[imgx]).show(); } + if (altmax != -9999) { + + if (altmin > altmax) altmin = altmax; # occurs on sea areas + + if (me.max_altitude == -9999) { + me.min_altitude = altmin; + me.max_altitude = altmax; + } else { + if (altminme.max_altitude) me.max_altitude = altmax; + } + + } + me.radar_beacon += 1; if (me.radar_beacon >= (me.tileradiusw*2)) { me.restart_beacon(); @@ -172,48 +191,49 @@ var updateTerrain = func { var update_altitudes = func { - me.terrain_minalt.setValue(me.min_altitude); - me.terrain_maxalt.setValue(me.max_altitude); + var maxalt = int(me.max_altitude); + me.terrain_minalt.setValue(int(me.min_altitude)); + me.terrain_maxalt.setValue(maxalt); - var altdif = me.max_altitude - me.refaltitudeft; + if (me.avg_maxalt == -9999) { + me.avg_minalt = int(me.min_altitude); + me.avg_maxalt = maxalt; + } else { + me.avg_minalt = math.avg(me.avg_minalt,me.min_altitude); + me.avg_maxalt = math.avg(me.avg_maxalt,maxalt); + } + + var altdif = maxalt - me.refaltitudeft; if (altdif <= 0) { if (altdif >= me.reflowaltft) me.terrain_maxcol.setValue(1); else me.terrain_maxcol.setValue(0); } else { - if (altdif>2000) me.terrain_maxcol.setValue(2); + if (altdif>=2000) me.terrain_maxcol.setValue(2); else me.terrain_maxcol.setValue(1); } - if (me.avg_maxalt == -9999) { - me.avg_minalt = me.min_altitude; - me.avg_maxalt = me.max_altitude; - } else { - #if (me.min_altitude < me.avg_minalt) me.avg_minalt = me.min_altitude;else - me.avg_minalt = math.round((me.avg_minalt * 2 + me.min_altitude) / 3); - #if (me.max_altitude > me.avg_maxalt) me.avg_maxalt = me.max_altitude;else - me.avg_maxalt = math.round((me.avg_maxalt * 2 + me.max_altitude) / 3); - } + me.avg_diffalt = me.avg_maxalt - me.avg_minalt; - me.avg_peakalt = me.avg_maxalt - me.avg_minalt; - - if (me.onground == 0 and (me.max_altitude + 250) < me.refaltitudeft) { # 250 ft tollerance + if (me.onground == 0 and (maxalt + 200) < me.refaltitudeft) { # 200 ft tollerance me.hialtmode = 1; - var mxrange = math.max(2400,int(me.avg_peakalt*0.25)); - var range = math.min(mxrange,(me.avg_maxalt - me.avg_minalt)) - 250; - if (range < 360) { # min elev number - me.bands_range = 0; - } else { - me.bands_range = int(range / 4); + var mxrange = math.max(1600,int((me.avg_maxalt - me.basealtitudeft) * 0.3)); + var range = math.min(mxrange,me.avg_diffalt); + if (range < 160) { # min elev number + me.bands_range = 0; + } else { me.bands_maxalt = me.avg_maxalt; - me.bands_minalt = math.max( me.avg_maxalt - range, me.avg_minalt + 400 ); + me.bands_minalt = math.max( me.avg_maxalt - range, me.avg_minalt + me.basealtitudeft ); + me.bands_range = int( (me.bands_maxalt - me.bands_minalt) / 4); } + me.green_altitude = math.max(maxalt - 1200, me.avg_maxalt - me.bands_range); } else { me.hialtmode = 0; #me.avg_minalt = 9999; } me.min_altitude = 9999; - me.max_altitude = -9999; + me.max_altitude = -9999; + me.avg_maxalt = -9999; } @@ -239,9 +259,10 @@ var init = func { me.request_clear = 0; me.min_altitude = 9999; me.max_altitude = -9999; + me.green_altitude = 0; # max altitude for solid green (peak color) me.avg_minalt = 9999; me.avg_maxalt = -9999; - me.avg_peakalt = nil; + me.avg_diffalt = nil; me.maxalt_col = 0; # 0 = grn, 1 = yel, 2 = red me.bands_minalt = 0; me.bands_maxalt = 0; @@ -335,9 +356,10 @@ var draw = func { if (me.layer.display_hidden == 1) { me.layer.display_hidden = 0; me.clear(); + me.terrain_maxalt.setValue(-9999); me.min_altitude = 9999; me.max_altitude = -9999; - me.terrain_maxalt.setValue(-9999); + me.avg_maxalt = -9999; me.reference = nil; } @@ -355,9 +377,9 @@ var draw = func { me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; me.onground = pts.Gear.wow[0].getValue(); - if (me.min_altitude != 9999) me.update_altitudes(); + if (me.max_altitude != -9999) me.update_altitudes(); - var flatalt = (me.avg_peakalt == nil or me.avg_peakalt>499) ? 400 : 140; + var flatalt = (me.avg_diffalt == nil or me.avg_diffalt>499) ? 400 : 180; var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); if (vspeed30s<-500) me.refaltitudeft = math.max(me.avg_minalt , me.refaltitudeft + vspeed30s); @@ -404,19 +426,10 @@ var draw = func { print("set REFALT [blwbase]: "~me.basealtitudeft); } } else if (fmgc.FMGCInternal.phase >= 2) { - me.basealtitudeft = math.avg(me.basealtitudeft,flatalt + me.groundaltft,int(flatalt + me.avg_minalt)); - #if (me.basealtitudeft > me.avg_maxalt) { - # if (me.avg_maxalt < 1000) me.basealtitudeft = 0; # 1000ft min elev number - # else me.basealtitudeft = int(400 + me.avg_minalt); - # print("set REFALT [blwmin]: "~me.basealtitudeft); - #} - #else if (me.basealtitudeft == 0 and me.avg_maxalt >= 1000) { # 1000ft min elev number - # me.basealtitudeft = int(400 + me.avg_minalt); - # print("set REFALT [abvmin]: "~me.basealtitudeft); - #} + if (me.avg_minalt != 9999) me.basealtitudeft = int(math.avg(me.basealtitudeft,flatalt + me.avg_minalt)); } - } + } } else { From 4b9166605d1c2645a5a454d05380f9e19fc5b775 Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Tue, 18 May 2021 13:02:11 +0100 Subject: [PATCH 6/6] Leading / with setlistener --- Models/Instruments/Lower-ECAM/Lower-ECAM.nas | 2 +- Models/Instruments/MCDU/MCDU.nas | 2 +- Models/Instruments/ND/canvas/ND.nas | 2 +- Models/Instruments/PFD/PFD.nas | 2 +- Nasal/FBW/it-fbw.nas | 6 +++--- Nasal/FMGC/FMGC-c.nas | 2 +- Nasal/Panels/clock.nas | 2 +- Nasal/Panels/efis.nas | 2 +- Nasal/Systems/ground_services.nas | 2 +- Nasal/Systems/tyresmoke.nas | 6 +++--- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas index feaae20f..ae1298d8 100644 --- a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas @@ -3560,7 +3560,7 @@ var canvas_lowerECAM_test = { }, }; -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { lowerECAM_display = canvas.new({ "name": "lowerECAM", "size": [1024, 1024], diff --git a/Models/Instruments/MCDU/MCDU.nas b/Models/Instruments/MCDU/MCDU.nas index 1142c943..f9e09f1c 100644 --- a/Models/Instruments/MCDU/MCDU.nas +++ b/Models/Instruments/MCDU/MCDU.nas @@ -6567,7 +6567,7 @@ var canvas_MCDU_2 = { }, }; -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { MCDU1_display = canvas.new({ "name": "MCDU1", "size": [1024, 864], diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 5fe845d3..0cecff51 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -323,7 +323,7 @@ var canvas_ND_2_test = { }, }; -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { setprop("instrumentation/efis[0]/inputs/plan-wpt-index", -1); setprop("instrumentation/efis[1]/inputs/plan-wpt-index", -1); diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index 77c41c11..78e62441 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -2720,7 +2720,7 @@ var canvas_PFD_2_mismatch = { }, }; -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { PFD1_display = canvas.new({ "name": "PFD1", "size": [1024, 1024], diff --git a/Nasal/FBW/it-fbw.nas b/Nasal/FBW/it-fbw.nas index ab6fe620..18b21fec 100644 --- a/Nasal/FBW/it-fbw.nas +++ b/Nasal/FBW/it-fbw.nas @@ -338,7 +338,7 @@ var fbw_loop = func { } } -setlistener("systems/fctl/sec1", func() { +setlistener("/systems/fctl/sec1", func() { if (FBW.Computers.sec1.getBoolValue()) { FBW.Failures.spoilerl3.setBoolValue(0); FBW.Failures.spoilerr3.setBoolValue(0); @@ -352,7 +352,7 @@ setlistener("systems/fctl/sec1", func() { } }, 0, 0); -setlistener("systems/fctl/sec2", func() { +setlistener("/systems/fctl/sec2", func() { if (FBW.Computers.sec2.getBoolValue()) { FBW.Failures.spoilerl5.setBoolValue(0); FBW.Failures.spoilerr5.setBoolValue(0); @@ -362,7 +362,7 @@ setlistener("systems/fctl/sec2", func() { } }, 0, 0); -setlistener("systems/fctl/sec3", func() { +setlistener("/systems/fctl/sec3", func() { if (FBW.Computers.sec3.getBoolValue()) { FBW.Failures.spoilerl1.setBoolValue(0); FBW.Failures.spoilerr1.setBoolValue(0); diff --git a/Nasal/FMGC/FMGC-c.nas b/Nasal/FMGC/FMGC-c.nas index e9282207..f47947ab 100644 --- a/Nasal/FMGC/FMGC-c.nas +++ b/Nasal/FMGC/FMGC-c.nas @@ -670,6 +670,6 @@ setlistener("/modes/pfd/fma/pitch-mode2-armed", func { } }); -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { init(); }); diff --git a/Nasal/Panels/clock.nas b/Nasal/Panels/clock.nas index 30985b60..ff47f577 100644 --- a/Nasal/Panels/clock.nas +++ b/Nasal/Panels/clock.nas @@ -72,7 +72,7 @@ var rudderTrim = { rudderTrimDisplayLetter: props.globals.initNode("/controls/flight/rudder-trim-letter-display", "", "STRING"), }; -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { chr.stop(); chr.reset(); clk.stop(); diff --git a/Nasal/Panels/efis.nas b/Nasal/Panels/efis.nas index 218032d8..1106bfad 100644 --- a/Nasal/Panels/efis.nas +++ b/Nasal/Panels/efis.nas @@ -4,7 +4,7 @@ var mode = "NAV"; var rng = 20; -setlistener("sim/signals/fdm-initialized", func { # Fix completely retarded shit on the ND +setlistener("/sim/signals/fdm-initialized", func { # Fix completely retarded shit on the ND pts.Instrumentation.Efis.Mfd.pnlModeNum[0].setValue(2); pts.Instrumentation.Efis.Mfd.pnlModeNum[1].setValue(2); pts.Instrumentation.Efis.Nd.displayMode[0].setValue("NAV"); diff --git a/Nasal/Systems/ground_services.nas b/Nasal/Systems/ground_services.nas index 8d000458..ff82adef 100644 --- a/Nasal/Systems/ground_services.nas +++ b/Nasal/Systems/ground_services.nas @@ -82,6 +82,6 @@ var ground_message = func (string) { setprop("/sim/messages/ground", string); } -setlistener("sim/signals/fdm-initialized", func { +setlistener("/sim/signals/fdm-initialized", func { ground_services.init(); }); diff --git a/Nasal/Systems/tyresmoke.nas b/Nasal/Systems/tyresmoke.nas index d9d72aff..3da224aa 100755 --- a/Nasal/Systems/tyresmoke.nas +++ b/Nasal/Systems/tyresmoke.nas @@ -7,7 +7,7 @@ var tyresmoke_1 = aircraft.tyresmoke.new(1, 0, 0.8, 0); var tyresmoke_2 = aircraft.tyresmoke.new(2, 0, 0.8, 0); # =============================== listeners =============================== -setlistener("gear/gear[0]/position-norm", func { +setlistener("/gear/gear[0]/position-norm", func { if (pts.Gear.position[0].getValue()){ run_tyresmoke0 = 1; }else{ @@ -15,7 +15,7 @@ setlistener("gear/gear[0]/position-norm", func { } },1,0); -setlistener("gear/gear[1]/position-norm", func { +setlistener("/gear/gear[1]/position-norm", func { if (pts.Gear.position[1].getValue()){ run_tyresmoke1 = 1; }else{ @@ -23,7 +23,7 @@ setlistener("gear/gear[1]/position-norm", func { } },1,0); -setlistener("gear/gear[2]/position-norm", func { +setlistener("/gear/gear[2]/position-norm", func { if (pts.Gear.position[2].getValue()){ run_tyresmoke2 = 1; }else{