Advertisement
Guest User

Untitled

a guest
Feb 1st, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.45 KB | None | 0 0
  1. <?xml version="1.0"?>
  2. <PropertyList>
  3. <name>demo-mapstructure</name>
  4. <modal>false</modal>
  5. <layout>vbox</layout>
  6.  
  7. <canvas>
  8. <name>vor-map</name>
  9. <valign>fill</valign>
  10. <halign>fill</halign>
  11. <stretch>true</stretch>
  12. <pref-width>600</pref-width>
  13. <pref-height>400</pref-height>
  14. <nasal>
  15. <!--
  16. this is the Canvas-specific Nasal section where you can run your own Nasal code
  17. to access and animate the canvas region
  18. -->
  19. <load><![CDATA[
  20. #Variables
  21. var ElapsedSec = props.globals.getNode("sim/time/elapsed-sec");
  22.  
  23.  
  24. #Radar object creation
  25.  
  26. # Radar engine class
  27. var radar =
  28. {
  29. #################### creates a new engine object################"
  30. new: func(Range)
  31. {
  32. #Objet Radar
  33. var m = { parents : [radar]};
  34.  
  35. #Radar range
  36. m.range = Range;
  37.  
  38.  
  39. #Aircraft Orientation/pitch
  40. m.parentAircraftHeading = props.globals.getNode("orientation/heading-deg");
  41. m.parentAircraftPitch = props.globals.getNode("orientation/pitch-deg");
  42.  
  43.  
  44. #Where to find the initial information
  45. m.Mp = props.globals.getNode("ai/models",1);
  46.  
  47. #Array needed to get back MP
  48. m.tgts_list = [];
  49.  
  50.  
  51. #Return the created object
  52. return m;
  53. },
  54. # creates a Radar update loop (optional)
  55. init: func
  56. {
  57. me.look_IntoMP();
  58. },
  59.  
  60.  
  61. ################# Function get/set to adusjt properties once the whole things is runing
  62. setRange: func(n)
  63. {
  64. me.range = n;
  65. },
  66. getRange: func()
  67. {
  68. return me.range;
  69. },
  70.  
  71.  
  72.  
  73.  
  74. ################# Main Update Loop ########################
  75. look_IntoMP: func
  76. {
  77. #init the array
  78. me.tgts_list = [];
  79.  
  80. #Put All the /ai/models into this array
  81. var raw_list = me.Mp.getChildren();
  82.  
  83. #Then
  84. foreach( var c; raw_list ) {
  85.  
  86. var type = c.getName();
  87. if (!c.getNode("valid", 1).getValue()) {
  88. continue;
  89. }
  90. print(type);
  91. var HaveRadarNode = c.getNode("radar");
  92. if (type == "multiplayer" or (type == "tanker" and HaveRadarNode != nil) or type == "aircraft" or type=="carrier" or type=="ship") {
  93. var u = Target.new(c);
  94. if ( u.Range != nil) {
  95. var u_rng = u.get_range();
  96. if (u_rng < me.range) {
  97. print(u.get_Callsign());
  98. }
  99. }
  100. }
  101.  
  102. }
  103.  
  104. },
  105.  
  106. # Main loop ###############
  107. rdr_loop: func
  108. {
  109.  
  110. },
  111. };
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118. # Target class
  119. var Target = {
  120. new : func (c) {
  121. var obj = { parents : [Target]};
  122. obj.RdrProp = c.getNode("radar");
  123. obj.Heading = c.getNode("orientation/true-heading-deg");
  124. obj.Alt = c.getNode("position/altitude-ft");
  125. obj.AcType = c.getNode("sim/model/ac-type");
  126. obj.type = c.getName();
  127. obj.index = c.getIndex();
  128. obj.string = "ai/models/" ~ obj.type ~ "[" ~ obj.index ~ "]";
  129. obj.shortstring = obj.type ~ "[" ~ obj.index ~ "]";
  130. obj.InstrTgts = props.globals.getNode("instrumentation/radar2/targets", 1);
  131. obj.TgtsFiles = obj.InstrTgts.getNode(obj.shortstring, 1);
  132. obj.Callsign = c.getNode("callsign");
  133.  
  134. obj.Range = obj.RdrProp.getNode("range-nm");
  135. obj.Bearing = obj.RdrProp.getNode("bearing-deg");
  136. obj.Elevation = obj.RdrProp.getNode("elevation-deg");
  137. obj.BBearing = obj.TgtsFiles.getNode("bearing-deg", 1);
  138. obj.BHeading = obj.TgtsFiles.getNode("true-heading-deg", 1);
  139. obj.RangeScore = obj.TgtsFiles.getNode("range-score", 1);
  140. obj.RelBearing = obj.TgtsFiles.getNode("ddd-relative-bearing", 1);
  141. obj.Carrier = obj.TgtsFiles.getNode("carrier", 1);
  142. obj.EcmSignal = obj.TgtsFiles.getNode("ecm-signal", 1);
  143. obj.EcmSignalNorm = obj.TgtsFiles.getNode("ecm-signal-norm", 1);
  144. obj.EcmTypeNum = obj.TgtsFiles.getNode("ecm_type_num", 1);
  145. obj.Display = obj.TgtsFiles.getNode("display", 1);
  146. obj.Fading = obj.TgtsFiles.getNode("ddd-echo-fading", 1);
  147. obj.DddDrawRangeNm = obj.TgtsFiles.getNode("ddd-draw-range-nm", 1);
  148. obj.TidDrawRangeNm = obj.TgtsFiles.getNode("tid-draw-range-nm", 1);
  149. obj.RoundedAlt = obj.TgtsFiles.getNode("rounded-alt-ft", 1);
  150. obj.TimeLast = obj.TgtsFiles.getNode("closure-last-time", 1);
  151. obj.RangeLast = obj.TgtsFiles.getNode("closure-last-range-nm", 1);
  152. obj.ClosureRate = obj.TgtsFiles.getNode("closure-rate-kts", 1);
  153.  
  154. obj.TimeLast.setValue(ElapsedSec.getValue());
  155. if ( obj.Range != nil) {
  156. obj.RangeLast.setValue(obj.Range.getValue());
  157. } else {
  158. obj.RangeLast.setValue(0);
  159. }
  160. obj.RadarStandby = c.getNode("sim/multiplay/generic/int[2]");
  161.  
  162. obj.deviation = nil;
  163.  
  164. return obj;
  165. },
  166. get_Callsign : func {
  167. var n = me.Callsign.getValue();
  168. return n;
  169. },
  170. get_heading : func {
  171. var n = me.Heading.getValue();
  172. me.BHeading.setValue(n);
  173. return n;
  174. },
  175. get_bearing : func {
  176. var n = me.Bearing.getValue();
  177. me.BBearing.setValue(n);
  178. return n;
  179. },
  180. set_relative_bearing : func(n) {
  181. me.RelBearing.setValue(n);
  182. },
  183. get_reciprocal_bearing : func {
  184. return geo.normdeg(me.get_bearing() + 180);
  185. },
  186. get_deviation : func(true_heading_ref) {
  187. me.deviation = - deviation_normdeg(true_heading_ref, me.get_bearing());
  188. return me.deviation;
  189. },
  190. get_altitude : func {
  191. return me.Alt.getValue();
  192. },
  193. get_total_elevation : func(own_pitch) {
  194. me.deviation = - deviation_normdeg(own_pitch, me.Elevation.getValue());
  195. return me.deviation;
  196. },
  197. get_range : func {
  198. return me.Range.getValue();
  199. },
  200. get_horizon : func(own_alt) {
  201. var tgt_alt = me.get_altitude();
  202. if ( tgt_alt != nil ) {
  203. if ( own_alt < 0 ) { own_alt = 0.001 }
  204. if ( debug.isnan(tgt_alt)) {
  205. return(0);
  206. }
  207. if ( tgt_alt < 0 ) { tgt_alt = 0.001 }
  208. return radardist.radar_horizon( own_alt, tgt_alt );
  209. } else {
  210. return(0);
  211. }
  212. },
  213. check_carrier_type : func {
  214. var type = "none";
  215. var carrier = 0;
  216. if ( me.AcType != nil ) { type = me.AcType.getValue() }
  217. if ( type == "MP-Nimitz" or type == "MP-Eisenhower" or type == "MP-Vinson") { carrier = 1 }
  218. if ( type == "Nimitz" or type == "Eisenhower" or type == "Vinson") { carrier = 1 }
  219. # This works only after the mp-carrier model has been loaded. Before that it is seen like a common aircraft.
  220. me.Carrier.setBoolValue(carrier);
  221. return carrier;
  222. },
  223. get_rdr_standby : func {
  224. var s = 0;
  225. if ( me.RadarStandby != nil ) {
  226. s = me.RadarStandby.getValue();
  227. if (s == nil) { s = 0 } elsif (s != 1) { s = 0 }
  228. }
  229. return s;
  230. },
  231. get_display : func() {
  232. return me.Display.getValue();
  233. },
  234. set_display : func(n) {
  235. me.Display.setBoolValue(n);
  236. },
  237. get_fading : func() {
  238. var fading = me.Fading.getValue();
  239. if ( fading == nil ) { fading = 0 }
  240. return fading;
  241. },
  242. set_fading : func(n) {
  243. me.Fading.setValue(n);
  244. },
  245. set_ddd_draw_range_nm : func(n) {
  246. me.DddDrawRangeNm.setValue(n);
  247. },
  248. set_hud_draw_horiz_dev : func(n) {
  249. me.HudDrawHorizDev.setValue(n);
  250. },
  251. set_tid_draw_range_nm : func(n) {
  252. me.TidDrawRangeNm.setValue(n);
  253. },
  254. set_rounded_alt : func(n) {
  255. me.RoundedAlt.setValue(n);
  256. },
  257. get_closure_rate : func() {
  258. var dt = ElapsedSec.getValue() - me.TimeLast.getValue();
  259. var rng = me.Range.getValue();
  260. var lrng = me.RangeLast.getValue();
  261. if ( debug.isnan(rng) or debug.isnan(lrng)) {
  262. #print("####### get_closure_rate(): rng or lrng = nan ########");
  263. me.ClosureRate.setValue(0);
  264. me.RangeLast.setValue(0);
  265. return(0);
  266. }
  267. var t_distance = lrng - rng;
  268. var cr = (dt > 0) ? t_distance/dt*3600 : 0;
  269. me.ClosureRate.setValue(cr);
  270. me.RangeLast.setValue(rng);
  271. return(cr);
  272. },
  273. list : [],
  274. };
  275.  
  276. #########################################################################
  277. ################### RADAR Creation ######################################
  278. #########################################################################
  279.  
  280. var myRadar = radar.new(100);
  281. myRadar.init();
  282.  
  283.  
  284. #########################################################################
  285. ###########################CANVAS PART ##################################
  286. #########################################################################
  287. var myCanvas = canvas.get( cmdarg() );
  288. var TestMap = myCanvas.createGroup().createChild("map");
  289.  
  290. foreach(var type; var layer_types = ['VOR',] )
  291. TestMap.addLayer(factory: canvas.SymbolLayer, type_arg: type);
  292.  
  293. # Center the map's origin:
  294. TestMap.setTranslation(300,200);
  295.  
  296. # Initialize a range (TODO: LayeredMap.Controller):
  297. TestMap.set("range", 100);
  298.  
  299. # Little cursor of current position:
  300. TestMap.createChild("path").rect(-5,-5,10,10).setColorFill(1,1,1).setColor(0,1,0);
  301.  
  302. # And make it move with our aircraft:
  303. TestMap.setController("Aircraft position"); # from aircraftpos.controller
  304.  
  305. ]]></load>
  306. <!-- all the code here will be executed once the dialog is closed, so you
  307. should put your cleanup code here.
  308. -->
  309. <unload><![CDATA[
  310. TestMap.del();
  311. ]]></unload>
  312.  
  313. </nasal>
  314. </canvas>
  315.  
  316. </PropertyList>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement