From f2034e048240d71b32392e01b63421f6187f90e4 Mon Sep 17 00:00:00 2001 From: Inuyaksa Date: Sat, 13 Feb 2021 00:38:43 +0100 Subject: [PATCH] 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%