Howto:Nasal in scenery object XML files
Jump to navigation
Jump to search
The FlightGear forum has a subforum related to: Nasal Scripting |
Nasal scripting |
---|
Nasal internals |
---|
Memory Management (GC) |
FlightGear supports embedding Nasal scripts into scenery object XML files. This can be used for "intelligent" objects, such as special lighting features, specific lighthouse signals, and animated hangar doors. In other words, things that couldn't be done with animations alone.
In the example below, the code in the <load>
tag is run as soon as the tile loader decides to load the model. Using a maketimer()
, it prints a message every 5 seconds. When the object is removed from the memory, the code within the <unload>
tag is executed. The timer is stopped and a message is printed. The code in the <unload>
tag may also do things like removing listeners.
Warning In dialogs you have to use <open> and <close> instead of <load> and <unload> |
<?xml version="1.0" encoding="UTF-8"?>
<PropertyList>
<path>helipad.ac</path>
<nasal>
<load><![CDATA[
print("Hello, I'm the helipad!");
var timer = maketimer(5, func(){
print("I'm still here!");
});
timer.start();
]]></load>
<unload><![CDATA[
timer.stop();
print("Bye, bye!")
]]></unload>
</nasal>
</PropertyList>
Note The object has to be present at sim startup. If you place an object with the UFO, the XML code will be executed, but not the Nasal code. |
Note It is best practice to put Nasal code in a CDATA section. This prevents problems with the Nasal code containing predefined XML entities .
<nasal>
<load><![CDATA[
# ...
# your nasal code here
# ...
]]></load>
<nasal>
|