Refactor module initialization

* Changed to use the same stages as extensions.
* Makes the initialization more coherent, helping solve problems due to lack of stages.
* Makes it easier to port between module and extension.
* removed the DRIVER initialization level (no longer needed).
This commit is contained in:
reduz
2022-05-03 11:56:08 +02:00
parent 0a9d31a7eb
commit de0ca3b999
103 changed files with 897 additions and 454 deletions

View File

@@ -111,54 +111,62 @@ static void _editor_init() {
#endif // TOOLS_ENABLED
void register_gdscript_types() {
GDREGISTER_CLASS(GDScript);
void initialize_gdscript_module(ModuleInitializationLevel p_level) {
if (p_level == MODULE_INITIALIZATION_LEVEL_SERVERS) {
GDREGISTER_CLASS(GDScript);
script_language_gd = memnew(GDScriptLanguage);
ScriptServer::register_language(script_language_gd);
script_language_gd = memnew(GDScriptLanguage);
ScriptServer::register_language(script_language_gd);
resource_loader_gd.instantiate();
ResourceLoader::add_resource_format_loader(resource_loader_gd);
resource_loader_gd.instantiate();
ResourceLoader::add_resource_format_loader(resource_loader_gd);
resource_saver_gd.instantiate();
ResourceSaver::add_resource_format_saver(resource_saver_gd);
resource_saver_gd.instantiate();
ResourceSaver::add_resource_format_saver(resource_saver_gd);
gdscript_cache = memnew(GDScriptCache);
gdscript_cache = memnew(GDScriptCache);
GDScriptUtilityFunctions::register_functions();
}
#ifdef TOOLS_ENABLED
EditorNode::add_init_callback(_editor_init);
if (p_level == MODULE_INITIALIZATION_LEVEL_SERVERS) {
EditorNode::add_init_callback(_editor_init);
gdscript_translation_parser_plugin.instantiate();
EditorTranslationParser::get_singleton()->add_parser(gdscript_translation_parser_plugin, EditorTranslationParser::STANDARD);
gdscript_translation_parser_plugin.instantiate();
EditorTranslationParser::get_singleton()->add_parser(gdscript_translation_parser_plugin, EditorTranslationParser::STANDARD);
}
#endif // TOOLS_ENABLED
GDScriptUtilityFunctions::register_functions();
}
void unregister_gdscript_types() {
ScriptServer::unregister_language(script_language_gd);
void uninitialize_gdscript_module(ModuleInitializationLevel p_level) {
if (p_level == MODULE_INITIALIZATION_LEVEL_SERVERS) {
ScriptServer::unregister_language(script_language_gd);
if (gdscript_cache) {
memdelete(gdscript_cache);
if (gdscript_cache) {
memdelete(gdscript_cache);
}
if (script_language_gd) {
memdelete(script_language_gd);
}
ResourceLoader::remove_resource_format_loader(resource_loader_gd);
resource_loader_gd.unref();
ResourceSaver::remove_resource_format_saver(resource_saver_gd);
resource_saver_gd.unref();
GDScriptParser::cleanup();
GDScriptUtilityFunctions::unregister_functions();
}
if (script_language_gd) {
memdelete(script_language_gd);
}
ResourceLoader::remove_resource_format_loader(resource_loader_gd);
resource_loader_gd.unref();
ResourceSaver::remove_resource_format_saver(resource_saver_gd);
resource_saver_gd.unref();
#ifdef TOOLS_ENABLED
EditorTranslationParser::get_singleton()->remove_parser(gdscript_translation_parser_plugin, EditorTranslationParser::STANDARD);
gdscript_translation_parser_plugin.unref();
if (p_level == MODULE_INITIALIZATION_LEVEL_EDITOR) {
EditorTranslationParser::get_singleton()->remove_parser(gdscript_translation_parser_plugin, EditorTranslationParser::STANDARD);
gdscript_translation_parser_plugin.unref();
}
#endif // TOOLS_ENABLED
GDScriptParser::cleanup();
GDScriptUtilityFunctions::unregister_functions();
}
#ifdef TESTS_ENABLED

View File

@@ -31,7 +31,9 @@
#ifndef GDSCRIPT_REGISTER_TYPES_H
#define GDSCRIPT_REGISTER_TYPES_H
void register_gdscript_types();
void unregister_gdscript_types();
#include "modules/register_module_types.h"
void initialize_gdscript_module(ModuleInitializationLevel p_level);
void uninitialize_gdscript_module(ModuleInitializationLevel p_level);
#endif // GDSCRIPT_REGISTER_TYPES_H