You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Make nodes handle their respective navigation source geometry
Makes nodes handle their respective navigation source geometry.
This commit is contained in:
@@ -164,10 +164,8 @@ static DisplayServer *display_server = nullptr;
|
||||
static RenderingServer *rendering_server = nullptr;
|
||||
static TextServerManager *tsman = nullptr;
|
||||
static ThemeDB *theme_db = nullptr;
|
||||
static NavigationServer2D *navigation_server_2d = nullptr;
|
||||
static PhysicsServer2DManager *physics_server_2d_manager = nullptr;
|
||||
static PhysicsServer2D *physics_server_2d = nullptr;
|
||||
static NavigationServer3D *navigation_server_3d = nullptr;
|
||||
#ifndef _3D_DISABLED
|
||||
static PhysicsServer3DManager *physics_server_3d_manager = nullptr;
|
||||
static PhysicsServer3D *physics_server_3d = nullptr;
|
||||
@@ -376,44 +374,6 @@ void finalize_display() {
|
||||
memdelete(display_server);
|
||||
}
|
||||
|
||||
void initialize_navigation_server() {
|
||||
ERR_FAIL_COND(navigation_server_3d != nullptr);
|
||||
ERR_FAIL_COND(navigation_server_2d != nullptr);
|
||||
|
||||
// Init 3D Navigation Server
|
||||
navigation_server_3d = NavigationServer3DManager::new_default_server();
|
||||
|
||||
// Fall back to dummy if no default server has been registered.
|
||||
if (!navigation_server_3d) {
|
||||
navigation_server_3d = memnew(NavigationServer3DDummy);
|
||||
}
|
||||
|
||||
// Should be impossible, but make sure it's not null.
|
||||
ERR_FAIL_NULL_MSG(navigation_server_3d, "Failed to initialize NavigationServer3D.");
|
||||
navigation_server_3d->init();
|
||||
|
||||
// Init 2D Navigation Server
|
||||
navigation_server_2d = NavigationServer2DManager::new_default_server();
|
||||
if (!navigation_server_2d) {
|
||||
navigation_server_2d = memnew(NavigationServer2DDummy);
|
||||
}
|
||||
|
||||
ERR_FAIL_NULL_MSG(navigation_server_2d, "Failed to initialize NavigationServer2D.");
|
||||
navigation_server_2d->init();
|
||||
}
|
||||
|
||||
void finalize_navigation_server() {
|
||||
ERR_FAIL_NULL(navigation_server_3d);
|
||||
navigation_server_3d->finish();
|
||||
memdelete(navigation_server_3d);
|
||||
navigation_server_3d = nullptr;
|
||||
|
||||
ERR_FAIL_NULL(navigation_server_2d);
|
||||
navigation_server_2d->finish();
|
||||
memdelete(navigation_server_2d);
|
||||
navigation_server_2d = nullptr;
|
||||
}
|
||||
|
||||
void initialize_theme_db() {
|
||||
theme_db = memnew(ThemeDB);
|
||||
}
|
||||
@@ -770,6 +730,9 @@ Error Main::test_setup() {
|
||||
// Default theme will be initialized later, after modules and ScriptServer are ready.
|
||||
initialize_theme_db();
|
||||
|
||||
NavigationServer3DManager::initialize_server(); // 3D server first because 2D depends on it.
|
||||
NavigationServer2DManager::initialize_server();
|
||||
|
||||
register_scene_types();
|
||||
register_driver_types();
|
||||
|
||||
@@ -792,8 +755,6 @@ Error Main::test_setup() {
|
||||
// Theme needs modules to be initialized so that sub-resources can be loaded.
|
||||
theme_db->initialize_theme_noproject();
|
||||
|
||||
initialize_navigation_server();
|
||||
|
||||
ERR_FAIL_COND_V(TextServerManager::get_singleton()->get_interface_count() == 0, ERR_CANT_CREATE);
|
||||
|
||||
/* Use one with the most features available. */
|
||||
@@ -854,7 +815,8 @@ void Main::test_cleanup() {
|
||||
|
||||
finalize_theme_db();
|
||||
|
||||
finalize_navigation_server();
|
||||
NavigationServer2DManager::finalize_server(); // 2D goes first as it uses the 3D server behind the scene.
|
||||
NavigationServer3DManager::finalize_server();
|
||||
|
||||
GDExtensionManager::get_singleton()->deinitialize_extensions(GDExtension::INITIALIZATION_LEVEL_SERVERS);
|
||||
uninitialize_modules(MODULE_INITIALIZATION_LEVEL_SERVERS);
|
||||
@@ -3389,6 +3351,11 @@ Error Main::setup2(bool p_show_boot_logo) {
|
||||
// Default theme will be initialized later, after modules and ScriptServer are ready.
|
||||
initialize_theme_db();
|
||||
|
||||
MAIN_PRINT("Main: Load Navigation");
|
||||
|
||||
NavigationServer3DManager::initialize_server(); // 3D server first because 2D depends on it.
|
||||
NavigationServer2DManager::initialize_server();
|
||||
|
||||
register_scene_types();
|
||||
register_driver_types();
|
||||
|
||||
@@ -3459,10 +3426,6 @@ Error Main::setup2(bool p_show_boot_logo) {
|
||||
|
||||
initialize_physics();
|
||||
|
||||
MAIN_PRINT("Main: Load Navigation");
|
||||
|
||||
initialize_navigation_server();
|
||||
|
||||
register_server_singletons();
|
||||
|
||||
// This loads global classes, so it must happen before custom loaders and savers are registered
|
||||
@@ -4703,7 +4666,8 @@ void Main::cleanup(bool p_force) {
|
||||
finalize_theme_db();
|
||||
|
||||
// Before deinitializing server extensions, finalize servers which may be loaded as extensions.
|
||||
finalize_navigation_server();
|
||||
NavigationServer2DManager::finalize_server(); // 2D goes first as it uses the 3D server behind the scene.
|
||||
NavigationServer3DManager::finalize_server();
|
||||
finalize_physics();
|
||||
|
||||
GDExtensionManager::get_singleton()->deinitialize_extensions(GDExtension::INITIALIZATION_LEVEL_SERVERS);
|
||||
|
||||
Reference in New Issue
Block a user