You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-10 13:00:37 +00:00
Expose registration of physics servers to GDExtension
This exposes PhysicsServer2DManager and PhysicsServer3DManager.
This commit is contained in:
@@ -126,7 +126,9 @@ static RenderingServer *rendering_server = nullptr;
|
||||
static CameraServer *camera_server = nullptr;
|
||||
static XRServer *xr_server = nullptr;
|
||||
static TextServerManager *tsman = nullptr;
|
||||
static PhysicsServer3DManager *physics_server_3d_manager = nullptr;
|
||||
static PhysicsServer3D *physics_server_3d = nullptr;
|
||||
static PhysicsServer2DManager *physics_server_2d_manager = nullptr;
|
||||
static PhysicsServer2D *physics_server_2d = nullptr;
|
||||
static NavigationServer3D *navigation_server_3d = nullptr;
|
||||
static NavigationServer2D *navigation_server_2d = nullptr;
|
||||
@@ -223,25 +225,24 @@ static String get_full_version_string() {
|
||||
return String(VERSION_FULL_BUILD) + hash;
|
||||
}
|
||||
|
||||
// FIXME: Could maybe be moved to PhysicsServer3DManager and PhysicsServer2DManager directly
|
||||
// to have less code in main.cpp.
|
||||
// FIXME: Could maybe be moved to have less code in main.cpp.
|
||||
void initialize_physics() {
|
||||
/// 3D Physics Server
|
||||
physics_server_3d = PhysicsServer3DManager::new_server(
|
||||
physics_server_3d = PhysicsServer3DManager::get_singleton()->new_server(
|
||||
ProjectSettings::get_singleton()->get(PhysicsServer3DManager::setting_property_name));
|
||||
if (!physics_server_3d) {
|
||||
// Physics server not found, Use the default physics
|
||||
physics_server_3d = PhysicsServer3DManager::new_default_server();
|
||||
physics_server_3d = PhysicsServer3DManager::get_singleton()->new_default_server();
|
||||
}
|
||||
ERR_FAIL_COND(!physics_server_3d);
|
||||
physics_server_3d->init();
|
||||
|
||||
/// 2D Physics server
|
||||
physics_server_2d = PhysicsServer2DManager::new_server(
|
||||
ProjectSettings::get_singleton()->get(PhysicsServer2DManager::setting_property_name));
|
||||
// 2D Physics server
|
||||
physics_server_2d = PhysicsServer2DManager::get_singleton()->new_server(
|
||||
ProjectSettings::get_singleton()->get(PhysicsServer2DManager::get_singleton()->setting_property_name));
|
||||
if (!physics_server_2d) {
|
||||
// Physics server not found, Use the default physics
|
||||
physics_server_2d = PhysicsServer2DManager::new_default_server();
|
||||
physics_server_2d = PhysicsServer2DManager::get_singleton()->new_default_server();
|
||||
}
|
||||
ERR_FAIL_COND(!physics_server_2d);
|
||||
physics_server_2d->init();
|
||||
@@ -450,6 +451,9 @@ Error Main::test_setup() {
|
||||
tsman->add_interface(ts);
|
||||
}
|
||||
|
||||
physics_server_3d_manager = memnew(PhysicsServer3DManager);
|
||||
physics_server_2d_manager = memnew(PhysicsServer2DManager);
|
||||
|
||||
// From `Main::setup2()`.
|
||||
initialize_modules(MODULE_INITIALIZATION_LEVEL_CORE);
|
||||
register_core_extensions();
|
||||
@@ -555,6 +559,12 @@ void Main::test_cleanup() {
|
||||
if (tsman) {
|
||||
memdelete(tsman);
|
||||
}
|
||||
if (physics_server_3d_manager) {
|
||||
memdelete(physics_server_3d_manager);
|
||||
}
|
||||
if (physics_server_2d_manager) {
|
||||
memdelete(physics_server_2d_manager);
|
||||
}
|
||||
if (globals) {
|
||||
memdelete(globals);
|
||||
}
|
||||
@@ -1783,6 +1793,9 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||
tsman->add_interface(ts);
|
||||
}
|
||||
|
||||
physics_server_3d_manager = memnew(PhysicsServer3DManager);
|
||||
physics_server_2d_manager = memnew(PhysicsServer2DManager);
|
||||
|
||||
register_server_types();
|
||||
initialize_modules(MODULE_INITIALIZATION_LEVEL_SERVERS);
|
||||
NativeExtensionManager::get_singleton()->initialize_extensions(NativeExtension::INITIALIZATION_LEVEL_SERVERS);
|
||||
@@ -3156,6 +3169,9 @@ void Main::cleanup(bool p_force) {
|
||||
|
||||
finalize_theme_db();
|
||||
|
||||
// Before deinitializing server extensions, finalize servers which may be loaded as extensions.
|
||||
finalize_physics();
|
||||
|
||||
NativeExtensionManager::get_singleton()->deinitialize_extensions(NativeExtension::INITIALIZATION_LEVEL_SERVERS);
|
||||
uninitialize_modules(MODULE_INITIALIZATION_LEVEL_SERVERS);
|
||||
unregister_server_types();
|
||||
@@ -3177,7 +3193,6 @@ void Main::cleanup(bool p_force) {
|
||||
|
||||
OS::get_singleton()->finalize();
|
||||
|
||||
finalize_physics();
|
||||
finalize_navigation_server();
|
||||
finalize_display();
|
||||
|
||||
@@ -3206,6 +3221,12 @@ void Main::cleanup(bool p_force) {
|
||||
if (tsman) {
|
||||
memdelete(tsman);
|
||||
}
|
||||
if (physics_server_3d_manager) {
|
||||
memdelete(physics_server_3d_manager);
|
||||
}
|
||||
if (physics_server_2d_manager) {
|
||||
memdelete(physics_server_2d_manager);
|
||||
}
|
||||
if (globals) {
|
||||
memdelete(globals);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user