From 27b9f47373c5eeafd100e5cea5dd438a37f8c3c3 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Thu, 11 Feb 2021 23:46:04 +0100 Subject: [PATCH 01/58] prototype for terrain on ND --- Models/Instruments/ND/canvas/ND.nas | 1 + .../ND/canvas/map/TERRAIN.lcontroller | 57 +++ .../Instruments/ND/canvas/map/TERRAIN.symbol | 106 +++++ .../Instruments/ND/canvas/res/terrainND.svg | 439 ++++++++++++++++++ Models/Instruments/ND/canvas/res/tile_00.png | Bin 0 -> 149 bytes Models/Instruments/ND/canvas/res/tile_04.png | Bin 0 -> 1011 bytes Models/Instruments/ND/canvas/res/tile_06.png | Bin 0 -> 1017 bytes Models/Instruments/ND/canvas/style.nas | 18 + 8 files changed, 621 insertions(+) create mode 100644 Models/Instruments/ND/canvas/map/TERRAIN.lcontroller create mode 100644 Models/Instruments/ND/canvas/map/TERRAIN.symbol create mode 100644 Models/Instruments/ND/canvas/res/terrainND.svg create mode 100644 Models/Instruments/ND/canvas/res/tile_00.png create mode 100644 Models/Instruments/ND/canvas/res/tile_04.png create mode 100644 Models/Instruments/ND/canvas/res/tile_06.png diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index d1e73e51..0abf953c 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -64,6 +64,7 @@ var myCockpit_switches = { "toggle_xtrk_error": {path: "/nd/xtrk-error", value: 0, type: "BOOL"}, "toggle_trk_line": {path: "/nd/trk-line", value: 0, type: "BOOL"}, "ADIRS3": {path: "/nd/ir-3", value: 0, type: "BOOL"}, + "toggle_terrain": {path: "/controls/switches/terr_on_nd_l", value: 0, type: "BOOL"}, }; var canvas_nd_base = { diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller new file mode 100644 index 00000000..6d062b85 --- /dev/null +++ b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller @@ -0,0 +1,57 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'TERRAIN'; +var parents = [canvas.SymbolLayer.Controller]; +var __self__ = caller(0)[0]; + +canvas.SymbolLayer.Controller.add(name, __self__); +canvas.SymbolLayer.add(name, { + parents: [MultiSymbolLayer], + type: name, # Symbol type + df_controller: __self__, # controller to use by default -- this one + df_options: { # default configuration options + viewport_radius: 670 + } +}); + +var terrain_tree = "/instrumentation/efis[0]/nd/terrain-on-nd"; + +var new = func(layer) { + var m = { + parents: [__self__], + layer: layer, + map: layer.map, + listeners: [], + }; + layer.searcher._equals = func(l,r) l.equals(r); + m.addVisibilityListener(); + return m; +}; + +var del = func() { + #print(name~".lcontroller.del()"); + foreach (var l; me.listeners) + removelistener(l); +}; + +var searchCmd = func { + if(me.map.getRange() == nil) return []; + #var lat = getprop(terrain_tree~"/center/latitude-deg"); + #var lon = getprop(terrain_tree~"/center/longitude-deg"); + + #if(lat == nil or lon == nil) { + var pos = geo.aircraft_position(); + lat = pos.lat(); + lon = pos.lon(); + #} + + var result = geo.Coord.new(); + result.set_latlon(lat, lon); + result.rangeNm = me.map.getRange(); + result.fetchRad = 184; # is this number accurate? + result.equals = func(r){ + me.fetchRad == r.fetchRad and me.lat == r.lat and me.lon == r.lon + }; + + return [result]; +}; diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol new file mode 100644 index 00000000..6c2a2b2f --- /dev/null +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -0,0 +1,106 @@ +# See: http://wiki.flightgear.org/MapStructure +# Class things: +var name = 'TERRAIN'; +var parents = [DotSym]; +var __self__ = caller(0)[0]; +DotSym.makeinstance( name, __self__ ); + +var element_type = "group"; + +var tile_list = ["tile_00.png","tile_04.png","tile_06.png"]; + +var updateTerrain = func(size){ + if(me.fetching) return; + var pos = geo.aircraft_position(); + var lat = pos.lat(); + var lon = pos.lon(); + me.fetching = 1; + + for (var a=0; a < me.tileradius; a+=1) { + + var len = size(me.terrlayer["L" ~ a]); + + for (var r=0; r < len; r+=1) { + + var imgx = math.mod(r*a,3); + + me.terrlayer["L" ~ a].setFile(me.imgpath ~ me.tile_list[imgx]).show(); + me.terrlayer["R" ~ a].setFile(me.imgpath ~ me.tile_list[2-imgx]).show(); + + } + + } + + me.last_request = getprop("sim/time/elapsed-sec"); + me.fetching = 0; +}; + +var init = func { + print('TERRAIN init'); + me.tile = 20; + me.fetching = 0; + me.timeStamp = nil; + me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch + me.range = me.model.rangeNm; # Range of Navigation Display + me.viewport_radius = me.getOption('viewport_radius', 670); + me.imgpath = get_local_path('res/'); + + var tile = me.tile; + + var gx = int(me.viewport_radius / tile); + + me.tileradius = gx; + + me.terrlayer = {}; #me.element.createChild("image").set("z-index", -100).hide(); + + var centx = me.viewport_radius; + + for (var c=0; c me.update_interval) { + me.updateTerrain(r_scaled); + } +}; + diff --git a/Models/Instruments/ND/canvas/res/terrainND.svg b/Models/Instruments/ND/canvas/res/terrainND.svg new file mode 100644 index 00000000..65bc1e02 --- /dev/null +++ b/Models/Instruments/ND/canvas/res/terrainND.svg @@ -0,0 +1,439 @@ + +image/svg+xmlGijs de Rooy▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ diff --git a/Models/Instruments/ND/canvas/res/tile_00.png b/Models/Instruments/ND/canvas/res/tile_00.png new file mode 100644 index 0000000000000000000000000000000000000000..f99f027a59825a9146482881aab818a787f0712b GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1SFYWcSQjymUKs7M+SzC{oH>NS%G}c0*}aI z1_r)EAj~ML;ne^XlqhkHC<)F_D=AMbN@XZW%*-p%%S$a$FwryAGfi=i0GTZ8>Eak- m;h!wQx;R0kr%91pLV|(i2m|BUpE9q3(hQ!ielF{r5}E)Ba3dxF literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/tile_04.png b/Models/Instruments/ND/canvas/res/tile_04.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd0732c538138393bc45729b348500f09675a4a GIT binary patch literal 1011 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B017t}=K~y+TO_Yl-)nORNACBX2&T%ddM@Egg zjBaGiP}xz5u$ZAp7b&BQl9Y9CrHfRgNj0ssR=Sv3S!-;e%Uo8CR-3KArO!jPw%_mF z`+J|~`&_=?=lw}kcbdeQ{7x_F{Wa;j62JG;`SP(w$+CJMUnH?6Nj9$;EDmm6RyKOb zeQh~DY5kiEMyfe6G=~b`UIy9y@eHo)t3RHVa;I3mrOCbX!-=G)IRrXBeMbuI65_LM zyh#%Mi{I~)Bf(M?s9-Tl;N>`iZ69wY(6Q;R=)37up-#zW96Eo#^$e9^(pcd}9PZ7H zN~&4fz7I%+lOo%Hys=-5(O5-x@*7Wt#r3R}!@=jjJ-#ygf`ko|?Xo{e@@?eU_2FdW z)GgUM)*yafbRwBnkoV`tny0(T!+zs%<<;3&;<0L!EVc4bIVJFD8d+`8@&dF;N)Wq& zo?B*~Q6A>n&n=bX$5?F_qBCEYNRmJ8h||E~Ja~;oS#5OF51bQ=)9c>{S=DS3$qtY$ z4&Ac}@qu;}iGPqO2ZQFbyM2gFw$zse5@(VyBN)zWK3yO~WLGM*^GQzD1tHaklprO+ zpHpPSHS|V;>~Zm_T!b4T3`TUtHPE0!QfZV)d-PbvaxN0grI|he@OfaOHD`FcejPuC5}#y?Qbqn^yHq+692ndXn|0CkmEj#p3dpmq=v}wr zU4`z8?5qe3;Uc9Dswy3=mk3|j#=wK2exi*HU;?R-xwf$ORR~EG4N>jVw$&Wz%TABN zjiqR#)m!Aq(wHk+Nz!wOGdm4$>`j!5E;KR#oBvrcQ-g zDlF(B3-S^hfQHMrVLJQuk(j-Ri#OI~4?S8)rWL$!<8;I~ z2IPtZI2645c2Tk&G{k8vnkJJ@8rHsNJT9SAVkn4%~Pb# zc7*TIsZN}^VUVXHGsp@K@zJ%?NmtOLfYlbgNkps*!bA&PL#6gVAr+!;fPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B018PY`K~y+TO_YgCR8bVh-@g(FiAseTEoz`d zScJ4$L<>oqv{;%g7PeSeX8T5^R+^TIXsEeV4z`IXmaXD~QHnV_&f?7IIF6ovXRHV= zm;3HH-&wxz+-G#}Y?MyV*y$geW`tP|f4jRNtuP`>>YbD4eo2Q%THLQ!ln$nRDT=&e zKKL1*#+6SiqO!U1W%L_-Px&Ng;VE1>XD>V{g;sG+N~Zb2qO+~*YY22MbeELdWnkh_ zc&2<9EnR$5E)GiWu!6-a!$;Z)mKUBup!1;#T|3@Ug*vskao96+sVSxilg8@x;;=m+ zQkvXGa!{-kSSd0waGCvBr^YI?liz!`uRZ>iTpmoDwefK98WLU#OOzW!Qt2Sa{Y7W8 z=I%8fM_iJzDLRn`C&+C95gDO7$-}ueI{#4cDls`VO1)ZHR89#j&W5~kX?Y{sBqfO5 zN6)Dt>nIQN?fI$s;pf>M$GaMqmq_axD2F(VgmseJUiCc6+o(lhbgW=mB#yBn|+4UZ0mz6P+j3 zj_T-#5KEEVPYc<+wu-YfyXDi^zQC9d8|nB7`RmG84<@-2nV_;#pIxm?6U;?R-)sDWz_XtT84Uui3Z9~mH zHd zU^wB58!YH00cf~N2d0y=H;a3UxOijzvc;r@G&sQ< zyf{W&YDX%gav)H_FGi+W(dqvyB&8yXX1-@Z6okASw% Date: Fri, 12 Feb 2021 00:23:26 +0100 Subject: [PATCH 02/58] enable print for debuging --- Models/Instruments/ND/canvas/loaders.nas | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Models/Instruments/ND/canvas/loaders.nas b/Models/Instruments/ND/canvas/loaders.nas index e8cb8782..d0345237 100644 --- a/Models/Instruments/ND/canvas/loaders.nas +++ b/Models/Instruments/ND/canvas/loaders.nas @@ -16,7 +16,7 @@ setlistener("/nasal/canvas/loaded", func() { var aircraft_root = getprop("/sim/aircraft-dir"); var load = func(file, name) { - #print("Loading ..." ~ file); + print("Loading ..." ~ file); if (name == nil) var name = split("/", file)[-1]; if (substr(name, size(name)-4) == ".draw") @@ -28,7 +28,7 @@ setlistener("/nasal/canvas/loaded", func() { #var code = call(compile, [code], var err=[]); var code = call(func compile(code, file), [code], var err=[]); if (size(err)) { - #print("handling error"); + print("handling error"); if (substr(err[0], 0, 12) == "Parse error:") { # hack around Nasal feature var e = split(" at line ", err[0]); if (size(e) == 2) From f2034e048240d71b32392e01b63421f6187f90e4 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sat, 13 Feb 2021 00:38:43 +0100 Subject: [PATCH 03/58] Tech version of terrain radar works (at most) --- Models/Instruments/ND/canvas/ND.nas | 2 +- .../ND/canvas/framework/navdisplay.nas | 5 + Models/Instruments/ND/canvas/loaders.nas | 2 +- .../ND/canvas/map/TERRAIN.lcontroller | 4 +- .../Instruments/ND/canvas/map/TERRAIN.symbol | 135 ++++++++++++++---- .../ND/canvas/res/terrain/tile_01.png | Bin 0 -> 3197 bytes .../ND/canvas/res/terrain/tile_02.png | Bin 0 -> 175 bytes .../ND/canvas/res/terrain/tile_03.png | Bin 0 -> 3321 bytes .../ND/canvas/res/terrain/tile_04.png | Bin 0 -> 175 bytes .../ND/canvas/res/terrain/tile_05.png | Bin 0 -> 3183 bytes .../ND/canvas/res/terrain/tile_06.png | Bin 0 -> 175 bytes Models/Instruments/ND/canvas/res/tile_00.png | Bin 149 -> 0 bytes Models/Instruments/ND/canvas/res/tile_04.png | Bin 1011 -> 0 bytes Models/Instruments/ND/canvas/res/tile_06.png | Bin 1017 -> 0 bytes Models/Instruments/ND/canvas/style.nas | 28 +++- 15 files changed, 135 insertions(+), 41 deletions(-) create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_01.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_02.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_03.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_04.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_05.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_06.png delete mode 100644 Models/Instruments/ND/canvas/res/tile_00.png delete mode 100644 Models/Instruments/ND/canvas/res/tile_04.png delete mode 100644 Models/Instruments/ND/canvas/res/tile_06.png diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 0abf953c..41088b16 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -48,7 +48,7 @@ var myCockpit_switches = { "toggle_waypoints": {path: "/inputs/wpt", value:0, type:"BOOL"}, "toggle_position": {path: "/inputs/pos", value:0, type:"BOOL"}, "toggle_data": {path: "/inputs/data",value:0, type:"BOOL"}, - "toggle_terrain": {path: "/inputs/terr",value:0, type:"BOOL"}, + #"toggle_terrain": {path: "/inputs/terr",value:0, type:"BOOL"}, "toggle_traffic": {path: "/inputs/tfc",value:0, type:"BOOL"}, "toggle_centered": {path: "/inputs/nd-centered",value:0, type:"BOOL"}, "toggle_lh_vor_adf": {path: "/input/lh-vor-adf",value:0, type:"INT"}, diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 7778f57c..c9eab922 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -374,6 +374,11 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec if(wxr_live_enabled == nil or wxr_live_enabled == '') wxr_live_enabled = 0; me.set_switch('toggle_weather_live', wxr_live_enabled); + + var terr_enabled = getprop("/controls/switches/terr_on_nd_l"); + if (terr_enabled == nil) terr_enabled = 0; + if (me.get_switch('toggle_terrain') != terr_enabled) me.set_switch('toggle_terrain', terr_enabled); + call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables # MapStructure update! diff --git a/Models/Instruments/ND/canvas/loaders.nas b/Models/Instruments/ND/canvas/loaders.nas index d0345237..ed72a08d 100644 --- a/Models/Instruments/ND/canvas/loaders.nas +++ b/Models/Instruments/ND/canvas/loaders.nas @@ -16,7 +16,7 @@ setlistener("/nasal/canvas/loaded", func() { var aircraft_root = getprop("/sim/aircraft-dir"); var load = func(file, name) { - print("Loading ..." ~ file); + #print("Loading ..." ~ file); if (name == nil) var name = split("/", file)[-1]; if (substr(name, size(name)-4) == ".draw") diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller index 6d062b85..9528ee29 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller +++ b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller @@ -41,8 +41,8 @@ var searchCmd = func { #if(lat == nil or lon == nil) { var pos = geo.aircraft_position(); - lat = pos.lat(); - lon = pos.lon(); + var lat = pos.lat(); + var lon = pos.lon(); #} var result = geo.Coord.new(); diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 6c2a2b2f..98cfa985 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -7,43 +7,110 @@ DotSym.makeinstance( name, __self__ ); var element_type = "group"; -var tile_list = ["tile_00.png","tile_04.png","tile_06.png"]; +var tile_list = ["tile_01.png","tile_01.png","tile_02.png","tile_03.png","tile_03.png","tile_03.png","tile_04.png","tile_04.png","tile_06.png","tile_09.png",]; + +var radar_beacon = 0; +var radar_cycle = 0; + +var get_elevation = func (lat, lon) { + + var info = geodinfo(lat, lon); + var elevation = 0; + if (info != nil) { elevation = int(info[0] * 3.2808399); } + else { elevation = nil; } + return elevation; + +} + + +var updateTerrain = func(r_scaled){ -var updateTerrain = func(size){ if(me.fetching) return; - var pos = geo.aircraft_position(); - var lat = pos.lat(); - var lon = pos.lon(); + me.fetching = 1; - for (var a=0; a < me.tileradius; a+=1) { + var RAD2DEG = 57.2957795; + var DEG2RAD = 0.016774532925; - var len = size(me.terrlayer["L" ~ a]); + var pos = geo.aircraft_position(); + var pos_lat = pos.lat(); + var pos_lon = pos.lon(); + + var heading = getprop("orientation/heading-magnetic-deg"); + var altitudeagl = getprop("/position/altitude-agl-ft"); + + var side = (math.mod(me.radar_beacon,2)==0) ? "L" : "R"; + var a = int(me.radar_beacon/2); + var col = a; + + if (side == "L") { + col = -1 + (-1 * a); + } + + var col = me.radar_beacon - me.tileradius; + + #for (var a=0; a < me.tileradius; a+=1) { + + #var trnL = me.terrlayer["L" ~ a]; + #var trnR = me.terrlayer["R" ~ a]; + var trn = me.terrlayer[side ~ a]; + + var len = size(trn); + var range = me.range; + + var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 60); + var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 60); + + var elevft = []; + + for (var row = 0; row <= len; row += 1) { + + var point_lon = proj_lon + ((row * (range/30) / 60) * math.sin(DEG2RAD * heading)); + var point_lat = proj_lat + ((row * (range/30) / 60) * math.cos(DEG2RAD * heading)); + + var elev = me.get_elevation(point_lat, point_lon); + if (elev != nil) { + var grad = int((elev - altitudeagl + 500)/500); + if (grad>6) grad = 6; + else if (grad<-3) grad = -3; + + append(elevft,grad+2); # (-1)-8 + } else { + append(elevft,8); # magenta + } + + } for (var r=0; r < len; r+=1) { - var imgx = math.mod(r*a,3); - - me.terrlayer["L" ~ a].setFile(me.imgpath ~ me.tile_list[imgx]).show(); - me.terrlayer["R" ~ a].setFile(me.imgpath ~ me.tile_list[2-imgx]).show(); + var imgx = elevft[r]; + if (imgx < 0) trn[r].hide(); + else trn[r].setFile(me.imgpath ~ me.tile_list[imgx]).show(); + #trnR[r].setFile(me.imgpath ~ me.tile_list[2-imgx]).show(); } + #} + + me.radar_beacon += 1; + if (me.radar_beacon >= (me.tileradius*2)) { + me.radar_beacon = 0; + me.radar_cycle += 1; } - me.last_request = getprop("sim/time/elapsed-sec"); + #me.last_request = getprop("sim/time/elapsed-sec"); me.fetching = 0; }; var init = func { - print('TERRAIN init'); - me.tile = 20; + #print('TERRAIN init'); + me.tile = 33; # better 34 me.fetching = 0; me.timeStamp = nil; me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch me.range = me.model.rangeNm; # Range of Navigation Display me.viewport_radius = me.getOption('viewport_radius', 670); - me.imgpath = get_local_path('res/'); + me.imgpath = get_local_path('res/terrain/'); var tile = me.tile; @@ -53,27 +120,28 @@ var init = func { me.terrlayer = {}; #me.element.createChild("image").set("z-index", -100).hide(); - var centx = me.viewport_radius; + var centx = 0; #me.viewport_radius * -0.5; + var centy = -me.viewport_radius; for (var c=0; c me.update_interval) { + var rot = getprop("orientation/heading-deg"); + rot -= me.layer.map.getHdg(); + me.element.setRotation(rot*D2R); + + + #if(getprop("sim/time/elapsed-sec") - me.last_request >= me.update_interval) { me.updateTerrain(r_scaled); - } + #} }; diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_01.png b/Models/Instruments/ND/canvas/res/terrain/tile_01.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b7d71182caa397e60922a332e4ddbe114ff9f9 GIT binary patch literal 3197 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 literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_02.png b/Models/Instruments/ND/canvas/res/terrain/tile_02.png new file mode 100644 index 0000000000000000000000000000000000000000..c20336c8202d6e16345304da8bc77548e12be82f GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1|+TAxeoy;#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=Digg?xt?MK!z{fPyZbE{-7)?r+a2GByN=95}%4De#5gopIm6 z4NMB}&b-<7+3MZT#=kG0_e_~+6y$cwLsC;YbqO-(Np2eBLMNumNjKtG0nKCZboFyt I=akR{06VreHvj+t literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_03.png b/Models/Instruments/ND/canvas/res/terrain/tile_03.png new file mode 100644 index 0000000000000000000000000000000000000000..ca873469f2f54a55d2e33c11e941f049e6826a0e GIT binary patch literal 3321 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 D`rTts literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_04.png b/Models/Instruments/ND/canvas/res/terrain/tile_04.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0778293a5c8f12f23b023e556ab9c2e0840e66 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1|+TAxeoy;#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=Digg?xt?MK!z{fPyZbE{-7)?r+a2GByN=95}%4`68azopIm6 z4NMB}&b-<7+UDKQ#=kG0_e_~+6y$cwLsC;YbqO-(Np2eBF(YP&2b%)Tf#xxIy85}S Ib4q9e07nKj_5c6? literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_05.png b/Models/Instruments/ND/canvas/res/terrain/tile_05.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4a16163093f884042b29f03aaf9d8d251e53ef GIT binary patch literal 3183 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 V;k(cstFiz9002ovPDHLkV1jwN7-9eb literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_06.png b/Models/Instruments/ND/canvas/res/terrain/tile_06.png new file mode 100644 index 0000000000000000000000000000000000000000..151be7c439d2ae33340dcbbecb1485cee2b5a8df GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1|+TAxeoy;#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=Digg?xt?MK!z{fPyZbE{-7)?r+a2GByN=95}%4S@31O8{@u% z8<-T{oq4nEwZ;3NjelQ0@0l{uD9G)Uhoq)*>JntmliW1M8#9?|uEcJT1e(X->FVdQ I&MBb@0E8hoMF0Q* literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/tile_00.png b/Models/Instruments/ND/canvas/res/tile_00.png deleted file mode 100644 index f99f027a59825a9146482881aab818a787f0712b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1SFYWcSQjymUKs7M+SzC{oH>NS%G}c0*}aI z1_r)EAj~ML;ne^XlqhkHC<)F_D=AMbN@XZW%*-p%%S$a$FwryAGfi=i0GTZ8>Eak- m;h!wQx;R0kr%91pLV|(i2m|BUpE9q3(hQ!ielF{r5}E)Ba3dxF diff --git a/Models/Instruments/ND/canvas/res/tile_04.png b/Models/Instruments/ND/canvas/res/tile_04.png deleted file mode 100644 index 5cd0732c538138393bc45729b348500f09675a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B017t}=K~y+TO_Yl-)nORNACBX2&T%ddM@Egg zjBaGiP}xz5u$ZAp7b&BQl9Y9CrHfRgNj0ssR=Sv3S!-;e%Uo8CR-3KArO!jPw%_mF z`+J|~`&_=?=lw}kcbdeQ{7x_F{Wa;j62JG;`SP(w$+CJMUnH?6Nj9$;EDmm6RyKOb zeQh~DY5kiEMyfe6G=~b`UIy9y@eHo)t3RHVa;I3mrOCbX!-=G)IRrXBeMbuI65_LM zyh#%Mi{I~)Bf(M?s9-Tl;N>`iZ69wY(6Q;R=)37up-#zW96Eo#^$e9^(pcd}9PZ7H zN~&4fz7I%+lOo%Hys=-5(O5-x@*7Wt#r3R}!@=jjJ-#ygf`ko|?Xo{e@@?eU_2FdW z)GgUM)*yafbRwBnkoV`tny0(T!+zs%<<;3&;<0L!EVc4bIVJFD8d+`8@&dF;N)Wq& zo?B*~Q6A>n&n=bX$5?F_qBCEYNRmJ8h||E~Ja~;oS#5OF51bQ=)9c>{S=DS3$qtY$ z4&Ac}@qu;}iGPqO2ZQFbyM2gFw$zse5@(VyBN)zWK3yO~WLGM*^GQzD1tHaklprO+ zpHpPSHS|V;>~Zm_T!b4T3`TUtHPE0!QfZV)d-PbvaxN0grI|he@OfaOHD`FcejPuC5}#y?Qbqn^yHq+692ndXn|0CkmEj#p3dpmq=v}wr zU4`z8?5qe3;Uc9Dswy3=mk3|j#=wK2exi*HU;?R-xwf$ORR~EG4N>jVw$&Wz%TABN zjiqR#)m!Aq(wHk+Nz!wOGdm4$>`j!5E;KR#oBvrcQ-g zDlF(B3-S^hfQHMrVLJQuk(j-Ri#OI~4?S8)rWL$!<8;I~ z2IPtZI2645c2Tk&G{k8vnkJJ@8rHsNJT9SAVkn4%~Pb# zc7*TIsZN}^VUVXHGsp@K@zJ%?NmtOLfYlbgNkps*!bA&PL#6gVAr+!;fPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;VFFSW*B018PY`K~y+TO_YgCR8bVh-@g(FiAseTEoz`d zScJ4$L<>oqv{;%g7PeSeX8T5^R+^TIXsEeV4z`IXmaXD~QHnV_&f?7IIF6ovXRHV= zm;3HH-&wxz+-G#}Y?MyV*y$geW`tP|f4jRNtuP`>>YbD4eo2Q%THLQ!ln$nRDT=&e zKKL1*#+6SiqO!U1W%L_-Px&Ng;VE1>XD>V{g;sG+N~Zb2qO+~*YY22MbeELdWnkh_ zc&2<9EnR$5E)GiWu!6-a!$;Z)mKUBup!1;#T|3@Ug*vskao96+sVSxilg8@x;;=m+ zQkvXGa!{-kSSd0waGCvBr^YI?liz!`uRZ>iTpmoDwefK98WLU#OOzW!Qt2Sa{Y7W8 z=I%8fM_iJzDLRn`C&+C95gDO7$-}ueI{#4cDls`VO1)ZHR89#j&W5~kX?Y{sBqfO5 zN6)Dt>nIQN?fI$s;pf>M$GaMqmq_axD2F(VgmseJUiCc6+o(lhbgW=mB#yBn|+4UZ0mz6P+j3 zj_T-#5KEEVPYc<+wu-YfyXDi^zQC9d8|nB7`RmG84<@-2nV_;#pIxm?6U;?R-)sDWz_XtT84Uui3Z9~mH zHd zU^wB58!YH00cf~N2d0y=H;a3UxOijzvc;r@G&sQ< zyf{W&YDX%gav)H_FGi+W(dqvyB&8yXX1-@Z6okASw% Date: Sat, 13 Feb 2021 00:39:38 +0100 Subject: [PATCH 04/58] reverse beacon radar side --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 98cfa985..cf565c8f 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -43,7 +43,7 @@ var updateTerrain = func(r_scaled){ var a = int(me.radar_beacon/2); var col = a; - if (side == "L") { + if (side == "R") { col = -1 + (-1 * a); } From 0026a6e3a331b660773798c110f9c4dd7ebd3827 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sat, 13 Feb 2021 11:21:29 +0100 Subject: [PATCH 05/58] code update - radar clean func --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 53 ++++++++++++++---- .../ND/canvas/res/terrain/tile_09.png | Bin 0 -> 3173 bytes Models/Instruments/ND/canvas/style.nas | 22 ++------ 3 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_09.png diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index cf565c8f..377b4112 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -7,10 +7,11 @@ DotSym.makeinstance( name, __self__ ); var element_type = "group"; -var tile_list = ["tile_01.png","tile_01.png","tile_02.png","tile_03.png","tile_03.png","tile_03.png","tile_04.png","tile_04.png","tile_06.png","tile_09.png",]; +var tile_list = ["*black*","tile_01.png","tile_02.png","tile_03.png","tile_04.png","tile_06.png","tile_09.png"]; var radar_beacon = 0; var radar_cycle = 0; +var rader_cleared = 0; var get_elevation = func (lat, lon) { @@ -28,6 +29,7 @@ var updateTerrain = func(r_scaled){ if(me.fetching) return; me.fetching = 1; + me.rader_cleared = 0; var RAD2DEG = 57.2957795; var DEG2RAD = 0.016774532925; @@ -47,7 +49,7 @@ var updateTerrain = func(r_scaled){ col = -1 + (-1 * a); } - var col = me.radar_beacon - me.tileradius; + #var col = me.radar_beacon - me.tileradius; #for (var a=0; a < me.tileradius; a+=1) { @@ -58,6 +60,8 @@ var updateTerrain = func(r_scaled){ var len = size(trn); var range = me.range; + var tiles = me.tile_list; + var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 60); var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 60); @@ -69,14 +73,22 @@ var updateTerrain = func(r_scaled){ var point_lat = proj_lat + ((row * (range/30) / 60) * math.cos(DEG2RAD * heading)); var elev = me.get_elevation(point_lat, point_lon); + var grad = 0; #black if (elev != nil) { - var grad = int((elev - altitudeagl + 500)/500); - if (grad>6) grad = 6; - else if (grad<-3) grad = -3; - - append(elevft,grad+2); # (-1)-8 + var diff = elev - altitudeagl; + if (diff>=0) { + grad = int(diff/1000) + 3; + if (grad>5) grad = 5; + } else { + if (diff<500) grad = 3; # lite yellowe + else { + grad = 2 + int(diff/1000); + if (grad<0) grad = 0; + } + } + append(elevft,grad); # 0-5 } else { - append(elevft,8); # magenta + append(elevft,6); # magenta } } @@ -84,7 +96,7 @@ var updateTerrain = func(r_scaled){ for (var r=0; r < len; r+=1) { var imgx = elevft[r]; - if (imgx < 0) trn[r].hide(); + if (imgx < 1) trn[r].hide(); else trn[r].setFile(me.imgpath ~ me.tile_list[imgx]).show(); #trnR[r].setFile(me.imgpath ~ me.tile_list[2-imgx]).show(); @@ -111,6 +123,7 @@ var init = func { me.range = me.model.rangeNm; # Range of Navigation Display me.viewport_radius = me.getOption('viewport_radius', 670); me.imgpath = get_local_path('res/terrain/'); + me.rader_cleared = 1; var tile = me.tile; @@ -150,6 +163,23 @@ var init = func { #http.load("https://api.rainviewer.com/public/maps.json").done(func(r) me.timeStamp = processRequest(r)); }; +var clear = func { + + if (me.rader_cleared == 0) { + for (var c=0; cN2bZe?^J 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 Date: Sat, 13 Feb 2021 17:06:04 +0100 Subject: [PATCH 06/58] fix above colors --- Models/Instruments/ND/canvas/framework/navdisplay.nas | 2 +- Models/Instruments/ND/canvas/map/TERRAIN.lcontroller | 1 + Models/Instruments/ND/canvas/map/TERRAIN.symbol | 2 +- Models/Instruments/ND/canvas/style.nas | 4 +--- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index c9eab922..04a59949 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -627,7 +627,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec # conditional stuff if(!contains(feature.impl, "predicate")) continue; # no conditional stuff if ( var result=feature.impl.predicate(me) ) - feature.impl.is_true(me, result); # pass the result to the predicate + feature.impl.is_true(me, result); # pass the result to the predicate else feature.impl.is_false( me, result ); # pass the result to the predicate } diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller index 9528ee29..6a1a5a89 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller +++ b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller @@ -21,6 +21,7 @@ var new = func(layer) { parents: [__self__], layer: layer, map: layer.map, + startpos: layer.map.getPosCoord(), listeners: [], }; layer.searcher._equals = func(l,r) l.equals(r); diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 377b4112..18f86a2c 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -80,7 +80,7 @@ var updateTerrain = func(r_scaled){ grad = int(diff/1000) + 3; if (grad>5) grad = 5; } else { - if (diff<500) grad = 3; # lite yellowe + if (diff>-500) grad = 3; # lite yellow else { grad = 2 + int(diff/1000); if (grad<0) grad = 0; diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 1422426b..f34b7054 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -101,9 +101,7 @@ canvas.NDStyles["Airbus"] = { options: { viewport_radius: 670, #512, #706, position_callback: func(nd, pos){ - var curr= geo.aircraft_position(); - pos.lat = curr.lat(); - pos.lon = curr.lon(); + pos = me.startpos; } }, "z-index": -100, From 767d98f42cabe7ab0b1caf6c818c1990881b0723 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sat, 13 Feb 2021 23:00:50 +0100 Subject: [PATCH 07/58] radar position fixed and range shorted --- .../ND/canvas/map/TERRAIN.lcontroller | 7 +- .../Instruments/ND/canvas/map/TERRAIN.symbol | 73 ++++++++++--------- Models/Instruments/ND/canvas/style.nas | 6 +- 3 files changed, 46 insertions(+), 40 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller index 6a1a5a89..dfe9f333 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller +++ b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller @@ -14,14 +14,13 @@ canvas.SymbolLayer.add(name, { } }); -var terrain_tree = "/instrumentation/efis[0]/nd/terrain-on-nd"; +var terrain_tree = "/instrumentation/terrain"; var new = func(layer) { var m = { parents: [__self__], layer: layer, map: layer.map, - startpos: layer.map.getPosCoord(), listeners: [], }; layer.searcher._equals = func(l,r) l.equals(r); @@ -42,8 +41,8 @@ var searchCmd = func { #if(lat == nil or lon == nil) { var pos = geo.aircraft_position(); - var lat = pos.lat(); - var lon = pos.lon(); + lat = pos.lat(); + lon = pos.lon(); #} var result = geo.Coord.new(); diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 18f86a2c..0b4098a8 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -23,7 +23,6 @@ var get_elevation = func (lat, lon) { } - var updateTerrain = func(r_scaled){ if(me.fetching) return; @@ -39,7 +38,13 @@ var updateTerrain = func(r_scaled){ var pos_lon = pos.lon(); var heading = getprop("orientation/heading-magnetic-deg"); - var altitudeagl = getprop("/position/altitude-agl-ft"); + var altitudeft = pos.alt() * 3.2808399; + + if (me.basealtitudeft == nil) { + var basealtft = me.get_elevation(pos_lat,pos_lon); + if (basealtft == nil) basealtft = 0; + me.basealtitudeft = basealtft + 400; + } var side = (math.mod(me.radar_beacon,2)==0) ? "L" : "R"; var a = int(me.radar_beacon/2); @@ -62,28 +67,31 @@ var updateTerrain = func(r_scaled){ var tiles = me.tile_list; - var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 60); - var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 60); + var proj_lon = pos_lon + ((col * (range/15) * math.sin(DEG2RAD * (heading - 90))) / 30); + var proj_lat = pos_lat + ((col * (range/15) * math.cos(DEG2RAD * (heading - 90))) / 30); var elevft = []; for (var row = 0; row <= len; row += 1) { - var point_lon = proj_lon + ((row * (range/30) / 60) * math.sin(DEG2RAD * heading)); - var point_lat = proj_lat + ((row * (range/30) / 60) * math.cos(DEG2RAD * heading)); + var point_lon = proj_lon + ((row * (range/15) / 30) * math.sin(DEG2RAD * heading)); + var point_lat = proj_lat + ((row * (range/15) / 30) * math.cos(DEG2RAD * heading)); var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black if (elev != nil) { - var diff = elev - altitudeagl; - if (diff>=0) { - grad = int(diff/1000) + 3; - if (grad>5) grad = 5; - } else { - if (diff>-500) grad = 3; # lite yellow - else { - grad = 2 + int(diff/1000); - if (grad<0) grad = 0; + if (elev < me.basealtitudeft) grad = 0; # < 400 (at airport) use blank - trivial + else { + var diff = elev - altitudeft; + if (diff>=0) { + grad = int(diff/1000) + 3; + if (grad>5) grad = 5; + } else { + if (diff>-500) grad = 3; # lite yellow + else { + grad = 2 + int(diff/1000); + if (grad<0) grad = 0; + } } } append(elevft,grad); # 0-5 @@ -116,7 +124,7 @@ var updateTerrain = func(r_scaled){ var init = func { #print('TERRAIN init'); - me.tile = 33; # better 34 + me.tile = 33; # preferred 34 me.fetching = 0; me.timeStamp = nil; me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch @@ -124,6 +132,8 @@ var init = func { me.viewport_radius = me.getOption('viewport_radius', 670); me.imgpath = get_local_path('res/terrain/'); me.rader_cleared = 1; + me.basealtitudeft = nil; + me.visible = 0; var tile = me.tile; @@ -136,6 +146,8 @@ var init = func { var centx = 0; #me.viewport_radius * -0.5; var centy = -me.viewport_radius; + var group = me.group.createChild("group").set("z-index", -100); #me.element + for (var c=0; c= me.update_interval) { - me.updateTerrain(r_scaled); - #} }; diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index f34b7054..f3174d52 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -100,9 +100,9 @@ canvas.NDStyles["Airbus"] = { }, # end of layer update predicate options: { viewport_radius: 670, #512, #706, - position_callback: func(nd, pos){ - pos = me.startpos; - } + #position_callback: func(nd, pos){ + # pos = me.startpos; + #} }, "z-index": -100, }, From 5bd45e0709b6434b5f465a94e744a19038641d43 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sat, 13 Feb 2021 23:21:56 +0100 Subject: [PATCH 08/58] range changed --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 0b4098a8..01668c33 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -67,15 +67,15 @@ var updateTerrain = func(r_scaled){ var tiles = me.tile_list; - var proj_lon = pos_lon + ((col * (range/15) * math.sin(DEG2RAD * (heading - 90))) / 30); - var proj_lat = pos_lat + ((col * (range/15) * math.cos(DEG2RAD * (heading - 90))) / 30); + var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 30); + var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 30); var elevft = []; for (var row = 0; row <= len; row += 1) { - var point_lon = proj_lon + ((row * (range/15) / 30) * math.sin(DEG2RAD * heading)); - var point_lat = proj_lat + ((row * (range/15) / 30) * math.cos(DEG2RAD * heading)); + var point_lon = proj_lon + ((row * (range/30) / 30) * math.sin(DEG2RAD * heading)); + var point_lat = proj_lat + ((row * (range/30) / 30) * math.cos(DEG2RAD * heading)); var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black From 112eff446280adbe9eaeec66c08296fad713e452 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sat, 13 Feb 2021 23:57:09 +0100 Subject: [PATCH 09/58] skip not visible ft tiles and minor range zoom out --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 01668c33..48c384d9 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -67,15 +67,20 @@ var updateTerrain = func(r_scaled){ var tiles = me.tile_list; - var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 30); - var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 30); + var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 40); + var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 40); var elevft = []; - for (var row = 0; row <= len; row += 1) { + for (var row = 0; row < len; row += 1) { - var point_lon = proj_lon + ((row * (range/30) / 30) * math.sin(DEG2RAD * heading)); - var point_lat = proj_lat + ((row * (range/30) / 30) * math.cos(DEG2RAD * heading)); + if (trn[row] == nil) { + append(elevft,-1); + continue; + } + + var point_lon = proj_lon + ((row * (range/30) / 40) * math.sin(DEG2RAD * heading)); + var point_lat = proj_lat + ((row * (range/30) / 40) * math.cos(DEG2RAD * heading)); var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black @@ -104,6 +109,7 @@ var updateTerrain = func(r_scaled){ for (var r=0; r < len; r+=1) { var imgx = elevft[r]; + if (imgx == -1) continue; if (imgx < 1) trn[r].hide(); else trn[r].setFile(me.imgpath ~ me.tile_list[imgx]).show(); #trnR[r].setFile(me.imgpath ~ me.tile_list[2-imgx]).show(); @@ -151,14 +157,20 @@ var init = func { for (var c=0; c Date: Sun, 14 Feb 2021 21:00:19 +0100 Subject: [PATCH 10/58] real "empty" diamond --- Nasal/Displays/traffic.nas | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Nasal/Displays/traffic.nas b/Nasal/Displays/traffic.nas index ae1bdeba..92009a4a 100644 --- a/Nasal/Displays/traffic.nas +++ b/Nasal/Displays/traffic.nas @@ -60,7 +60,7 @@ var drawBlip = func(elem, threatLvl) { .lineTo(0,-14) .lineTo(10,0) .lineTo(0,14) - .close(); + .lineTo(-10,0); } }; @@ -329,9 +329,8 @@ var TrafficLayer = { var color = canvas._getColor(rgb); var (r, g, b) = rgb; if (threatLevel > 0) { - item.elems.blip.setColorFill(r, g, b); - } else { - item.elems.blip.setColorFill(0,0,0); + item.elems.blip.setColorFill(r, g, b); + } else { item.elems.blip.setColor(r, g, b); } item.elems.text.setColor(r, g, b); From 3f16a74537e05741ae523974c4c129a328b67987 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 14 Feb 2021 21:02:32 +0100 Subject: [PATCH 11/58] fix update hz - display HI/LO on ND --- .../ND/canvas/framework/navdisplay.nas | 2 +- .../ND/canvas/map/TERRAIN.lcontroller | 12 +- .../Instruments/ND/canvas/map/TERRAIN.symbol | 174 +++---- Models/Instruments/ND/canvas/res/airbusND.svg | 73 ++- .../ND/canvas/res/terrain/tile_01.png | Bin 3197 -> 1716 bytes .../ND/canvas/res/terrain/tile_02.png | Bin 175 -> 182 bytes .../ND/canvas/res/terrain/tile_03.png | Bin 3321 -> 2097 bytes .../ND/canvas/res/terrain/tile_04.png | Bin 175 -> 181 bytes .../ND/canvas/res/terrain/tile_06.png | Bin 175 -> 182 bytes .../Instruments/ND/canvas/res/terrainND.svg | 439 ------------------ Models/Instruments/ND/canvas/style.nas | 38 +- 11 files changed, 187 insertions(+), 551 deletions(-) delete mode 100644 Models/Instruments/ND/canvas/res/terrainND.svg diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 04a59949..0f5e116c 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -69,7 +69,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; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId", - "status.wxr","status.wpt","status.sta","status.arpt"]) + "status.wxr","status.wpt","status.sta","status.arpt","terrHI","terrLO"]) me.symbols[element] = me.nd.getElementById(element); # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller index dfe9f333..4fba3af4 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller +++ b/Models/Instruments/ND/canvas/map/TERRAIN.lcontroller @@ -14,8 +14,6 @@ canvas.SymbolLayer.add(name, { } }); -var terrain_tree = "/instrumentation/terrain"; - var new = func(layer) { var m = { parents: [__self__], @@ -36,14 +34,10 @@ var del = func() { var searchCmd = func { if(me.map.getRange() == nil) return []; - #var lat = getprop(terrain_tree~"/center/latitude-deg"); - #var lon = getprop(terrain_tree~"/center/longitude-deg"); - #if(lat == nil or lon == nil) { - var pos = geo.aircraft_position(); - lat = pos.lat(); - lon = pos.lon(); - #} + var pos = geo.aircraft_position(); + lat = pos.lat(); + lon = pos.lon(); var result = geo.Coord.new(); result.set_latlon(lat, lon); diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 48c384d9..65467122 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -7,20 +7,19 @@ DotSym.makeinstance( name, __self__ ); var element_type = "group"; +var terrain_visible = props.globals.initNode("/custom/terrain/visible", 0,"INT"); +var terrain_minalt = props.globals.initNode("/custom/terrain/min-altitude", 0,"INT"); +var terrain_maxalt = props.globals.initNode("/custom/terrain/max-altitude", -9999,"INT"); + var tile_list = ["*black*","tile_01.png","tile_02.png","tile_03.png","tile_04.png","tile_06.png","tile_09.png"]; -var radar_beacon = 0; -var radar_cycle = 0; -var rader_cleared = 0; var get_elevation = func (lat, lon) { - var info = geodinfo(lat, lon); var elevation = 0; if (info != nil) { elevation = int(info[0] * 3.2808399); } else { elevation = nil; } return elevation; - } var updateTerrain = func(r_scaled){ @@ -28,7 +27,11 @@ var updateTerrain = func(r_scaled){ if(me.fetching) return; me.fetching = 1; - me.rader_cleared = 0; + + if (me.request_clear == 1) { + me.request_clear = 0; + me.clear(); + } var RAD2DEG = 57.2957795; var DEG2RAD = 0.016774532925; @@ -54,80 +57,85 @@ var updateTerrain = func(r_scaled){ col = -1 + (-1 * a); } - #var col = me.radar_beacon - me.tileradius; + var trn = me.terrlayer[side ~ a]; - #for (var a=0; a < me.tileradius; a+=1) { + var len = size(trn); + var range = me.range; - #var trnL = me.terrlayer["L" ~ a]; - #var trnR = me.terrlayer["R" ~ a]; - var trn = me.terrlayer[side ~ a]; + var tiles = me.tile_list; - var len = size(trn); - var range = me.range; + var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 40); + var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 40); - var tiles = me.tile_list; + var elevft = []; - var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 40); - var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 40); + for (var row = 0; row < len; row += 1) { - var elevft = []; + if (trn[row] == nil) { + append(elevft,-1); + continue; + } - for (var row = 0; row < len; row += 1) { + var point_lon = proj_lon + ((row * (range/30) / 40) * math.sin(DEG2RAD * heading)); + var point_lat = proj_lat + ((row * (range/30) / 40) * math.cos(DEG2RAD * heading)); - if (trn[row] == nil) { - append(elevft,-1); - continue; - } - - var point_lon = proj_lon + ((row * (range/30) / 40) * math.sin(DEG2RAD * heading)); - var point_lat = proj_lat + ((row * (range/30) / 40) * math.cos(DEG2RAD * heading)); - - var elev = me.get_elevation(point_lat, point_lon); - var grad = 0; #black - if (elev != nil) { - if (elev < me.basealtitudeft) grad = 0; # < 400 (at airport) use blank - trivial - else { - var diff = elev - altitudeft; - if (diff>=0) { - grad = int(diff/1000) + 3; - if (grad>5) grad = 5; - } else { - if (diff>-500) grad = 3; # lite yellow - else { - grad = 2 + int(diff/1000); - if (grad<0) grad = 0; - } + var elev = me.get_elevation(point_lat, point_lon); + var grad = 0; #black + if (elev != nil) { + if (elevme.max_altitude) me.max_altitude = elev; + if (elev < me.basealtitudeft) grad = 0; # < 400 (at airport) use blank - trivial + else { + var diff = elev - altitudeft; + if (diff>=0) { + grad = int(diff/1000) + 3; + if (grad>5) grad = 5; + } else { + if (diff>-500) grad = 3; # lite yellow + else { + grad = 2 + int(diff/1000); + if (grad<0) grad = 0; } } - append(elevft,grad); # 0-5 - } else { - append(elevft,6); # magenta } - + append(elevft,grad); # 0-5 + } else { + append(elevft,6); # magenta } + + } - for (var r=0; r < len; r+=1) { + me.radar_cleared = 0; - var imgx = elevft[r]; - if (imgx == -1) continue; - if (imgx < 1) trn[r].hide(); - else trn[r].setFile(me.imgpath ~ me.tile_list[imgx]).show(); - #trnR[r].setFile(me.imgpath ~ me.tile_list[2-imgx]).show(); - - } - - #} + for (var r=0; r < len; r+=1) { + var imgx = elevft[r]; + if (imgx == -1) continue; + if (imgx < 1) trn[r].hide(); + else trn[r].setFile(me.imgpath ~ me.tile_list[imgx]).show(); + } me.radar_beacon += 1; - if (me.radar_beacon >= (me.tileradius*2)) { - me.radar_beacon = 0; - me.radar_cycle += 1; + if (me.radar_beacon >= (me.tileradiusw*2)) { + me.update_altitudes(); + me.restart_beacon(); } #me.last_request = getprop("sim/time/elapsed-sec"); me.fetching = 0; }; +var update_altitudes = func { + me.terrain_minalt.setValue(me.min_altitude); + me.terrain_maxalt.setValue(me.max_altitude); +} + +var restart_beacon = func { + me.radar_beacon = 0; + me.radar_cycle += 1; + me.min_altitude = 9999; + me.max_altitude = -9999; +}; + var init = func { #print('TERRAIN init'); me.tile = 33; # preferred 34 @@ -137,24 +145,31 @@ var init = func { me.range = me.model.rangeNm; # Range of Navigation Display me.viewport_radius = me.getOption('viewport_radius', 670); me.imgpath = get_local_path('res/terrain/'); - me.rader_cleared = 1; + me.radar_beacon = 0; + me.radar_cycle = 0; + me.radar_cleared = 1; + me.request_clear = 0; me.basealtitudeft = nil; me.visible = 0; + me.min_altitude = 9999; + me.max_altitude = -9999; var tile = me.tile; var gx = int(me.viewport_radius / tile); - me.tileradius = gx; - me.terrlayer = {}; #me.element.createChild("image").set("z-index", -100).hide(); + var limx = int((512/tile)+0.5); # horiz space is smaller + me.tileradiusw = limx; - var centx = 0; #me.viewport_radius * -0.5; + me.terrlayer = {}; + + var centx = 0; var centy = -me.viewport_radius; var group = me.group.createChild("group").set("z-index", -100); #me.element - for (var c=0; cTERR000000v`WF)9%}T_kVY- z^*rlYYwhoEwt9c{o?6c{W}RJqUiG!r4^}@_{c!b-bK=#R)n|>t!RkY^IcFUA&E`n; z1=SbNI)D4s*8JPGYuDCtj_Ka&)5jFXi`Cy(|5N>E^{MI`b|MOWc=qrB=P>7&4Kv2? zSHD~RK=siA;2+DaZEBotJaJ+Dd4Kia1M_?JJJnat+vIw5BBFBD7&}K4-Zj;)4lRz~ zR6jp&@s@zJ`jYXvtNKLs%|raz>QBe?tLpcvAFIB6=wrk3(dyT$KdSzC2w?yl196_L z{<`|d>d&elAJQ0DN5BaBLG{noe^tLxecOQDGD}sUUbv&urQ`h5WNG~{m49=HvRLO1 z5?>LnuRb;|997{282bD%nR1gU3vn&tsJumbfh>oTrar!w8ZZ`pWLXB{($I;GKXsOk zbWed%E6F}n{Ydq7!|tMyH8AXiIIa4?h=%VSV^2xMbr-%wlT8X73@!&&{nsIK$I}Ao zMN1j)tA2BesZ>{tj}Y9bZ-1Xy;I*uX4sFo#q!M?1arL}{Eg_EF4}w7lQ_DNqs8f23 zm`{u|JH5Vl*hwpp$O*(31~&IrzdZFoz41_>Ziw<(3w6$MKS5)Xfb|!R27%~E7O7a zy)dn${qQCaT7$uHYgJy3YObNBEDtIh8s}=x)XK&ar(6@FM86NkwNf1|Xs&tPPCktbsAx>h|jt z|HBz$v6zBMXb$$$cc@gV=yqUs({!*C0A4YUi>mlj>XtwEfzikEy?ww;D7p0LCVkaY zd=e+8q=j$5Pz;8{0BjZ;C!Ukm%#Daq)}Bw6!(0Tw62((O8GjuMKQJL4tr)u|EJW!c zNW2!z?%~Tc^aEfZ4D+4Sa`Z`^W=Jy!+qygC0x|$D_oajNi;l`XcAH=7lZ&g` z&E&1U(s~lvg+>F?=_WlA(T;&J{O$?(CeHP&dVEqCV@P73PS(=hv=C;Z(36*-@SLOt zuv8=ff{+I@`v<|$Cs(phGI0#KoV?@7&Hn#ou!rY{b$=n{d+hokgIv90uSiNuOkf~6 zGCm3BwP7R`8`-efEOt05Sh@p}4PdIeRb7DY&~%4GGN@lZ?Ls@T)W$jt27R}r0%F0` zpSh<=!7XxOnkEEe;f}0gNIH45q_FOiqQV$<(fMK^p}k=I5m-;o5|W$?(cR;VaL*jh zXJd&Ln16^4Rl1nDl4-bUWtA30G%{pVRttbh+wsZm3r3G|&}Qy-#Y89Ll1}5yOA^TD zvqnG#=B4}HypoeKo3J?q#%@}BrSCPL{0!664~>$C)~u|_chgvgh70vIq4x1(QLkD` z3xGQ@^#XEQ6!mG&xn_`351%I1e(h1#)$4?{h<~^%j3nl=S#IooJ$?40k}tGc(l#@n z;-_(>g4TlJLtNtc3h?o5mWN9|;}Vr3R8oN?b!;}p@LAJ)=qrOYq1R=B(C#Vfg7HF{ z+pfEtw`IbkMUPjyO!C0f+r=E#y+{KZuRf3j9Tt>u|;>^Cm5#1|OuLQ7Ha iC>5?+H`U!!{{qkL>j3iN8ZH0;002ovP6b4+LSTXx7f??C delta 3180 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 delta 134 zcmdnSxSnx>q$nE$1A~=2_aPv~SRCZ;#IWw1%*%<2(rG{uzC(hbxbNTwCWUur-fa79_3mfm-`njxgN@xNA(3~*j diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_03.png b/Models/Instruments/ND/canvas/res/terrain/tile_03.png index ca873469f2f54a55d2e33c11e941f049e6826a0e..ff188f9ffcd3443652cd879f26542676e9f8badd 100644 GIT binary patch delta 2072 zcmV+z2|xQZXNXn%S8 zJKpFaJ$>GDp8LM8`?|+-OnUb0`OW96d-v|vg9i_uG->?o*(F=Hl<(SA`NIztt*s>! zCgcwqG^kgvUOjsB=-02GbzC<0>C?w^>#<|UmXwUIuAWd?Sy)z9FnaW8uR3+=)VXtK z&XfNA`}5wdTeq%VyY}wgd*Z}=et!=iu6gmIIhSkw=bx67C#OOkHEI-hef#$P_VYDz zUv)S(0gME8VlF>gLV*`}Z5}-kkws`}T^d zQ;Rr42njNtIaBM^ty}fmww3cfV#EmU2*ty-YjqDEG~T#T|I<$ug@yST2%4CQ-(rOS z@@32M<2B2dXBIEcEL)ZVxqo0m>D;-c<>iG!v6~q-0CKsxx!n9$uUgn*=@l4ZWwQnL zFI}3MH?MTsw3L}wvcM|2dbRHP^E6WQfBUVH8j~ldIV>$5FY^Tj`Gg|Zz<~q70H*%m ze>XjQ)_mc@w3e1hC*J~?`P$5 zbEHx7VUt2jMQ_m|`hSKO7ZQTTh9n0MR^Pr|fBkx$W>AFM$OfCErV~GyLDmf_m3q-J zkkk@;DZwKzFAo@M0^))c0LZJ-R$8ynz5RWpK(B+H84Qu=m2e%y5D&J64I>r*flMGVa7FDtC* z9P=p=I}BSxtG91kz$kpragSLd8h7#{SXNfBZe3Oze*Bn@3EjiCsi{~NDM?|x5sGxW z%ZL;vDDU1qMStJ0(RTvZJ=#8Y2aG#LM3X|%Xx_7DYqhhPw0CbREc$$TYn%PC8HTlo zkP<1OwM>XZK$=b`f9*=UT~U|9XCt=)(x)p|X0?tuYz{&yO1ne^;XR7YIzdFEYC6fM zhQ^M-rGaS7rO$Lsnnky5ncW`I88?h(xKwzqbbv9V1$jRt?`n7BVCdoK5X=N>Qt?qBhE$~?c2BS(xnU6 zXc65a!hh0pUk*d1)C$S?;mw6*qPhY2ftQ6ySFFftpbsC6oOx`VA8G_PzY-INu5F2T3ZC zv}V6!MpgQa%DH*h?pDI(K0$}SBQ(6LElU`Rk1?cN1FX~uzGP6TzM3aKCW+wT9_7}&w zKdIfiH9Zg2%atp2W~&y2A#}``CsrQ0(1hWD@lo;a-Asa*kK#jCH0|28i*^ZuWWg5+ zZw)82*{4&KvbiN0)U%V?T1Bi0G{2cei+`Etk|bN7KFvl=A#o%QFs>LpVnU9jUg=_A zffDSC4mowThq%C116b2OVdd-@wF4H%XOghEN0E}LNp)u7049^{!RC1tc z7iX1k@%D@M3JiOi%E8`gE;q%bza-p#TU%E_=W*k$<^Q zbK^B}uwx^KJ|}%wI;8oEc5(3zBYzypT8{2GV>!B-3CjEzp?$tC3 zMkdW7lSU|D1nZJUG@~G41X38I7*!kI1;H;vmpr-K;8j`zVHU5IAOQEMSIsO?HG{h~ z%NT1sn$rv=j0;GC$B=qLG<@}VSy=%;O!D&b{s(3skd|@$|H=RW002ovP6b4+LSTZI CzuzqY delta 3305 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 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_04.png b/Models/Instruments/ND/canvas/res/terrain/tile_04.png index aa0778293a5c8f12f23b023e556ab9c2e0840e66..f1604ba30d8379eb31888742e00ba0948861a65e 100644 GIT binary patch delta 140 zcmZ3_xRr5&BnJ}%1H)F;Ia4Rr#ti(`m~_uI3Ef(!~g42C{e_b=CSV751Ss#ksPUCjbc plSZ`*EVCShGnjlqoM$)BvGU!m%yIpF(*vlT!PC{xWt~$(697}&F9!es delta 134 zcmdnWxSnx>q$nE$1A~=2_aPv~SRCZ;#IWw1%*%<2(rG{uzC(^B6o`{an^LB{Ts5+h#DL diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_06.png b/Models/Instruments/ND/canvas/res/terrain/tile_06.png index 151be7c439d2ae33340dcbbecb1485cee2b5a8df..1c97e713981806f741680e42daa500fd978f41fd 100644 GIT binary patch delta 141 zcmZ3_xQ%gwBnJ}%1H)F;Ia4RqSFi(`m~_uI3EybKBg42E<5^we8-I5L|Xn7+JMnpVGn q)1*=D0?RB1;S45U5a-#=H{6`7)b6ZrWoQKIXYh3Ob6Mw<&;$T^s4k@d delta 134 zcmdnSxSnx>q$nE$1A~=2_aPv~SRCZ;#IWw1%*%<2(rG{uzC(__E%Oao@oWObYMLyxI2J;{DIYzb~KnOqpmDbP0l+XkK85S|} diff --git a/Models/Instruments/ND/canvas/res/terrainND.svg b/Models/Instruments/ND/canvas/res/terrainND.svg deleted file mode 100644 index 65bc1e02..00000000 --- a/Models/Instruments/ND/canvas/res/terrainND.svg +++ /dev/null @@ -1,439 +0,0 @@ - -image/svg+xmlGijs de Rooy▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index f3174d52..4b51decc 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -12,6 +12,9 @@ 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_visible = props.globals.getNode("/custom/terrain/visible", 0); +var terrain_minalt = props.globals.getNode("/custom/terrain/min-altitude", 0); +var terrain_maxalt = props.globals.getNode("/custom/terrain/max-altitude", -9999); canvas.NDStyles["Airbus"] = { font_mapper: func(family, weight) { @@ -86,23 +89,22 @@ canvas.NDStyles["Airbus"] = { layers: [ { name:"TERRAIN", - isMapStructure:1, - always_update: 1, - update_on:[ {rate_hz: 0.4}, "toggle_range","toggle_display_mode","toggle_terrain"], + isMapStructure: 1, + update_on:[ {rate_hz: 18}, "toggle_range","toggle_display_mode","toggle_terrain"], predicate: func(nd, layer) { #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.get_switch("toggle_centered") and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); - layer.group.setVisible(visible); + nd.get_switch("toggle_display_mode") != "PLAN" and (nd.rangeNm() <= 40) and !nd.get_switch("toggle_centered") and + (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)); + layer.group.setVisible(visible); if (visible) { layer.update(); + } else { + #terrain_visible.setValue(0); } }, # end of layer update predicate options: { viewport_radius: 670, #512, #706, - #position_callback: func(nd, pos){ - # pos = me.startpos; - #} }, "z-index": -100, }, @@ -1980,6 +1982,26 @@ canvas.NDStyles["Airbus"] = { nd.symbols.offsetLbl.hide(); } } + }, + { + id: "terrGroup", + impl: { + init: func(nd,symbol), + predicate: func(nd) ( nd.get_switch("toggle_terrain") and + nd.get_switch("toggle_display_mode") != "PLAN" and (nd.rangeNm() <= 40) and !nd.get_switch("toggle_centered") and + (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)) ), + is_true: func(nd){ + if (terrain_maxalt.getValue() != -9999) { + nd.symbols.terrLO.setText(sprintf("%03d",int(terrain_minalt.getValue()/100))); + nd.symbols.terrHI.setText(sprintf("%03d",int(terrain_maxalt.getValue()/100))); + nd.symbols.terrGroup.show(); + terrain_maxalt.setValue(-9999); #update visual once at radar cycle + } + }, + is_false: func(nd){ + nd.symbols.terrGroup.hide(); + } + } } ], # end of vector with features From 384c629db069565f145305bbb3a5869db7b4e0c8 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 14 Feb 2021 23:11:52 +0100 Subject: [PATCH 12/58] optimization on speed --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 5 ++++- Models/Instruments/ND/canvas/style.nas | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 65467122..eafbf4a1 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -222,6 +222,8 @@ var clear = func { } var draw = func { + + if(me.fetching) return; var range = me.layer.map.getRange(); # Range of Navigation Display var update_size = (range != me.range); @@ -238,6 +240,7 @@ var draw = func { me.terrain_visible.setValue(1); } - me.updateTerrain(r_scaled); + me.updateTerrain(r_scaled); # left + if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(r_scaled); # right }; diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 4b51decc..8e5e1924 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -90,7 +90,7 @@ canvas.NDStyles["Airbus"] = { { name:"TERRAIN", isMapStructure: 1, - update_on:[ {rate_hz: 18}, "toggle_range","toggle_display_mode","toggle_terrain"], + update_on:[ {rate_hz: 10}, "toggle_range","toggle_display_mode","toggle_terrain"], predicate: func(nd, layer) { #print("TERRAIN TOGGLE: " ~ nd.get_switch("toggle_terrain")); var visible = nd.get_switch("toggle_terrain") and From 91fb47704ec0ad2eee7cac0022526fee0ed63d0a Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 14 Feb 2021 23:50:34 +0100 Subject: [PATCH 13/58] ND separation left/right --- Models/FlightDeck/a320.flightdeck.xml | 20 ++++++++++++++++++++ Models/Instruments/ND/canvas/ND.nas | 20 ++++++++++---------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index cbdbc318..53e2b24b 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -1449,6 +1449,16 @@ property-toggle controls/switches/terr_on_nd_l + + + + systems/electrical/bus/dc-ess + 25 + + + property-toggle + instrumentation/efis[0]/inputs/terr + @@ -1490,6 +1500,16 @@ property-toggle controls/switches/terr_on_nd_r + + + + systems/electrical/bus/dc-ess + 25 + + + property-toggle + instrumentation/efis[1]/inputs/terr + diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 41088b16..90d5321c 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -48,7 +48,7 @@ var myCockpit_switches = { "toggle_waypoints": {path: "/inputs/wpt", value:0, type:"BOOL"}, "toggle_position": {path: "/inputs/pos", value:0, type:"BOOL"}, "toggle_data": {path: "/inputs/data",value:0, type:"BOOL"}, - #"toggle_terrain": {path: "/inputs/terr",value:0, type:"BOOL"}, + "toggle_terrain": {path: "/inputs/terr",value:0, type:"BOOL"}, "toggle_traffic": {path: "/inputs/tfc",value:0, type:"BOOL"}, "toggle_centered": {path: "/inputs/nd-centered",value:0, type:"BOOL"}, "toggle_lh_vor_adf": {path: "/input/lh-vor-adf",value:0, type:"INT"}, @@ -64,7 +64,7 @@ var myCockpit_switches = { "toggle_xtrk_error": {path: "/nd/xtrk-error", value: 0, type: "BOOL"}, "toggle_trk_line": {path: "/nd/trk-line", value: 0, type: "BOOL"}, "ADIRS3": {path: "/nd/ir-3", value: 0, type: "BOOL"}, - "toggle_terrain": {path: "/controls/switches/terr_on_nd_l", value: 0, type: "BOOL"}, + #"toggle_terrain": {path: "/nd/terrain-on-nd", value: 0, type: "BOOL"}, }; var canvas_nd_base = { @@ -418,14 +418,14 @@ for (i = 0; i < 2; i = i + 1 ) { }); } -setlistener("/instrumentation/efis[0]/nd/terrain-on-nd", func{ - var terr_on_hd = getprop("instrumentation/efis[0]/nd/terrain-on-nd"); - var alpha = 1; - if (terr_on_hd) { - alpha = 0.5; - } - nd_display.main.setColorBackground(0,0,0,alpha); -}); +#setlistener("/instrumentation/efis[0]/nd/terrain-on-nd", func{ +# var terr_on_hd = getprop("instrumentation/efis[0]/nd/terrain-on-nd"); +# var alpha = 1; +# if (terr_on_hd) { +# alpha = 0.5; +# } +# nd_display.main.setColorBackground(0,0,0,alpha); +#}); setlistener("/flight-management/control/capture-leg", func(n) { var capture_leg = n.getValue(); From 77aa7b242934b6875113a8e40f4406153e7a664f Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 15 Feb 2021 23:12:07 +0100 Subject: [PATCH 14/58] display water and some optimization on reference calculations --- Models/FlightDeck/a320.flightdeck.xml | 2 +- Models/Instruments/ND/canvas/ND.nas | 1 - .../ND/canvas/framework/navdisplay.nas | 6 +- Models/Instruments/ND/canvas/loaders.nas | 2 +- .../Instruments/ND/canvas/map/TERRAIN.symbol | 111 ++++++++++-------- .../ND/canvas/res/terrain/tile_s1.png | Bin 0 -> 1851 bytes Models/Instruments/ND/canvas/style.nas | 7 +- 7 files changed, 72 insertions(+), 57 deletions(-) create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_s1.png diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index 53e2b24b..d0e52b2a 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -1457,7 +1457,7 @@ property-toggle - instrumentation/efis[0]/inputs/terr + instrumentation/efis/inputs/terr diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 90d5321c..543b0722 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -64,7 +64,6 @@ var myCockpit_switches = { "toggle_xtrk_error": {path: "/nd/xtrk-error", value: 0, type: "BOOL"}, "toggle_trk_line": {path: "/nd/trk-line", value: 0, type: "BOOL"}, "ADIRS3": {path: "/nd/ir-3", value: 0, type: "BOOL"}, - #"toggle_terrain": {path: "/nd/terrain-on-nd", value: 0, type: "BOOL"}, }; var canvas_nd_base = { diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 0f5e116c..594b5fd0 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -375,9 +375,9 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec wxr_live_enabled = 0; me.set_switch('toggle_weather_live', wxr_live_enabled); - var terr_enabled = getprop("/controls/switches/terr_on_nd_l"); - if (terr_enabled == nil) terr_enabled = 0; - if (me.get_switch('toggle_terrain') != terr_enabled) me.set_switch('toggle_terrain', terr_enabled); + #var terr_enabled = getprop("/controls/switches/terr_on_nd_l"); + #if (terr_enabled == nil) terr_enabled = 0; + #if (me.get_switch('toggle_terrain') != terr_enabled) me.set_switch('toggle_terrain', terr_enabled); call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables diff --git a/Models/Instruments/ND/canvas/loaders.nas b/Models/Instruments/ND/canvas/loaders.nas index ed72a08d..e8cb8782 100644 --- a/Models/Instruments/ND/canvas/loaders.nas +++ b/Models/Instruments/ND/canvas/loaders.nas @@ -28,7 +28,7 @@ setlistener("/nasal/canvas/loaded", func() { #var code = call(compile, [code], var err=[]); var code = call(func compile(code, file), [code], var err=[]); if (size(err)) { - print("handling error"); + #print("handling error"); if (substr(err[0], 0, 12) == "Parse error:") { # hack around Nasal feature var e = split(" at line ", err[0]); if (size(e) == 2) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index eafbf4a1..2e8e963d 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -7,22 +7,27 @@ DotSym.makeinstance( name, __self__ ); var element_type = "group"; -var terrain_visible = props.globals.initNode("/custom/terrain/visible", 0,"INT"); var terrain_minalt = props.globals.initNode("/custom/terrain/min-altitude", 0,"INT"); var terrain_maxalt = props.globals.initNode("/custom/terrain/max-altitude", -9999,"INT"); -var tile_list = ["*black*","tile_01.png","tile_02.png","tile_03.png","tile_04.png","tile_06.png","tile_09.png"]; +var tile_list = ["*black*","tile_01.png","tile_02.png","tile_03.png","tile_04.png","tile_06.png","tile_09.png","tile_s1.png"]; +var is_terrain = 0; var get_elevation = func (lat, lon) { var info = geodinfo(lat, lon); var elevation = 0; - if (info != nil) { elevation = int(info[0] * 3.2808399); } + if (info != nil) { + elevation = int(info[0] * 3.2808399); + me.is_terrain = (info[1] == nil) ? 1 : info[1].solid; + } else { elevation = nil; } return elevation; } -var updateTerrain = func(r_scaled){ +var updateTerrain = func { + + if (me.reference == nil) return; if(me.fetching) return; @@ -36,18 +41,11 @@ var updateTerrain = func(r_scaled){ var RAD2DEG = 57.2957795; var DEG2RAD = 0.016774532925; - var pos = geo.aircraft_position(); - var pos_lat = pos.lat(); - var pos_lon = pos.lon(); + var pos_lat = me.reference.lat(); + var pos_lon = me.reference.lon(); - var heading = getprop("orientation/heading-magnetic-deg"); - var altitudeft = pos.alt() * 3.2808399; - - if (me.basealtitudeft == nil) { - var basealtft = me.get_elevation(pos_lat,pos_lon); - if (basealtft == nil) basealtft = 0; - me.basealtitudeft = basealtft + 400; - } + var heading = me.reference.heading; + var altitudeft = me.reference.altitudeft; var side = (math.mod(me.radar_beacon,2)==0) ? "L" : "R"; var a = int(me.radar_beacon/2); @@ -82,21 +80,26 @@ var updateTerrain = func(r_scaled){ var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black if (elev != nil) { - if (elevme.max_altitude) me.max_altitude = elev; - if (elev < me.basealtitudeft) grad = 0; # < 400 (at airport) use blank - trivial - else { - var diff = elev - altitudeft; - if (diff>=0) { - grad = int(diff/1000) + 3; - if (grad>5) grad = 5; - } else { - if (diff>-500) grad = 3; # lite yellow - else { - grad = 2 + int(diff/1000); - if (grad<0) grad = 0; + if (me.is_terrain) { + if (elevme.max_altitude) me.max_altitude = elev; + if (elev < me.basealtitudeft) grad = 0; # < 400 near runway use blank + else { + var diff = elev - altitudeft; + if (diff>=0) { + grad = int(diff/1000) + 3; + if (grad>5) grad = 5; + } else { + if (diff>-500) grad = 3; # lite yellow + else { + grad = 2 + int(diff/1000); + if (grad<0) grad = 0; + } } } + } else { + var diff = elev - altitudeft; + if (diff>=-2000) grad = 7; #sea } append(elevft,grad); # 0-5 } else { @@ -149,10 +152,11 @@ var init = func { me.radar_cycle = 0; me.radar_cleared = 1; me.request_clear = 0; - me.basealtitudeft = nil; me.visible = 0; me.min_altitude = 9999; me.max_altitude = -9999; + me.basealtitudeft = nil; + me.reference = nil; var tile = me.tile; @@ -192,14 +196,10 @@ var init = func { me.terrlayer["R" ~ c] = grprx; } - #me.update_interval = 300; - #me.last_request = 0; + setlistener("/controls/switches/terr_on_nd_l", func{ + me.request_clear = 1; + }); - #var r_scaled = (me.fetchRad*me.viewport_radius)/me.range; - #me.fetchWXRMap(r_scaled); - - #me.timeStamp = nil; - #http.load("https://api.rainviewer.com/public/maps.json").done(func(r) me.timeStamp = processRequest(r)); }; var clear = func { @@ -224,23 +224,42 @@ var clear = func { var draw = func { if(me.fetching) return; - + + if (me.radar_beacon == 0) { # update aircraft reference + + var ref = geo.aircraft_position(); + me.reference = ref; + if (ref != nil) { + me.reference.heading = getprop("orientation/heading-magnetic-deg"); + me.reference.altitudeft = ref.alt() * 3.2808399; + + if (me.basealtitudeft == nil) { + var basealtft = me.get_elevation(ref.lat,ref.lon); + if (basealtft == nil) basealtft = 0; + me.basealtitudeft = basealtft + 400; + } + + if ((fmgc.FMGCInternal.phase <= 1 or fmgc.FMGCInternal.phase >= 5) and (me.basealtitudeft == 0)) { + var basealtft = me.get_elevation(ref.lat,ref.lon); + if (basealtft == nil) basealtft = 0; + me.basealtitudeft = basealtft + 400; + # me.reference.basealtitudeft = ft + 400 # <- TODO get departure/arrival runway altitude + } + else if ((fmgc.FMGCInternal.phase > 1 and fmgc.FMGCInternal.phase < 5) and (me.basealtitudeft != 0)) { + me.basealtitudeft = 0; + } + } + } + var range = me.layer.map.getRange(); # Range of Navigation Display var update_size = (range != me.range); me.range = range; - me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch - var r_scaled = (me.fetchRad*me.viewport_radius)/me.range; if(update_size){ me.request_clear = 1; } - if(me.terrain_visible.getValue() == 0){ - me.request_clear = 1; - me.terrain_visible.setValue(1); - } - - me.updateTerrain(r_scaled); # left - if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(r_scaled); # right + me.updateTerrain(); # left + if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(); # right }; diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_s1.png b/Models/Instruments/ND/canvas/res/terrain/tile_s1.png new file mode 100644 index 0000000000000000000000000000000000000000..ae16caf3a07fdf0a4a69bf65c3b9195d26c0aad4 GIT binary patch literal 1851 zcmV-B2gLY^P)N2bZe?^J zG%hhNHDpIvQUCx3xk*GpR7gur*ZZsAa~uco&whLVu%&I;+;(QiX2#fzv5oJ}9A}%e z`&rVGMA8yTBq9+}vPMK`gocn?SR%RSPVSe##^d>UefQF*YkCGe@@qq z9dF0X%k#LEStqV-Cr`DN*R}Nr+u-T8{*kuorkr?n{Hk`sng}e~(8dPYoOFH^=Z|Hx zWJ^0`XIpk@*7){%)%Cwwvu1TsF44IQ+rkwQ}wk&o=dTJL|@wMWz=| zX3rnTby(-8T@hr2x4z%Dyw}z})W)Yd@FUp`p;5N+goX6B&)eR=<7UtAZS%YB^sDo> zVjZ83MNm$^Cc@4EZ&*hD6TX&b&V8md^Cm(z_wY#Jm&Rf@L8M-Zghd9+QBpE_jiaX!-<~ z4=M|mCHW2m?(V(>suojY``dXBw5d0fOsQINRdkr3hJE|8#l4bc(V-1ko>-!;F3z|% zulN=aMe2(-bb$kDz)mC@d8!&i=7mp2nVedmyD;d4RW5;Jh%O({oOge_=;h>J@}X2I z&=l1@8D0J+P194QYROTO72Ej_MgYrxo<&^+R59_f_TE(Hp5KmYecjH!ZRm!N*3zP3 zj3#tQgo0g_s$JBcCUwG`{vs*WA_(x8h8eZ^aH1b!+WBn?ebeEvBDKZSoZ0Yo(R8GC zRW|AAPuk#6lo4Ishp1uRxNqE>A@VX85~dQpTc-KJ{EL%@MtTH=83s8*K>o_Mb9{$;4P^SeZiad9A* zv>+@SIyOi?_wGyw?QHG|MP(D_fJH%ABR8J?>fPvVdE4`Al7GpEX=ApCa#N-$*bCpG zRLP?0Ky1~`sbD7@ctyBWWW}FCxBNMOtVcg-DfrbE%CMn~bxp5&vrVydv z4~OMow8%K|?8EB&hQ(smo=z=?H3&E>E1m+X*0JE@rhpe$gpCOcP<${_T5&UHcJLA{ z_(KQV)6D1Gm6F3x<*9Gd>VqNg4ykZi4&+QhZ~r1AT$MwKG&n+<0LfL1tWehZCe74a zZTpu)9s1DGDGvRJaX^$=Qt`^qD{jW8dp8wC;c_}GBxAc*$kcf%I!wOoKz5=D7_ENInrsFaV2MHH;izXGL z+GO(9UTQs&Y@p!)b*f2?6lu#Z@2@p;f`1)nJj))PN{lu{v8$7`a7QHs87ugt#VCJH zssx}+3G9v$^gw36{$Lk=Y9zaok)z4QQzro&yEd@YDFnqEsZBu0xIj1pGW!IKTgST$7*Kr^(eBgkfwzq;C)c4EnmwRo}% zd{a^ap&*(+`#FsYYDE{MRfOEcQ-6(0hM+5Mk{DK9LX;TI&N^KP1T=SHKcUO5CuIQ% z&OkJK+z4y$%b|e$kXCMrbY6uEnURdcQ7OwbBdpP?R!IqPQ)Ne|rY|>YjDj*V+a(j6 zYL}`s%CrOlY+Y*zlwew_-{cjXh{+V1u|bzzU)l-ZYdZBArl!|F945yGdL?d58cWkq z!G3PDBl%cVtCrMqKpmNC0XQWJdS9IVm;p*YTur2X?P1pFbwZj&*d;~~o>d6s-JY)f zV#y6Hm$<#%eFC_f#bL--yA(@BRE5Hm(4iS6!?mXNz?TNAH=SVt z5P842Ns9JG%}rCE4f@Wd(0^!?`HwL= Date: Mon, 15 Feb 2021 23:59:00 +0100 Subject: [PATCH 15/58] fix on altitude reference and first ECAM bind (not working) --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 2e8e963d..b1934b8e 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -157,6 +157,7 @@ var init = func { me.max_altitude = -9999; me.basealtitudeft = nil; me.reference = nil; + me.onfailure = 0; var tile = me.tile; @@ -200,6 +201,10 @@ var init = func { me.request_clear = 1; }); + setlistener("/ECAM/warnings/timer/nav-gpws-terr-fault", func{ + me.onfailure = getprop("/ECAM/warnings/timer/nav-gpws-terr-fault"); + }); + }; var clear = func { @@ -225,6 +230,12 @@ var draw = func { if(me.fetching) return; + if (me.onfailure == 1) { + me.clear(); + me.restart_beacon(); + return; + } + if (me.radar_beacon == 0) { # update aircraft reference var ref = geo.aircraft_position(); @@ -234,20 +245,22 @@ var draw = func { me.reference.altitudeft = ref.alt() * 3.2808399; if (me.basealtitudeft == nil) { - var basealtft = me.get_elevation(ref.lat,ref.lon); + #var basealtft = me.get_elevation(ref.lat,ref.lon); + var basealtft = ref.alt() * 3.2808399; if (basealtft == nil) basealtft = 0; me.basealtitudeft = basealtft + 400; } - if ((fmgc.FMGCInternal.phase <= 1 or fmgc.FMGCInternal.phase >= 5) and (me.basealtitudeft == 0)) { - var basealtft = me.get_elevation(ref.lat,ref.lon); - if (basealtft == nil) basealtft = 0; - me.basealtitudeft = basealtft + 400; - # me.reference.basealtitudeft = ft + 400 # <- TODO get departure/arrival runway altitude - } - else if ((fmgc.FMGCInternal.phase > 1 and fmgc.FMGCInternal.phase < 5) and (me.basealtitudeft != 0)) { - me.basealtitudeft = 0; - } + #if (fmgc.FMGCInternal.phase >= 5 and me.basealtitudeft == 0) { + # var basealtft = me.get_elevation(ref.lat,ref.lon); + # if (basealtft == nil) basealtft = 0; + # me.basealtitudeft = basealtft + 400; + # # me.reference.basealtitudeft = ft + 400 # <- TODO get departure/arrival runway altitude + #} + #else if ((fmgc.FMGCInternal.phase > 1 and fmgc.FMGCInternal.phase < 5) and (me.basealtitudeft != 0)) { + # me.basealtitudeft = 0; + #} + } } From b601fd7c2cecc9936c24e34b99e88e353838c98d Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Wed, 17 Feb 2021 00:30:26 +0100 Subject: [PATCH 16/58] high/low aircraft relative altitude modes --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 131 +++++++++++------- .../ND/canvas/res/terrain/tile_cl.png | Bin 0 -> 1843 bytes .../ND/canvas/res/terrain/tile_gh.png | Bin 0 -> 2069 bytes .../res/terrain/{tile_02.png => tile_gs.png} | Bin .../res/terrain/{tile_01.png => tile_lg.png} | Bin .../res/terrain/{tile_09.png => tile_lm.png} | Bin .../ND/canvas/res/terrain/tile_rh.png | Bin 0 -> 2135 bytes .../res/terrain/{tile_05.png => tile_rl.png} | Bin .../res/terrain/{tile_06.png => tile_rs.png} | Bin .../ND/canvas/res/terrain/tile_s1.png | Bin 1851 -> 0 bytes .../ND/canvas/res/terrain/tile_yh.png | Bin 0 -> 2190 bytes .../res/terrain/{tile_03.png => tile_yl.png} | Bin .../res/terrain/{tile_04.png => tile_ys.png} | Bin Models/Instruments/ND/canvas/style.nas | 2 + 14 files changed, 85 insertions(+), 48 deletions(-) create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_cl.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_gh.png rename Models/Instruments/ND/canvas/res/terrain/{tile_02.png => tile_gs.png} (100%) rename Models/Instruments/ND/canvas/res/terrain/{tile_01.png => tile_lg.png} (100%) rename Models/Instruments/ND/canvas/res/terrain/{tile_09.png => tile_lm.png} (100%) create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_rh.png rename Models/Instruments/ND/canvas/res/terrain/{tile_05.png => tile_rl.png} (100%) rename Models/Instruments/ND/canvas/res/terrain/{tile_06.png => tile_rs.png} (100%) delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_s1.png create mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_yh.png rename Models/Instruments/ND/canvas/res/terrain/{tile_03.png => tile_yl.png} (100%) rename Models/Instruments/ND/canvas/res/terrain/{tile_04.png => tile_ys.png} (100%) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index b1934b8e..554e9800 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -10,7 +10,11 @@ var element_type = "group"; var terrain_minalt = props.globals.initNode("/custom/terrain/min-altitude", 0,"INT"); var terrain_maxalt = props.globals.initNode("/custom/terrain/max-altitude", -9999,"INT"); -var tile_list = ["*black*","tile_01.png","tile_02.png","tile_03.png","tile_04.png","tile_06.png","tile_09.png","tile_s1.png"]; +var tile_list = [ + nil,"tile_gl.png","tile_gh.png","tile_yl.png","tile_yh.png","tile_rh.png", # 0-5 low alt + "tile_gl.png","tile_gh.png","tile_gs.png",nil, # 6-9 hi alt + "tile_ml.png","tile_cl.png" # 10 magenta - 11 cyan (water) + ]; var is_terrain = 0; @@ -36,6 +40,7 @@ var updateTerrain = func { if (me.request_clear == 1) { me.request_clear = 0; me.clear(); + me.group.setVisible(1); } var RAD2DEG = 57.2957795; @@ -44,15 +49,17 @@ var updateTerrain = func { var pos_lat = me.reference.lat(); var pos_lon = me.reference.lon(); - var heading = me.reference.heading; - var altitudeft = me.reference.altitudeft; + var heading = me.refheading; + var altitudeft = me.refaltitudeft; + var lowaltft = me.reflowaltft; + var basealtft = me.basealtitudeft; var side = (math.mod(me.radar_beacon,2)==0) ? "L" : "R"; var a = int(me.radar_beacon/2); - var col = a; + var col = a + 0.5; if (side == "R") { - col = -1 + (-1 * a); + col = -col; } var trn = me.terrlayer[side ~ a]; @@ -67,6 +74,8 @@ var updateTerrain = func { var elevft = []; + me.radar_cleared = 0; + for (var row = 0; row < len; row += 1) { if (trn[row] == nil) { @@ -80,36 +89,44 @@ var updateTerrain = func { var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black if (elev != nil) { - if (me.is_terrain) { - if (elevme.max_altitude) me.max_altitude = elev; - if (elev < me.basealtitudeft) grad = 0; # < 400 near runway use blank + if (elevme.max_altitude) me.max_altitude = elev; + if (me.is_terrain) { + if (elev < basealtft) grad = 0; # < 400 near runway use blank else { var diff = elev - altitudeft; if (diff>=0) { grad = int(diff/1000) + 3; if (grad>5) grad = 5; } else { - if (diff>-500) grad = 3; # lite yellow - else { - grad = 2 + int(diff/1000); - if (grad<0) grad = 0; - } + if (me.hialtmode == 0) { + if (diff>=lowaltft) grad = 3; # lite yellow + else { + grad = 2 + int(diff/1000); + if (grad<0) grad = 0; + } + } else { + if (diff>=lowaltft) grad = 3; # lite yellow + else { + if (me.bands_range > 0 and elev > me.bands_minalt) { + elev -= me.bands_minalt; + grad = int(elev / (me.bands_range / 3)) + 6; + if (grad>8) grad = 8; # solid green + } + } + } } } } else { - var diff = elev - altitudeft; - if (diff>=-2000) grad = 7; #sea + grad = 11; #water } append(elevft,grad); # 0-5 } else { - append(elevft,6); # magenta + append(elevft,0); # no data - black (magenta) } } - me.radar_cleared = 0; - for (var r=0; r < len; r+=1) { var imgx = elevft[r]; if (imgx == -1) continue; @@ -122,21 +139,31 @@ var updateTerrain = func { me.update_altitudes(); me.restart_beacon(); } - - #me.last_request = getprop("sim/time/elapsed-sec"); + me.fetching = 0; }; var update_altitudes = func { me.terrain_minalt.setValue(me.min_altitude); me.terrain_maxalt.setValue(me.max_altitude); + + if (me.max_altitude < me.refaltitudeft) { + me.hialtmode = 1; + } else { + me.hialtmode = 0; + } + } var restart_beacon = func { me.radar_beacon = 0; me.radar_cycle += 1; - me.min_altitude = 9999; + me.bands_minalt = me.min_altitude; + me.bands_maxalt = math.max(1000,me.max_altitude); # band min limit to 1000 ft - trivial + me.bands_range = me.bands_maxalt - me.bands_minalt; + me.min_altitude = 9999; me.max_altitude = -9999; + me.reference = nil; }; var init = func { @@ -155,9 +182,13 @@ var init = func { me.visible = 0; me.min_altitude = 9999; me.max_altitude = -9999; + me.bands_minalt = 0; + me.bands_maxalt = 0; + me.bands_range = 0; me.basealtitudeft = nil; me.reference = nil; me.onfailure = 0; + me.hialtmode = 0; # high aircraft relative altitude mode var tile = me.tile; @@ -196,14 +227,10 @@ var init = func { me.terrlayer["L" ~ c] = grplx; me.terrlayer["R" ~ c] = grprx; } - - setlistener("/controls/switches/terr_on_nd_l", func{ - me.request_clear = 1; - }); - setlistener("/ECAM/warnings/timer/nav-gpws-terr-fault", func{ - me.onfailure = getprop("/ECAM/warnings/timer/nav-gpws-terr-fault"); - }); + #setlistener("/ECAM/warnings/timer/nav-gpws-terr-fault", func{ # TODO need further investigations + # me.onfailure = getprop("/ECAM/warnings/timer/nav-gpws-terr-fault"); + #}); }; @@ -236,19 +263,20 @@ var draw = func { return; } - if (me.radar_beacon == 0) { # update aircraft reference + if (me.reference == nil) { # update aircraft reference var ref = geo.aircraft_position(); me.reference = ref; if (ref != nil) { - me.reference.heading = getprop("orientation/heading-magnetic-deg"); - me.reference.altitudeft = ref.alt() * 3.2808399; + me.refheading = getprop("orientation/heading-magnetic-deg"); - if (me.basealtitudeft == nil) { + var refalt = ref.alt() * 3.2808399; + me.refaltitudeft = refalt; + me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; + + if (fmgc.FMGCInternal.phase<2) { #var basealtft = me.get_elevation(ref.lat,ref.lon); - var basealtft = ref.alt() * 3.2808399; - if (basealtft == nil) basealtft = 0; - me.basealtitudeft = basealtft + 400; + me.basealtitudeft = refalt + 400; } #if (fmgc.FMGCInternal.phase >= 5 and me.basealtitudeft == 0) { @@ -260,19 +288,26 @@ var draw = func { #else if ((fmgc.FMGCInternal.phase > 1 and fmgc.FMGCInternal.phase < 5) and (me.basealtitudeft != 0)) { # me.basealtitudeft = 0; #} - } + + } else { + + if (me.layer.display_changed == 1) { + me.layer.display_changed = 0; + me.request_clear = 1; + } + + var range = me.layer.map.getRange(); # Range of Navigation Display + var update_size = (range != me.range); + me.range = range; + + if(update_size){ + me.request_clear = 1; + } + + me.updateTerrain(); # left + if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(); # right + } - var range = me.layer.map.getRange(); # Range of Navigation Display - var update_size = (range != me.range); - me.range = range; - - if(update_size){ - me.request_clear = 1; - } - - me.updateTerrain(); # left - if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(); # right - }; diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_cl.png b/Models/Instruments/ND/canvas/res/terrain/tile_cl.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3a3b66ebdcdefe67defe5a74394779eca4f733 GIT binary patch literal 1843 zcmV-32h8}1P)<{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx3u}MThR7gur*XfH_WfTYS>$`*C3w<+CGJ#|u6=Igf;9yyqlVz)w zW@2S#s7-09m|KdeX(nztndUMX6)n<26wyv*8|}+q)92jt^H-OL%QMeC%lCZG^8BWW z3&zEm(fPjUl3bTw5m#LocRUhF}Nq@K9(mwO_&%LUzP%s`eJf_ZYExtier0o z(>Eig-5l56nX7+ReQMfg#E211Dwk+aPh2=5MfuqHN*w+^PW=E^`m@$7ps`~Lh| zu}&RGi=fPYFom51%HQn|$ClR<7R8}&W8Lxm3bz1+71!UDI*T^N@?CN7$^^dlXzc$y zMGt)wyFQ4O2V&NOgbxkL75ifAo3ZDU*!yV$f`D%b*jY6cLuca1kFo!Yc;aA!hQR8Z z(WKGcAH~Z*$M9dV^{rU2CY{ZHGMB9Idi5Zezt~!*;%@>rZ4UDL=T;16J#UVw0H{qns;fA&Udc zn#Q@D6SZpN4O5K?){7!s={8kM9s&;J(h>)J=d_xv;C091*e@Nm!{24p7#9a}NejZV zp<{#OMH_QEXlHXzC@PyU2P_K0>bmi6SL;S^%iHl^Gx>Wy&NgO?C^u!Ag1zt^N|h{{ z4#eiJ$O?ACflq`>MOOSNbjzP(dz-9d@h)7O&U7fc)Mz(+*^_(}S4_KB+S94!um%BVWyM=S)jAe@+!XNQim)+Z0g4YsN-N!r8ku;B7W{Ic zAvE&?>$BwWQ+aBewECdKyF)5mmIFCc&e4PngGdFjI2=B`6kV_cjASw zJ392Cqf;Duh;cxdKgd|rVM?^h)l%`w&nIrC4zzA6h{ENx3Mt2StB_M?D0P?~+nWs} zRTvf`-{Ka%Xt+^zI;pe_a(s~KxFLsP6>OoKz5=D7_OfKpX2(%rOSrIGG^rTXCX=uB zQtORm0}ThLQ%!25NSisYz1GYL{&k%3EPHe+G1?Htu1?az?UoQ^tl*Otqx?Ck5`a>Y zIA8=lkl7FJZjzrG$*yGNXmT<6Mw6QT|I=X4p9yOq)qQMyph2uYk(VT?MJ8ulQY5@# zxQQ)qBqE{Mh=xRWk%LjfsycYG;TWr?ssU(*R&_W;gZ$Oi&a@LtZmcQOn}lylN+1+O z{aJGw71W9@NUI3Bv0w*QG6Y?5lf>0Jrpk^^OiJ4OtqKLKbVCQZ$f=(I?q+cq^3^WIQV~_5@Fa9-y2)^@sXg$e!D>zCumFg>C*AlU zOloeL`q`lGTng(U@a8PCktQ zIW)lAe;ZPo18N@5sGvoS8Qy+fR04eErge}itk;}uH|Kt@NHu=t2I<;}ro+NzkztqP zx-~qdML-a|7E3%iAtqdJc`6G@TCqXRktMRyXIBpVNm~AtmUo#W-&GMMyqv+#v=G&f hRKcorE4yPx{|kcP_(ea1YZ?Fm002ovPDHLkV1n(Lb|C-& literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_gh.png b/Models/Instruments/ND/canvas/res/terrain/tile_gh.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5f7fa1b571cb0eef533fc4d1d2f6d522550df3 GIT binary patch literal 2069 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 Date: Thu, 18 Feb 2021 00:01:23 +0100 Subject: [PATCH 17/58] GPWS inhibit switch off terrain on ND --- Models/FlightDeck/a320.flightdeck.xml | 56 +++++++++++++++------ Models/Instruments/OHpanel/OHpanel.xml | 68 ++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 16 deletions(-) diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index 188eb01f..271f98ea 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -1441,20 +1441,32 @@ - - systems/electrical/bus/dc-ess - 25 - + + + systems/electrical/bus/dc-ess + 25 + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 0 + + property-toggle controls/switches/terr_on_nd_l - - systems/electrical/bus/dc-ess - 25 - + + + systems/electrical/bus/dc-ess + 25 + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 0 + + property-toggle instrumentation/efis/inputs/terr @@ -1492,20 +1504,32 @@ - - systems/electrical/bus/dc-ess - 25 - + + + systems/electrical/bus/dc-ess + 25 + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 0 + + property-toggle controls/switches/terr_on_nd_r - - systems/electrical/bus/dc-ess - 25 - + + + systems/electrical/bus/dc-ess + 25 + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 0 + + property-toggle instrumentation/efis[1]/inputs/terr diff --git a/Models/Instruments/OHpanel/OHpanel.xml b/Models/Instruments/OHpanel/OHpanel.xml index 1bea790e..054a93e5 100644 --- a/Models/Instruments/OHpanel/OHpanel.xml +++ b/Models/Instruments/OHpanel/OHpanel.xml @@ -1698,6 +1698,74 @@ property-toggle instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + + + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 1 + + + controls/switches/terr_on_nd_l + 1 + + + + property-assign + controls/switches/terr_on_nd_l + 0 + + + + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 1 + + + controls/switches/terr_on_nd_r + 1 + + + + property-assign + controls/switches/terr_on_nd_r + 0 + + + + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 1 + + + instrumentation/efis/inputs/terr + 1 + + + + property-assign + instrumentation/efis/inputs/terr + 0 + + + + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 1 + + + instrumentation/efis[1]/inputs/terr + 1 + + + + property-assign + instrumentation/efis[1]/inputs/terr + 0 + nasal From 5c7b92769249975fd91dc8e0271672936a249d36 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Thu, 18 Feb 2021 00:01:53 +0100 Subject: [PATCH 18/58] enabled MAP mode --- Models/Instruments/ND/canvas/style.nas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 805010a1..2d9b36ed 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -93,7 +93,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { #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.get_switch("toggle_centered") 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) { layer.update(); From d1433bfde7f9840c4127d2ae20cf952b9587bd5c Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Thu, 18 Feb 2021 00:02:18 +0100 Subject: [PATCH 19/58] New set of tiles --- .../ND/canvas/res/terrainv2/tile_ah.png | Bin 0 -> 6214 bytes .../ND/canvas/res/terrainv2/tile_al.png | Bin 0 -> 5905 bytes .../ND/canvas/res/terrainv2/tile_ch.png | Bin 0 -> 6247 bytes .../ND/canvas/res/terrainv2/tile_cl.png | Bin 0 -> 1786 bytes .../ND/canvas/res/terrainv2/tile_gh.png | Bin 0 -> 6261 bytes .../ND/canvas/res/terrainv2/tile_gl.png | Bin 0 -> 1770 bytes .../ND/canvas/res/terrainv2/tile_gs.png | Bin 0 -> 182 bytes .../ND/canvas/res/terrainv2/tile_mh.png | Bin 0 -> 6293 bytes .../ND/canvas/res/terrainv2/tile_ml.png | Bin 0 -> 1563 bytes .../ND/canvas/res/terrainv2/tile_rh.png | Bin 0 -> 6061 bytes .../ND/canvas/res/terrainv2/tile_rl.png | Bin 0 -> 1732 bytes .../ND/canvas/res/terrainv2/tile_rs.png | Bin 0 -> 182 bytes .../ND/canvas/res/terrainv2/tile_yh.png | Bin 0 -> 6275 bytes .../ND/canvas/res/terrainv2/tile_yl.png | Bin 0 -> 1473 bytes .../ND/canvas/res/terrainv2/tile_ys.png | Bin 0 -> 181 bytes 15 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_al.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_ch.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_cl.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_gh.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_gl.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_gs.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_mh.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_ml.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_rh.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_rl.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_rs.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_yh.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_ys.png diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png new file mode 100644 index 0000000000000000000000000000000000000000..dacbc9c99df4040ff9d5c3e1ccfae425c904ea1d GIT binary patch literal 6214 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 literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_al.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_al.png new file mode 100644 index 0000000000000000000000000000000000000000..a73451d38769f0327bc91ae852bcf92ee09b438d GIT binary patch literal 5905 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 literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_gh.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_gh.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef59738767a434b57478770e00c5ed098b84a13 GIT binary patch literal 6261 zcmV-*7>ehKP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000UZ zX+uL$Nkc;*P;zf(X>4Tx07%ERR%cXG*&03f-t+8ste9upRUftwK1^*jzTwV?bUCtZjD-+SpQQm`cdSXPl7s_t~K%j6lxLg2; z5>(%s{4Iu*B8^G@Atqg%!AJE1sh+`O=b*d{<$8%}St695lIp_w+{@qi54j>92VIZ! z5Y;KUVjj8|N!ph!c_L{pS$cjtCrc>hg(!F6q_EK#ayQD&=Ij3ktsH3s1AM&ftsL#` znbu4zMq)aflg7y5u+ych{=Xr;t9hn(5CB=Uw)Ptwu`qXD!$>DAAOTrG2P!}l=mI0a z1lGU-I0JX!0|G$^hybx*IpBa4kO71s4-|k6pa_(JGO!y|gIdr48bJ#<0Xjf8I1es? zYv3lh14e)ZjDzQ38oUFu5Cq{NDnx@+AT3BAGKH)m7UT-~K#QPoC>Bb9k|6;kh6oh+prh0cd+BwcQ_nQ31^6N!1?21ajCe~xb3+8xK>;bZV)$yo5ADp zDtJ@83qAzT#*6Sp_`UdJ_;dIn{5bvtflSaMSQC5+aRdQjBcYPeL^w+rB1{lwiE>1J zq7yNM$R(~MmJ%C?UBny2apEjVo@7XJAw`fk$ot7Jxn~|r< zTgivWXUK1tZ<45uhqj587KuPr7M*xolv@~^l5>{0*?i}1=|+1EErnw zURh1qU74p`tlX-6NBNTqL&ZlWO=YJ_hsq;WjH-!hm};Kt0o9ADFVyI2&T1UBVzm=$ z57c3G6ZLTQ)#``TudB~!XlnRrWNGZxxS;VuQ%TcZGgY%f^Q`8S7EQ}li?3Cobx!LU zLy_UZNM}?r`WVyN>e~L=V(mKZ0qt2GL!C&SjXJG5k90}8EZrpC3f*4aX+15yV7&sp zX1xdcM17WiivAw`e*O0bh6d3FTMRl3CJmJh0}NLgHXA-Pq8hmwWgFES-8RM z_Z#0dflcg8QcP-0ZkWQR_NIK({icIvSTjd6fmyxTFq6XcVCFKLnWN@P=8McXns=DL zw9vDNv)F0TZ}HXA&NAJy!E(e(!79*dqg9vHYikp0j&+UoZ5yhMugyA}PMcS@rnWrW z1Ge|A%*cU_zS`t(p^kk9ABH^O0U^qB1cvtYl#rlf{i#tL< zNI=N0kVm10q1mCoh2g?N!)n5whFgUfg!eC@Em^UoY00|?&xq29kw~LRab$0lY*c(y zW7PX-@96SqNsL9znwV>`sm1crLth-b9j1QhCy3 zvP<%=;k(>8%-rjD(ES0tG>upf6K1Ge2`M z%QUMfOOoxBy*qna7$iKL1LZ8s=@ik?2j;riNW57*n(LZdllvhrD(_^ze7+$6`bv|P z+g47j@?G`wYRqcR>fQqFf(-?uYdqG}t%cSmuI*i?yRLBE_mi*q;2?pqvgi( zjc+$aZ|W-4C|qASw%KoUbCFDuuxNOT^OoAJn63P+1KVu2?cMgZm|J|c#ImHaWFj1Euz*2g-0|g0j0i-F6-=moHycKDH}(S9=AcqPXJi?iIVQRN7Y7 z?jh|F?~zn3s_NXUx3_HX=jxQ|J2jp)t^3sXZQJ*LKX?Do0rvwfwHmc0wVw|158kWu zt81?}sINSPJCu9qX+u;)|Ie(S8xN}Jt z#&!;#4m{o4<=oZwoB3}?y0yD&&M2NKJxe-Ucy{jGs&g|vSv@b#C!ZhdUC}#oA?CvE zzOcT5i$NDJU-G?lq2Htb++~-`-B+BhoW9Ds+HuYPTKjdo>utZ={oXcUKhS=|;YR08 z$D3V)3kS~*xecAa<$deY?SR|Y?kv7DcsKIyz2W#_$vy79$@}T|Up>fuFgvpTA@*VM zBe_SFkJTU7|6%+`tHfS%X4HH1`jaJ3M#eZ}&;QK%^YeJ&Q|i;o39X67N$bh(Dc`A^ z&z3$Lf1dSx_C?XZD4aP}CK~z{rC6{?{l=peZKfCX~d$0DAv^rJ@387m88G#TO zQXd#(W1BQ4cI+mtucqTP_9X80N84yJ?Kn**Q}>!qn$%6kiR;9%+uGyX2F#5Bap*!w zNUQta``&kV`zU4R{R3wCUC;OVem{@ywWVXlcqGExuaEM@J1dX}mrqY`?+&)qZ0EC& zhL~Nw#g6+8+L?fQ7d5oS4w%Q{}|7G_aWAj zx41JtMs0(KM;|*tTW14KTO|ua5Sxdo$raYZ3#4^(Xr=`mekfSenEYvc9Xbm36%v^> z@=A{SPB*`M{4VzG-%BKzVPr52iUq}FL|Kf-`g2hypS*V&y(z*ykCxNgZI#8B`1s@V ztjVoyz6@L2t$51al)IaloLV3whF)Pbwqz_sx(&%AVquYGeDPG6ph zJB!%d2KF8C(%Naqq-spxTIb5A5prQ82AdWA)a3+kzIvV;7iQ_*wU6%ZZZd@g3+uP3 zs)wG3&1`HG$OiRRtl~iVhzN0T1AP zjPcqJruh8LTg;C|WMSk4Qg&mJf-!}^t{R8iiosx)gSm+=YdG>wu6;hq==n9WQH9yr zHG<0qZeNZuIuK+&AnO>@6At_@Gn)xDMd_jK^~JMR&gf`sU$uH44PT!M7WEbFGhBm_WfZFDH+zcgKT<`@9v5@#5sn^j!Gpo9r?$&N zdA&h42yyZBWv-vgkPTa~n!GqGO6WRROHI88o6$uu8pm2;VaMIIJb1jB?!65dbXG=3 z#?kaKN=l2AmZs3_MLYLATE!FJYGm(G1A88TmTn`Z6*?AX0tD~;|IMt{%_q_`Jh((` z#e%B&*|qZlc64@8=J%u7((F67m8br^p6~o{FOR=)FKH2YU~xh&5W{9)Cz=?ctWvx~ zN|D^iV=YwRwRED?9j3qcULTbW22743SuMxb`bx~^6tRsIlf!8;F)R6GPM+9+rfJyB zE=I47^OJu$$Kud3NhLzDB!#Uq!S=2KsdR`>-yLJ>W)P#@%=U(A8n<~VFRA9znI$fL z7$BFCj*Atglo50f_{z%e?W605AW^9@^S;WP%3%^?Sn%ei1=Q8!(8u zU@(yiOY!A4h%xHqGn9a5i;*XvIZXYw9LY6}zkB&4p;;TntcI`BMN7Mf_3#Fvs0m%s zPCk|SBc^0i5ua81 zy-+aA#tJRFeKhVi;%{>E{%2=NCgc20&rbRMH3HYf5K~@COitqQD7ivZ)S8u+kaY~A z-jMV-F6?F>$|HZ~>Mt*?A~0fRKXi!08==o~jc$Z_rDGTAi)g`^pBdeownu$aSEAqM7-vHP%-=UzTa z_x-(GygG;>XF~bCzdX>tG@atDpAS=%1NI#)7?G@@e#9G&b)drIji^Pc65`XUK>Lm6w)r*WMNq*)WMn7K713M)G6dp*9|S zx(iozk*URb1_!5b7@a6H(Rlwa{(Y3V*hGD!fqM^m@z*MpSNh2$f=o}Q*>hJ5Rn-RU z4hu``X)d1>N6Lw57SinOslZobCz(yirpv#z^Jiath@OWUFuN75oSi^lED^)XU~v>E ztJN@AGkD6}WO7Ny2jrCb$Zm!kZ|&mQQ1;tvkfxwnpAzHy09KN#ZIzr0R#N)vgj=v6bSRl(yo)7I4_ zERZ0VNU*WENLtPD%yVDHQ{vi`A0d5N$?g-1-qw=nOkePOr_}Zd3lwr z5S6r|Ig71Khmxtz^zYnNK}ETrsnH-;PA*baSxIY;1>e?;gp8av9FR!Q)3m(>EK+Mz zT)ZR1j{T(=-Dx(mMGo}YdH&^Nk_&o15sp|{TcxLWE3F+~(Tj!CpNx?Ri{}V)YWl2T zV3t&2jc_uJa{N1Y^|y7j6AR_}$G<;8a!&X$5hHI{rdgPw#Ae4~w(}qVJjLztVS?!y zx#24J+}A?Sz7A|I2Ty>{3atQ`b zrP#i88x=kqH%CtM<~vu}h)&@xPm<5i5EQej@74)BIGCSXA-rUu%-M$D--=FfE@RO! zRcAT;4L`dN*{JqQi(dGAgA1olVzZtmlTt*Ks-Rwy^Cu=4xG;f~4}+=`Ahn~j#wEIK zl$Qxx$YDdF9P(&n(gn-{M5-jOS#Y!GKr2TcY9hG4%+<3qyz%2foCQC2n+v^DqqDab zi#tgw7vuKmGWu;TZdes0yQ8B-E5+t8;+1x+YB8d2B7`Vf6##Gw_&oo|hj`%OcCq0M zH?Obr`cKoOgn91_CsKI-7yjS-fXZ{W16%mmT`w$cevm0U#XuP;*RE5+;Z z;V)~FwLOy1)@;AW(S$*>5e>(rURJ*LTpwR~a-Yl@)r2B()7#F|)bXhWV+2BL!pyYbhnf@cd{9T?)w$p}Vi zB(-Q3)Gvy-Y?zECDCQ#DdoA?rFQ>D$k&U%HKm7hldUn_H{I>=DTD|0Q3TMws7^d|E zv#T`kQc!k2ru7@Gn%Hp@E2(L6QnSW(JF4JYG@(h@=oq;<$@IdC5R{#|CI^pxwN2V^ zCtsW%6k?O9OH#LJ$^?h$N+M2~B1Zi`5_{5?a#A(Zoa4qK(_vSGe%m6u||BiJ?{Qj4hxO zVz-M2T)#Gr^6ejW_bU=4=LYA*@8Ry=5_GCiQZdPe^E0S`Nmh7w?bL+El@o zvQFN9>m=b|0kuk{w5A}hwJumVPcG`goZ7YrP;I`WR`RPdz004&%004{+008|`004nN004b?008NW002DY000@xb3BE200009 za7bBm000ia000ia0czHX2><{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%hhNHDpIv zQUCx3JV``BR7gu*)?H|yCp2yIPs~@7m^5Ea($6JnYAm&-cANNtV~pXPIF)o+ z{Xn<6*2;uXwH6ed&URWh(cuPT1J8u9gCawEV42{7hzCv(gs~%024m2Z$=>~*T<{*N{{DVh5pdxoDb(gK8oileV^q+qb7rlvT!%gf6rF5UF2X5_VI@TS)~ z&?60>F3ZHkggqf->6nO|Ad8cF{A3pv7WVAfGd4D+#{T{L=YKNy@a0`EU%7qf6PwLf zh1Zb*mpk7bpFUHxxpnJS$DK}@nMkjX_y2nWBgztV6C$0RowDQvi5QWuhM?{IOQk&5 zY&i3uK4?)Ot8))Wdus>j$N^Y!^%P7-7gU2&a`bcw0jcLHxbD}T%dgbi zOC>89f-EGXC`(JQeaLY_p%z%Jk#tT*n##==%ju@`LNjyt_r(!sM4Su+fXOkU0)omX z;_~9aa|lZD3tT`!=$_vft>L+FTbP>GjC`bghefxHuB`YNuj7Ua@v^7JqC!}8+ z651Slp!2$Cdvh!Z!CB*^O_sCPALA$>%lNntBN$Lt@issNZP$hJvw!z~7En`;+5_ z>*(l!(+H3VeoAt1(nO@OAf*_sOeaz0zPMs}%C+eyA23s?tl|p^~ z{1Nqk&5g$oKJd~{ZQ+oaM%3^#_JVUI`8UPTiRY@6_j0}d(F0x~xB%2SQjC7lTK}+dtm7Z=ZTOH~&H1zVZ<1iG#OH9=bKsIVdWT;D{)rkHq;R`h&OD8pgci zo$YTnhyTzVURqj`5RH&y$?qfT>w{HhFzpE448)0{c!(Sfztw8}56M_8p|H`%(*OVf M07*qoM6N<$f-A0D8UO$Q literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_gs.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_gs.png new file mode 100644 index 0000000000000000000000000000000000000000..3456dfec333312081b5579658b6b66b150cdda45 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1SGer&Y23NSkfJR9T^xl_H+M9WCij$3p^r= z85sBuf-vKbiP>*~f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5g?OIJY5_^ zJiOnYHRNSb5MVG|V(=jTjgTe~DWM4f$%!&8 literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_mh.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_mh.png new file mode 100644 index 0000000000000000000000000000000000000000..d06517213054d7936729d4520db669e461da85c5 GIT binary patch literal 6293 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 TeJevFP(OpGtDnm{r-UW|@!m7! literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_yh.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_yh.png new file mode 100644 index 0000000000000000000000000000000000000000..dc54323337d72f8496d1b87273da29873bed29fc GIT binary patch literal 6275 zcmV-}7<}i6P)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000UZ zX+uL$Nkc;*P;zf(X>4Tx07%ERR%cXG*&03f-t+8ste9upRUftwK1^*jzTwV?bUCtZjD-+SpQQm`cdSXPl7s_t~K%j6lxLg2; z5>(%s{4Iu*B8^G@Atqg%!AJE1sh+`O=b*d{<$8%}St695lIp_w+{@qi54j>92VIZ! z5Y;KUVjj8|N!ph!c_L{pS$cjtCrc>hg(!F6q_EK#ayQD&=Ij3ktsH3s1AM&ftsL#` znbu4zMq)aflg7y5u+ych{=Xr;t9hn(5CB=Uw)Ptwu`qXD!$>DAAOTrG2P!}l=mI0a z1lGU-I0JX!0|G$^hybx*IpBa4kO71s4-|k6pa_(JGO!y|gIdr48bJ#<0Xjf8I1es? zYv3lh14e)ZjDzQ38oUFu5Cq{NDnx@+AT3BAGKH)m7UT-~K#QPoC>Bb9k|6;kh6oh+prh0cd+BwcQ_nQ31^6N!1?21ajCe~xb3+8xK>;bZV)$yo5ADp zDtJ@83qAzT#*6Sp_`UdJ_;dIn{5bvtflSaMSQC5+aRdQjBcYPeL^w+rB1{lwiE>1J zq7yNM$R(~MmJ%C?UBny2apEjVo@7XJAw`fk$ot7Jxn~|r< zTgivWXUK1tZ<45uhqj587KuPr7M*xolv@~^l5>{0*?i}1=|+1EErnw zURh1qU74p`tlX-6NBNTqL&ZlWO=YJ_hsq;WjH-!hm};Kt0o9ADFVyI2&T1UBVzm=$ z57c3G6ZLTQ)#``TudB~!XlnRrWNGZxxS;VuQ%TcZGgY%f^Q`8S7EQ}li?3Cobx!LU zLy_UZNM}?r`WVyN>e~L=V(mKZ0qt2GL!C&SjXJG5k90}8EZrpC3f*4aX+15yV7&sp zX1xdcM17WiivAw`e*O0bh6d3FTMRl3CJmJh0}NLgHXA-Pq8hmwWgFES-8RM z_Z#0dflcg8QcP-0ZkWQR_NIK({icIvSTjd6fmyxTFq6XcVCFKLnWN@P=8McXns=DL zw9vDNv)F0TZ}HXA&NAJy!E(e(!79*dqg9vHYikp0j&+UoZ5yhMugyA}PMcS@rnWrW z1Ge|A%*cU_zS`t(p^kk9ABH^O0U^qB1cvtYl#rlf{i#tL< zNI=N0kVm10q1mCoh2g?N!)n5whFgUfg!eC@Em^UoY00|?&xq29kw~LRab$0lY*c(y zW7PX-@96SqNsL9znwV>`sm1crLth-b9j1QhCy3 zvP<%=;k(>8%-rjD(ES0tG>upf6K1Ge2`M z%QUMfOOoxBy*qna7$iKL1LZ8s=@ik?2j;riNW57*n(LZdllvhrD(_^ze7+$6`bv|P z+g47j@?G`wYRqcR>fQqFf(-?uYdqG}t%cSmuI*i?yRLBE_mi*q;2?pqvgi( zjc+$aZ|W-4C|qASw%KoUbCFDuuxNOT^OoAJn63P+1KVu2?cMgZm|J|c#ImHaWFj1Euz*2g-0|g0j0i-F6-=moHycKDH}(S9=AcqPXJi?iIVQRN7Y7 z?jh|F?~zn3s_NXUx3_HX=jxQ|J2jp)t^3sXZQJ*LKX?Do0rvwfwHmc0wVw|158kWu zt81?}sINSPJCu9qX+u;)|Ie(S8xN}Jt z#&!;#4m{o4<=oZwoB3}?y0yD&&M2NKJxe-Ucy{jGs&g|vSv@b#C!ZhdUC}#oA?CvE zzOcT5i$NDJU-G?lq2Htb++~-`-B+BhoW9Ds+HuYPTKjdo>utZ={oXcUKhS=|;YR08 z$D3V)3kS~*xecAa<$deY?SR|Y?kv7DcsKIyz2W#_$vy79$@}T|Up>fuFgvpTA@*VM zBe_SFkJTU7|6%+`tHfS%X4HH1`jaJ3M#eZ}&;QK%^YeJ&Q|i;o39X67N$bh(Dc`A^ z&z3$Lf1dSx_C?XZ*nw{WIiqQ0`W8$GY1nTe6(@ z4__iM>t*L=HQTqWnmA3(@WM_b4Rxz{^W9;7wJ%6CYeRY6JBHbA;_)YTQ|y5!9(MA2*A8BJVLO@l zAY(%}Sy@}mW4ktTTVpMHQz@7F;MOe|yfH&CFo_~Pfn0-%3NRV-lvd4(d4so`FRc;58)3&!K6fa?m~=z`nPUAJv+{tw)M2Px0BDun4h^$ z!%}$sem%GRc^3RiM#h!AzyA!qJqxI`kWMQJCX8g%78EKei#V+-p{Aw?oia#WjRTb; zLnf8RXs}^0my;-z6HK~gOa@d26>gh!qO`H93yp?EGK1A(r^r>x)ch>j*bMh=UQ1g; zEyiqwm;S}e+xrH&dMzXeNCkONXbWhy32K&=<8&G+sLh1acBXwxpps`~rice#}yc$&^H4YqAy;1s#e^2r_AOW-vP8^*v^`Y-l5y)N%G= zj3=M}jEq8w)t0Be(Lrl{Im$wU3;n}vXkW_KJDa3S2kG&`l;EY#WnyANIvUZElXF#z zSWQW@KIP*E!K53 zGcuCn$f*Ig-o1*)cQnyh>O*BMqsv{a=iz(H*wkTTbUwtlcCX^m?e$Fg{QUH-OMG&8 zfrwg#Uaw+pt5txgMwbn6`qTwJ`aFeC0ESM0>nY;yP1W*yv0TE&d^jYGGxC)UH9WO@ zC7U{HDJYEe4-BDJMksX_@E8&(%?_dEgJrz%jTP+Nq~`IhaA&&~k4?e&%~6JLO6#OD zqtT4OfbO1Y#%By<)fF_a-AZ$FE5#KhLftHn>{!mO_^Chq{(qL7M3 z(5p?%_zHAi2-9hNZ7tOp9d3@Cyui=i8RZv0?4Zf5U|~Vct8esk=v0Vo zQcXdIoslXEL203U>Wjc2Z<7_ODz*IeQ}?iTS%$fpEKlt{LEpIaE?uCi)J3Hl90;J8yVg<|_Fm&yUy6^eK#>uC_?PXpl`BZ3G`#WN1n(S}Ad!&s z1bk|PkyyTf!K&gbYgTZ_8Z9g9?ELBI84~d*o7c9m|G;IsFH6f4D$F`N(P$WTUbI3e zsWnM=q=1yj{vwo&dJn3XzGLfhI?K2`qUYnIK?2fx-^>)vwRZAaBSUiqbh;FKpK4;m z>JpLcTjWz&9Bv&?e652=w^=DMN4YvU!3Q5^`1phm|D2joTtQaGp%(h*3Tdn!6UFuv z58YG5D=*&9y3Ol2cj*cuPpJO()s0;vw-WsFxBY@ZczSyY-~0L|CMPG@`&K`v&d;%9 zTMKus@vyYA7^|aty>7iPzqf$ zswDSqY3JE*wo+AIU{u89Y|ogm$c$<_8SQ%gf38aP(7r;=wpIsK#VSgdRG`W%(0en< z?W^mlcB!$L4NL};d~(7|UMf%s`tRuQu%ygPCL4pS54E&>?=#!EZ+k5^yNZ)%h6NTn zsW^elqNA=VD+EZ1*Vv^~aW0>qL3!ZNEnyoZS?KR^2UMFx5Vgh~&( zA}ju=PjW?4##bZ^n#1AJu=~DcsP_GOYu8_W;~v&`R`c)ge$M{GeZ2YGD@=H^WW^Zs z8YKp!hRO=jkk&f<3sG{h3_*EFMh^VJ)4Q-(-Te8ZKHfPzOJ|*ynyPZjJT4h$oO72$ z1f$}lSvAp6j$F$2$=NX8~PC_*xJLv%pWmEI;AAav45 zLaOlO*z;&L4{cvY{YnQ;mxUX{v%>MX9H`*^-=AmS`=b(I1eA6)OPAQN%iN8U6|RYU zPK>5WNgJ~{y|6`%QKP4@s1?M>re;yCX`AbE7v-fIJ?)a5_8%R?QtIMwo_Ua$p1GH% zT1il26FjidPQwZ}wY5(A`Y&*GG$mApv2h=B^NBC>MP5d?kjhc%QA*1dV#;CMODZuI zm(V*niPhi{Ma`3!+p5%gwE8Tb5-loAMXGCkvj>;Ef`RJ`d~{-piqdlKUTdUrX^QgV zB#F?dM7Q+-|oa=PckQ}_{26dFTc10g<8pbk|X?qSrN0Pv`Od6 z9R?16;$_+&kuK-SB8n@yQ-VOC^>}WCgpnnB*)c>JN_j`NPQ*SdFI%Clp^s{#-IG93SSy*b009VWq`O)Cx6A zigorL)JF!^Y5`yZ;DvD8IOn2qv3$jvKFhr%$>pM^X1y4V^o;A(o_(M_V0zq6N z+nwzmR#xT+MIxN&iF4+BNIIp!q_@Zjs^w4zqXCI>hA`{vs|fgG^iAcs*b^p^F_4Jm zQR!2dC0M)cHr{^kIQxD#h$^WlbR{La=UFtF7{^IHVc64|ALN=2H&qTJ_o#AAMz*$fhd^9)T-(=(hUQ_xGODU-28 zxh4j9=!-?aA{PD;a^xp9E`0iF--6K25 zN;lKUtEq8NoXZWn-(_(VmZkV@|g-3FbS4cFEvo&TFTY24F7v@h&yBteQak3 z%d2bYIon56m!qS(mfagQD62hjQO7Mj{6L+cyFkttW~_gL&o0bKZb-_KW5MIBVR1K^ zo$)bzt&fve=CCj3N^#RvGJ!^A6?%KbXY`UITrM-$Dzx0Th zRW%LE^`aHRBw^H`oRv&WquRAC+hx>csjROfo{+F2Yg=cd2$aOPKrBlzlBM^H5k{tG zC~}%z8|AK!8eaW&0~>CWJQ+=}=VzbF#lhip(q3;6 z`YOqZha|sOstU3GZ)G5 zhl4&zUzdo5{1}vB^eP`a?pcN=E1P#=2Av`#nIVALs75UbIFWZD!b?`t_9c1Xp`%{L zd@3&Y%`$LplDJ-hL1UKDj-dMI*V?=Enl#7#+{{ZkW58LxR09gP4002ovPDHLkV1g$SB{cv5 literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png new file mode 100644 index 0000000000000000000000000000000000000000..b22f7d0fe0c9ecff80d1e6808d99b943e01196c3 GIT binary patch literal 1473 zcmV;y1wQ(TP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE200009 za7bBm000ia000ia0czHX2><{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%hhNHDpIv zQUCx26G=otR7gu*mQ85ZM-YcMQ4?b@epN*yREeNgTWu|c6k2I(sF)VSC6!8;r`)rVcpa7j=(-|q{7BC{T zhys@I*sIDH~J=C2@!aqTbkn*YIdK^94 z1iJWz6(r)8q7ad#U7TtL`;QhdP(bWBw=l*-r%ruPs1b?i5drDctg>9%Ld3g>w9kcI zVS4G(XB4=5_xo+zl1E+u819B#oH-sFM`W~^Q$kEr4J>PbV2*d)x^Un?u8p(!wawH< z3#n66=tFisxoKs1v3%O1%@Z-XTd5J`M=t#$A5oR$~ z;#{>~JSd`5!LYl1`@)MC{m-BOv};$cVP}jSfcuP1(-h7KiL8$Y(aGEAqv=!%#>tZt z*sV};GMb1I^>fzOH+or#;ib6jPBrGwPjm`XluTfDDpJE5`2a@GTqj26MdZarKBJj* zplxzt6k`^;dUfdPO0U_OGauf&*Uc6QW<;w@=#Cs2&*x4G`$Fr-h^|@{9zN`O_N;Hs zn(RTzU9ceVJ;+_SapP3N06M<%;Cl7y7oHRF2q}B_ zhHKZp+_*6zNwffCqGHt~^!8T!L%>YzGSx=yfZH-WoKnWXL?RkC7ueR3kw$jR0-_oD zNOpAO9|jUBbt0!oX_+iWrVwIyU$QVS>f5CaBKPut3@WK(5kvJY!N>ug8pH(l;r8wC zo;>O0k!Px(Z#`>cyImYiiQ;EJxVv~%k@SbAKR(GMSb+SKC);8i=4*OFhH&`=7Y96k$WxiDI_>^MqoF7fv5p{FO=#Sfw2Jcoka1b5;@E3wit zg2CsAX9|q@_)*(JA)@@2E!FF3Rx#2^c6WOQTkqWITD&+V%f*jOGNE3&G%Q<|63np! z#5Un#ee{8iaytMZc94+#^t*ojs~AUk9wahGKIQqLCkrEm3n_|Va~Q=#6a|KpHPLPg bHH7~FJRtxQ0;RWa00000NkvXXu0mjfjQ6Eb literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ys.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ys.png new file mode 100644 index 0000000000000000000000000000000000000000..f1604ba30d8379eb31888742e00ba0948861a65e GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1SGer&Y23NSkfJR9T^xl_H+M9WCij$3p^r= z85sBuf-vKbiP>*~f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5g?O|JzX3_ zJiOnYH56n};9)TIxw?P3mIJfB!Bf5JbMI;vaGEr#U0|8zAe_PE3*tPxd5)FuZe@<^ S@0%V#?F^o-elF{r5}E+V)-*@} literal 0 HcmV?d00001 From a3d1bb8b50844f2fe726c015d47de572cae910b6 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Thu, 18 Feb 2021 00:03:33 +0100 Subject: [PATCH 20/58] Manage fly phases for hi/lo aircraft reference --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 81 ++++++++++++------- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 554e9800..e728749c 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -12,7 +12,7 @@ var terrain_maxalt = props.globals.initNode("/custom/terrain/max-altitude", -999 var tile_list = [ nil,"tile_gl.png","tile_gh.png","tile_yl.png","tile_yh.png","tile_rh.png", # 0-5 low alt - "tile_gl.png","tile_gh.png","tile_gs.png",nil, # 6-9 hi alt + "tile_gl.png","tile_gh.png","tile_gs.png",nil, # 6-8 hi alt "tile_ml.png","tile_cl.png" # 10 magenta - 11 cyan (water) ]; @@ -102,15 +102,14 @@ var updateTerrain = func { if (me.hialtmode == 0) { if (diff>=lowaltft) grad = 3; # lite yellow else { - grad = 2 + int(diff/1000); + grad = int(diff/1000) + 2; if (grad<0) grad = 0; } } else { if (diff>=lowaltft) grad = 3; # lite yellow else { if (me.bands_range > 0 and elev > me.bands_minalt) { - elev -= me.bands_minalt; - grad = int(elev / (me.bands_range / 3)) + 6; + grad = int((elev-me.bands_minalt) / me.bands_range) + 6; if (grad>8) grad = 8; # solid green } } @@ -147,8 +146,11 @@ var update_altitudes = func { me.terrain_minalt.setValue(me.min_altitude); me.terrain_maxalt.setValue(me.max_altitude); - if (me.max_altitude < me.refaltitudeft) { - me.hialtmode = 1; + if (me.onground == 0 and (me.max_altitude + 1000) < me.refaltitudeft) { # 1000 ft tollerance + me.hialtmode = 1; + me.bands_range = (me.max_altitude - me.min_altitude) / 4; + me.bands_minalt = int(me.min_altitude + me.bands_range); + me.bands_maxalt = me.max_altitude; } else { me.hialtmode = 0; } @@ -158,9 +160,6 @@ var update_altitudes = func { var restart_beacon = func { me.radar_beacon = 0; me.radar_cycle += 1; - me.bands_minalt = me.min_altitude; - me.bands_maxalt = math.max(1000,me.max_altitude); # band min limit to 1000 ft - trivial - me.bands_range = me.bands_maxalt - me.bands_minalt; me.min_altitude = 9999; me.max_altitude = -9999; me.reference = nil; @@ -174,7 +173,7 @@ var init = func { me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch me.range = me.model.rangeNm; # Range of Navigation Display me.viewport_radius = me.getOption('viewport_radius', 670); - me.imgpath = get_local_path('res/terrain/'); + me.imgpath = get_local_path('res/terrainv2/'); me.radar_beacon = 0; me.radar_cycle = 0; me.radar_cleared = 1; @@ -189,6 +188,8 @@ var init = func { me.reference = nil; me.onfailure = 0; me.hialtmode = 0; # high aircraft relative altitude mode + me.checkarrival = 0; + me.onground = 1; var tile = me.tile; @@ -228,9 +229,9 @@ var init = func { me.terrlayer["R" ~ c] = grprx; } - #setlistener("/ECAM/warnings/timer/nav-gpws-terr-fault", func{ # TODO need further investigations - # me.onfailure = getprop("/ECAM/warnings/timer/nav-gpws-terr-fault"); - #}); + setlistener("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", func{ # detect GPWS switch status + me.onfailure = getprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit"); + },0,0); }; @@ -271,42 +272,60 @@ var draw = func { me.refheading = getprop("orientation/heading-magnetic-deg"); var refalt = ref.alt() * 3.2808399; - me.refaltitudeft = refalt; + me.refaltitudeft = refalt; me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; + me.onground = getprop("/gear/gear[0]/wow"); - if (fmgc.FMGCInternal.phase<2) { + if (me.basealtitudeft == nil and fmgc.FMGCInternal.phase<2) { #var basealtft = me.get_elevation(ref.lat,ref.lon); me.basealtitudeft = refalt + 400; + me.checkarrival = 1; + } + + if (fmgc.FMGCInternal.phase == 2 and me.basealtitudeft > 0 and refalt > me.basealtitudeft) { + me.basealtitudeft = 0; + } + + if (fmgc.FMGCInternal.phase == 5 and me.checkarrival == 1) { + me.checkarrival = 0; + me.basealtitudeft = nil; + if (fmgc.FMGCInternal.arrApt != nil) { + var airport = airportinfo(fmgc.FMGCInternal.arrApt); + if (airport != nil) me.basealtitudeft = 400 + (airport.elevation * M2FT); + } + if (me.basealtft == nil) { + var elev = get_elevation(ref.lat,ref.lon); + if (elev != nil) me.basealtitudeft = 400 + elev; + else me.basealtitudeft = 400; # no hope + } + } + + if (fmgc.FMGCInternal.phase == 6 and me.checkarrival == 0) { + me.checkarrival == 1; + me.basealtft = 0; + } + + if (fmgc.FMGCInternal.phase == 7 and me.basealtft == 0) { + me.checkarrival == 1; + me.basealtitudeft = refalt + 400; } - #if (fmgc.FMGCInternal.phase >= 5 and me.basealtitudeft == 0) { - # var basealtft = me.get_elevation(ref.lat,ref.lon); - # if (basealtft == nil) basealtft = 0; - # me.basealtitudeft = basealtft + 400; - # # me.reference.basealtitudeft = ft + 400 # <- TODO get departure/arrival runway altitude - #} - #else if ((fmgc.FMGCInternal.phase > 1 and fmgc.FMGCInternal.phase < 5) and (me.basealtitudeft != 0)) { - # me.basealtitudeft = 0; - #} } } else { - if (me.layer.display_changed == 1) { - me.layer.display_changed = 0; - me.request_clear = 1; - } - var range = me.layer.map.getRange(); # Range of Navigation Display var update_size = (range != me.range); me.range = range; - if(update_size){ + if (me.layer.display_changed == 1 or update_size) { + me.layer.display_changed = 0; me.request_clear = 1; } me.updateTerrain(); # left - if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(); # right + #if (math.mod(me.radar_beacon,2)==1) + me.updateTerrain(); # right } From 2864667ef8211732f481e819e2dca10d7ff3f719 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Fri, 19 Feb 2021 00:17:21 +0100 Subject: [PATCH 21/58] better hi/lo ref transition, props changed --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 56 ++++++++++++------- Models/Instruments/ND/canvas/style.nas | 4 +- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index e728749c..e6628cfc 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -7,13 +7,16 @@ DotSym.makeinstance( name, __self__ ); var element_type = "group"; -var terrain_minalt = props.globals.initNode("/custom/terrain/min-altitude", 0,"INT"); -var terrain_maxalt = props.globals.initNode("/custom/terrain/max-altitude", -9999,"INT"); +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_alert = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/alert", 0,"INT"); var tile_list = [ nil,"tile_gl.png","tile_gh.png","tile_yl.png","tile_yh.png","tile_rh.png", # 0-5 low alt "tile_gl.png","tile_gh.png","tile_gs.png",nil, # 6-8 hi alt - "tile_ml.png","tile_cl.png" # 10 magenta - 11 cyan (water) + "tile_ml.png","tile_cl.png", # 10 magenta - 11 cyan (water) + "tile_ys.png","tile_rs.png" # 12-13 alert ]; var is_terrain = 0; @@ -53,6 +56,7 @@ var updateTerrain = func { var altitudeft = me.refaltitudeft; var lowaltft = me.reflowaltft; var basealtft = me.basealtitudeft; + var alert_level = me.terrain_alert.getValue(); var side = (math.mod(me.radar_beacon,2)==0) ? "L" : "R"; var a = int(me.radar_beacon/2); @@ -98,6 +102,10 @@ var updateTerrain = func { if (diff>=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 + else if (alert_level == 2 and grad == 5) grad = 13; # solid red + } } else { if (me.hialtmode == 0) { if (diff>=lowaltft) grad = 3; # lite yellow @@ -135,7 +143,6 @@ var updateTerrain = func { me.radar_beacon += 1; if (me.radar_beacon >= (me.tileradiusw*2)) { - me.update_altitudes(); me.restart_beacon(); } @@ -143,25 +150,28 @@ var updateTerrain = func { }; var update_altitudes = func { + me.terrain_minalt.setValue(me.min_altitude); me.terrain_maxalt.setValue(me.max_altitude); - if (me.onground == 0 and (me.max_altitude + 1000) < me.refaltitudeft) { # 1000 ft tollerance + if (me.onground == 0 and (me.max_altitude + 250) < me.refaltitudeft) { # 250 ft tollerance me.hialtmode = 1; - me.bands_range = (me.max_altitude - me.min_altitude) / 4; - me.bands_minalt = int(me.min_altitude + me.bands_range); + me.bands_range = math.min(2000,(me.max_altitude - math.max(me.min_altitude,me.basealtitudeft))) / 5; + var maxrange = math.min(2000,me.max_altitude - (me.bands_range * 3)); + me.bands_minalt = int(me.max_altitude - maxrange); me.bands_maxalt = me.max_altitude; } else { me.hialtmode = 0; } + + me.min_altitude = 9999; + me.max_altitude = -9999; } var restart_beacon = func { me.radar_beacon = 0; me.radar_cycle += 1; - me.min_altitude = 9999; - me.max_altitude = -9999; me.reference = nil; }; @@ -275,15 +285,16 @@ var draw = func { me.refaltitudeft = refalt; me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; me.onground = getprop("/gear/gear[0]/wow"); + + if (me.min_altitude != 9999) me.update_altitudes(); if (me.basealtitudeft == nil and fmgc.FMGCInternal.phase<2) { - #var basealtft = me.get_elevation(ref.lat,ref.lon); me.basealtitudeft = refalt + 400; me.checkarrival = 1; } - if (fmgc.FMGCInternal.phase == 2 and me.basealtitudeft > 0 and refalt > me.basealtitudeft) { - me.basealtitudeft = 0; + if (fmgc.FMGCInternal.phase == 2) { + me.basealtitudeft = math.min(me.basealtitudeft,400+me.terrain_minalt.getValue()); } if (fmgc.FMGCInternal.phase == 5 and me.checkarrival == 1) { @@ -293,20 +304,18 @@ var draw = func { var airport = airportinfo(fmgc.FMGCInternal.arrApt); if (airport != nil) me.basealtitudeft = 400 + (airport.elevation * M2FT); } - if (me.basealtft == nil) { - var elev = get_elevation(ref.lat,ref.lon); - if (elev != nil) me.basealtitudeft = 400 + elev; - else me.basealtitudeft = 400; # no hope + if (me.basealtitudeft == nil) { + me.basealtitudeft = 400 + me.terrain_minalt.getValue(); # that's fun } } if (fmgc.FMGCInternal.phase == 6 and me.checkarrival == 0) { me.checkarrival == 1; - me.basealtft = 0; + #me.basealtitudeft = 0; } - if (fmgc.FMGCInternal.phase == 7 and me.basealtft == 0) { - me.checkarrival == 1; + if (fmgc.FMGCInternal.phase == 7 and me.checkarrival == 0) { + me.checkarrival == 1; me.basealtitudeft = refalt + 400; } @@ -324,9 +333,16 @@ var draw = func { } me.updateTerrain(); # left - #if (math.mod(me.radar_beacon,2)==1) me.updateTerrain(); # right } }; + +setlistener("/instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red + me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning") ) ? 2 : 0 ); +}); + +setlistener("/instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow + me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-alert") ) ? 1 : 0 ); +}); \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 2d9b36ed..616456eb 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -12,8 +12,8 @@ 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("/custom/terrain/min-altitude", 0); -var terrain_maxalt = props.globals.getNode("/custom/terrain/max-altitude", -9999); +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); canvas.NDStyles["Airbus"] = { font_mapper: func(family, weight) { From 2a46f55c0f9d3ccd9855e771dccbdf089879e132 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Fri, 19 Feb 2021 23:40:22 +0100 Subject: [PATCH 22/58] better cyan/sea tile --- .../ND/canvas/res/terrainv2/tile_cl.png | Bin 1786 -> 1786 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_cl.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_cl.png index d6e55619dffad0ff10fd435543253860b5920cc4..bcbd0067156bfd296e1f063f516b7589594f1593 100644 GIT binary patch delta 1657 zcmV-<28Q|i4f+j`XbQam01mwYNBfYik#aD9U2LCa83yoYYrD^OTbFgL?K-#aqjr_z z+Gb^I(v68s)W9@26G#|_nIX&}Y(pXrm?K6}mP|!KM_^11<3kcWfJpGb6BCKXBV0l- zl5heN0tX&INFILg|04ek?}NAZbKlo>-5>AMw=HYdthwn2|G437oj&x>l`B_vbac#r znKNg>f(6~(-Sg(n<1AaYY~jL%d=XA(XXo6xb9;JvJQG>8Xwm$ZNd>li`Eo>lA_amj z0;A6F>goyy8Z-_Vxg|@M$fhJ8n8Ap|XLO{Lfsx`AZHiLy44ItzOfZfzahM4lVfy>~ zJ!fWSR;^mqvHHl+ZU61Q@!zHYKy;{oGYaYz9IYWsWCNlMLNM(EKyz4vbS)W%KQ%RV z-CgIudahpcWL=V+GX&~93*Usaio)Dr8Jw2Zbsq5Sjb4rRMO3sEn6<#cF*NU zUqAdp9iIG2R+6^jl$rgn_l!M+zhcD-68O|3tp-qPFdT%XOP9)uLn^=r(_h+u7x4m6 zj0j*c1DF1;?0l@wK3W~%5W-Ivo{?_9z@ed``QLhb+v&RZsk(06I;pX-u~5(zLt!F{ z;r8|Qbzk*HDPMmRLFIHI4eiJ{YHKG`b105ISU>wv{pNFZa&pq1;UT2}f+526#9zF4 zahdvavC~YazIo+HOEa9@2#%(Iq=;_2`Q_aYynorPf9vh-ZOP8vym|A**S=EL{>+rX z)UdRrydxd+6=Vlx2yq4m2G-90VdIXc)4syNfwAbeN5m=<=PtRw+1|xBzLULyiL*Ej zlZxUBFiT(hpQujSu2fpwUX%QH5L?IPcfDk$OMq>QT)UWHVGj;2KiRwnk=7pz* zy%i%nXDDgR{=Kic>7TmggEIPy)SwH^X@6Jrv}x0(XmzeXvEdu94u1Q+GWj56dgbUT zZ>y-2D5kSwt4Hqq^p4Y6l%w9$KE*hg9AHmEd4IY|uT0R}mL;y6LfsF)9M0Nw#6jTT zWFf5GAZ8p|Sz7#d0hH{2BfD*OC7KDeDdC6%l$}5@DM8r`s@{dGYrnJ6(NSM+5nwEM z0I4Fxc&71d<@H2VgW{MmLaBkTyZ>8VFoT1G_Mr(dDUqf?ta)!OrVwjtwzPnfiVStsjCgoLE+mzfF&ma z>7#k_*vW%mJJ{UaHird)%#=xCj#T{N;bD%kM0CSYL=-SIfQYObBE-R(Z#$6s5OR?d zVf;9lo`iCda)ny@&E;mZv$NzboSTzlBily1(WeeRer(TuT42(2)kA>E>cC3J9XoIS zaLawQY`D`=c?Rr%dEwlov)*P7dtABmu>%jhW6`aqn^zsnLf`~39Th9Rr>2kA$%pHr zegAWdf^YFYF*gIo6)d~Y)+>Kozw<)fwePP~AaEk>sMFM77UDJfBJJ4!pP5JM<&RdE zRloU-YtK!ZPejxFW>=T|s`-0RhEJp{la>fN!Q7=p%6AJ$Kr>6r0-(;Y_|Zbi8`6iiP(+#nL2!`cJ6*l`E-iY-}GjXX@zAr$zK(;lKd=W)45RB{`KCa3B!J73 zpN<``NB&d~-TS5^liKt7yY+!WRMTp3a%@)AxBBSFp67q~mwNZfzpJFUcT3tovWNHH zguiuU>(=S%=|;VEdEDvVue{cC_4#~jDQeLbu#!ftug@AtGbxcGwCnowcfC}<`(pK< zYgDpv_s3tYbi_nrnNLKGbVDl?;8b#t{F5iu)z$S8QF0zJ>|Amk00000NkvXXu0mjf D=o({6 delta 1657 zcmV-<28Q|i4f+j`XbQdn01mzZ>O!%=k#aD9TZ~ra6$aqVVK~je0GT1oAS6J7&P+-= z!vH~)ny8U9B^t57AUaq(6(lH(fmlGa7}5q3Je6wejYf@HJftC>lAo;;Z^!Wln){MfN$r%s*fnaGqWQzkY{DzKR|XCm?wsUYYg zFzWo4mX>g!LF0gtn>KBlY)bNh8H`ALMn_5+7%5JrO;IYIA(K;|3C2+-4l{uxOjlQz z=gO5UXV0G9dG*MZC(kT>?>vd{P|LSeSM*zD~7^E6vOT8 z?Cd{wvg&#L?{}4=a=MU)c4Qp2wUeni6gPfThD-TPDNB|tv1fQlDS%*zFg@{GTU+P; z`l-rJGoAY8l_M?9aB?F!nvx=ay7t-Ex4i$!(6g`2m@%UvJGQsCcl8r*Pu+Z%DS@eB zX-j!WI_9g89h4!&>F(}czW>n`dmc&q3I_+qqT3u1t9$Q5LubFWy*01Am%V|Bvp6-A zisA||OCNaRtzUds?k#2Meb0~+b(n7tEYFbL>MCU{WG=ftWGF6k>JFh89rP7#k@?!&|DZ>jHYlf!~QX3C^6M=Jh;1q(RF644Dq5mCU<03xz#h!6*>zwJQkL&!x= zgz@8GdJ@V-$`xwp*O!~ETD6MY`Ezq}tYw>MH+uK&M{intrxutrUG)%PvO2Jd7vFT_ zTW5zp{CDg6E%mW~VZff}&rLe(t>>`EAM8D{|HQv6y3us~s$*FQoFJy7VjXMuTz~qD zpZU`Kq#bpd8q7kxMqi|%=T42BE89LT zE~|d?7uTGdG@pp3`Sq?geO_+-wzO{Ck+Mu$BIpEjml835w`be%uD*RoAr)|>?wPqc z%|+RH9q;v>a1nZ6kulb)zc|;WPo~>h6O;KVezAdk~gFeZJ~(NHQ=%nP;wju zmE@x6E~G#<;28r*L!MX>;j01P+@5PzC!qa7rZ1fKO}kdV`TjL$zPk9)H)R=`|1RB5 zeNoBkL^3^pRxSF|k%57M%mj70kEx||Itkwl~_|G5S z_feT~!@Yi{I5H!)-*&KV)9vb^P{;)Ty;l&bAunFM`0CB0yZ1h%Q@uC1^{)9Oe5TYO z0X%KZuIv6;eyj0U&NwouAFmtL2MSS5tHH^!UeWy3BR@LwvJr6VR1%X}hgq#IhH0H>0B Date: Fri, 19 Feb 2021 23:40:43 +0100 Subject: [PATCH 23/58] test on GPWS alert --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 8 ++++++-- Models/Instruments/ND/canvas/style.nas | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index e6628cfc..81cc6a54 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -340,9 +340,13 @@ var draw = func { }; setlistener("/instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red - me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning") ) ? 2 : 0 ); + me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning") == 1 ) ? 2 : 0 ); + print("Terrain alert:" ~ getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning")); + print(me.terrain_alert.getValue()); }); setlistener("/instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow - me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-alert") ) ? 1 : 0 ); + me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-alert") == 1 ) ? 1 : 0 ); + print("Terrain alert:" ~ getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning")); + print(me.terrain_alert.getValue()); }); \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 616456eb..92bc94f2 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -15,6 +15,7 @@ var vhdg_bug = props.globals.getNode("/it-autoflight/input/hdg",0); # ND compass 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); + canvas.NDStyles["Airbus"] = { font_mapper: func(family, weight) { if( family == "Liberation Sans" and weight == "normal" ) From cbb633264dc28d54f47d31b6279625be0de215e1 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Fri, 19 Feb 2021 23:40:58 +0100 Subject: [PATCH 24/58] ease for VOR arrows --- .../ND/canvas/framework/navdisplay.nas | 74 ++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 594b5fd0..7165ed0d 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -75,12 +75,82 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each # anything that needs updatecenter called, should be added to the vector here # - foreach(var element; ["staArrowL2","staArrowR2","staFromL2","staToL2","staFromR2","staToR2", + foreach(var element; ["staFromL2","staToL2","staFromR2","staToR2", "hdgTrk","trkInd","hdgBug","HdgBugCRT","TrkBugLCD","HdgBugLCD","curHdgPtr", "HdgBugCRT2","TrkBugLCD2","HdgBugLCD2","hdgBug2","selHdgLine","selHdgLine2","curHdgPtr2", - "staArrowL","staArrowR","staToL","staFromL","staToR","staFromR"] ) + "staToL","staFromL","staToR","staFromR"] ) me.symbols[element] = me.nd.getElementById(element).updateCenter(); + var easeArrow = { + new: func(elem) { + var m = {parents: [easeArrow]}; + m.req_rot_rad = 0; + m.req_rot_deg = 0; + m.last_rot_deg = 0; + m.element = elem; + #m.timer = maketimer(0.1,m,easeArrow.update); + m.time = 999; + m.duration = 0; + m.startval = 0; + m.diffval = 0; + return m; + }, + setVisible: func(v) { + #if (v == 0) me.timer.stop(); + me.element.setVisible(v); + }, + hide: func { + #me.timer.stop(); + me.element.hide(); + me.req_rot_rad = 0; + me.last_rot_deg = 0; + }, + setRotation: func(rad) { + #me.timer.stop(); + var deg = 0; + var gap = math.abs(rad - me.req_rot_rad); + if (gap>0.001) { + me.req_rot_rad = rad; + deg = math.round(rad * 57.29578 * 100)/100; + me.req_rot_deg = deg; + me.startval = me.last_rot_deg; + #if (deg < me.last_rot_deg) deg += 360; + me.diffval = deg - me.last_rot_deg; + me.time = 0; + me.duration = math.round(gap * 36 / 3); + if (me.duration < 2) { + me.element.setRotation(deg * D2R); + me.duration = 0; + } + } + + if (me.duration > 0) { + var tx = me.time / me.duration; + #thanks to https://easings.net/#easeOutCubic + deg = (1 - math.pow(1 - tx, 3)) * me.diffval + me.startval; + deg = math.mod(deg,360); + me.time += 1; + #print("DEG: " ~ deg); + me.last_rot_deg = deg; + me.element.setRotation(deg * D2R); + if (tx>=1) me.duration = 0; + } + + }, + update: func() { + var deg = me.last_rot_deg; + if (me.last_rot_deg > deg) deg += 360; + deg = math.mod( math.round( ((me.last_rot_deg*100) + ( deg - me.last_rot_deg )) ) / 100 , 360 ); + print("update:" ~ deg); + me.last_rot_deg = deg; + me.element.setRotation(deg * D2R); + if (deg == me.req_rot_deg) me.timer.stop(); + } + }; + + 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) From b2eeb04ada0886291e5895ac0b870deeeaa78f59 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Fri, 19 Feb 2021 23:47:54 +0100 Subject: [PATCH 25/58] better yellow lite --- .../ND/canvas/res/terrainv2/tile_yl.png | Bin 1473 -> 1291 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png index b22f7d0fe0c9ecff80d1e6808d99b943e01196c3..b42fbe9207038b996407da4f567fe709ae966052 100644 GIT binary patch delta 1168 zcmV;B1aJGn3yTVnXbQgo01m$aI0aKAk#Z(~1YJo)K~zXfjh4G>Raq3qx7~2_e!om6 zCgd>@0y9AqbE6X_%!M@5&YvJSO2i-*BBB;HHX>pvb|Q)hR(2K^c7lQ;f`WpISg4hP zYkuc^+m(HHu3^67u=d*P@vXJ?+2@4b-rl!we>Gcp@}#+|tE-Zrxw*Nmtt~Dpm6n!& zmMHy@*#)T{G&MD4nvktG0}|uoEb& z8#VjOtakf$a2uXN$Yvm-1_zWqT0m?6Uq7e58Efugfy_tvcty1Tp6>M|&Qw*$+^ zkDES!p5d96E89Ie2t|<+Eq)B>4Do;^fJgBkKkNv6wkRS`AN6#*!_TMUJ#O)@YZPm#ib>sYyJhKDC z!^4D&ixPNZwz*dMdRC{4kbehJ;V%mS1Ia06klKLx`T2!~1#Ykh55lKUztN(&QKD|< zH*N&IcWF)880Y5ZzJC4PY|rB2qBH>Ck&zL;gPesoZ??NHLh*jE%>cPg8BSW0%jrDG zee4+1u5$0beA(xG3H0=TX`9*KW(RyLz&;LZ)5`>t8t40E#5AWaaFx$<4B_CDgR6V!ag{Iso zfS!JEcH{a-W$**V?+^`f2mJ5eWk`qlOz~SLCBTeRW(fF4W6sLA+X{nq+?ZXEW zjpHnTelqbS^u)x(@$jiU%%I{hs=(1J*0u~$CDquxGsr%P)9mp ib^&H6sVN?_O65Ov5NDdUW%Q5$0000Vcpa7j=(-|q{7BC{Thys@I*sIDH~J=C2@!aqTbkn*YIdK^941iJWz6(r)8q7ad#U7TtL`;QhdP(bWB zw=l*-r%ruPs1b?i5drDctg>8x+Cs#;h_ugzU156Z(q|O7d-wZo+mc6K02uCuT%0)` z8%Jccm{USbQw=O@fMAYy-MVn#K(39m__fW{MhmG^Q|Lo>KDlXSc(Hui>T3dFf*!f_ z6h;mGNF6{K*dSrd-lC!rr%;dC4HVD*{o&=ypHH7|7q5TLoD9b4a&xYKVU(qCkBy~3 zEmVjogYYiI_*aboJb3Wq!i9N>M0w~)$7T^`F;?PSwO>3aqEo@JyM6n@ix>URpZ~OL zSFT}aj2wXbj7`%N&IpODj|b7o+vlU{R0_t)lM~pjP;oMvh!XX4*4H|f z=Fd-b3R9F!V0J1}!y5U207lPTCr0K)_N$0upsa~$X&Q`<7@jS3nP6# z2y=kErW}sEmc-WJ`wqd6Pu1p|@{;e_g*m7nUS#_2_rx z-!c9R$l_&BVHE8mmM>3N06M<%;Cl7y7oHRF2q}B_hHKZp+_*6zNwffCqGHt~^!8T! zL%>YzGSx=yfZH-WoKnWXL?RkC7ueR3kw$jR0-_oDNOpAO9|jUBbt0!oX_+iWrVwIy zU$QVS>f5CaBKPute+(+AV-Z93Ey2hEo*Kji_Tl#J@18vA<&kHqpKm>DW4m1(Oo`%W zKe)SiRFU+DrawN(Bv^p_lPB9^9Oi3^pJjyw7`MnwoQ~x@`ulmo4#jwo+Yi#Hik&T? z%ux~^Ki)(RPaZ4+$h3U`R4PR5JNC|<)S#_lej(@w!-z0{%@Z3`usP~Id&1CA3ZWc6 z3uU=5TD9yrN^LIj_U)mkC)vdhq2N4+g53mn;zTR4(lUa<=ZI$tjQRLc+d?6t{FW`% z>uFXo(n)rAdj?zY-051pI3>%)k4!S5Ub-|aTb2^cu>-_5;bMLCfsJxI03dddko@$! ze*LQ$M|d7HBr--m<@uo}3nPUKDT-io7{x;r1%{I~(QXPgg#Q3MApjBrrMGVY0000< KMNUMnLSTYUH;mW- From 94f95045d73739effc88c720437f7212c265b58e Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 21 Feb 2021 16:57:25 +0100 Subject: [PATCH 26/58] Some fixes for VOR arrows easing --- .../ND/canvas/framework/navdisplay.nas | 67 ++++++++++--------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 7165ed0d..4213948b 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -86,65 +86,72 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update var m = {parents: [easeArrow]}; m.req_rot_rad = 0; m.req_rot_deg = 0; - m.last_rot_deg = 0; + m.last_rot_deg = nil; + m.last_rot_rad = 0; m.element = elem; - #m.timer = maketimer(0.1,m,easeArrow.update); - m.time = 999; + m.time = 0; m.duration = 0; m.startval = 0; m.diffval = 0; return m; }, setVisible: func(v) { - #if (v == 0) me.timer.stop(); + if (v == 1 and me.last_rot_deg == nil) me.reset(); me.element.setVisible(v); }, hide: func { - #me.timer.stop(); me.element.hide(); - me.req_rot_rad = 0; - me.last_rot_deg = 0; + }, + reset: func { + me.last_rot_deg = 360 - getprop("orientation/heading-deg"); + me.last_rot_rad = me.last_rot_deg * D2R; + me.duration = 0; + print("VOR reset"); }, setRotation: func(rad) { - #me.timer.stop(); var deg = 0; - var gap = math.abs(rad - me.req_rot_rad); + var gap = 0; + #if (me.last_rot_deg == nil) { + # me.reset(); + # gap = 0.3; + #} else { + gap = math.abs(rad - me.req_rot_rad); + #} if (gap>0.001) { + #else if (gap>0.1 and me.duration == 0) me.reset(); # detect VOR freq changed + if (me.duration>0) gap = math.abs(rad - me.last_rot_rad); + if (gap>=180*D2R) gap = 360*D2R - gap; + deg = rad * 57.29578; me.req_rot_rad = rad; - deg = math.round(rad * 57.29578 * 100)/100; - me.req_rot_deg = deg; - me.startval = me.last_rot_deg; - #if (deg < me.last_rot_deg) deg += 360; - me.diffval = deg - me.last_rot_deg; - me.time = 0; - me.duration = math.round(gap * 36 / 3); + me.req_rot_deg = deg; + me.duration = 0; + if (gap>0.2) { + 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 + } if (me.duration < 2) { - me.element.setRotation(deg * D2R); + me.last_rot_rad = rad; + me.last_rot_deg = deg; + me.element.setRotation(rad); me.duration = 0; } } - if (me.duration > 0) { var tx = me.time / me.duration; #thanks to https://easings.net/#easeOutCubic deg = (1 - math.pow(1 - tx, 3)) * me.diffval + me.startval; - deg = math.mod(deg,360); - me.time += 1; + deg = math.mod(deg,360); #print("DEG: " ~ deg); me.last_rot_deg = deg; - me.element.setRotation(deg * D2R); + me.last_rot_rad = deg * D2R; + me.element.setRotation(me.last_rot_rad); + me.time += 1; if (tx>=1) me.duration = 0; } - }, - update: func() { - var deg = me.last_rot_deg; - if (me.last_rot_deg > deg) deg += 360; - deg = math.mod( math.round( ((me.last_rot_deg*100) + ( deg - me.last_rot_deg )) ) / 100 , 360 ); - print("update:" ~ deg); - me.last_rot_deg = deg; - me.element.setRotation(deg * D2R); - if (deg == me.req_rot_deg) me.timer.stop(); } }; From d389fa82a1fa999037964eb04687332b73778214 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 21 Feb 2021 16:59:17 +0100 Subject: [PATCH 27/58] Better climb and hi ref altitude green levels computation --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 146 ++++++++++++------ Models/Instruments/ND/canvas/style.nas | 10 +- 2 files changed, 100 insertions(+), 56 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 81cc6a54..bc500d2e 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -13,10 +13,10 @@ var terrain_maxalt = props.globals.initNode("/instrumentation/efis[0]/nd/terrain var terrain_alert = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/alert", 0,"INT"); var tile_list = [ - nil,"tile_gl.png","tile_gh.png","tile_yl.png","tile_yh.png","tile_rh.png", # 0-5 low alt - "tile_gl.png","tile_gh.png","tile_gs.png",nil, # 6-8 hi alt + nil,"tile_gl.png","tile_gh.png","tile_al.png","tile_ah.png","tile_rh.png", # 0-5 low alt - imho real ND displas likely amber than yellow + "tile_gl.png","tile_gh.png","tile_gh.png","tile_gs.png", # 6-9 hi alt "tile_ml.png","tile_cl.png", # 10 magenta - 11 cyan (water) - "tile_ys.png","tile_rs.png" # 12-13 alert + "tile_as.png","tile_rs.png" # 12-13 alert ]; var is_terrain = 0; @@ -92,10 +92,10 @@ var updateTerrain = func { var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black - if (elev != nil) { - if (elevme.max_altitude) me.max_altitude = elev; - if (me.is_terrain) { + if (elev != nil) { + if (elev>me.max_altitude) me.max_altitude = elev; + if (me.is_terrain) { + if (elev=lowaltft) grad = 3; # lite yellow else { if (me.bands_range > 0 and elev > me.bands_minalt) { - grad = int((elev-me.bands_minalt) / me.bands_range) + 6; - if (grad>8) grad = 8; # solid green + 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 } } } } } } else { - grad = 11; #water + grad = 11; #water/cyan } append(elevft,grad); # 0-5 } else { @@ -134,6 +135,8 @@ 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; @@ -154,14 +157,29 @@ var update_altitudes = func { me.terrain_minalt.setValue(me.min_altitude); me.terrain_maxalt.setValue(me.max_altitude); + if (me.avg_minalt == 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); + } + if (me.onground == 0 and (me.max_altitude + 250) < me.refaltitudeft) { # 250 ft tollerance me.hialtmode = 1; - me.bands_range = math.min(2000,(me.max_altitude - math.max(me.min_altitude,me.basealtitudeft))) / 5; - var maxrange = math.min(2000,me.max_altitude - (me.bands_range * 3)); - me.bands_minalt = int(me.max_altitude - maxrange); - me.bands_maxalt = me.max_altitude; + var range = math.min(2000,(me.avg_maxalt - me.avg_minalt)); + if (range < 400) { + me.bands_range = 0; + } else { + me.bands_range = 500; + me.bands_maxalt = me.avg_maxalt; + me.bands_minalt = math.max( me.avg_maxalt - range , me.avg_minalt + 400 ); + } } else { me.hialtmode = 0; + #me.avg_minalt = 9999; } me.min_altitude = 9999; @@ -191,6 +209,8 @@ var init = func { me.visible = 0; me.min_altitude = 9999; me.max_altitude = -9999; + me.avg_minalt = 9999; + me.avg_maxalt = -9999; me.bands_minalt = 0; me.bands_maxalt = 0; me.bands_range = 0; @@ -268,55 +288,80 @@ var draw = func { if(me.fetching) return; + if (pts.Sim.pause.getBoolValue()) return; + if (me.onfailure == 1) { me.clear(); me.restart_beacon(); return; } + if (me.layer.display_changed == 1) { + me.layer.display_changed = 0; + me.clear(); + me.reference = nil; + } + if (me.reference == nil) { # update aircraft reference var ref = geo.aircraft_position(); me.reference = ref; if (ref != nil) { + me.refheading = getprop("orientation/heading-magnetic-deg"); - var refalt = ref.alt() * 3.2808399; + var refalt = int(ref.alt() * 3.2808399); me.refaltitudeft = refalt; me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; me.onground = getprop("/gear/gear[0]/wow"); if (me.min_altitude != 9999) me.update_altitudes(); - if (me.basealtitudeft == nil and fmgc.FMGCInternal.phase<2) { - me.basealtitudeft = refalt + 400; - me.checkarrival = 1; - } - - if (fmgc.FMGCInternal.phase == 2) { - me.basealtitudeft = math.min(me.basealtitudeft,400+me.terrain_minalt.getValue()); - } - - if (fmgc.FMGCInternal.phase == 5 and me.checkarrival == 1) { - me.checkarrival = 0; - me.basealtitudeft = nil; - if (fmgc.FMGCInternal.arrApt != nil) { - var airport = airportinfo(fmgc.FMGCInternal.arrApt); - if (airport != nil) me.basealtitudeft = 400 + (airport.elevation * M2FT); + if (fmgc.FMGCInternal.phase < 2) { + if (me.basealtitudeft == nil) { # starting at phase < 2 + me.basealtitudeft = refalt + 400; + me.checkarrival = 1; + print("set REFALT [pref]: "~me.basealtitudeft); } - if (me.basealtitudeft == nil) { - me.basealtitudeft = 400 + me.terrain_minalt.getValue(); # that's fun + } else if (fmgc.FMGCInternal.phase == 5) { + if (me.checkarrival == 1) { + me.checkarrival = 0; + me.basealtitudeft = nil; + if (fmgc.FMGCInternal.arrApt != nil) { + var airport = airportinfo(fmgc.FMGCInternal.arrApt); + if (airport != nil) me.basealtitudeft = 400 + int(airport.elevation * M2FT); + print("set REFALT [arrApt]: "~me.basealtitudeft); + } + if (me.basealtitudeft == nil) { + me.basealtitudeft = 400 + me.avg_minalt; # that's fun + } + } + } else if (fmgc.FMGCInternal.phase == 6) { + if (me.checkarrival == 0) { + me.checkarrival == 1; + #me.basealtitudeft = 0; + } + } else if (fmgc.FMGCInternal.phase == 7) { + if (me.checkarrival == 0) { + me.checkarrival == 1; + me.basealtitudeft = refalt + 400; + print("set REFALT [done]: "~me.basealtitudeft); + } + } else { + #if (fmgc.FMGCInternal.phase != 2 or refalt > me.basealtitudeft) { + # me.basealtitudeft = math.avg(me.basealtitudeft,me.basealtitudeft,400 + me.terrain_minalt.getValue()); + #} + + 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 (fmgc.FMGCInternal.phase == 6 and me.checkarrival == 0) { - me.checkarrival == 1; - #me.basealtitudeft = 0; - } - - if (fmgc.FMGCInternal.phase == 7 and me.checkarrival == 0) { - me.checkarrival == 1; - me.basealtitudeft = refalt + 400; } } @@ -327,8 +372,7 @@ var draw = func { var update_size = (range != me.range); me.range = range; - if (me.layer.display_changed == 1 or update_size) { - me.layer.display_changed = 0; + if (update_size) { me.request_clear = 1; } @@ -339,14 +383,14 @@ var draw = func { }; -setlistener("/instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red - me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning") == 1 ) ? 2 : 0 ); - print("Terrain alert:" ~ getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning")); - print(me.terrain_alert.getValue()); +setlistener("instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red + me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning") ) ? 2 : 0 ); + print("Terrain warning:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning")); + print( me.terrain_alert.getValue() ); }); -setlistener("/instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow - me.terrain_alert.setValue( (getprop("/instrumentation/mk-viii/outputs/discretes/gpws-alert") == 1 ) ? 1 : 0 ); - print("Terrain alert:" ~ getprop("/instrumentation/mk-viii/outputs/discretes/gpws-warning")); - print(me.terrain_alert.getValue()); +setlistener("instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow + me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert") ) ? 1 : 0 ); + print("Terrain alert:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert")); + print( me.terrain_alert.getValue() ); }); \ No newline at end of file diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 92bc94f2..b48e0f68 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -94,7 +94,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { #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.get_switch("toggle_display_mode") == "MAP" 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) { layer.update(); @@ -1988,14 +1988,14 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) ( nd.get_switch("toggle_terrain") and - nd.get_switch("toggle_display_mode") != "PLAN" and (nd.rangeNm() <= 40) and !nd.get_switch("toggle_centered") and + nd.get_switch("toggle_display_mode") == "MAP" 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){ if (terrain_maxalt.getValue() != -9999) { - nd.symbols.terrLO.setText(sprintf("%03d",int(terrain_minalt.getValue()/100))); - nd.symbols.terrHI.setText(sprintf("%03d",int(terrain_maxalt.getValue()/100))); + nd.symbols.terrLO.setText(sprintf("%03d",math.round(terrain_minalt.getValue()/100))); + nd.symbols.terrHI.setText(sprintf("%03d",math.round(terrain_maxalt.getValue()/100))); nd.symbols.terrGroup.show(); - terrain_maxalt.setValue(-9999); #update visual once at radar cycle + terrain_maxalt.setValue(-9999); #update visual at radar cycle } }, is_false: func(nd){ From 86bac0ab798633443602bc4a8ccebbea09380f72 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 21 Feb 2021 17:00:14 +0100 Subject: [PATCH 28/58] Optimize encoding for tiles and fix some greenish colors --- .../ND/canvas/res/terrainv2/tile_ah.png | Bin 6214 -> 3268 bytes .../ND/canvas/res/terrainv2/tile_al.png | Bin 5905 -> 2863 bytes .../ND/canvas/res/terrainv2/tile_as.png | Bin 0 -> 226 bytes .../ND/canvas/res/terrainv2/tile_ch.png | Bin 6247 -> 3184 bytes .../ND/canvas/res/terrainv2/tile_gh.png | Bin 6261 -> 3243 bytes .../ND/canvas/res/terrainv2/tile_gs.png | Bin 182 -> 182 bytes .../ND/canvas/res/terrainv2/tile_mh.png | Bin 6293 -> 3291 bytes .../ND/canvas/res/terrainv2/tile_rh.png | Bin 6061 -> 2870 bytes .../ND/canvas/res/terrainv2/tile_rs.png | Bin 182 -> 182 bytes .../ND/canvas/res/terrainv2/tile_yh.png | Bin 6275 -> 3293 bytes .../ND/canvas/res/terrainv2/tile_ys.png | Bin 181 -> 181 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Models/Instruments/ND/canvas/res/terrainv2/tile_as.png diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png index dacbc9c99df4040ff9d5c3e1ccfae425c904ea1d..21b7f1da360a6cd689aed1f121929c32aa33c4a6 100644 GIT binary patch delta 3216 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 IM6N<$f~d4Hy8r+H diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_al.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_al.png index a73451d38769f0327bc91ae852bcf92ee09b438d..4d2f16d40defe46840d521d9b16e2f7534880c64 100644 GIT binary patch delta 2808 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 KMNUMnLSTabh(}TY delta 5874 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 IM6N<$f?^qeM*si- diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_as.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_as.png new file mode 100644 index 0000000000000000000000000000000000000000..ccfa1f20659cca47282ff283c2ef25281448e061 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^iXhCv1SD^?g<1e9mUKs7M+SzCeKo%WCjRH(Sd=XwvvJ2Wj6zZ%~J*j$uq?^t>r+qoCO|{#S9F5`$3q|f;CtL zC@4|l8c`CQpH@sB%CuM1??9WLF$cl{xd^ZW6QV#aTec!XBxTr30XXYh3O Kb6Mw<&;$SyQ9=j+ literal 0 HcmV?d00001 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ch.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ch.png index bfea80c72e3067db164ee006dd8ced2dce392067..99d6bc279509491d3f4c4c8652c04cb5fbd0b4d4 100644 GIT binary patch delta 3132 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 W?7?^We3-@n00004Tx07%ERR%cXG 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 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_mh.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_mh.png index d06517213054d7936729d4520db669e461da85c5..0e35106619e0d5c500c215fb7b2fdd4f5dff41db 100644 GIT binary patch delta 3240 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 RaSi|g002ovPDHLkV1m37S@Hk? delta 6031 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 diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_yh.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_yh.png index dc54323337d72f8496d1b87273da29873bed29fc..bb536295b0df569dff744b3fad1004deb8e22cb5 100644 GIT binary patch delta 3242 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 R09gP4002ovPDHLkV1gGpE#m+H diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ys.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ys.png index f1604ba30d8379eb31888742e00ba0948861a65e..544c985d479b3532aa238ee24a352b2982d3f9cb 100644 GIT binary patch delta 20 ccmdnWxRr5&4c7q%2EGG~S=Tx_C%WYW07jz*>Hq)$ delta 20 ccmdnWxRr5&4c9>i2EK!gJ0@noo#>Vi07^Fpy8r+H From fd76d82714af5b69d0dee6795b94c63b98e9a329 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 21 Feb 2021 23:01:20 +0100 Subject: [PATCH 29/58] display range fix --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 61 ++++++++++--------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index bc500d2e..ec076f96 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -1,5 +1,8 @@ # See: http://wiki.flightgear.org/MapStructure # Class things: + +## inspired from work on 787-family - thanks a lots + var name = 'TERRAIN'; var parents = [DotSym]; var __self__ = caller(0)[0]; @@ -13,7 +16,7 @@ var terrain_maxalt = props.globals.initNode("/instrumentation/efis[0]/nd/terrain var terrain_alert = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/alert", 0,"INT"); var tile_list = [ - nil,"tile_gl.png","tile_gh.png","tile_al.png","tile_ah.png","tile_rh.png", # 0-5 low alt - imho real ND displas likely amber than yellow + nil,"tile_gl.png","tile_gh.png","tile_al.png","tile_ah.png","tile_rh.png", # 0-5 low alt - imho real ND displays likely in amber color than yellow one "tile_gl.png","tile_gh.png","tile_gh.png","tile_gs.png", # 6-9 hi alt "tile_ml.png","tile_cl.png", # 10 magenta - 11 cyan (water) "tile_as.png","tile_rs.png" # 12-13 alert @@ -73,8 +76,16 @@ var updateTerrain = func { var tiles = me.tile_list; - var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 40); - var proj_lat = pos_lat + ((col * (range/30) * math.cos(DEG2RAD * (heading - 90))) / 40); + #var proj_lon = pos_lon + ((col * (range/30) * math.sin(DEG2RAD * (heading - 90))) / 40); + #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 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 elevft = []; @@ -87,8 +98,8 @@ var updateTerrain = func { continue; } - var point_lon = proj_lon + ((row * (range/30) / 40) * math.sin(DEG2RAD * heading)); - var point_lat = proj_lat + ((row * (range/30) / 40) * math.cos(DEG2RAD * heading)); + var point_lon = proj_lon + ((row * range_20f / 60) * heading_sin); + var point_lat = proj_lat + ((row * range_20f / 60) * heading_cos); var elev = me.get_elevation(point_lat, point_lon); var grad = 0; #black @@ -195,9 +206,8 @@ var restart_beacon = func { var init = func { #print('TERRAIN init'); - me.tile = 33; # preferred 34 + me.tile = 33; me.fetching = 0; - me.timeStamp = nil; me.fetchRad = me.model.fetchRad; # Radius of radar layer to fetch me.range = me.model.rangeNm; # Range of Navigation Display me.viewport_radius = me.getOption('viewport_radius', 670); @@ -205,8 +215,7 @@ var init = func { me.radar_beacon = 0; me.radar_cycle = 0; me.radar_cleared = 1; - me.request_clear = 0; - me.visible = 0; + me.request_clear = 0; me.min_altitude = 9999; me.max_altitude = -9999; me.avg_minalt = 9999; @@ -226,7 +235,7 @@ var init = func { var gx = int(me.viewport_radius / tile); me.tileradius = gx; - var limx = int((512/tile)+0.5); # horiz space is smaller + var limx = int((512/tile)+0.5); # display width is smaller than height me.tileradiusw = limx; me.terrlayer = {}; @@ -338,20 +347,16 @@ var draw = func { } } else if (fmgc.FMGCInternal.phase == 6) { if (me.checkarrival == 0) { - me.checkarrival == 1; + me.checkarrival = 1; #me.basealtitudeft = 0; } } else if (fmgc.FMGCInternal.phase == 7) { if (me.checkarrival == 0) { - me.checkarrival == 1; + me.checkarrival = 1; me.basealtitudeft = refalt + 400; print("set REFALT [done]: "~me.basealtitudeft); } - } else { - #if (fmgc.FMGCInternal.phase != 2 or refalt > me.basealtitudeft) { - # me.basealtitudeft = math.avg(me.basealtitudeft,me.basealtitudeft,400 + me.terrain_minalt.getValue()); - #} - + } else { 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); @@ -361,7 +366,6 @@ var draw = func { me.basealtitudeft = int(400 + me.avg_minalt); print("set REFALT [abvmin]: "~me.basealtitudeft); } - } } @@ -383,14 +387,15 @@ var draw = func { }; -setlistener("instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red - me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning") ) ? 2 : 0 ); - print("Terrain warning:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning")); - print( me.terrain_alert.getValue() ); -}); +## TODO - it doesnt work. listeners seem not to have trigged +#setlistener("instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red +# me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning") ) ? 2 : 0 ); +# print("Terrain warning:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning")); +# print( me.terrain_alert.getValue() ); +#}); -setlistener("instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow - me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert") ) ? 1 : 0 ); - print("Terrain alert:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert")); - print( me.terrain_alert.getValue() ); -}); \ No newline at end of file +#setlistener("instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow +# me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert") ) ? 1 : 0 ); +# print("Terrain alert:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert")); +# print( me.terrain_alert.getValue() ); +#}); \ No newline at end of file From 50efa9560fa01e8d341a845ee2cb75624e1113f4 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Feb 2021 21:18:22 +0100 Subject: [PATCH 30/58] update on green bands calc, altitude expeted at 30s on negative vertical speed --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index ec076f96..601e692c 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -183,8 +183,8 @@ var update_altitudes = func { var range = math.min(2000,(me.avg_maxalt - me.avg_minalt)); if (range < 400) { me.bands_range = 0; - } else { - me.bands_range = 500; + } else { + me.bands_range = math.max(200,math.round(range / 4)); me.bands_maxalt = me.avg_maxalt; me.bands_minalt = math.max( me.avg_maxalt - range , me.avg_minalt + 400 ); } @@ -323,6 +323,8 @@ var draw = func { me.refaltitudeft = refalt; me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; me.onground = getprop("/gear/gear[0]/wow"); + var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); + if (vspeed30s<-500) me.refaltitudeft += vspeed30s; if (me.min_altitude != 9999) me.update_altitudes(); From 7774678ac0d7769b9b91849a9c6ab0f9d673e632 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Feb 2021 21:18:35 +0100 Subject: [PATCH 31/58] color tiles update --- .../ND/canvas/res/terrainv2/tile_ah.png | Bin 3268 -> 2272 bytes .../ND/canvas/res/terrainv2/tile_al.png | Bin 2863 -> 1686 bytes .../ND/canvas/res/terrainv2/tile_ch.png | Bin 3184 -> 2730 bytes .../ND/canvas/res/terrainv2/tile_cl.png | Bin 1786 -> 1479 bytes .../ND/canvas/res/terrainv2/tile_gh.png | Bin 3243 -> 2869 bytes .../ND/canvas/res/terrainv2/tile_gl.png | Bin 1770 -> 1590 bytes .../ND/canvas/res/terrainv2/tile_ml.png | Bin 1563 -> 1355 bytes .../ND/canvas/res/terrainv2/tile_rl.png | Bin 1732 -> 1479 bytes .../ND/canvas/res/terrainv2/tile_yl.png | Bin 1291 -> 1296 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ah.png index 21b7f1da360a6cd689aed1f121929c32aa33c4a6..5151f582ba5250338f9576f65432b00289f0b0d6 100644 GIT binary patch delta 2157 zcmV-z2$J{28Q>9+XbQgo01m$aI0aKAk#Z(~2r@}TK~zXfO_pg>Th|%Kk2`gO!I*t9 z2E-0Fi`mSM5JEx{Vi5==kl4f~RzYeAco4>}?O?Z1h)GOs$4e6%$2K##vE$%6)3ljs z;(mj^>Wj{FrXQof%ejW!IdkXS^X&iUf6lq$KZ{w6#fF%al$4~Tq@0|bkDUdZiw>iI z(Rk*}nG4#ZNUzq4;X2V?D{hXSk@}3%($ciFw6L(SkdTm5r%uJk$7f|_<>uxNn#EgN zAPSewq4;E7jq$JT$)cj73+71X|J(K7aOWi^CUzMjq;%bJ^6dWOYmWHGV2WHEH;C-) z?EL)v>gsAHv9Ynd2Q6WH3x!gltgI}5Jw2T;qO!8`58jHArbJh%*y~P`;)x1@tfHdg zuM;_P#nTi{vggj7+cF-LD?g4UwKs@Yn~lu>G*(nlP(ZNz{i#y=om-QarzA>o;^h8A zz_qaoDgL=XX{}PsRR$Cn7w-(^vEuL4pbCdfMEh+j3=BM$l$1PwnJki@ zPsdA8&dA8127x1RPfkwucIJQonfuN8qBm{fQtzfd2EPdj3A}-xH*k&C9{PQJA@}iB z9h2p@Y^g?*mIm?{`-;1pQZq9%K@Y?Pp;A**K?Wt}EbX)$mo8p-E2E;KqNAe;;B1Jv z)StK9nO;>@wc=7B{kTT7*9oG3l0GRC06gTI2NO!C$18>p6s!)!6hv8zdNtF9_H<&9 z%TjNqTw&nx^y$-J8yOji6hnAVT7l90@jN&mL*a)a&)Y;&3K!E-AQwF<$<@1?jLM zU}y3yp8`JI=uDHcRh?SFmi7p~UV4z=4atYO3^Kuk;wO(Ln^PFF8GGT34;m^Usi+ry-? zzayP&h_U7?lPmYq?M<*TYG!#zW4GRE2;^TwEOXOv1y%L7#j9 z8eR-FeQ=C~Mx7z{d{j?KiWq3-jaEFWI45uGM6U^zd-`vVWslaM zcs^2myYnpeSc31)%?>HO(HIC~nBa~orE5G=C8vwu5`xZ~uLfZgrK=u6oCf^P6vh0l zBi>~ctlXO`mD10BdWyh!$(8V~FHtVKs{~vpu&=)yl!!qv2PJ=6LF2 z%XAn2daqFd67c+ zKjj$RW-)G$6qpTE9(8HON^6W1aD0*!-6koylj$2!7#taY^V4NZMm6^vMzQsN?y45( z&^97rOBi@XPEh<)Z|72ALIOaqB}|OfsHMD`E@oT0x-#S^W1~*o zZ%~*n#}&Q!v?X#{_bU*%Qm>rBM|@`d!Ok~wqT$2Fj#xN@ad0iw*|jyRxkPUzFOHfw^Q9} zU;0gd%4vgNum(Hg11NB_aaiZgwov{PEJ4!X+ok|dvl`>yU6Gy!@%$t8BHDJIf+;A| zXDIvG)q1(U;7AjWnlP{fL5=|;kvnkXnvM~J`R+xd)Mm6ch!&Ih+NW-@7hS>rHZ|lY ztr6%`0St!L&+oY8`h}4afq)8N0=!1Hz0rezU~k3Nvwy}o^v7N=*GTOzJQ~4(J3VW6SV{&NVePyQ}Te=2~wipy70)UiETo zwjAOCMY}C|t55y!dg=<0ldYBjup(oSM+aLbTCLV(GAZ{tuuvdnTHE4wKX*%;C8q{| zo9R07WHg!2b=z@}#28Id!xyN!TE%?pAq9NaAl5liYHMp@3KNUPa(mOQXk69@LqY7J zuicRVVt9wwo4$er`-PS$aDbQWYj!EUYYn9N0EH!gkjfoES=09DM?*@L49cQ(Ip5oGA_W)<;#2(7 zttwq=3GCE~Dcy1EkijT!zBN`#$)No$6A5b{UsO^U)#Ejge&W zH;Z!jJ?jdZvL7PLZvdc^HIW9);^$s9(zWhX)~Q3mpYR;H z)Is%qW}*7MXA?6WhcO_S>=40P>%^Kt6%A>Ru!yC@5XfKsob~wjMdLSj$00P#gbwH< jNi&Xd@G^HmdO00000NkvXXu0mjf@#Z$1 delta 3161 zcmV-f45sto5yTmgXbQjp01m(bYSxJfk#Z(~3>Ha5K~zXfEmnC@)K|7XG<4J5(6m6a zC^Wq<^uF)=&fd^XH_##?pa=*UMNruh(EtLX;u6Id6(@;RW+s`8nd~uRjF~t(lVoDt zMaBh0eUs$n{qgF(+cU4~)~#RtZk>D2`Of!!_rjxn{vW#SJBu=Mxxi(ES%leEDWC3t z33&@xYH`eV2lnGv#Jk+k;Dn$Z_BRW@>oYG5yRP&*inYKMV6a($&4d*kVlp>@BO|I6 zQ0IdWLd1n0^+4eYv}X#32%ojfAC4FPFxO(&!uA5nM|;a2pYPtgM#5%7r7QKDA;;28 z=|t5^oeI!sElvGXBl90^yz8yJCKsrGWT4c>yY1<6DL$PB0%d$%Ve*A;#V`9Df7>c4 z(E>*VnIaMdbqV{L4C_mBsGYW*qn9B}Gl zX7ULSJ7vqebf34qd`esZaNZwKR(qayUSLQxbue z4LR8$=EHc4Vd-EHEq}S5K5l~!E8eAnbB&U3CQ7>_G^yxcNNQro%Tn(So1gD7e%_eg z9fa@Sj4T`tUL5pTWZ=*f&bBKbOqb421>R`YSXBhJB-ZRq0-2G zcPihnNO?YNn;-P;_hj(cz@$ficNg-bvsML-cKBjI|8&aroMXw$G<3`^trE zIwZY`z_1!x{4%rpzX z8?wCD$Ou`Y@nl*IUq%{#spnrEb<7Vtrkx2|3DCHJXsS0+HkJ$57xN07T%iyj3Nxnr zZPzA!OJ{4|87(Q$K!Xc^u3h?IvjmJ9*c)Nr9d!Stfi>oauXo6wjaX-#F-jRA`ex)N zaAl-&ANdbs1$U3Gxwxmap<1qXq^XU#u~+o>_7%N2R`dHqjYtQ7W_`>|hw|1=)%_mT zpAT1+=%LJjeY4lQcz89`o8ZF6+~~m$@jO5?`>CiS8z}^CIfDKv+nP^@}3^7Jh8(j7JyC+^(D-) z8X0_0LtP%W{5o5I{$3Nkst~UBY5u!c`>4~n-bCgxfkus^F$vjRLOLaiKFU|81Vokk zBHX1TMNg)E-wwOHs@R;|m~0l9Oc{-SQH5=#FF(tam#s3b6e^RcOn}8LvP&iLdt6ZA zg>_!|Y=`Pam-^9mLvJxv#s|b*L<%OCn9jy?6p0&Z6|Zf7(On$R>#HDj6vmu;MZQJ{ zDCG=xY_>2tg@(m9e6cc01|Z{_^Ex!N;SHz5b{*p%6Jgj?Rgt&|)*#>80w6{l#ZocY2xY?l) zgI)tY)zr%kIWGs*f7xY;m_Q>2uQ{W2o!(}otYYC;@)DSGYnfcbGT$Qjv=YWZ+c6>59~a9{J;8-Fp%8>wes`6XiEX zO|>q6P%DT@%((Piyi6W9u|e`+uHpJ@#cCfkg(zUu!8#+h$^s+h8FvpxewbccZo(t} zFnB_T*fF;I=WH`GvsWvQ;$r5sCkWGhT zKjq5ong?gs%{Ge*?Ql3BH^0~ZpNIXkRXGYaWHIAYa>9 zF3<9~_lG`JBtPm`XrRi>y68uq7G~G;zaB3>v%}i8R)lz*D}a`DvVb!c(M%?S4txB6 z z$WM+|{BySS;%3&62c`m)HXFukgQ5JyD+fa3o5TSx3>Cn9xAfP2jw`)3l@JJ2h^Jx` zbFevrc$5c11XfH&vr9bbIe6pS!c4sEDfRc+>+cKML#7Fw`cDE>@ z-I@BEPW$DP8!FvoMlSHAxRx@`<>Q-AdQvF z;;39;@j$=_r6~GeA&OCGhf zqbY^hJafYNLHEOc?b1%kr4CVPK9qRjH?K$*8W=B|>2I$gb%)?i3u}3ob$59xk~CFH zBJ=S&U&>oYs~)`;T0UL3y-@>dA%?9=PiByb85oBnb8fQw`%}#qM*P*jY;@&?9EA6V ztj~vaceZk0YoH+$v)f{Sy4SKF4mtmK-1W&8>RdVex?T35RWweW%AWT+2foMVmI~!@{KH#Yz96PQ6MF zTvcq)&zPwbeLdp3II4Z42LG&?^JF7;CWuF>Vk%aot5!19iA)iHNF-qMB>VhXAY?~j z$z)+@lK6tMRp$>z7RIaR_k??@Xvpf@yl}RK@!2-sL@*JVIY)(0=3}yQV^ktQrdd@A zo#k+2ZPsGD3zNymN#wD}DC-K~v&!_ve#gf{ zt~>`c8{t@+e!9OzEQBmX$gS#&lSQyNk^l4Ivi%LY=#hZ#97HN)g2*bYdeYfFfv1N< zcYC$R{6wD}^itr6i3to$JU5;sCJ8hNZK3qjjf`6Z_N(207M}@F>Gx+skB?Pdm<%IR zU`W7Ofd6B!3cjjkJn2^7I~nQ^5G!o3$(a~55fGbs0*paL=nQ6luv7WhPT~Bkwy&rB z78Ou)i8wYPO@eQ%lU^Syd@)t8Wx8GNXdLD zG>3C;PWgYDt-7{9;4y$wjWrt*#?UeQgLD1PaA6ul8e?>=sPO?j+h+NBi|lwgv{%CY zKGotL`?q6OzZ2A2yigu}R+l9rOMlj*HRr;xMN300000NkvXXu0mjfFk&2S diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_al.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_al.png index 4d2f16d40defe46840d521d9b16e2f7534880c64..595d7d875c4cce7e60123451a365079d4bf5623e 100644 GIT binary patch delta 1567 zcmV+)2H^Rx7M2Z=XbQgo01m$aI0aKAk#Z(~1?WjcK~zXfZI@|Glvfyq@30Qc06Lnw zK&x0QAW#-T5d;Ny(VR*sA)-BYulu;jY+Gv(WIKzG%+zvZ1s<( zHuZ-|V`7w)s!h81zt5dBy?(KtAD8!@`=0Z@_kMT28B9`A(#f`EH;&Yu-aI8aIXUKk zKlpsU*x1;(xVY#%CWa{^JV;1LAZ7&d@$r#$yTpj(ImV!T&dWg=AR)=G0^SjcGfhlP zWCU_|0U$8UNfjlr;0ge87-4|742X-1MZ0oZ;9`CH+1j)f1<|GjTQ)Avs0Ak$8sC_5 zvAyP_wUhjQKT}r8kxU6*!~IiiUs)+h|v@m=@(a~{<0zS z@20VjyXP#OWN4E#o*8L^w18y5o(5`T?B~PF0vyEvRTAJa{cKC=)jgG`wpY0O8qPDH z@66d-W9AkcB;-Jn?0k&dAQZ8GwtsBxgueB!QJ!qADh+|e#MEF)e)pXCTYD!ydAIUX zv%QB}b!m*z8l);9>GZ1M_YY=2K3@HPLx$^sK=tqyg9JTeN0qs=H~aCy+#mPkQCO?w zs|G6j++?JY-p{Tb^Qgb<%EpX+Rnhw@cR5OlS6W&cJlHlfcxGMZw~b?e_LtbRk`-yh zfZ!SHTsDTsA8yRir_Z@7o0tT}Zc0F!e3cw2ZNVzt*t6mfU=BzEkg6>i@V26<7>vZY zB_zZuK+I^g5UFZGOolP`wL|Q@B!dKOvA5dXZp}N{^r{uV2uemvU~4#KYHBKFohf7_ z-@?@(*uSCVx4z1!Z@>P3-QI$^`Sz_EO?nY%Hwu(d&T~G%@dSV+9Oh4-Im=46kwuJ%OYK>SA&GkfbxMqDKUL?%IwL1=EL>lE_E&BL#BoR z!e>tm)_p6y*^qy$t^9g(_L@rjCFZTm`d#2tzkiDrediMY(l@ra`8uL$E!R3Yw z^$kxSyqT;;=aTeycFgt)4y>AVb4TWr?xOEMsLRQT-fv{&EGkL3)|vaq!OU;!kq5Md z*O@h0k2=a9Hs`i~5;+*?}hiR$d>@4s?yZ+yGpNhR@cu7F$M5R z$^JmVzH9r|<=t)1{kfy0D)Q}(7mcg+^;C7ia3=-OB3u z8AAgLAM{p#_V38maRHYQeJ66_j@rH;_(NCGP=Dc--C0fmyr#55Lj;h-Ez8F~IyP&l zzv}4b$uK}WR)6+7ku5JO0hY_lOxIj= z+luWk5bxbV4y+@8sIjOhFrzFhCB^=9hf$Im5k!)IzqmB!dP~Nir)oPkRl(rMQDV3~Lp3 z62Lylk-J7SZ?-x2R>fZ@>IaY4*A@C|2)t0JfHd8 zbMEEd_O{$x=)}HOKK@ppe=)?r4tCWHZ5Qz4gq`-g8~)PCW69)B)p(F1R_Ra zFouLkW2N|@@@V2dB!5nFroF#!?X}lhFhA$Me0t|^pV;!^-YaJNw3dM6GKwb(7ONM3 zra1H=Q_0lgGE1l(HdAPqVQmO&O%I{f;hKS9cO|-Ds8oW0BvMi-C8zRbR}&nAF-0Mi zpsIu*R@q?X(OG#yL}oEY@B)Vg{s zH6i!{_@dbL>C6;MHyGr4qHf+Yf5k}NwIIK?EjqVRyLAL!0A?Z!u_K3$o(4t|K+so| zf@NGzh;=p9t&p1aOYYjlhO~fP_@E2@+H& zNx7p{4j&UMr{L8cGMwK?e0*wks|G8eRODO{vN{##YEmh(OBk6-J2c*!a)3=>)1vz4 zJ;i_S2rr*pcT)?71K#UOtu8wuRSZD^q(dle4@pQPI|8ax!!sL6Sk^!ki!x8qp!`q{ovvc@4a$VO^OC7EDhkL{oRMw!1|fV zXv>jhX1bDSN~#5gkYz9#wGaxtD@n0JgjCX^7Y6XuuJX+8X4D5W2P&u4h!QPeQ`)In zq&4DhInb^duOiwtoLtAe|4{w;w-;Z(zt!)7l>#n+66s=Muz{j~#R`x<%Z9Sq@=2fM zQt0*J#oLTej(09Uz507QVp#>UVE9l##H89}BEhLu#m6dS*p}3s#2zPB!G{lZE+6mz z=E1?R0xVxDbexuYg4fK0*xVb_JiEoqy}j_|Pf}XHFM_T-kJ> z@`$7S1-1tl1nnU=PLP?uNH6Y3=YpiI|DglXpa(eRcZxd9Z0DMI3glY zNKa=YozJDT#ooD;Kf1F!=zOUzIZq}kUD!esVh<)U_+CWx9HJKKiepkPXsKQd2s-Kl zve~!6N_ef3xwb~ujyOovkq_X@cDHnTEu$&4cEozD?N2Cw>lX};K~5D2MTk_?657*A zPlilj1IVh$cyTIjMhO9pB8FO^`-16-ZmNL=Orr?>7#c$uXu!J299zsHG0)Vz;C!31 z7*YcxmgGRx>Hvu-Mlx-)Y8K(1s|nZd!0FZS!I8nUcT|oGh6{YG@{!$Nm=Bvq@^uI~ zv11Fhr?wq`#1q6&mSamuLwnGvR?M62N~;qwGch@Jl-&ds%B|V;$lCYy~6Ky>A>VmbAqrZ34z3^02EToAPHBZQ;R7=eE8hP z#=0fyj>1@~lGvyXvc?L!p~f-Sa>_pQ_>%O8)AR3td}s6Fo$b1zSdW*hh%0k^H3tP( zxX2N^2)fgq_9zFVG+3YGGo4OVy7nQ_aocH=Qytz3&Eeu~I^F20Vg#b(S!R_PQ-#$L zuNXqB3!OeBxT-0mqzW>d%T>V!C1kLrR=VBU;gKf}-Fnx}U~~ek4tS~35*i%hWZU^b z#F0pU4nJJ8+#9E$6W|kEs&SE0t*Gpl6ju{Nvm?^*84WKH3Qk*&8|d^V8;a)UXQmu# zR_&;b2x@I2odpY!MIcjBt?0FY|3@w&yYiAi*@u|q`v#eD%9nPDGE>%27eJc?E*75p zmhEeI-q2l|hUa!?uRnhMOk1!b8O=jUc)tyQNNN`UhUV34;P6v>wjWxu8+hc-nfH&b zeE0s&u2sOTc}rY8*X0A{myE>npSo!Jw{euI@0zgz5hl?w5ZWiE^6Ej~t zG5-Ad8((;M)x=gKLamrpbL#m6bMHL1diN%KqT8j27P4;B;^IO%-GlST=RZ2u|I>-t zRU?p7;B9ENnPWG1UOv2f?^Q}(A~uqL;Hpj@r~w}#Rv$i4e|)ewuyO)%(QsTMF%c7H zFx8(hCqR+Fkw=ssiAJRQv50buRSv9x(>Hll38;@o%6b`xXrm-!D8aX^Enx7$Wz-8@ z%^BFW#yq`udN_izhliq2V&#Ai3u-td*KNqF$6BF1Kt;KeKK}CrT z2=pb)M0~)jnQn9wD$>*>s{y1&WOAu4eiYRpKriF}}a9_*_w$|A~ z1&<;M0Z<}Kk<4YX(1}<>*M5e?CqL`!s$JtNrK zoy0h^1jrb&ZQ;&IrG)_jY_tT4K_w}PL&>=vs(wUCzLe-joc$S>Vv<^}% zaX#mTaNh>?*N;zMIy-*rfi_N+jYW)i*n{aMkV$3$?JkT^3R{r2!EInT4TrZypFMT; zrL(J^+}p#+O9*>=A_|PfqY6OU$jFMaR$QN8IgsQ@iG`K$_}-GVgMH_JzI*@r4Lz+^xW+)+ znZ9=JmVLKj>G9^d>7`}hGLj8`155Mp$`13T+l=uLnht{ou6A8#oKS_r6ox&ODxHAv z7~WAhM^s}8u2~B|{l=C5{{FU$PjA~Y=1~fbn8q~}3)ATN*?fVDguVueDpWoO010^& zkVw-sg{CVRg^a!|fQbMN11XChPPaUa-qE-jU$=l?QJ(OB)2_Gz(pUM!00000NkvXX Hu0mjfzCSq| diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_ch.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_ch.png index 99d6bc279509491d3f4c4c8652c04cb5fbd0b4d4..204cdc8ff3989514094cca94221788be33c29d46 100644 GIT binary patch delta 2619 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 delta 3076 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 Qc>n+a07*qoM6N<$g6Z;@DgXcg delta 1667 zcmV-}27LL)3;GR^XbQam01mwYNBfYik#Z(~224prK~zXfUDjP}pJf>a@Mmkg&vsjv zb*$|=x9+2MmEziFWoy!niA>bMG&mDT7>1c4%pq(;A`X}%Mp2ebML|bkObz2h5J=QVAxmTfq6|VX?E^q_ zSb}sd8HPVKHFe!x=f8TcUh`yKd-ZcVNYmP7@XZ_~Y>9EClVhbcn~ZKo;lo(SNXt~x z&6X`&F5Py|QRU)mS(0#J+yU@-%i{;uqNtj<1K9pDhcPZyq%Zoj~xp`rQTdVAaHy7#HNZrwVm zv9YmG&=o^rB8uVm_4RdM^+qXQe-lCFbRiAx$T(_iCsT7Mjy+gE`%wMnb9HiZ(w^ZV zr2v81BRgj(Y0Un;ues@;y5)m1`is<{3(aYNSM;=L)23*3u0OHi8?O$2 z`@J&xAY^*w=qYcjsFNtBvtp}9?)>zQ(^-_G-qSwCIG7w@PeOTrx=F80(A$y&TU{`NgM;>=2{0*Z1%b?zNnwsu{NdqYjlVc;>M!V6c4nBTt&wW~8(sb2B zfXV8>O2-{LZ~kz9%YC(MxYJR22JCs^+@!PKW)6E?x%06D54>a1t)`n-9m_)C1Th^I zE4`!N-CbBls+@jfv(1I86ByU*4ue_OxvLfy6RuT&s#BJHTt)L<6kHToj$ z*#DoIN9yH|R+m-3`HgGOO`1vdr*c?q%4zvmIyk*+@(a!?O8VdX!-VY zkP0|bZ-TA4IqgN+c@tkabo;~=zjxL$XbLbh`s(SFIx;{rOUnYF&an8=LdhG_hqh2e zni_D~2`D)Zf=Y5xbQe+}8}N()q#;kNi15{bZ*R{vYZB0YA=4L5S^MJ+``;b;ULCsf zU$P9%pG&uYQ(siFI+09|#VH$(OiWBFMc4y>)rq>E5rr)^qjwd}}Fc(G{?gMy;>U8b~uKks`F~ z`tx_aRKNRT^`C20vT^svU#)b+L}HmwM2&PqD-_^Va*zCzC)L%}^$}5W9x?1(avcBw N002ovPDHLkV1iO@W={YB diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_gh.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_gh.png index c6062deb51b85488a4d35cd5d3f446ffbeaf8894..9d8c864f9894a9071e5281c825188da1fe6810fa 100644 GIT binary patch delta 2759 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 N002ovPDHLkV1lIUKezw@ delta 3136 zcmV-G48QZW7ONSMXbQpr01m(V4bW z>n<`bAnKjAxA%{G?)}9%=XbvIo%5aV{XOsdKF{;MF#WLX!1vky_GHilXn^g-7rtVD zTR$3A7U@Y&oMR`c^&?aIUJ$MWW(0~3qz-=Tjm_omxg6vy1AHn5!ekKeX=)i=Bd1xD z!3n%NsDGa}GUxQ|W}}!iwFKHewZ$G3kA2@l%7)CHyzURnfB&eXe9#OkP_5+ld>x!z z2%`rR8OX3!?BGbzL>#o>BM$4b1bRU44MzhO*0i*yD zz?&dCDw_{E;OAp_kSIBcSyk!uO!(^$Q$Ag-SLh+%dGz_N!9^f z-&K#zMY=BJ(R{!PQfptgkKYeZ&Q>&?cCr0bf|;F=lMK>KBhMx!X&IjN){YOVH@;_Y zd@u3Hv%vIhLDhj|&;lsp(ZTS4@|h0uM%enfd*n%O*AMQJQ>MyOfu7G+mUbKPD!{8L zyaFtz(^}Z>u&h!NOca8hK*|G1Fo`)vC0Wae$1(#1q3RrC`h|b`ao*0iG9d-i+QJ6q+p=JUI03kp>lGP-t z4%1dx#FZjp9hAk){x$>A4c-nz-(OZtJrBftOY_hI+oXj(Qc50_jvIQv^)u*M22$7a-n9+ z+okLxP^`mh&sj$An*pB*MT4q|JE7fwReJY9+gG;OQ-9Go4(x#FOV>-8))c{V)}}ud z9lEn-?}e~)osAz&)#?BQ)eJtaK>jz&{F4Jz2SCIshi1WPrV1QMu0wo8K2tF8WUV zvb^?P8CC`DS6nlH|C4^?VWy*jh1UW}N~9{7R1FW3UREFB%>YD|CG&~^j$=M9O7TuvcykILDmc><;1=97f_nKkohpggJgSIhY(^*G-%tA$%DS?^I zX*#!jYB4hUDCila#p`APnvF%&NY7ECw6A)TBDDsik{mZ#*hIvk*LVGoo7$NJN2c z#HY)v%F zy(7cW3B9*7VvFUjK?sh+!6*6cR~*SzK+yp|RVi{isU|r&jm6JP1`CcFA{C72pzXuF znP)BgZdTGOffbGyJ)Tx732$PNtqgv4f^)5ZnQl!0DG_93URlcS%WDqauU&b>L@I`* z6XcQE?4$oxR&_)|O9P66#nS6QAfhN$RIM6>0$xzO>ZltAuI5cG=J$N>pjE&0D|9je zyzv)iAyggF^?bFg{*>R>W{mSVmEdZzN-MZ=f?C18o$~4>M{F^(>#A9{mW0Sk)hU60 zC#48vi7Fi?meFiU^0jn`OeGB7)a`%hYX8!Yl1N%6Z}~&j#N76VH$91~q2&Yhq4~1d ze6^=H0gx4<8X`ADo{A`71Zp8fj*9wj8QZQ&Yu~ndJ50n>ZlcD-6e*b^DN`w@r}5=$ zIH24Becu{S{8+N_9S7bCnkxO)50@T)ez9WsLAGx{ET3jgKVC8UuW<7PrK1N5M|i25 z@%Vi3^)U8cj^+=UC>3Dof!Ag&M}Gj(oerA+Wd(<_GI<&UH9OB^{kXS z01t>-;ni!hiD%|*A8XW=0#NcXy-W~LJDW|bVub~Lc5t_Ho8QPDxU^onk_CD?*~0O( zs7EestU2UMsldm9xIwr9c3x9X{pe`D$V}b@eK#|Y|7_{|PK-rBu?ZKRVXk?HI`CcE z;FWOp)*#L(#HER()zXeH3rB8$N9vB}zpShk=pF*mMg|QXv=m4MA~JRp5YuqPbOtF0 zmX6bh|LHvTbD-vr7-KDTf8##$zn0(J=CRkp%Cm-JKbH^R_pF)`;{Cw!ikRsJR-U%x zcX_=(_y?|MdD~Q=jB?^4NG2wlQs{OLH;0u{L8khVodMO3RtiulZ$o1oi3m{ z@ktIHOD@MJvjxGFO*5;+kM=8*}!HklE1mauA8B9+7*8tMikne^*MJ@gO8(av@bB2Pu!2 zFKT@=a_EQ9)a|@buQtxn0Hid-z?^UFd0BYO4GtW^!Ba%!E60u9U*)d5ke+`Ui#=7x z9&3W*7*Z8GO_5}AFq}#-GQdpawK`S}gI`AiyP2F^JkCZ<$d`zt%G3y7QG#K}>PKx8k4umLRJ!%^bVnN> zc??l0r0P|8rHHJ56A)}PWR#pb*!pSG@%iA6k8<&apl^nnN%xx3QZV7bC3S8KwOuGd zGivF{pUO)Q=;KQQ8dItNHbG$dnJuqZOh1Y4yOUl#Nh1^h#SJtQA1@bDlp3bNM0cg6 zZcd7vl#krZ?z`f{3IL@(elI%psH*LJW!x0Z9IS}n_@54c==@SX_Sm`aZq%}imbd~e z8yTVq6|otgN?~}Yjvayx@7vq|X87%FVE0#LWFPA460%f+s~;xlyCM%aJ10U<3KILmy zBegR*qDnr_!e!@**);%Xp88JxWc5w~s}+88&oMEd-Sv&1QU+K$6SHy9T1^c@<`C?k zwVilcE33yLKPKg}lA<&SfpI&dZYI?EhbBP|A0%`uk~)d);qkJQKt%=xi=dJ5b7hV1 aO!%=k#Z(~1&B#RK~zXfU6)O0TvZr`Zzj2SX70~S zT9b-M(ez9A z9QSphTCMhYR4NrQy&kn%jj>*@r)kQVB#B&%*hHZhAS31>(sFpHk`&l+KBzLv1%WLA zpdOVh%tIk45R2Q=#j%(GbfkzpsDwbl7*;sxMV}pypZ+a7e6?QLZHp!q0%Cp9 zz9`EwB^3)o7TjuIybO&BHc_QAK0f|`(#F{8R^vlg?0>)96^%kv6ou5*!2kE%XV}h* zmyr(ej*gD@_xH0trZY1$t)+qIucz<2Jwq#rj!H_2qlbSi_@bDQY}SMbMwLkJVR z0I~95i)=QVv%jX%Lz~%YS0GhoMnovoqog5na&q!DS6p<(+Ey_&HN{>bV{>px7Di>m zJNkLe-Va37fKqn30XENmh(yCa9Q`(3{wsg>tCXnVV$>dBqX~0&2;&lLy0sOdZuqhbh%M9ftE zG8LnD2pgFg+4c^a#J9jmiU+T!E3PCeUq!@w&3-$ZG>PM)}1d&hERi81FCtPcaeI}3)@=~|F~k|Oi_RMt>V z3}7{+6J#?2i8PW_BnAv&cdu7ZxcuI$bzjk%Bajgd28^0uq*r@Ip_E#$Xh^CU0Lf^{ zJl|f)&borXxtn>r-KHcY888S@F)10#)!hahsuTj4%0(DcUcEa%PF{4y{HXSOdW z1dMt_Q4)m`L@Mqz2KfMgq#9wpnqsRSA-b)B7(pQzQj&dltF>p}R746WwID;OyAiyA z82*AMxfL>OpEa+F?9dgu%8yh=+^iz6qt9b5)-B${v z0K01EG5t~X)j!&7A8K2khZd(S7$OnmXOknH>~&W>@@K}?jSP_J*hb2IeA?xAylqdd z0;$1INc4`gt7+90kA7WO7Dn7e`n1NVuXHClo3wJ|=WM|hORi|OTF4O7=*+p~neX%F zlCSCeqX35O)p3`9a|33}whu_jD3Q)kQ?jTvMtGR)&3Nx6O94qBzz}4Iy|Nm7Qrz=N zmF^Tw7J!a5a)va{l+`F5V2TZt#ml#!2m;{)gN(7fOQ4vefTEtJLByzZAt@lR+e;EL zp*Eu!t3gJt1St8kH{!!Lvd265{tdg16wE5s0SvaHe1wI6VAmJz*~JdfSt79C4}NZW zFqmT#KmJ+mWGA0@`M%%nNmC-A2ampxVaSGOx^p?^so@6OyI$=+4;kfW3zh;f(pUPP z{5L<<$)ET;heRMXP^3uNWTd}=^9f%n=Up+eZg&?|LD1X#fsT@(w3TUQ7IVlgCR8qpfp!vmkz);b55zd1%FOXhX7xC%< zs9DPBw3w<73FM7f=Aj?cD_f1ru9%*l#sLe|5un*A0H4+X&qxYEu5zM>Gs|e#CcVA? Y0kKub>62oJ9smFU07*qoM6N<$f&+BG{{R30 delta 1651 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 delta 1443 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 LNkvXXu0mjfYl|c% diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_yl.png index b42fbe9207038b996407da4f567fe709ae966052..54edd9e57e899aea92dae93d15ee9fb2c1cd60b3 100644 GIT binary patch delta 1172 zcmV;F1Z(??3XlqrXbQdn01mzZ>O!%=k#Z-0Vo5|nR7gv8mcc9RQ546ohc|}77{)7u zCo6k96iF%nkp&AI31wkrAtehtOD`6bou#7e6h%@Lh2-}>cfNPd-1*@fw{y-t=X}pO z_x^srafL$R_0=VbySZ`g?d_Qe*=#nK%l)pPxw$!PWHOT31+g78H8rIyE~N`0YZ+~S zZEa#|Y;1&;U9zCEHZ(LKw6wI~pg;jPON-#}kX0stl}O^10{p4~S$r}&=eoPQ>3(!{ z^x?r>Ub>;7p^&8v>L7FA5HPV)I4cD8_4Rm=uCA_*CJ^MHKG=l@b#QR-?afb{zoR3k za^s@YXJAkwKwBaZ*kZ*3F*K;Xy}k2)^G-C&%hlnlAmBLg^>v4ynyI-OR2pswbP0!O zL~Ofp9^}0}2YC*D+rZVPXN4F#J3Ftg!dM8=35g>HNmOD-N5}oW^H-JtnOIYKrJAw7 zzh4AYRw|Xq&d?OAJ^&?Jm24dzI+xGq>x8JMgjtbjU{ zog~0lN*EBc0sv}|%82uR3q3J^qCtg*?4qfe_*anHh>aD?_O?H>v$GIx}t*!az7YCvk z6xlT*c~UfQ*qZN$_{~Bj0ZJhYvMjBwtvG8GzJv(!WLMAG%*;&n{y-jo^8o@>ltls} zaf^H9b;6z0yIHKj%0)Ym7Mld`)tdkfS89{{uAi!~P;qSuBOSNtU()wBH06CnvCzJVzDG}2^otyK{ymucT ztM!uP_EvT`IXNjKAPFabr;TEglyK69jfHL`00u%Lz6Y%KW!38h5VE=Ho}S#))D)@$ zt;*m%Jv|-I2T-`Z8w8yyKCBFCch`SCgZB^6g#B3e_x;2atVHsFgDj{iVAn;G8?fTY zBUM7+;6H>`g4K{z)}LrtiTxJwNDu-Cw1iO_9OL8T@9%zqyyWG7r*uS87qTi)r2-b_ z!IwDbmCo=7{^t-!PYkCD2kP-L1bI04S*8H&yi@UkMi#-;*;zsgNs{IElR-v9&8z@w zIY2StRMlVbsEkMg-H>#3Rb}P*g`i!V6{!9qkq(e~CN?(Q%1Wq!JIYGC+))Jh^lZx? zBMwVT{>ea&Q^_ZP&{7W5#E(It+9Lu;N=DrUN=BtEU^Br^O$!S@{^azxc5H0y8nKCdVZL$4|fKX9)iCdKefO2%-Ei}Mzf2}3 zAKm3?=vVZP$9_S)<5t+n>q=Y-zg-nVamHCuS{q`9lBtCFC(xw);aEiNjRmX?-( zDE*Mx1*sl1H8o|LkgYcZ6653Jt*x!dGA0U7PtTUi0^~d_LXb0Bseo@Q7R#ZbAy+CK z_U-NM2s1M?R9~%DU%cpk_;B0o>}+WjK?E#g4naXXJ3Bok5hY8I%##FaEV-wrr{BFB zHT%n~cKdd48=gYQW+0?JO-VSYY;bUYkW843jg76ZhceASr%!J*UyMOu;OEZ=)~em% zrVde~Am2i8z7hzM#zDSzEd;YeX3M^TsS|f1j=sLWM~{9n+i$kg-``I@3QF4|pb?Lr zo}TB=I|E0SR!YS)i>sw8Ibh$u{XqhlA;Sz8KLxUZqO)Z8)~yh_ySvlsGAOry1Ix#c zn?8S@;hB~$LFWR!YeX(+;UFk41jpm%&9FsokhavRxH3h|p?U#EWyfn~NABILW1v9J zF)h*Ml$Q57cyxi~vuEuj`1o<+jna`m^ngP4Np(Tk}Z}+j?I`H;hQgIo4iOZGzHpFPQyncJ#}aoui|pZqG%hpgupLK^<9_GKk%!OQhLr zRy}tvUQqsI0E&PNX%g3cKa@Y!a8;z2rb6)S=;**$tcBDIu&eiMb#--r^xmNjlR;P=Qe+N=@Ioa__!;+2?!-^z>zL9HY>lkUn+u}`E5mQrB909_WpS%NR zf9g5`xLmv#UcKsHSy^EzM`uZnJvh{AwX{E5Knyr7SFaXdPbq%}kqfl-`t_n?Spqb? zUk$(Zo8i8AX(=J*D0b?RHJm>;#|3+8QoL%now;v6Rx$pjSA2 z|Go!?81d`=1g>8_!Nqgh{~FFoZKAZ zQ>OxN267ro#xV+dA?PM{ckUD#r!4RuaZO>9QIS9((w{id_?HtDr*>&+shmOW!v_+L z<1BxEGVvtz#Kgqp=74 h0cI$vDIT** Date: Mon, 22 Feb 2021 22:33:47 +0100 Subject: [PATCH 32/58] TERR GPWS button switch terr-on-nd off updating only not buttons state --- Models/FlightDeck/a320.flightdeck.xml | 10 +--- Models/Instruments/OHpanel/OHpanel.xml | 75 ++++++++------------------ 2 files changed, 22 insertions(+), 63 deletions(-) diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index 271f98ea..09bc8b6f 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -1446,10 +1446,6 @@ systems/electrical/bus/dc-ess 25 - - instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit - 0 - property-toggle @@ -1462,7 +1458,7 @@ systems/electrical/bus/dc-ess 25 - + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit 0 @@ -1509,10 +1505,6 @@ systems/electrical/bus/dc-ess 25 - - instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit - 0 - property-toggle diff --git a/Models/Instruments/OHpanel/OHpanel.xml b/Models/Instruments/OHpanel/OHpanel.xml index 054a93e5..7150ef0e 100644 --- a/Models/Instruments/OHpanel/OHpanel.xml +++ b/Models/Instruments/OHpanel/OHpanel.xml @@ -1700,50 +1700,10 @@ - - - instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit - 1 - - - controls/switches/terr_on_nd_l - 1 - - - - property-assign - controls/switches/terr_on_nd_l - 0 - - - - - - instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit - 1 - - - controls/switches/terr_on_nd_r - 1 - - - - property-assign - controls/switches/terr_on_nd_r - 0 - - - - - - instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit - 1 - - - instrumentation/efis/inputs/terr - 1 - - + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 1 + property-assign instrumentation/efis/inputs/terr @@ -1751,21 +1711,28 @@ - - - instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit - 1 - - - instrumentation/efis[1]/inputs/terr - 1 - - + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 1 + property-assign instrumentation/efis[1]/inputs/terr 0 + + + + instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit + 0 + + + nasal + + nasal From a456722d60506e95d878519f688da75433fe05bd Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Feb 2021 22:34:08 +0100 Subject: [PATCH 33/58] remove old color tiles --- .../ND/canvas/res/terrain/tile_cl.png | Bin 1843 -> 0 bytes .../ND/canvas/res/terrain/tile_gh.png | Bin 2069 -> 0 bytes .../ND/canvas/res/terrain/tile_gs.png | Bin 182 -> 0 bytes .../ND/canvas/res/terrain/tile_lg.png | Bin 1716 -> 0 bytes .../ND/canvas/res/terrain/tile_lm.png | Bin 3173 -> 0 bytes .../ND/canvas/res/terrain/tile_rh.png | Bin 2135 -> 0 bytes .../ND/canvas/res/terrain/tile_rl.png | Bin 3183 -> 0 bytes .../ND/canvas/res/terrain/tile_rs.png | Bin 182 -> 0 bytes .../ND/canvas/res/terrain/tile_yh.png | Bin 2190 -> 0 bytes .../ND/canvas/res/terrain/tile_yl.png | Bin 2097 -> 0 bytes .../ND/canvas/res/terrain/tile_ys.png | Bin 181 -> 0 bytes 11 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_cl.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_gh.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_gs.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_lg.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_lm.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_rh.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_rl.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_rs.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_yh.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_yl.png delete mode 100644 Models/Instruments/ND/canvas/res/terrain/tile_ys.png diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_cl.png b/Models/Instruments/ND/canvas/res/terrain/tile_cl.png deleted file mode 100644 index 1a3a3b66ebdcdefe67defe5a74394779eca4f733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1843 zcmV-32h8}1P)<{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx3u}MThR7gur*XfH_WfTYS>$`*C3w<+CGJ#|u6=Igf;9yyqlVz)w zW@2S#s7-09m|KdeX(nztndUMX6)n<26wyv*8|}+q)92jt^H-OL%QMeC%lCZG^8BWW z3&zEm(fPjUl3bTw5m#LocRUhF}Nq@K9(mwO_&%LUzP%s`eJf_ZYExtier0o z(>Eig-5l56nX7+ReQMfg#E211Dwk+aPh2=5MfuqHN*w+^PW=E^`m@$7ps`~Lh| zu}&RGi=fPYFom51%HQn|$ClR<7R8}&W8Lxm3bz1+71!UDI*T^N@?CN7$^^dlXzc$y zMGt)wyFQ4O2V&NOgbxkL75ifAo3ZDU*!yV$f`D%b*jY6cLuca1kFo!Yc;aA!hQR8Z z(WKGcAH~Z*$M9dV^{rU2CY{ZHGMB9Idi5Zezt~!*;%@>rZ4UDL=T;16J#UVw0H{qns;fA&Udc zn#Q@D6SZpN4O5K?){7!s={8kM9s&;J(h>)J=d_xv;C091*e@Nm!{24p7#9a}NejZV zp<{#OMH_QEXlHXzC@PyU2P_K0>bmi6SL;S^%iHl^Gx>Wy&NgO?C^u!Ag1zt^N|h{{ z4#eiJ$O?ACflq`>MOOSNbjzP(dz-9d@h)7O&U7fc)Mz(+*^_(}S4_KB+S94!um%BVWyM=S)jAe@+!XNQim)+Z0g4YsN-N!r8ku;B7W{Ic zAvE&?>$BwWQ+aBewECdKyF)5mmIFCc&e4PngGdFjI2=B`6kV_cjASw zJ392Cqf;Duh;cxdKgd|rVM?^h)l%`w&nIrC4zzA6h{ENx3Mt2StB_M?D0P?~+nWs} zRTvf`-{Ka%Xt+^zI;pe_a(s~KxFLsP6>OoKz5=D7_OfKpX2(%rOSrIGG^rTXCX=uB zQtORm0}ThLQ%!25NSisYz1GYL{&k%3EPHe+G1?Htu1?az?UoQ^tl*Otqx?Ck5`a>Y zIA8=lkl7FJZjzrG$*yGNXmT<6Mw6QT|I=X4p9yOq)qQMyph2uYk(VT?MJ8ulQY5@# zxQQ)qBqE{Mh=xRWk%LjfsycYG;TWr?ssU(*R&_W;gZ$Oi&a@LtZmcQOn}lylN+1+O z{aJGw71W9@NUI3Bv0w*QG6Y?5lf>0Jrpk^^OiJ4OtqKLKbVCQZ$f=(I?q+cq^3^WIQV~_5@Fa9-y2)^@sXg$e!D>zCumFg>C*AlU zOloeL`q`lGTng(U@a8PCktQ zIW)lAe;ZPo18N@5sGvoS8Qy+fR04eErge}itk;}uH|Kt@NHu=t2I<;}ro+NzkztqP zx-~qdML-a|7E3%iAtqdJc`6G@TCqXRktMRyXIBpVNm~AtmUo#W-&GMMyqv+#v=G&f hRKcorE4yPx{|kcP_(ea1YZ?Fm002ovPDHLkV1n(Lb|C-& diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_gh.png b/Models/Instruments/ND/canvas/res/terrain/tile_gh.png deleted file mode 100644 index ef5f7fa1b571cb0eef533fc4d1d2f6d522550df3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2069 zcmV+w2N2bZe?^J zG%hhNHDpIvQUCx4lSxEDR7gub*IDeORS^a7e(X-Vlats#*q{G9t+8&ZZ8CsNjw=5L6kNnM@Q_Qh)BqPApKJNk&@Gaio3 z>hQ(-W2w7SkM!z?Q$OsSK9YJv>UF*BwOPMD<#R&nkgWDtjKF86Zb?0n`giK7)IU?d zPJKT0%0a;F8LphND{D*7Pu-BZD|K(`f&Tx;9qj(p_fuaIePx(kyq(;a$Ht zt0NbKgFkne|D^twx+nF;jPNH2bA8s|?i?S@>bk|C8%22Y`DFZcWb?b!Z&SZ|X4&}2 z6^JWRC#UufT1KL~QeW%e|B!kt^fptI>$6LklUh}|zd7}R)QwFMC6Oy} z8Zft|)TX%;x3|BK$$CqcFPe|9AUhh9f9Wmw6jI=0+kp&uoG|AMgAY@_qLC8d>C}H) zM!^6i6&%~Ldj4X_VDW+NpRHNHv^{-kqY=Xv9)piZ-qistbL>`O)D1%e>nxVLGxe{I z#4w;ClT_QYK79Cic>0uvNeP816-FWkLz4ZkslPw#W9V_PGwV~cJZwIzGctJN6UTkH zN&98{5_K%=7YALE<(2cH7MOJMArD2VC6!BhPmH6m7F zFf4zg9lOb&``o7}DNXbyMCX3=2R_G<4f0#-F;0 z(OIb;k>!SYy`W3o&MjH*ndRpBKuRa@<>8}8Py(_~w4$5)W4#`sR5l7@T3|+PDk$WV zkp^tdOJo4T>I3?J4n8}}tLAGR!7{G3=G_fZQ$W5vaKp-QtEb~enC0^Z%9(%TNm#%7 zn-$hsZI7Ll)S58ncWP;9_>?Phe8nM@5I_TysPI7v1jKMdFNcGK+1PmrWA&7*tmTdY zJWM@`+D;*cjyW|=3kaYoK#A2OnqfRcfOE{_-!h59cZM*VS|wUhOeCA-0W3YKI{61n z%EF{kBC7J8owsQ#OYYzid-(-2xr#B3HJ;)u{<=^YiSr!iQI!jQHUaXGJh#>~X3?A3#+;62uWRkd6!j0#Xej!;dM5X?4JhFle=?$o*NE9A6h zB2a+;*Q|J|SS@q8x>nt4TnrGwwf+WSZhf{TP(p{$Cv*!vgCvL&3{fIEPAcfuX@ueC z`?>=`37MWmQ5$tBy=t27x)-=W+$@a2rI;PzTo{SwLHok8Zb&4ZQGe7WslrQB>jd+b z?x+5W@JUWd=(!V7e$k7O2>}b}(t7nsLf>X()xaeBxvow_pfK(rvZ)&e!H-#BBDmim z%I}VooT*`Um>`-0TXTfTV!oI%+hnt~Cl9Oej9CPxxx^}Flu2b?N#(?zU{+dYrZME+ zJ>|?QXPJA5VlZ3GLy>5PK*uT-i_Z~8RSIC5f;o+JI)Nqz-=cS96LvfOFH=#~64`FI*@!cY=LXO7Fio4EV_ZSn1 zV2(hMmhn)(rAQ9>c%zU%>8+Zw?drxmjyE0eJHz1q<_(CuybXCL@~m=A6ou&u?|I*T zheCkBj!-xJEs~sQu8A*~f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5g?OIJY5_^ zJiOnYHRNSb5MVG|V(=jTjgTe~DWM4f$%!&8 diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_lg.png b/Models/Instruments/ND/canvas/res/terrain/tile_lg.png deleted file mode 100644 index 5820d7d8c296193c7d7e1b25656caf71af6cec13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 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 V;k(cstFiz9002ovPDHLkV1jwN7-9eb diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_rs.png b/Models/Instruments/ND/canvas/res/terrain/tile_rs.png deleted file mode 100644 index 1c97e713981806f741680e42daa500fd978f41fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1SGer&Y23NSkfJR9T^xl_H+M9WCij$3p^r= z85sBuf-vKbiP>*~f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5g?OIJY5_^ zJiOnYHRNSb5MVHz^QWiYy2Fv#+`#nZz0$P$1)L_0Y8O~$IS6Mk`GPplZoc8>T%~qr TeJevFP(OpGtDnm{r-UW|@!m7! diff --git a/Models/Instruments/ND/canvas/res/terrain/tile_yh.png b/Models/Instruments/ND/canvas/res/terrain/tile_yh.png deleted file mode 100644 index ef1d807392c304d5a880fad0ed3372d002a23471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2190 zcmV;92yyp`P)<{97<5HgbW?9;ba!ELWdLwtX>N2bZe?^J zG%hhNHDpIvQUCx53`s;mR7gub*J;q!Qy2#D|HtR~VB9l4nlXckF*2GLi8M&1g~VH; zq>_;Kq}>{_l*qmn(n5P8Dw3sD5s?-N*^2B8pZxAQjhW|t=RE)CoO56IbzS#;&cAAC z8Yec1E}dfVfVl1EcwkCAcz->TH}jKV_K54Q&cK#ma$$@c9kXV}d+)|4 zpTy^%$HyPVyceTqk9zY{>ut}8s&B8{qJQ5o=yOGM>sp^SE#BW0yLad8ojYUQ+RSO{ z{<2FH-=xcROqpcZCa&NDRC5vMIOYz$Bc=w(B`shQ^ zw@(e;Q<_EhOY1oJ{`(B`=U?&DPqF#^m@_Mcho)MzAXco(9ATfou#RpN;mzl%C&I6? z`Rc3q^2^w>=g>4CxdJicnYjL%IHzTxMWTSdvMitP+ZW$`7oUBW^tZ_hlaXO}f^B}>MuR_6HmXXBv<636tXhj%7=eB1$4x;xu4xQ}Ii4JNE3J z{${hb=S9;KYQBPOYfS#|LoUImkisw&2b$ThcT_izPlGe%(9a|@Z$(=i-e>%2}RxQ)hi~x-omhc#SJaYRj8Nf8#nwfRO(7@V@yNV5OA?2Ep*bv2<~4+ETZLzYMhUXn#E7`U7Q z8Pk?I+z(~Ne1#}6e*QUr{Vn$IPhVpEhM`HOWt<~`c*Z^)Z>3-evC-FG=UVlvc)>NT z7*a5V4;z$UtGn-v1@p4>Xs8jf3WH(!_1Dr7tkV6G^bGympO*{ROhL$1BcZk>ECZh~ zuogKPgdwf%b$K@B77dXWfSPFNwoHs~zs)8_XQg`S#nEtb?f9d!)UDK1TDFL@Th$Y2GXtFK~e{ zsPr|(YzzCsNHhamU|BaLlFq0<>XKC9rP4aV6jDF+E5eJMlF)MtQJ(0<$b=v*piAr3 zlF+wVSv4?;ey*$25Gah>h-~VHLGa@&a3av(>EOBTBiktiDn42tx_== z`bt#_;4}rZ9O-ldO$^E-kP;v}kDbb9I-!dpIR#i8kR2LJ;1djWNF#~bboRr6w~831 z`e=y4FrTgY62Nk#+tIzk?E?5yi#Ra2Lv)H%14#$ig`2@ zw;t{yhI^1FlyEcBH1!B(wTl+O{aQ}B#FmQ{`&i|+#cbe`3JzPDKxPF8bfvaM7S?x( zlbs!zSeAUEC6ht!5P6QzavfB>1W-&UQcP}*z{$ghRPK~+mSvi|re7=kGLn8JCUVKh zFnlSn`>I>3yQ>>4Bd{zDcmy&m`Kp*SF)1=+sTKV~G0Mz68Bk{{%gM6REBUARxEyQ3 zP!dJLyMw!lyN{Q9nj1PFQ&ploZ5OwA*$4)^TotmLzWY8ynMPNJHmJ}7uQvqh$N2bZe?^J zG%hhNHDpIvQUCx4uSrBfR7gub*XL_iXBYbu=c%nDFLpOiYN; z5HpA)!~t$_prSaz4qBCBsfy!+6LFy^xIUGDp8LM8 z`?|+-OnUb0`OW96d-v|vg9i_uG->?o*(F=Hl<(SA`NIztt*s>!CgcwqG^kgvUOjsB z=-02GbzC<0>C?w^>#<|UmXwUIuAWd?Sy)z9FnaW8uR3+=)VXtK&XfNA`}5wdTeq%V zyY}wgd*Z}=eh(k6dGVq-muvm!pO%v+r$QYyY7}>U`}Y0z^EGnh$e}}r4j(?;6Yho$ z8&*?Ov~gqkv12vo&efhjKW)>d@}i=Aw0O25VE}o|m@yoE_uV*je*CfG&p#Xf`)_tG z*9L}JV`H&B2n`uBB$FwaKD}t>%t;Lm#T6BWti%Lw#*E_q`>UTmZGQ8n<sGM+h8>(#AW z_1m_U^FCt42<`~Q!?kO54<0n$xKaPpPZfoQ`4|YAn2FzFg#Yqo%kkqi%a>;sFU~Am zmI1k7LFwGNrRC*?Lb00}HUM(Dxw+i@SFc*wV(AqaVP&%g_AgzUnK!R=+O(9JSF*q= zxq7wk`SUbV^nd%Uk{XjIr#UPw9WV0*1^I*`*T8`T!2qWI-+wnfd)9p6!nBr_N#n+i z^GaPvQh?E)_W=V2$g~A-zyCfZS-Up->#vnjRMaC2QdLzGM9KvWnO7sc5KUyF{NC*J~?`P$5bEHx7VUt2jMQ_m|`i2)5 z5`xBtBnJ;x-@aXc{d%2dP=wmZ2AiX%6F-(?!xty<-H;ld1sC<#V;cIeO{iC$x=%!#H(d1s^c_U)?@pDG}ieijN# zLQ9O|k;|WduGp~Qd-FoA{`FVmlPAsh?lp*pbgXEF7JiTtNuw-FnXFcn1%%;+yGtmqu`DG@siTSKe2Z(G19e9v)@ zSt1&D@*-GPRp`%;XRfN5K(6Yn?$= z6rCE8YB1i~Lt*!rW-e>|62250DUh;=cVMvQh}`PX6J~sc;>rO$Lsnnky5ncW`I88? zh(xKwzqbbv9 zV1$jRt?`n7BVCdoK5X=N>Qt?qBhE$~?c2BS(xnU6Xc65a!qRhJ4nw8X3d#84&4p#6 zx&iosmxV}ItjKDh49!YQs%^I|nh9IaDN>0tB=f8_l?LXQgDoaDv`8izhg%wJrOqrR4H;ua4Ib22Nh${ z)6-f3Cy+mnr|N zUXxx|ItA$KCok$)buzOLpVnU9jUg=_AffDSC4mowThq%C116b2OV zdd-@wF4H%XOghEN0E}LNp)u7049^{!RC1tc7iX1|rX0Y6Og b^78%%W*?B2as2*~f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP7ndZsDv5g?O|JzX3_ zJiOnYH56n};9)TIxw?P3mIJfB!Bf5JbMI;vaGEr#U0|8zAe_PE3*tPxd5)FuZe@<^ S@0%V#?F^o-elF{r5}E+V)-*@} From 4db7d57ffa518cbe2059c4f84514b9003a7cfada Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Feb 2021 22:34:20 +0100 Subject: [PATCH 34/58] update cyan tile --- .../ND/canvas/res/terrainv2/tile_cl.png | Bin 1479 -> 1562 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Models/Instruments/ND/canvas/res/terrainv2/tile_cl.png b/Models/Instruments/ND/canvas/res/terrainv2/tile_cl.png index ad1f52a7247c9a04a94af25502f96bf294d2eda0..91e1e0ff90d62219db2bd089b681d2df98c0fac9 100644 GIT binary patch delta 1441 zcmV;S1z!5c3z`g&XbQUk01mqW$N1DXk#Z-0Y)M2xR7gvGmrqPwRTRb_^O#{6U1>PbU|WbnyT^7!nC+>VH0Ixp;8yv8V#vU ztc@lvOw`bgao3nw7>40byY_ePhqqH|{1%t0R0qLd1s_TBs&%#T_`(}i!{EaIs#() zSx*^Q)d>b@Oje{c)}DZ?Um_9#NTpJLPrgy;pI+Yi)k^ZIt1_ZT01(?g?1zH_<$z*s zf2=vU_`2a<3b-o8geLqp~iC~i)>UWwa18S?RU_FX0c~-Jn8Y_g|O=)3{u^H z0>pA6<9=%ECE4RuFI+1dSqS@QP(lI(05PyFyW$4<>smkBJaAF-a>=BB8lS8Ws6tAs zyg-+LnpWB|R-Yei5DIY3r8fX(Q9xFKFG{SyLjvX?W|e>nHmNRv(-?>;s)>N=vZ|B( ztU5ZSynp~`yLhc75x|2&&^e-G6{D`G#REt#fj>G(R&R8w+d*17#qx^;;sK=!kNlT4(noCYaw z^FOa^^oY5%0gFHiS;dA|>i7PB?5CTAdPZdc zel*m?WFfUWxs@v(%L4|BT%4Fuw<2w&`OC_~xy12&{E0b{@-UP?3h_Q58@7)1^z`Tw zUJcL#8XHBZmlU`G4mpOp#Ny5 z?jA9gxEG{}!c}R`v%C1$csHot>s!L!3-Us&$<_}-Fx$Z?q8%nT> v0od4wXVCa3O<4kf0PwF2e{NZ)AovH%B<2@gRQ$~h00000NkvXXu0mjfR&c^u delta 1357 zcmV-T1+w~@495$QXbQXl01mtXmArCEk#Z-08A(JzR7gv0mrZEgRTRZ_bg`ZBGa#mjl;p8N6Mf4*X^R_pi^e;hpH)AxI|S{)b|Ftee5 zp`k*dFgQ2}DVNKva1@9PaMpZ2kHVVEKuEUX;bEmn37^sgsmf7N5tSJLc70BW_`p+|iAtas0Od3i^FiTE)9%yEwRlR-o=Ag)6|R9YUgs1iBZQT8vs zym-uyz31)DMd|nxvArB{_&YKym5NHBk_OKzWTp&?rXyYl*@)_aCv$oHCu?u{_?D}u zVoK0q)si*Jm@$W~dHn_Np7lnfA+aBr0V7hKtnlCBX8R(60FKln5%o?z+U>S~o%H;s z-@EPIZdcE*ADSId5FUn6x6#p2E>}HJ69Ev76WN(qDwSpr|1*EW7dQUa3lfZh+Zgtn zX0u5;cSRP%(LkNT6!kK|QS0@3?WUcv=_@)!x_v@G9H@O9xBg4(3h&ARbQ zw?l3t-=bjE^M_zoCN`d@dRys}(p_%rZtbseq5up4Gl(OrI#7Q5hPNl@!i~a~*)=}V zM5satD4ng=Bu42>2?KvPAQE6Nx59u~M2Lz|A{i197hw)Kt3)cqq}qUg%oBi9R1*Q! zWmPBTv+C*;N(KnfamkIAFhC9tLHCG{Rf@XemJSfvf^>C=tSM0nwr~qbQpIIbb$GHS zA_JJ7{32D9o(>1lIZ8ZpGEo^y0l=04(GfAI1e_zLHgJ^alieFoC@E|U`9ibOh}W(L z>2D(+CRT0Lj}^bfc$j^EP=i#VztlCK?LgN5MY;iyQbbq_?%D4*p7wY+eNY<`uItybOPwQL+H_lW z-s&;VRRiU;RbvPW&(&tn_@2|g@vg6|#;22zW&v0eQQE>i-g?P@r?=uOL{WtxJR}I? zvvO&@5r>|O?*l7-s=5j%Hw3-^@#2Xw%b!{MN|37!034_4s+wN3$Zzgl_)$|U7L~F$ zDj)JnV4L*+0)uL46bQNc#?>1@wjT6?Qvyh%;fCwgqBXPko>tl>ppc?0ZY-o-mT}8{ zUO3=`5Btyz-);eaVtIF@#clK^YK+UH~m8jVeTCorc7NF7_`mFb)PxywZqW^sFt`q{UE(I^3|Ph z`0cOx#Lbr_G7tqxj9doi50YX+bS?gBr7w54*@MxQHmeJN``16N+Qq4A=2cCU4v$B?8xie4Vv!ujC%`2jBOjM}Aj`t6rJ8FYY5I@UOfHst1l>$iP97(~GUTKO#00zLnGW^_%PG Date: Mon, 22 Feb 2021 22:34:57 +0100 Subject: [PATCH 35/58] terr-on-nd onyl id not plan --- Models/Instruments/ND/canvas/style.nas | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index b48e0f68..fffe293d 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -94,7 +94,7 @@ canvas.NDStyles["Airbus"] = { predicate: func(nd, layer) { #print("TERRAIN TOGGLE: " ~ nd.get_switch("toggle_terrain")); var visible = nd.get_switch("toggle_terrain") and - nd.get_switch("toggle_display_mode") == "MAP" and (nd.rangeNm() <= 40) 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) { layer.update(); @@ -1988,7 +1988,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) ( nd.get_switch("toggle_terrain") and - nd.get_switch("toggle_display_mode") == "MAP" and (nd.rangeNm() <= 40) 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)) ), is_true: func(nd){ if (terrain_maxalt.getValue() != -9999) { From e2c5d2ac225adee3fc7432705efef4b9abc89cf1 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 22 Feb 2021 23:58:45 +0100 Subject: [PATCH 36/58] fix for vor if not set (rotation before setvisible) --- Models/Instruments/ND/canvas/framework/navdisplay.nas | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 4213948b..f8c72c65 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -111,14 +111,8 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update setRotation: func(rad) { var deg = 0; var gap = 0; - #if (me.last_rot_deg == nil) { - # me.reset(); - # gap = 0.3; - #} else { - gap = math.abs(rad - me.req_rot_rad); - #} - if (gap>0.001) { - #else if (gap>0.1 and me.duration == 0) me.reset(); # detect VOR freq changed + 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; deg = rad * 57.29578; @@ -126,6 +120,7 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update me.req_rot_deg = deg; me.duration = 0; if (gap>0.2) { + 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; From 8adc2f38689319cd1bd0034e67c32b96c08aeecc Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Tue, 23 Feb 2021 20:50:37 +0100 Subject: [PATCH 37/58] fix for trafficGroup on efis 0 missing --- Models/Instruments/ND/canvas/ND.nas | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 543b0722..e09a1fb0 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -190,6 +190,7 @@ var canvas_ND_1 = { me.NDCpt.attitude_heading_setting = -1; me.NDCpt.adirs_property = props.globals.getNode("/instrumentation/efis[0]/nd/ir-1",1); me.NDCpt.newMFD(canvas_group); + me.NDCpt.change_phase = 0; me.NDCpt.update(); return m; @@ -213,6 +214,7 @@ var canvas_ND_2 = { me.NDFo.attitude_heading_setting = 1; me.NDFo.adirs_property = props.globals.getNode("/instrumentation/efis[1]/nd/ir-2",1); me.NDFo.newMFD(canvas_group); + me.NDCpt.change_phase = 0; me.NDFo.update(); return m; @@ -357,7 +359,7 @@ setlistener("sim/signals/fdm-initialized", func { }, 1, 0); setlistener("/instrumentation/tcas/inputs/mode", func() { - if (getprop("/instrumentation/efis[1]/nd/canvas-display-mode") != "PLAN") { + if (getprop("/instrumentation/efis[0]/nd/canvas-display-mode") != "PLAN") { canvas_nd.ND_1.NDCpt.trafficGroup.setVisible(pts.Instrumentation.TCAS.Inputs.mode.getValue() >= 2 ? 1 : 0); } if (getprop("/instrumentation/efis[1]/nd/canvas-display-mode") != "PLAN") { From f74281235c420d1095cef8308dbd66d368ab0aad Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Tue, 23 Feb 2021 23:17:20 +0100 Subject: [PATCH 38/58] out from func --- .../ND/canvas/framework/navdisplay.nas | 140 +++++++++--------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index f8c72c65..15b74107 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -13,6 +13,75 @@ var assert_m = canvas.assert_m; var wxr_live_tree = "/instrumentation/wxr"; var adirs_3 = props.globals.getNode("/instrumentation/efis[0]/nd/ir-3", 1); +var easeArrow = { + new: func(elem) { + var m = {parents: [easeArrow]}; + m.req_rot_rad = 0; + m.req_rot_deg = 0; + m.last_rot_deg = nil; + m.last_rot_rad = 0; + m.element = elem; + m.time = 0; + m.duration = 0; + m.startval = 0; + m.diffval = 0; + return m; + }, + setVisible: func(v) { + if (v == 1 and me.last_rot_deg == nil) me.reset(); + me.element.setVisible(v); + }, + hide: func { + me.element.hide(); + }, + reset: func { + me.last_rot_deg = 360 - getprop("orientation/heading-deg"); + me.last_rot_rad = me.last_rot_deg * D2R; + me.duration = 0; + print("VOR reset"); + }, + setRotation: func(rad) { + var deg = 0; + var gap = 0; + 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; + 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.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 + } + if (me.duration < 2) { + me.last_rot_rad = rad; + me.last_rot_deg = deg; + me.element.setRotation(rad); + me.duration = 0; + } + } + if (me.duration > 0) { + var tx = me.time / me.duration; + #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.time += 1; + if (tx>=1) me.duration = 0; + } + + } +}; + canvas.NavDisplay.set_switch = func(s, v) { var switch = me.efis_switches[s]; if(switch == nil) return nil; @@ -81,75 +150,6 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update "staToL","staFromL","staToR","staFromR"] ) me.symbols[element] = me.nd.getElementById(element).updateCenter(); - var easeArrow = { - new: func(elem) { - var m = {parents: [easeArrow]}; - m.req_rot_rad = 0; - m.req_rot_deg = 0; - m.last_rot_deg = nil; - m.last_rot_rad = 0; - m.element = elem; - m.time = 0; - m.duration = 0; - m.startval = 0; - m.diffval = 0; - return m; - }, - setVisible: func(v) { - if (v == 1 and me.last_rot_deg == nil) me.reset(); - me.element.setVisible(v); - }, - hide: func { - me.element.hide(); - }, - reset: func { - me.last_rot_deg = 360 - getprop("orientation/heading-deg"); - me.last_rot_rad = me.last_rot_deg * D2R; - me.duration = 0; - print("VOR reset"); - }, - setRotation: func(rad) { - var deg = 0; - var gap = 0; - 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; - 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.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 - } - if (me.duration < 2) { - me.last_rot_rad = rad; - me.last_rot_deg = deg; - me.element.setRotation(rad); - me.duration = 0; - } - } - if (me.duration > 0) { - var tx = me.time / me.duration; - #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.time += 1; - if (tx>=1) me.duration = 0; - } - - } - }; - foreach(var element; ["staArrowL2","staArrowR2","staArrowL","staArrowR"] ) me.symbols[element] = easeArrow.new( me.nd.getElementById(element).updateCenter() ); @@ -698,7 +698,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec if (contains(feature.impl, "common")) feature.impl.common(me); # conditional stuff if(!contains(feature.impl, "predicate")) continue; # no conditional stuff - if ( var result=feature.impl.predicate(me) ) + if ( var result = feature.impl.predicate(me) ) feature.impl.is_true(me, result); # pass the result to the predicate else feature.impl.is_false( me, result ); # pass the result to the predicate From 42adeb85ed9da18e2f850b475900969394c4fa1b Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Tue, 23 Feb 2021 23:18:21 +0100 Subject: [PATCH 39/58] Display range/mode change msg on ND --- Models/Instruments/ND/canvas/ND.nas | 37 ++++++++++++++++++- Models/Instruments/ND/canvas/res/airbusND.svg | 24 +++++++++--- Models/Instruments/ND/canvas/style.nas | 13 ++++++- 3 files changed, 67 insertions(+), 7 deletions(-) diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index e09a1fb0..5a224a62 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -180,6 +180,16 @@ var canvas_nd_base = { }, }; +var ND_change_timer_fn = func { + me.change_phase += 1; + if (me.change_phase>2) { # phase 3 + me.change_timer.stop(); + me.change_phase = 0; + } else { + me.map.setVisible(1); # phase 2 + } +}; + var canvas_ND_1 = { new: func(canvas_group) { var m = {parents: [canvas_ND_1, canvas_nd_base]}; @@ -191,6 +201,7 @@ var canvas_ND_1 = { me.NDCpt.adirs_property = props.globals.getNode("/instrumentation/efis[0]/nd/ir-1",1); me.NDCpt.newMFD(canvas_group); me.NDCpt.change_phase = 0; + me.NDCpt.change_timer = maketimer(0.4,me.NDCpt,ND_change_timer_fn); me.NDCpt.update(); return m; @@ -214,7 +225,8 @@ var canvas_ND_2 = { me.NDFo.attitude_heading_setting = 1; me.NDFo.adirs_property = props.globals.getNode("/instrumentation/efis[1]/nd/ir-2",1); me.NDFo.newMFD(canvas_group); - me.NDCpt.change_phase = 0; + me.NDFo.change_phase = 0; + me.NDFo.change_timer = maketimer(0.4,me.NDFo,ND_change_timer_fn); me.NDFo.update(); return m; @@ -419,6 +431,29 @@ for (i = 0; i < 2; i = i + 1 ) { }); } +var startChangePhase = func(nd,txt) { + nd.change_timer.stop(); + nd.map.setVisible(0); + nd.symbols.nd_msg_change.setText(txt); + nd.change_phase = 1; + nd.change_timer.start(); +} + +setlistener("/instrumentation/efis[0]/nd/display-mode", func { + startChangePhase(canvas_nd.ND_1.NDCpt,"MODE CHANGE"); +},0,0); + +setlistener("/instrumentation/efis[0]/inputs/range-nm", func { + startChangePhase(canvas_nd.ND_1.NDCpt,"RANGE CHANGE"); +},0,0); +setlistener("/instrumentation/efis[1]/nd/display-mode", func { + startChangePhase(canvas_nd.ND_2.NDFo,"MODE CHANGE"); +},0,0); + +setlistener("/instrumentation/efis[1]/inputs/range-nm", func { + startChangePhase(canvas_nd.ND_2.NDFo,"RANGE CHANGE"); +},0,0); + #setlistener("/instrumentation/efis[0]/nd/terrain-on-nd", func{ # var terr_on_hd = getprop("instrumentation/efis[0]/nd/terrain-on-nd"); # var alpha = 1; diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index 415914ef..da220fa1 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -27,12 +27,12 @@ id="namedview102" showgrid="false" inkscape:zoom="0.77702762" - inkscape:cx="373.9808" - inkscape:cy="476.40075" + inkscape:cx="212.87887" + inkscape:cy="628.74339" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="layer3" + inkscape:current-layer="svg5180" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true" @@ -77,7 +77,10 @@ id="guide3115" />image/svg+xmlGijs de RooyMAP NOT AVAIL + style="font-size:53.3333px;line-height:1.25;fill:#ff0000">MAP NOT AVAILRANGE CHANGE diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index fffe293d..71aa55fd 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -2002,7 +2002,18 @@ canvas.NDStyles["Airbus"] = { nd.symbols.terrGroup.hide(); } } - } + }, + { + id: "nd_msg_change", + impl: { + init: func(nd, symbol), + common: func(nd) { + var chk = (nd.change_phase != 0); + if (chk) nd.symbols.nd_msg_change.show(); + else nd.symbols.nd_msg_change.hide(); + } + } + } ], # end of vector with features }; From ec429b8c8383d97fc56ec7a50008ca7467940ccb Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Wed, 24 Feb 2021 23:00:46 +0100 Subject: [PATCH 40/58] detection for GPWS alert modes --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 31 +++++++------------ Nasal/Libraries/libraries.nas | 16 ++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 601e692c..af32eaaf 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -1,7 +1,13 @@ # See: http://wiki.flightgear.org/MapStructure # Class things: +## Airbus Terrain on ND by InuYaksa*2021 +## EGPWS device - Applicable to: MSN 0112 +## Ident.: DSC-31-45-00009586.0012001 / 22 MAY 12 +## Ident.: DSC-31-45-00009586.0009001 / 08 AUG 13 + ## inspired from work on 787-family - thanks a lots +## and a great help from legoboyvdlp var name = 'TERRAIN'; var parents = [DotSym]; @@ -13,13 +19,13 @@ 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_alert = props.globals.initNode("/instrumentation/efis[0]/nd/terrain-on-nd/alert", 0,"INT"); +var terrain_alert = props.globals.getNode("/instrumentation/mk-viii/outputs/alert-mode"); var tile_list = [ - nil,"tile_gl.png","tile_gh.png","tile_al.png","tile_ah.png","tile_rh.png", # 0-5 low alt - imho real ND displays likely in amber color than yellow one + nil,"tile_gl.png","tile_gh.png","tile_al.png","tile_ah.png","tile_rh.png", # 0-5 low alt - imho real ND displays as amber-ish color than yellow one "tile_gl.png","tile_gh.png","tile_gh.png","tile_gs.png", # 6-9 hi alt - "tile_ml.png","tile_cl.png", # 10 magenta - 11 cyan (water) - "tile_as.png","tile_rs.png" # 12-13 alert + "tile_ml.png","tile_cl.png", # 10 magenta - 11 cyan-ish/blue (water) + "tile_as.png","tile_rs.png" # 12-13 alert - solid colors ]; var is_terrain = 0; @@ -270,7 +276,7 @@ var init = func { setlistener("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", func{ # detect GPWS switch status me.onfailure = getprop("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit"); - },0,0); + },1,0); }; @@ -387,17 +393,4 @@ var draw = func { } -}; - -## TODO - it doesnt work. listeners seem not to have trigged -#setlistener("instrumentation/mk-viii/outputs/discretes/gpws-warning", func { #warning - TERRAIN red - solid red -# me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning") ) ? 2 : 0 ); -# print("Terrain warning:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning")); -# print( me.terrain_alert.getValue() ); -#}); - -#setlistener("instrumentation/mk-viii/outputs/discretes/gpws-alert", func { #caution - TERRAIN amber - solid yellow -# me.terrain_alert.setValue( (getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert") ) ? 1 : 0 ); -# print("Terrain alert:" ~ getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert")); -# print( me.terrain_alert.getValue() ); -#}); \ No newline at end of file +}; \ No newline at end of file diff --git a/Nasal/Libraries/libraries.nas b/Nasal/Libraries/libraries.nas index f632f7d0..0e15b916 100644 --- a/Nasal/Libraries/libraries.nas +++ b/Nasal/Libraries/libraries.nas @@ -202,10 +202,12 @@ var systemsLoop = func(notification) { # GPWS var GPWS = { inhibitNode: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit"), + tatcfInhibit: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit"), volume: props.globals.getNode("/instrumentation/mk-viii/speaker/volume"), flapAllOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override"), flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override"), flapOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-override"), + alertMode: props.globals.initNode("/instrumentation/mk-viii/outputs/alert-mode",0,"INT"), }; setlistener("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit", func() { @@ -232,6 +234,20 @@ setlistener("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override updateGPWSFlap(); }, 0, 0); +# GPWS alert pooling for get mode change - a little esoteric way but it works +var gpws_alert_watch = maketimer(0.8,func { + var alert = 0; + if (getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning")) alert = 2; # MODE2 - warning - RED + else if (getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert")) alert = 1; # MODE1 - caution - YELLOW + if (GPWS.alertMode.getValue()!=alert) GPWS.alertMode.setValue(alert); +}); + +setlistener("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", func{ # detect GPWS switch status + var failure = GPWS.tatcfInhibit.getBoolValue(); + if (!failure) gpws_alert_watch.start(); + else gpws_alert_watch.stop(); +},1,0); + # Replay var replayState = props.globals.getNode("/sim/replay/replay-state"); setlistener("/sim/replay/replay-state", func() { From 7bc27a893ec7a983cf8a277ad73fe366488f9d63 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Thu, 25 Feb 2021 00:12:04 +0100 Subject: [PATCH 41/58] added TERR AHEAD with color --- .../ND/canvas/framework/navdisplay.nas | 2 +- Models/Instruments/ND/canvas/res/airbusND.svg | 28 +++++++++++++++---- Models/Instruments/ND/canvas/style.nas | 13 +++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 15b74107..0940b157 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -138,7 +138,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; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId", - "status.wxr","status.wpt","status.sta","status.arpt","terrHI","terrLO"]) + "status.wxr","status.wpt","status.sta","status.arpt","terrHI","terrLO","TerrLabel","terrAhead"]) me.symbols[element] = me.nd.getElementById(element); # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index da220fa1..6770ea1f 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -26,13 +26,13 @@ inkscape:window-height="1017" id="namedview102" showgrid="false" - inkscape:zoom="0.77702762" - inkscape:cx="212.87887" - inkscape:cy="628.74339" + inkscape:zoom="2.197766" + inkscape:cx="933.14634" + inkscape:cy="816.83256" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="svg5180" + inkscape:current-layer="terrGroup" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true" @@ -252,7 +252,7 @@ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#179ab7;fill-opacity:1;stroke:none" x="954.74292" y="828.34009" - id="text1996" + id="TerrLabel" inkscape:label="#text7243">TERRAHEAD Date: Thu, 25 Feb 2021 19:06:38 +0100 Subject: [PATCH 42/58] ND range/mode change modifications, transition hides all route/vor elements --- Models/Instruments/ND/canvas/ND.nas | 30 +++++++++++++------------- Models/Instruments/ND/canvas/style.nas | 24 ++++++++++----------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 5a224a62..1c37c010 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -387,6 +387,21 @@ setlistener("sim/signals/fdm-initialized", func { canvas_nd.ND_2.NDFo.trafficGroup.setVisible(getprop("/instrumentation/efis[1]/nd/canvas-display-mode") == "PLAN" ? 0 : 1); }, 1, 0); + setlistener("/instrumentation/efis[0]/nd/display-mode", func { + startChangePhase(canvas_nd.ND_1.NDCpt,"MODE CHANGE"); + },0,0); + + setlistener("/instrumentation/efis[0]/inputs/range-nm", func { + startChangePhase(canvas_nd.ND_1.NDCpt,"RANGE CHANGE"); + },0,0); + setlistener("/instrumentation/efis[1]/nd/display-mode", func { + startChangePhase(canvas_nd.ND_2.NDFo,"MODE CHANGE"); + },0,0); + + setlistener("/instrumentation/efis[1]/inputs/range-nm", func { + startChangePhase(canvas_nd.ND_2.NDFo,"RANGE CHANGE"); + },0,0); + nd_update.start(); if (getprop("systems/acconfig/options/nd-rate") > 1) { rateApply(); @@ -439,21 +454,6 @@ var startChangePhase = func(nd,txt) { nd.change_timer.start(); } -setlistener("/instrumentation/efis[0]/nd/display-mode", func { - startChangePhase(canvas_nd.ND_1.NDCpt,"MODE CHANGE"); -},0,0); - -setlistener("/instrumentation/efis[0]/inputs/range-nm", func { - startChangePhase(canvas_nd.ND_1.NDCpt,"RANGE CHANGE"); -},0,0); -setlistener("/instrumentation/efis[1]/nd/display-mode", func { - startChangePhase(canvas_nd.ND_2.NDFo,"MODE CHANGE"); -},0,0); - -setlistener("/instrumentation/efis[1]/inputs/range-nm", func { - startChangePhase(canvas_nd.ND_2.NDFo,"RANGE CHANGE"); -},0,0); - #setlistener("/instrumentation/efis[0]/nd/terrain-on-nd", func{ # var terr_on_hd = getprop("instrumentation/efis[0]/nd/terrain-on-nd"); # var alpha = 1; diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 99f28fb7..421c5e7a 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -791,7 +791,6 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and - getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveId.setText(getprop("/FMGC/flightplan[2]/current-leg")); @@ -805,7 +804,6 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and - getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { #var cur_wp = getprop("/autopilot/route-manager/current-wp"); @@ -830,7 +828,6 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and - getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { @@ -859,7 +856,7 @@ canvas.NDStyles["Airbus"] = { id: "eta", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/autopilot/route-manager/wp/eta") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + predicate: func(nd) getprop("/autopilot/route-manager/wp/eta") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { var etaSec = getprop("/sim/time/utc/day-seconds")+ @@ -1293,9 +1290,9 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd){ - nd.get_switch("toggle_display_mode") == "MAP" and - !nd.get_switch("toggle_centered") and - ( + nd.get_switch("toggle_display_mode") == "MAP" and !nd.get_switch("toggle_centered") + and (nd.change_phase != 1) + and ( getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val or nd.get_switch("toggle_trk_line") ) @@ -1311,6 +1308,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR","MAP"]) and nd.get_switch("toggle_centered") + and (nd.change_phase != 1) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { nd.symbols.trkInd2.show(); @@ -1324,7 +1322,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_display_mode") == "MAP" and - nd.get_switch("toggle_centered") and + nd.get_switch("toggle_centered") and (nd.change_phase != 1) and getprop(nd.options.defaults.lat_ctrl) != nd.options.defaults.managed_val and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { @@ -1337,7 +1335,7 @@ canvas.NDStyles["Airbus"] = { id:"vorCrsPtr", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR"]) and !nd.get_switch("toggle_centered")), + predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR"]) and !nd.get_switch("toggle_centered")) and (nd.change_phase != 1), is_true: func(nd) { nd.symbols.vorCrsPtr.show(); if (is_ils) { @@ -1354,7 +1352,7 @@ canvas.NDStyles["Airbus"] = { id:"vorCrsPtr2", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR"]) and nd.get_switch("toggle_centered")), + predicate: func(nd) (nd.in_mode("toggle_display_mode", ["APP","VOR"]) and nd.get_switch("toggle_centered")) and (nd.change_phase != 1), is_true: func(nd) { nd.symbols.vorCrsPtr2.show(); var is_ils = (nd.get_switch("toggle_display_mode") == "APP"); @@ -1381,7 +1379,7 @@ canvas.NDStyles["Airbus"] = { id: "gsDiamond", impl: { init: func(nd,symbol), - predicate: func(nd) nd.in_mode("toggle_display_mode", ["APP"]), + predicate: func(nd) nd.in_mode("toggle_display_mode", ["APP"]) and (nd.change_phase != 1), is_true: func(nd) { if(getprop("/instrumentation/nav/gs-needle-deflection-norm") != nil) nd.symbols.gsDiamond.setTranslation(getprop("/instrumentation/nav[0]/gs-needle-deflection-norm")*150,0); @@ -1449,7 +1447,7 @@ canvas.NDStyles["Airbus"] = { var ils_mode = getprop("/Flight-management/freq/ils-mode"); var has_ils = (nav_id != nil and nav_id != ""); (nd.get_switch("toggle_display_mode") == "MAP" and - !nd.get_switch("toggle_centered") and has_ils and ils_mode); + !nd.get_switch("toggle_centered") and has_ils and ils_mode and (nd.change_phase != 1)); }, is_true: func(nd) { nd.symbols.locTrkPointer.show(); @@ -1469,7 +1467,7 @@ canvas.NDStyles["Airbus"] = { var ils_mode = getprop("/Flight-management/freq/ils-mode"); var has_ils = (nav_id != nil and nav_id != ""); (nd.get_switch("toggle_display_mode") == "MAP" and - nd.get_switch("toggle_centered") and has_ils and ils_mode); + nd.get_switch("toggle_centered") and has_ils and ils_mode and (nd.change_phase != 1)); }, is_true: func(nd) { nd.symbols.locTrkPointer2.show(); From e84d54ff90211f49b23ad9ee88fe2b025f7548c6 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Thu, 25 Feb 2021 21:50:06 +0100 Subject: [PATCH 43/58] Mode/range change - hide trkInd on transition --- Models/Instruments/ND/canvas/framework/navdisplay.nas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 0940b157..e0cf4b6d 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -576,7 +576,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec var adf1hdg = getprop("/instrumentation/adf[1]/indicated-bearing-deg"); if(!me.get_switch("toggle_centered")) { - if(me.in_mode("toggle_display_mode", ["PLAN"]) or (me.adirs_property.getValue() != 1 and (adirs_3.getValue() != 1 or att_switch.getValue() != me.attitude_heading_setting))) + if(me.in_mode("toggle_display_mode", ["PLAN"]) or (me.adirs_property.getValue() != 1 and (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(); From 69969312520625e025ce1f2f5a160cd01922d85a Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sun, 28 Feb 2021 22:22:07 +0100 Subject: [PATCH 44/58] VOR/ADF arrow and distance update --- .../ND/canvas/framework/navdisplay.nas | 42 ++++- Models/Instruments/ND/canvas/res/airbusND.svg | 172 +++++++++++------- Models/Instruments/ND/canvas/style.nas | 42 +++-- 3 files changed, 173 insertions(+), 83 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index e0cf4b6d..5ce94b90 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -82,6 +82,41 @@ var easeArrow = { } }; +var symbolFloat = { + new: func(name, nd) { + var m = {parents: [symbolFloat] }; + m.group = nd.getElementById(name); + m.expn = nd.getElementById(name ~ "1"); + m.mant = nd.getElementById(name ~ "2"); + return m; + }, + hide: func { + me.group.hide(); + }, + show: func { + me.group.show(); + }, + setText: func(txt) { + var parts = ( txt != "" ) ? split( "." , txt ) : nil; + if ( parts != nil and size(parts) == 2 ) { + me.expn.setText(parts[0]); + me.mant.setText("." ~ parts[1]); + } else { + me.expn.setText(txt); + me.mant.setText(""); + } + }, + setColor: func(r,g,b) { + me.expn.setColor(r,g,b); + me.mant.setColor(r,g,b); + }, + setFloat: func(val) { + var parts = split( "." , sprintf("%03.1f",val) ); + me.expn.setText(parts[0]); + me.mant.setText("." ~ parts[1]); + } +}; + canvas.NavDisplay.set_switch = func(s, v) { var switch = me.efis_switches[s]; if(switch == nil) return nil; @@ -137,10 +172,13 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update ### this is the "old" method that"s less flexible, we want to use the style hash instead (see above) # 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; ["dmeLDist","dmeRDist","dmeL","dmeR","vorL","vorR","vorLId","vorRId", + foreach(var element; ["dmeL","dmeR","vorL","vorR","vorLId","vorRId", "status.wxr","status.wpt","status.sta","status.arpt","terrHI","terrLO","TerrLabel","terrAhead"]) me.symbols[element] = me.nd.getElementById(element); + foreach(var element; ["dmeLDist","dmeRDist"]) + me.symbols[element] = symbolFloat.new( element, me.nd ); + # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each # anything that needs updatecenter called, should be added to the vector here # @@ -576,7 +614,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec var adf1hdg = getprop("/instrumentation/adf[1]/indicated-bearing-deg"); if(!me.get_switch("toggle_centered")) { - if(me.in_mode("toggle_display_mode", ["PLAN"]) or (me.adirs_property.getValue() != 1 and (me.change_phase != 1) and (adirs_3.getValue() != 1 or att_switch.getValue() != me.attitude_heading_setting))) + 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(); diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index 6770ea1f..e6d4f380 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -26,13 +26,13 @@ inkscape:window-height="1017" id="namedview102" showgrid="false" - inkscape:zoom="2.197766" - inkscape:cx="933.14634" - inkscape:cy="816.83256" + inkscape:zoom="3.1081105" + inkscape:cx="163.03816" + inkscape:cy="979.87161" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="terrGroup" + inkscape:current-layer="layer3" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true" @@ -80,7 +80,28 @@ id="guide3498" />image/svg+xmlGijs de RooyABCD + style="font-size:36px;line-height:1.25;text-align:end;text-anchor:end">XXXX99X VOR 1 + x="39.859375" + y="919.5495">VOR 1 NM + 99.9 -ABC + x="39.9375" + y="956.56171">ABC VOR 2 NM -99.9 + ABC @@ -1300,16 +1299,8 @@ sodipodi:role="line" style="font-size:32px;line-height:125%;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#af0063;fill-opacity:1">999.99 999999999.9999.9 Date: Sun, 28 Feb 2021 22:22:36 +0100 Subject: [PATCH 45/58] Peak level terrain update --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 70 ++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index af32eaaf..858d96fe 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -18,6 +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_alert = props.globals.getNode("/instrumentation/mk-viii/outputs/alert-mode"); @@ -174,6 +175,15 @@ var update_altitudes = func { me.terrain_minalt.setValue(me.min_altitude); me.terrain_maxalt.setValue(me.max_altitude); + var altdif = me.max_altitude - 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); + else me.terrain_maxcol.setValue(1); + } + if (me.avg_minalt == 9999) { me.avg_minalt = me.min_altitude; me.avg_maxalt = me.max_altitude; @@ -186,13 +196,13 @@ var update_altitudes = func { if (me.onground == 0 and (me.max_altitude + 250) < me.refaltitudeft) { # 250 ft tollerance me.hialtmode = 1; - var range = math.min(2000,(me.avg_maxalt - me.avg_minalt)); - if (range < 400) { + var range = math.min(2400,(me.avg_maxalt - me.avg_minalt)) - 400; + if (range < 1900) { # min elev number me.bands_range = 0; } else { - me.bands_range = math.max(200,math.round(range / 4)); + me.bands_range = int(range / 4); 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 + 400 ); } } else { me.hialtmode = 0; @@ -226,6 +236,7 @@ var init = func { me.max_altitude = -9999; me.avg_minalt = 9999; me.avg_maxalt = -9999; + me.maxalt_col = 0; # 0 = grn, 1 = yel, 2 = red me.bands_minalt = 0; me.bands_maxalt = 0; me.bands_range = 0; @@ -314,6 +325,9 @@ var draw = func { if (me.layer.display_changed == 1) { me.layer.display_changed = 0; me.clear(); + me.min_altitude = 9999; + me.max_altitude = -9999; + terrain_maxalt.setValue(-9999); me.reference = nil; } @@ -325,21 +339,22 @@ var draw = func { me.refheading = getprop("orientation/heading-magnetic-deg"); - var refalt = int(ref.alt() * 3.2808399); + var refalt = int(getprop("/position/altitude-ft")); #int(ref.alt() * 3.2808399); me.refaltitudeft = refalt; + me.groundaltft = int(getprop("/position/ground-elev-ft")); me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; - me.onground = getprop("/gear/gear[0]/wow"); + me.onground = pts.Gear.wow[0].getValue(); var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); if (vspeed30s<-500) me.refaltitudeft += vspeed30s; if (me.min_altitude != 9999) me.update_altitudes(); - - if (fmgc.FMGCInternal.phase < 2) { - if (me.basealtitudeft == nil) { # starting at phase < 2 - me.basealtitudeft = refalt + 400; - me.checkarrival = 1; - print("set REFALT [pref]: "~me.basealtitudeft); - } + + if (me.basealtitudeft == nil) { # first basealt set + me.basealtitudeft = me.groundaltft + 400; + me.checkarrival = 1; + print("set REFALT [init]: "~me.basealtitudeft); + #} else if (fmgc.FMGCInternal.phase < 2) { # starting at phase < 2 + # nothing to do } else if (fmgc.FMGCInternal.phase == 5) { if (me.checkarrival == 1) { me.checkarrival = 0; @@ -361,19 +376,26 @@ var draw = func { } else if (fmgc.FMGCInternal.phase == 7) { if (me.checkarrival == 0) { me.checkarrival = 1; - me.basealtitudeft = refalt + 400; + me.basealtitudeft = me.groundaltft + 400; print("set REFALT [done]: "~me.basealtitudeft); } - } else { - 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); - } + } else if (fmgc.FMGCInternal.phase == 2) { + var expdaltft = me.groundaltft + 400; + if (me.basealtitudeft > expdaltft) { + me.basealtitudeft = expdaltft; + print("set REFALT [blwbase]: "~me.basealtitudeft); + } + } else if (fmgc.FMGCInternal.phase >= 2) { + me.basealtitudeft = math.avg(me.basealtitudeft,400 + me.groundaltft,int(400 + 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); + #} } } From d53003e43d2511ba2b91af1d5044d02effa34463 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 1 Mar 2021 21:41:29 +0100 Subject: [PATCH 46/58] green arrows for ADF on ND --- .../ND/canvas/framework/navdisplay.nas | 12 +++++-- Models/Instruments/ND/canvas/res/airbusND.svg | 34 +++++++++++-------- Models/Instruments/ND/canvas/style.nas | 26 ++++++++------ 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 5ce94b90..f42d5eda 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -167,6 +167,9 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update foreach(var feature; me.nd_style.features ) { me.symbols[feature.id] = me.nd.getElementById(feature.id).updateCenter(); if(contains(feature.impl,"init")) feature.impl.init(me.nd, feature); # call The element"s init code (i.e. updateCenter) + if(contains(feature.impl,"changed_only")) { + if (feature.impl.changed_only == 1) feature.last_predicate = nil; + } } ### this is the "old" method that"s less flexible, we want to use the style hash instead (see above) @@ -190,7 +193,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) @@ -736,7 +739,12 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec if (contains(feature.impl, "common")) feature.impl.common(me); # conditional stuff if(!contains(feature.impl, "predicate")) continue; # no conditional stuff - if ( var result = feature.impl.predicate(me) ) + var result = feature.impl.predicate(me); + if (contains(feature, "last_predicate")) { + if (feature.last_predicate != nil and feature.last_predicate == result) continue; + feature.last_predicate = result; + } + if ( result ) feature.impl.is_true(me, result); # pass the result to the predicate else feature.impl.is_false( me, result ); # pass the result to the predicate diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index e6d4f380..4483d085 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -27,12 +27,12 @@ id="namedview102" showgrid="false" inkscape:zoom="3.1081105" - inkscape:cx="163.03816" - inkscape:cy="979.87161" + inkscape:cx="454.60496" + inkscape:cy="542.30673" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="layer3" + inkscape:current-layer="unavailARC" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true" @@ -101,7 +101,10 @@ id="guide1327" />image/svg+xmlGijs de Rooy000NM @@ -1039,36 +1042,36 @@ inkscape:label="#text7243" id="vorR" y="919.5495" - x="884.85938" + x="883.85938" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#0dc04b;fill-opacity:1;stroke:none" xml:space="preserve">VOR 2 NM ABC @@ -1415,7 +1418,8 @@ style="display:inline;fill:none;stroke:#cecdce;stroke-width:3.28819;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 23.634,896.5254 v 7.83228 m 1.26e-4,24.4977 v 24.41763 M 23.634,903.63377 8.682512,928.85538 H 23.634 l 14.467869,0.21255 z" sodipodi:nodetypes="ccccccccc" />.9 Date: Mon, 1 Mar 2021 21:42:28 +0100 Subject: [PATCH 47/58] show terrr for almost flat peak areas --- Models/Instruments/ND/canvas/map/TERRAIN.symbol | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 858d96fe..820b7c5f 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -194,6 +194,8 @@ var update_altitudes = func { me.avg_maxalt = math.round((me.avg_maxalt * 2 + me.max_altitude) / 3); } + 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; @@ -236,6 +238,7 @@ var init = func { me.max_altitude = -9999; me.avg_minalt = 9999; me.avg_maxalt = -9999; + me.avg_peakalt = 0; me.maxalt_col = 0; # 0 = grn, 1 = yel, 2 = red me.bands_minalt = 0; me.bands_maxalt = 0; @@ -344,11 +347,12 @@ var draw = func { me.groundaltft = int(getprop("/position/ground-elev-ft")); me.reflowaltft = (pts.Gear.position[1].getValue()) ? -250 : -500; me.onground = pts.Gear.wow[0].getValue(); - var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); - if (vspeed30s<-500) me.refaltitudeft += vspeed30s; if (me.min_altitude != 9999) me.update_altitudes(); + var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); + if (vspeed30s<-500) me.refaltitudeft = math.max(me.avg_minalt , me.refaltitudeft + vspeed30s); + if (me.basealtitudeft == nil) { # first basealt set me.basealtitudeft = me.groundaltft + 400; me.checkarrival = 1; @@ -380,13 +384,15 @@ var draw = func { print("set REFALT [done]: "~me.basealtitudeft); } } else if (fmgc.FMGCInternal.phase == 2) { - var expdaltft = me.groundaltft + 400; + var expdaltft = me.groundaltft; + expdaltft += (me.avg_peakalt>400) ? 400 : 160; if (me.basealtitudeft > expdaltft) { me.basealtitudeft = expdaltft; print("set REFALT [blwbase]: "~me.basealtitudeft); } - } else if (fmgc.FMGCInternal.phase >= 2) { - me.basealtitudeft = math.avg(me.basealtitudeft,400 + me.groundaltft,int(400 + me.avg_minalt)); + } else if (fmgc.FMGCInternal.phase >= 2) { + var flatalt = (me.avg_peakalt>400) ? 400 : 160; + 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); From 24c90ebe935c9bb5be56e96e3daed1619c659097 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 1 Mar 2021 23:56:26 +0100 Subject: [PATCH 48/58] fix for VOR/ADF --- Models/Instruments/ND/canvas/framework/navdisplay.nas | 2 +- Models/Instruments/ND/canvas/style.nas | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index f42d5eda..6206df3a 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -550,7 +550,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec me.symbols.vorR.setText("ADF R"); me.symbols.vorR.setColor(0,0.6,0.85); me.symbols.dmeR.setText(""); - me.symbols.dmeR.setColor(0,0.6,0.85); + #me.symbols.dmeR.setColor(0,0.6,0.85); if((var navident=getprop("/instrumentation/adf[1]/ident")) != "") me.symbols.vorRId.setText(navident); else me.symbols.vorRId.setText(sprintf("%3d",getprop("/instrumentation/adf[1]/frequencies/selected-khz"))); diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index c4af0a96..2417a044 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -1623,7 +1623,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_lh_vor_adf") != 0), - changed_only: 1, + #changed_only: 1, is_true: func(nd) { nd.symbols.dmeL.show(); if(nd.get_switch("toggle_lh_vor_adf") < 0){ @@ -1639,7 +1639,7 @@ canvas.NDStyles["Airbus"] = { nd.symbols.vorLId.setColor(1,1,1); #nd.symbols.dmeLDist.setColor(1,1,1); nd.symbols.dmeL.setText("NM"); - #nd.symbols.dmeL.setColor(0,0.59,0.8); + nd.symbols.dmeL.setColor(0,0.59,0.8); } }, is_false: func(nd){ @@ -1652,7 +1652,7 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_rh_vor_adf") != 0), - changed_only: 1, + #changed_only: 1, is_true: func(nd) { if(nd.get_switch("toggle_rh_vor_adf") < 0){ nd.symbols.vorR.setText("ADF 2"); @@ -1666,7 +1666,7 @@ canvas.NDStyles["Airbus"] = { nd.symbols.vorRId.setColor(1,1,1); #nd.symbols.dmeRDist.setColor(1,1,1); nd.symbols.dmeR.setText("NM"); - #nd.symbols.dmeR.setColor(0,0.59,0.8); + nd.symbols.dmeR.setColor(0,0.59,0.8); } }, is_false: func(nd){ From 4937aa8b69c216b7e8e036765b25aad0a6fec376 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Mon, 1 Mar 2021 23:57:03 +0100 Subject: [PATCH 49/58] better flats detection --- .../Instruments/ND/canvas/map/TERRAIN.symbol | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 820b7c5f..5cba9888 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -238,7 +238,7 @@ var init = func { me.max_altitude = -9999; me.avg_minalt = 9999; me.avg_maxalt = -9999; - me.avg_peakalt = 0; + me.avg_peakalt = nil; me.maxalt_col = 0; # 0 = grn, 1 = yel, 2 = red me.bands_minalt = 0; me.bands_maxalt = 0; @@ -350,26 +350,33 @@ var draw = func { if (me.min_altitude != 9999) me.update_altitudes(); + var flatalt = (me.avg_peakalt != nil and me.avg_peakalt<500) ? 140 : 400; + var vspeed30s = int(getprop("velocities/vertical-speed-fps") * 30); if (vspeed30s<-500) me.refaltitudeft = math.max(me.avg_minalt , me.refaltitudeft + vspeed30s); if (me.basealtitudeft == nil) { # first basealt set - me.basealtitudeft = me.groundaltft + 400; + me.basealtitudeft = me.groundaltft + flatalt; + me.flatalt = flatalt; me.checkarrival = 1; print("set REFALT [init]: "~me.basealtitudeft); - #} else if (fmgc.FMGCInternal.phase < 2) { # starting at phase < 2 - # nothing to do + } else if (fmgc.FMGCInternal.phase < 2) { # starting at phase < 2 + if (me.flatalt != flatalt) { + me.basealtitudeft = me.groundaltft + flatalt; + me.flatalt = flatalt; + print("set REFALT [flat]: "~me.basealtitudeft); + } } else if (fmgc.FMGCInternal.phase == 5) { if (me.checkarrival == 1) { me.checkarrival = 0; me.basealtitudeft = nil; if (fmgc.FMGCInternal.arrApt != nil) { var airport = airportinfo(fmgc.FMGCInternal.arrApt); - if (airport != nil) me.basealtitudeft = 400 + int(airport.elevation * M2FT); + if (airport != nil) me.basealtitudeft = flatalt + int(airport.elevation * M2FT); print("set REFALT [arrApt]: "~me.basealtitudeft); } if (me.basealtitudeft == nil) { - me.basealtitudeft = 400 + me.avg_minalt; # that's fun + me.basealtitudeft = flatalt + me.avg_minalt; # that's fun } } } else if (fmgc.FMGCInternal.phase == 6) { @@ -380,18 +387,16 @@ var draw = func { } else if (fmgc.FMGCInternal.phase == 7) { if (me.checkarrival == 0) { me.checkarrival = 1; - me.basealtitudeft = me.groundaltft + 400; + me.basealtitudeft = me.groundaltft + flatalt; print("set REFALT [done]: "~me.basealtitudeft); } } else if (fmgc.FMGCInternal.phase == 2) { - var expdaltft = me.groundaltft; - expdaltft += (me.avg_peakalt>400) ? 400 : 160; + var expdaltft = me.groundaltft + flatalt; if (me.basealtitudeft > expdaltft) { me.basealtitudeft = expdaltft; print("set REFALT [blwbase]: "~me.basealtitudeft); } } else if (fmgc.FMGCInternal.phase >= 2) { - var flatalt = (me.avg_peakalt>400) ? 400 : 160; 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 From 23b36c9cac9a6aff65f0f723f05f5b4a55be39b3 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Tue, 2 Mar 2021 19:03:48 +0100 Subject: [PATCH 50/58] TERR reposition --- Models/Instruments/ND/canvas/res/airbusND.svg | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/Models/Instruments/ND/canvas/res/airbusND.svg b/Models/Instruments/ND/canvas/res/airbusND.svg index 4483d085..8197f17a 100644 --- a/Models/Instruments/ND/canvas/res/airbusND.svg +++ b/Models/Instruments/ND/canvas/res/airbusND.svg @@ -27,12 +27,12 @@ id="namedview102" showgrid="false" inkscape:zoom="3.1081105" - inkscape:cx="454.60496" - inkscape:cy="542.30673" + inkscape:cx="904.96427" + inkscape:cy="819.41055" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="unavailARC" + inkscape:current-layer="terrGroup" inkscape:object-nodes="true" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true" @@ -273,65 +273,65 @@ id="terrGroup" transform="translate(-9.356522,-6.2275037)">TERRAHEADTERRTERR000000TERRAHEAD Date: Tue, 2 Mar 2021 19:04:53 +0100 Subject: [PATCH 51/58] mode/range change show/hide phases make a little short --- Models/Instruments/ND/canvas/ND.nas | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Models/Instruments/ND/canvas/ND.nas b/Models/Instruments/ND/canvas/ND.nas index 1c37c010..5fe845d3 100644 --- a/Models/Instruments/ND/canvas/ND.nas +++ b/Models/Instruments/ND/canvas/ND.nas @@ -181,13 +181,14 @@ var canvas_nd_base = { }; var ND_change_timer_fn = func { - me.change_phase += 1; - if (me.change_phase>2) { # phase 3 + #me.change_phase += 1; + #if (me.change_phase>2) { # phase 3 - only for older ND? + #if (me.change_phase>1) { # phase 2 hide me.change_timer.stop(); me.change_phase = 0; - } else { + #} else { me.map.setVisible(1); # phase 2 - } + #} }; var canvas_ND_1 = { @@ -201,7 +202,7 @@ var canvas_ND_1 = { me.NDCpt.adirs_property = props.globals.getNode("/instrumentation/efis[0]/nd/ir-1",1); me.NDCpt.newMFD(canvas_group); me.NDCpt.change_phase = 0; - me.NDCpt.change_timer = maketimer(0.4,me.NDCpt,ND_change_timer_fn); + me.NDCpt.change_timer = maketimer(0.6,me.NDCpt,ND_change_timer_fn); me.NDCpt.update(); return m; From f3195ab41fa8608fd23946342302f3ac3bdbbbee Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Tue, 2 Mar 2021 22:18:57 +0100 Subject: [PATCH 52/58] fix for empty current leg (not nil) --- Models/Instruments/ND/canvas/style.nas | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 2417a044..4d9a8b6c 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -792,7 +792,7 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveId", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != "" and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveId.setText(getprop("/FMGC/flightplan[2]/current-leg")); @@ -805,7 +805,7 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveCrs", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != "" and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { #var cur_wp = getprop("/autopilot/route-manager/current-wp"); @@ -829,7 +829,7 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveDist", impl: { init: func(nd,symbol), - predicate: func(nd) (getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and + predicate: func(nd) (getprop("/FMGC/flightplan[2]/current-leg") != "" and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { @@ -844,7 +844,7 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveDistLbl", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != "" and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveDistLbl.show(); @@ -917,7 +917,8 @@ canvas.NDStyles["Airbus"] = { id:"hdgBug2ValR", #"hdgBug2ValL"", impl: { init: func(nd,symbol), - predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered"), + predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered") and + (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { var bugRot = vhdg_bug.getValue(); var diffRot = (bugRot>=nd.userHdgTrk) ? (bugRot-nd.userHdgTrk) : (360+bugRot-nd.userHdgTrk); @@ -935,7 +936,8 @@ canvas.NDStyles["Airbus"] = { id:"hdgBug2ValL", impl: { init: func(nd,symbol), - predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered"), + predicate: func(nd) nd.in_mode("toggle_display_mode", ["MAP"]) and !nd.get_switch("toggle_centered") and + (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { var bugRot = vhdg_bug.getValue(); var diffRot = (bugRot>nd.userHdgTrk) ? (360+nd.userHdgTrk-bugRot) : (nd.userHdgTrk-bugRot); @@ -2034,10 +2036,13 @@ canvas.NDStyles["Airbus"] = { id: "nd_msg_change", impl: { init: func(nd, symbol), - common: func(nd) { - var chk = (nd.change_phase != 0); - if (chk) nd.symbols.nd_msg_change.show(); - else nd.symbols.nd_msg_change.hide(); + predicate: func(nd) ( (nd.change_phase != 0) and + (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)) ), + is_true: func(nd) { + nd.symbols.nd_msg_change.show(); + }, + is_false: func(nd) { + nd.symbols.nd_msg_change.hide(); } } } From 164726c3717abe854e3385f14c49497af2febe8c Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Wed, 3 Mar 2021 22:34:38 +0100 Subject: [PATCH 53/58] Update on terrain (low peak) and fix on VOR/ADF NM --- .../ND/canvas/framework/navdisplay.nas | 28 ++++++------------- .../Instruments/ND/canvas/map/TERRAIN.symbol | 6 ++-- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/Models/Instruments/ND/canvas/framework/navdisplay.nas b/Models/Instruments/ND/canvas/framework/navdisplay.nas index 6206df3a..01569ad3 100644 --- a/Models/Instruments/ND/canvas/framework/navdisplay.nas +++ b/Models/Instruments/ND/canvas/framework/navdisplay.nas @@ -82,9 +82,9 @@ var easeArrow = { } }; -var symbolFloat = { +var symbolDistNM = { new: func(name, nd) { - var m = {parents: [symbolFloat] }; + var m = {parents: [symbolDistNM] }; m.group = nd.getElementById(name); m.expn = nd.getElementById(name ~ "1"); m.mant = nd.getElementById(name ~ "2"); @@ -167,9 +167,6 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update foreach(var feature; me.nd_style.features ) { me.symbols[feature.id] = me.nd.getElementById(feature.id).updateCenter(); if(contains(feature.impl,"init")) feature.impl.init(me.nd, feature); # call The element"s init code (i.e. updateCenter) - if(contains(feature.impl,"changed_only")) { - if (feature.impl.changed_only == 1) feature.last_predicate = nil; - } } ### this is the "old" method that"s less flexible, we want to use the style hash instead (see above) @@ -180,7 +177,10 @@ canvas.NavDisplay.newMFD = func(canvas_group, parent=nil, nd_options=nil, update me.symbols[element] = me.nd.getElementById(element); foreach(var element; ["dmeLDist","dmeRDist"]) - me.symbols[element] = symbolFloat.new( element, me.nd ); + me.symbols[element] = symbolDistNM.new( element, me.nd ); + + me.symbols.dmeLDist.setColor(0.195,0.96,0.097); + me.symbols.dmeRDist.setColor(0.195,0.96,0.097); # load elements from vector image, and create instance variables using identical names, and call updateCenter() on each # anything that needs updatecenter called, should be added to the vector here @@ -487,11 +487,6 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec if(wxr_live_enabled == nil or wxr_live_enabled == '') wxr_live_enabled = 0; me.set_switch('toggle_weather_live', wxr_live_enabled); - - #var terr_enabled = getprop("/controls/switches/terr_on_nd_l"); - #if (terr_enabled == nil) terr_enabled = 0; - #if (me.get_switch('toggle_terrain') != terr_enabled) me.set_switch('toggle_terrain', terr_enabled); - call(me.update_sub, nil, nil, caller(0)[0]); # call this in the same namespace to "steal" its variables # MapStructure update! @@ -550,7 +545,7 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec me.symbols.vorR.setText("ADF R"); me.symbols.vorR.setColor(0,0.6,0.85); me.symbols.dmeR.setText(""); - #me.symbols.dmeR.setColor(0,0.6,0.85); + me.symbols.dmeR.setColor(0,0.6,0.85); if((var navident=getprop("/instrumentation/adf[1]/ident")) != "") me.symbols.vorRId.setText(navident); else me.symbols.vorRId.setText(sprintf("%3d",getprop("/instrumentation/adf[1]/frequencies/selected-khz"))); @@ -739,13 +734,8 @@ canvas.NavDisplay.update = func() # FIXME: This stuff is still too aircraft spec if (contains(feature.impl, "common")) feature.impl.common(me); # conditional stuff if(!contains(feature.impl, "predicate")) continue; # no conditional stuff - var result = feature.impl.predicate(me); - if (contains(feature, "last_predicate")) { - if (feature.last_predicate != nil and feature.last_predicate == result) continue; - feature.last_predicate = result; - } - if ( result ) - feature.impl.is_true(me, result); # pass the result to the predicate + if ( var result=feature.impl.predicate(me) ) + feature.impl.is_true(me, result); # pass the result to the predicate else feature.impl.is_false( me, result ); # pass the result to the predicate } diff --git a/Models/Instruments/ND/canvas/map/TERRAIN.symbol b/Models/Instruments/ND/canvas/map/TERRAIN.symbol index 5cba9888..6d226040 100644 --- a/Models/Instruments/ND/canvas/map/TERRAIN.symbol +++ b/Models/Instruments/ND/canvas/map/TERRAIN.symbol @@ -184,7 +184,7 @@ var update_altitudes = func { else me.terrain_maxcol.setValue(1); } - if (me.avg_minalt == 9999) { + if (me.min_altitude == 9999) { me.avg_minalt = me.min_altitude; me.avg_maxalt = me.max_altitude; } else { @@ -199,7 +199,7 @@ var update_altitudes = func { 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 < 1900) { # min elev number + if (range < 400) { # min elev number me.bands_range = 0; } else { me.bands_range = int(range / 4); @@ -350,7 +350,7 @@ var draw = func { if (me.min_altitude != 9999) me.update_altitudes(); - var flatalt = (me.avg_peakalt != nil and me.avg_peakalt<500) ? 140 : 400; + var flatalt = (me.avg_peakalt != nil and 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 430746b590cc400a8fb818c6846949ac2019144c Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Wed, 3 Mar 2021 22:54:43 +0100 Subject: [PATCH 54/58] vor/adf fix and 000 at ND fresh start --- Models/Instruments/ND/canvas/style.nas | 54 ++++++++++++-------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/Models/Instruments/ND/canvas/style.nas b/Models/Instruments/ND/canvas/style.nas index 4d9a8b6c..037ebaf4 100644 --- a/Models/Instruments/ND/canvas/style.nas +++ b/Models/Instruments/ND/canvas/style.nas @@ -792,7 +792,8 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveId", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != "" and + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and + getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveId.setText(getprop("/FMGC/flightplan[2]/current-leg")); @@ -805,7 +806,8 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveCrs", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != "" and + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != nil and + getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { #var cur_wp = getprop("/autopilot/route-manager/current-wp"); @@ -829,7 +831,8 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveDist", impl: { init: func(nd,symbol), - predicate: func(nd) (getprop("/FMGC/flightplan[2]/current-leg") != "" and + predicate: func(nd) (getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and + getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting))), is_true: func(nd) { @@ -844,7 +847,7 @@ canvas.NDStyles["Airbus"] = { id: "wpActiveDistLbl", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg") != "" and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + predicate: func(nd) getprop("/FMGC/flightplan[2]/current-leg-dist") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { nd.symbols.wpActiveDistLbl.show(); @@ -858,7 +861,7 @@ canvas.NDStyles["Airbus"] = { id: "eta", impl: { init: func(nd,symbol), - predicate: func(nd) getprop("/autopilot/route-manager/wp/eta") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) + predicate: func(nd) getprop("/autopilot/route-manager/wp/eta") != nil and getprop("/FMGC/flightplan[2]/active") and nd.in_mode("toggle_display_mode", ["MAP", "PLAN"]) and (nd.adirs_property.getValue() == 1 or (adirs_3.getValue() == 1 and att_switch.getValue() == nd.attitude_heading_setting)), is_true: func(nd) { var etaSec = getprop("/sim/time/utc/day-seconds")+ @@ -1625,7 +1628,6 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_lh_vor_adf") != 0), - #changed_only: 1, is_true: func(nd) { nd.symbols.dmeL.show(); if(nd.get_switch("toggle_lh_vor_adf") < 0){ @@ -1634,15 +1636,14 @@ canvas.NDStyles["Airbus"] = { nd.symbols.vorLId.setColor(0.195,0.96,0.097); #nd.symbols.dmeLDist.setColor(0.195,0.96,0.097); nd.symbols.dmeL.setText(""); - } - else{ + } else { nd.symbols.vorL.setText("VOR 1"); nd.symbols.vorL.setColor(1,1,1); nd.symbols.vorLId.setColor(1,1,1); #nd.symbols.dmeLDist.setColor(1,1,1); nd.symbols.dmeL.setText("NM"); - nd.symbols.dmeL.setColor(0,0.59,0.8); } + nd.symbols.dmeL.setColor(0,0.59,0.8); }, is_false: func(nd){ nd.symbols.dmeL.hide(); @@ -1654,13 +1655,12 @@ canvas.NDStyles["Airbus"] = { impl: { init: func(nd,symbol), predicate: func(nd) (nd.get_switch("toggle_rh_vor_adf") != 0), - #changed_only: 1, - is_true: func(nd) { + is_true: func(nd) { + nd.symbols.dmeR.show(); if(nd.get_switch("toggle_rh_vor_adf") < 0){ nd.symbols.vorR.setText("ADF 2"); nd.symbols.vorR.setColor(0.195,0.96,0.097); nd.symbols.vorRId.setColor(0.195,0.96,0.097); - #nd.symbols.dmeRDist.setColor(0.195,0.96,0.097); nd.symbols.dmeR.setText(""); } else { nd.symbols.vorR.setText("VOR 2"); @@ -1668,8 +1668,8 @@ canvas.NDStyles["Airbus"] = { nd.symbols.vorRId.setColor(1,1,1); #nd.symbols.dmeRDist.setColor(1,1,1); nd.symbols.dmeR.setText("NM"); - nd.symbols.dmeR.setColor(0,0.59,0.8); } + nd.symbols.dmeR.setColor(0,0.59,0.8); }, is_false: func(nd){ nd.symbols.dmeR.hide(); @@ -1705,12 +1705,10 @@ canvas.NDStyles["Airbus"] = { nd.symbols.vorLId.setText(navID); else nd.symbols.vorLId.setText(frq); - if(getprop(dme~ "in-range")){ - nd.symbols.dmeLDist.setText(sprintf("%3.1f",dst)); - } - else { - nd.symbols.dmeLDist.setText(" ---"); - } + if(getprop(dme~ "in-range")) + nd.symbols.dmeLDist.setText(sprintf("%3.1f", + dst)); + else nd.symbols.dmeLDist.setText(" ---"); } }, is_false: func(nd){ @@ -1724,11 +1722,11 @@ canvas.NDStyles["Airbus"] = { id:"vorLSym", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.get_switch("toggle_lh_vor_adf") != 0), + predicate: func(nd) (nd.get_switch("toggle_lh_vor_adf") != 0), is_true: func(nd) { if (nd.get_switch("toggle_lh_vor_adf") < 0) nd.symbols.vorLSym.setColor(0.195,0.96,0.097); else nd.symbols.vorLSym.setColor(1,1,1); - nd.symbols.vorLSym.show(); + nd.symbols.vorLSym.show(); }, is_false: func(nd){ nd.symbols.vorLSym.hide(); @@ -1764,12 +1762,10 @@ canvas.NDStyles["Airbus"] = { nd.symbols.vorRId.setText(navID); else nd.symbols.vorRId.setText(frq); - if(getprop(dme~ "in-range")){ - nd.symbols.dmeRDist.setText(sprintf("%3.1f",dst)); - } - else { - nd.symbols.dmeRDist.setText(" ---"); - } + if(getprop(dme~ "in-range")) + nd.symbols.dmeRDist.setText(sprintf("%3.1f", + dst)); + else nd.symbols.dmeRDist.setText(" ---"); } }, is_false: func(nd){ @@ -1783,7 +1779,7 @@ canvas.NDStyles["Airbus"] = { id:"vorRSym", impl: { init: func(nd,symbol), - predicate: func(nd) (nd.get_switch("toggle_rh_vor_adf") != 0), + predicate: func(nd) (nd.get_switch("toggle_rh_vor_adf") != 0), is_true: func(nd) { if (nd.get_switch("toggle_rh_vor_adf") < 0) nd.symbols.vorRSym.setColor(0.195,0.96,0.097); else nd.symbols.vorRSym.setColor(1,1,1); @@ -2045,7 +2041,7 @@ canvas.NDStyles["Airbus"] = { nd.symbols.nd_msg_change.hide(); } } - } + } ], # end of vector with features }; From e1c538299ef92b354ad587021e76ddbbcfc0992d Mon Sep 17 00:00:00 2001 From: fly Date: Sat, 6 Mar 2021 07:30:29 +1100 Subject: [PATCH 55/58] Fixed broken VHF data mode Signed-off-by: fly --- A320-main.xml | 2 +- Nasal/Panels/rmp.nas | 101 ++++++++++++++++++++++++------------------- 2 files changed, 57 insertions(+), 46 deletions(-) diff --git a/A320-main.xml b/A320-main.xml index 4b9cb26b..ba739759 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -1653,7 +1653,7 @@ - 0 + 121.5 123.2 true diff --git a/Nasal/Panels/rmp.nas b/Nasal/Panels/rmp.nas index 06b77d17..2f661011 100644 --- a/Nasal/Panels/rmp.nas +++ b/Nasal/Panels/rmp.nas @@ -96,6 +96,9 @@ var am_mode_rmp3 = props.globals.initNode("/systems/radio/rmp[2]/am-active", 0, var sel_crs_rmp1 = props.globals.initNode("/systems/radio/rmp[0]/select-crs", 1, "BOOL"); var sel_crs_rmp2 = props.globals.initNode("/systems/radio/rmp[1]/select-crs", 1, "BOOL"); +var vhf3_data_mode = props.globals.initNode("/systems/radio/vhf3-data-mode", 1, "BOOL"); +var data_mode_stby_rmp = props.globals.initNode("/systems/radio/data-mode-stby-rmp", 0, "INT"); + var init = func() { chan_rmp1.setValue("vhf1"); chan_rmp2.setValue("vhf2"); @@ -153,57 +156,52 @@ var update_active_vhf = func(vhf) { var sel3 = chan_rmp3.getValue(); if (vhf == 1) { - if (sel1 == "vhf1" or sel2 == "vhf1") { - var act = sprintf("%3.3f", act_vhf1.getValue()); + var act = sprintf("%3.3f", act_vhf1.getValue()); - if (sel1 == "vhf1") { - act_display_rmp1.setValue(act); - } - if (sel2 == "vhf1") { - act_display_rmp2.setValue(act); - } - if (sel3 == "vhf1") { - act_display_rmp3.setValue(act); - } + if (sel1 == "vhf1") { + act_display_rmp1.setValue(act); + } + if (sel2 == "vhf1") { + act_display_rmp2.setValue(act); + } + if (sel3 == "vhf1") { + act_display_rmp3.setValue(act); } } else if (vhf == 2) { - if (sel1 == "vhf2" or sel2 == "vhf2") { - var act = sprintf("%3.3f", act_vhf2.getValue()); + var act = sprintf("%3.3f", act_vhf2.getValue()); - if (sel1 == "vhf2") { - act_display_rmp1.setValue(act); - } - if (sel2 == "vhf2") { - act_display_rmp2.setValue(act); - } - if (sel3 == "vhf2") { - act_display_rmp3.setValue(act); - } + if (sel1 == "vhf2") { + act_display_rmp1.setValue(act); + } + if (sel2 == "vhf2") { + act_display_rmp2.setValue(act); + } + if (sel3 == "vhf2") { + act_display_rmp3.setValue(act); } } else if (vhf == 3) { - if (sel1 == "vhf3" or sel2 == "vhf3") { - var act = sprintf("%3.3f", act_vhf3.getValue()); + var act = sprintf("%3.3f", act_vhf3.getValue()); + var data_mode = vhf3_data_mode.getValue(); - if (sel1 == "vhf3") { - if (act == 0) { - act_display_rmp1.setValue("data"); - } else { - act_display_rmp1.setValue(act); - } + if (sel1 == "vhf3") { + if (data_mode == 1) { + act_display_rmp1.setValue("data"); + } else { + act_display_rmp1.setValue(act); } - if (sel2 == "vhf3") { - if (act == 0) { - act_display_rmp2.setValue("data"); - } else { - act_display_rmp2.setValue(act); - } + } + if (sel2 == "vhf3") { + if (data_mode == 1) { + act_display_rmp2.setValue("data"); + } else { + act_display_rmp2.setValue(act); } - if (sel3 == "vhf3") { - if (act == 0) { - act_display_rmp3.setValue("data"); - } else { - act_display_rmp3.setValue(act); - } + } + if (sel3 == "vhf3") { + if (data_mode == 1) { + act_display_rmp3.setValue("data"); + } else { + act_display_rmp3.setValue(act); } } } else if (vhf == 4) { @@ -283,6 +281,7 @@ var update_displays_nav = func(nav) { } var update_stby_freq = func(rmp_no, freq) { + var data_mode = vhf3_data_mode.getValue(); if (rmp_no == 0) { if (freq == 1) { var stby = sprintf("%3.3f", stby_rmp1_vhf1.getValue()); @@ -296,7 +295,7 @@ var update_stby_freq = func(rmp_no, freq) { var stby = sprintf("%5.0f", stby_rmp1_hf2.getValue()); } - if (stby == 0) { + if (data_mode == 0 and data_mode_stby_rmp.getValue() == 0) { stby_display_rmp1.setValue("data"); } else { stby_display_rmp1.setValue(stby); @@ -314,7 +313,7 @@ var update_stby_freq = func(rmp_no, freq) { var stby = sprintf("%5.0f", stby_rmp2_hf2.getValue()); } - if (stby == 0) { + if (data_mode == 0 and data_mode_stby_rmp.getValue() == 1) { stby_display_rmp2.setValue("data"); } else { stby_display_rmp2.setValue(stby); @@ -332,7 +331,7 @@ var update_stby_freq = func(rmp_no, freq) { var stby = sprintf("%5.0f", stby_rmp3_hf2.getValue()); } - if (stby == 0) { + if (data_mode == 0 and data_mode_stby_rmp.getValue() == 2) { stby_display_rmp3.setValue("data"); } else { stby_display_rmp3.setValue(stby); @@ -399,6 +398,18 @@ var transfer = func(rmp_no) { var sel_crs = getprop("/systems/radio/rmp[" ~ rmp_no ~ "]/select-crs"); if (string.match(sel_chan, "vhf[1-3]")) { + var data_mode = vhf3_data_mode.getValue(); + if (string.match(sel_chan, "vhf3") and ((data_mode_stby_rmp.getValue() == rmp_no and data_mode == 0) or data_mode == 1)) { + if (data_mode == 0) + { + vhf3_data_mode.setValue(1); + } + else + { + vhf3_data_mode.setValue(0); + data_mode_stby_rmp.setValue(rmp_no); + } + } var mod1 = int(string.replace(sel_chan, "vhf", "")); var mod = mod1 - 1; From 9252af7f805ea5b1ec46aca7e0a3efe10fd1fa8a Mon Sep 17 00:00:00 2001 From: legoboyvdlp R Date: Sat, 6 Mar 2021 19:54:29 +0000 Subject: [PATCH 56/58] Fix VHF3 --- Nasal/ECAM/ECAM-logic.nas | 2 +- revision.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Nasal/ECAM/ECAM-logic.nas b/Nasal/ECAM/ECAM-logic.nas index 2a534c32..7dc62249 100644 --- a/Nasal/ECAM/ECAM-logic.nas +++ b/Nasal/ECAM/ECAM-logic.nas @@ -3569,7 +3569,7 @@ var messages_right_memo = func { wing_aice.active = 0; } - if (getprop("instrumentation/comm[2]/frequencies/selected-mhz") != 0 and (phaseVarMemo3 == 1 or phaseVarMemo3 == 2 or phaseVarMemo3 == 6 or phaseVarMemo3 == 9 or phaseVarMemo3 == 10)) { + if (!getprop("/systems/radio/vhf3-data-mode") and (phaseVarMemo3 == 1 or phaseVarMemo3 == 2 or phaseVarMemo3 == 6 or phaseVarMemo3 == 9 or phaseVarMemo3 == 10)) { vhf3_voice.active = 1; } else { vhf3_voice.active = 0; diff --git a/revision.txt b/revision.txt index 801f1801..31ff414b 100644 --- a/revision.txt +++ b/revision.txt @@ -1 +1 @@ -47 \ No newline at end of file +48 \ No newline at end of file From b33dd172d7e3e8a13199b253c5a032ce96c3c2e6 Mon Sep 17 00:00:00 2001 From: Stefan Seifert Date: Mon, 8 Mar 2021 16:30:00 +0100 Subject: [PATCH 57/58] First stab at a remote MCDU via HTTP --- README.md | 3 + mcdu.html | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100644 mcdu.html diff --git a/README.md b/README.md index 53eeea83..5710623f 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ It is highly reccomended to purchase a NAVIGRAPH subscription and download their To install navdata, create a folder FMSDATA, and add it to your additional scenery folders, at the top of the list. Inside that folder, place all the XXXX.procedures.xml files, in the format FMSDATA/X/X/X/XXXX.procedures.xml. For instance, FMSDATA/Airports/E/G/K/EGKK.procedures.xml. +## Remote MCDU +If you want to run the MCDU on a phone or tablet for better realism and easier input, put mcdu.html into the FGDATA/Phi folder, run FlightGear with enabled HTTP server (i.e. command line --httpd=8080) and open http://your-flightgear-computer:8080/mcdu.html in the browser on your phone or tablet. + ## Installation If you have issues installing, please check INSTALL.MD! Specifically, make sure you remove -dev from the folder name! diff --git a/mcdu.html b/mcdu.html new file mode 100644 index 00000000..f9d93c08 --- /dev/null +++ b/mcdu.html @@ -0,0 +1,196 @@ + + + + MCDU + + + + + + + + + + + + + + + + + + +
  
11
22
33
44
55
66
  
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ABCDE
FGHIJ
KLMNO
PQRST
UVWXY
Z/SPOVFYCLR
+ + + + + + + + + + + + + +
AIR
PORT
+ + + + + + + + + + + + + + + + + + + + + +
123
456
789
.0-
+ + From 9f1bab9bb63a3270b4af256ea8930676bea856ce Mon Sep 17 00:00:00 2001 From: Stefan Seifert Date: Wed, 10 Mar 2021 18:42:32 +0100 Subject: [PATCH 58/58] Fix CanvasImage: task running, pausing for 15 seconds by remote MCDU The Canvas screenshot code doesn't like multiple concurrent screenshot requests, so schedule the next load for after a currently running one is done. --- mcdu.html | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/mcdu.html b/mcdu.html index f9d93c08..28e57ea7 100644 --- a/mcdu.html +++ b/mcdu.html @@ -6,8 +6,16 @@