diff options
Diffstat (limited to 'src/godot.cpp')
-rw-r--r-- | src/godot.cpp | 63 |
1 files changed, 15 insertions, 48 deletions
diff --git a/src/godot.cpp b/src/godot.cpp index 0ea0344..7e7f2eb 100644 --- a/src/godot.cpp +++ b/src/godot.cpp @@ -47,8 +47,9 @@ void *token = nullptr; } // namespace internal -GDExtensionBinding::Callback GDExtensionBinding::init_callbacks[GDNATIVE_MAX_INITIALIZATION_LEVEL] = {}; -GDExtensionBinding::Callback GDExtensionBinding::terminate_callbacks[GDNATIVE_MAX_INITIALIZATION_LEVEL] = {}; +GDExtensionBinding::Callback GDExtensionBinding::init_callback = nullptr; +GDExtensionBinding::Callback GDExtensionBinding::terminate_callback = nullptr; +GDNativeInitializationLevel GDExtensionBinding::minimum_initialization_level = GDNATIVE_INITIALIZATION_CORE; GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, const GDNativeExtensionClassLibraryPtr p_library, GDNativeInitialization *r_initialization) { internal::gdn_interface = p_interface; @@ -57,15 +58,9 @@ GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, cons r_initialization->initialize = initialize_level; r_initialization->deinitialize = deinitialize_level; + r_initialization->minimum_initialization_level = minimum_initialization_level; - bool has_init = false; - for (int i = 0; i < GDNATIVE_MAX_INITIALIZATION_LEVEL; i++) { - if (init_callbacks[i]) { - r_initialization->minimum_initialization_level = GDNativeInitializationLevel(i); - has_init = true; - } - } - ERR_FAIL_COND_V_MSG(!has_init, false, "At least one initialization callback must be defined."); + ERR_FAIL_COND_V_MSG(init_callback == nullptr, false, "Initialization callback must be defined."); Variant::init_bindings(); @@ -75,8 +70,8 @@ GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, cons void GDExtensionBinding::initialize_level(void *userdata, GDNativeInitializationLevel p_level) { ClassDB::current_level = p_level; - if (init_callbacks[p_level]) { - init_callbacks[p_level](); + if (init_callback) { + init_callback(static_cast<ModuleInitializationLevel>(p_level)); } ClassDB::initialize(p_level); @@ -86,49 +81,21 @@ void GDExtensionBinding::deinitialize_level(void *userdata, GDNativeInitializati ClassDB::current_level = p_level; ClassDB::deinitialize(p_level); - if (terminate_callbacks[p_level]) { - terminate_callbacks[p_level](); + if (terminate_callback) { + terminate_callback(static_cast<ModuleInitializationLevel>(p_level)); } } -void GDExtensionBinding::InitObject::register_core_initializer(Callback p_core_init) const { - GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_CORE] = p_core_init; -} - -void GDExtensionBinding::InitObject::register_server_initializer(Callback p_server_init) const { - GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_SERVERS] = p_server_init; -} - -void GDExtensionBinding::InitObject::register_scene_initializer(Callback p_scene_init) const { - GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_SCENE] = p_scene_init; -} - -void GDExtensionBinding::InitObject::register_driver_initializer(Callback p_driver_init) const { - GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_DRIVER] = p_driver_init; -} - -void GDExtensionBinding::InitObject::register_editor_initializer(Callback p_editor_init) const { - GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_EDITOR] = p_editor_init; -} - -void GDExtensionBinding::InitObject::register_core_terminator(Callback p_core_terminate) const { - GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_CORE] = p_core_terminate; -} - -void GDExtensionBinding::InitObject::register_server_terminator(Callback p_server_terminate) const { - GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_SERVERS] = p_server_terminate; -} - -void GDExtensionBinding::InitObject::register_scene_terminator(Callback p_scene_terminate) const { - GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_SCENE] = p_scene_terminate; +void GDExtensionBinding::InitObject::register_initializer(Callback p_init) const { + GDExtensionBinding::init_callback = p_init; } -void GDExtensionBinding::InitObject::register_driver_terminator(Callback p_driver_terminate) const { - GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_DRIVER] = p_driver_terminate; +void GDExtensionBinding::InitObject::register_terminator(Callback p_terminate) const { + GDExtensionBinding::terminate_callback = p_terminate; } -void GDExtensionBinding::InitObject::register_editor_terminator(Callback p_editor_terminate) const { - GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_EDITOR] = p_editor_terminate; +void GDExtensionBinding::InitObject::set_minimum_library_initialization_level(ModuleInitializationLevel p_level) const { + GDExtensionBinding::minimum_initialization_level = static_cast<GDNativeInitializationLevel>(p_level); } GDNativeBool GDExtensionBinding::InitObject::init() const { |