252
edits
m (→Core modules) |
|||
Line 10: | Line 10: | ||
This allows to use functions from other core files, which have just been defined, e.g. which were not yet available when parsing the file. | This allows to use functions from other core files, which have just been defined, e.g. which were not yet available when parsing the file. | ||
== | == Optional load-once modules == | ||
After the files in the root directory have been processed, the first level of subdirectories is scanned for .nas files. | After the files in the root directory have been processed, the first level of subdirectories is scanned for .nas files. | ||
Each subdirectory defines a module / namespace which becomes available only after the files in the subdirectory have been completly processed, | Each subdirectory defines a module / namespace which becomes available only after the files in the subdirectory have been completly processed, | ||
e.g. a variable foo in module bar becomes available as bar.foo only after parsing of the respective folder. | e.g. a variable foo in module bar becomes available as bar.foo only after parsing of the respective folder. | ||
{{note| | |||
Sub-sub-directories will not be scanned for .nas files - at least not automatically on FG startup. | |||
Of course, files of sub-sub-directories can be included (sooner or later) by the Nasal code that ''is'' being processed, so optional code can be loaded on demand. | Of course, files of sub-sub-directories can be included (sooner or later) by the Nasal code that ''is'' being processed, so optional code can be loaded on demand. | ||
}} | |||
=== Enabling of load-once modules === | |||
Enabling / loading of this modules is done in the C++ code and is a little bit complicated (see FG sources /src/Scripting/NasalSys.cxx). | |||
''FGNasalSys::init()'' scans FGDATA/Nasal for subdirectories and calls ''FGNasalSys::addModule()'' for each subdirectory passing its name as module name and a list of all .nas files in it. | |||
''FGNasalSys::addModule()'' in turn creates property nodes for each file like ''/nasal/<moduleName>/file[i] = <filename>'' | |||
{{caution| | |||
For each subdirectory there SHALL be an entry in FGDATA/defaults.xml defining the default state of the module. }} | |||
{{warning| | |||
At the time of writing, addModule() creates ''/nasal/<moduleName>/enabled = true'' if it was not defined in defaults.xml. | |||
This is about to be corrected }} | |||
init() continues, sets the property ''/sim/signal/nasal-dir-initialized'' to true and calls ''FGNasalSys::loadPropertyScripts()'' | |||
''FGNasalSys::loadPropertyScripts()'' checks ''/nasal/<moduleName>/enabled''. If it is true, the files will be loaded by calling ''FGNasalSys::loadModule()'' which in turn calls ''FGNasalSys::createModule()''. | |||
Otherwise a listener is added that will load the module when enabled is set to true. | |||
== Enabling / Disabling modules == | == Enabling / Disabling modules == |
edits