SHARE
TWEET

Untitled

a guest Feb 1st, 2014 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top