Howto:Nasal in scenery object XML files: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
mNo edit summary
(Cleanup)
Line 1: Line 1:
{{Stub}}
[[FlightGear]] supports '''embedding [[Nasal]] code (scripts) into object XML files'''. This can be used for 'intelligent' objects -- such as for example special lighting features, specific lighthouse signals, animated hangar doors. In other words, things that couldn't be done with [[Howto:Animate models|animations]] alone.  
For introductory information about Nasal, you'll want to check out [[Nasal scripting language]].


(As of 05/2009, this is work in progress and entirely based on [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg01757.html]).
The code is run as soon as the tile loader decides to load the model. It can use listeners and timers and so run as long as it wishes. If the object is removed from memory, then a variable is changed in the object's namespace, so that the code can stop itself. An optional destructor part can be used for further cleanup (remove listeners etc.)
 
There's now support for embedding Nasal code (scripts) into object XML files.
 
This can be used for 'intelligent' objects -- such as for example special lighting features, specific lighthouse signals, things that couldn't be done with animations alone.
 
The code is run as soon as the tile loader decided to load the model. It can use listeners and timers and so run as long as it wishes. If the object is removed from memory, then a variable is changed in the object's namespace, so that the code can stop itself. An optional destructor part can be used for further cleanup (remove listeners etc.)


It is using two properies <load> and <unload>.
It is using two properies <load> and <unload>.
Example:


<syntaxhighlight lang="xml">
  <?xml version="1.0"?>
  <?xml version="1.0"?>
  <PropertyList>
  <PropertyList>
Line 32: Line 25:
                 </unload>
                 </unload>
         </nasal>
         </nasal>
        <animation>
                <type>noshadow</type>
                <object-name>helipad</object-name>
        </animation>
  </PropertyList>
  </PropertyList>
</syntaxhighlight>


Advice for testing: The object has to be present at sim startup. If you place an object with the UFO the xml-code gets executed, but not the NASAL code.
Advice for testing: the object has to be present at sim startup. If you place an object with the UFO the xml-code gets executed, but not the Nasal code.


[[Category:Nasal howto]]
[[Category:Nasal howto]]
[[Category:Scenery enhancement]]
[[Category:Scenery enhancement]]

Revision as of 20:41, 6 March 2013

FlightGear supports embedding Nasal code (scripts) into object XML files. This can be used for 'intelligent' objects -- such as for example special lighting features, specific lighthouse signals, animated hangar doors. In other words, things that couldn't be done with animations alone.

The code is run as soon as the tile loader decides to load the model. It can use listeners and timers and so run as long as it wishes. If the object is removed from memory, then a variable is changed in the object's namespace, so that the code can stop itself. An optional destructor part can be used for further cleanup (remove listeners etc.)

It is using two properies <load> and <unload>.

 <?xml version="1.0"?>
 <PropertyList>
        <path>helipad.ac</path>
        <nasal>
                <load>
                        loaded = 1;
                        print("Hello, I'm the helipad!");
                        var f = func {
                                if (!loaded) { return }
                                print("I'm still there!");
                                settimer(f, 5);
                        }
                        f();
                </load>
                <unload>
                        loaded = 0;
                        print("Bye, bye!")
                </unload>
        </nasal>
 </PropertyList>

Advice for testing: the object has to be present at sim startup. If you place an object with the UFO the xml-code gets executed, but not the Nasal code.