mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Create default World physics spaces on demand only
Changes that the default physics spaces of World resources are only created on first use.
This commit is contained in:
parent
2b710bc336
commit
026549db2e
8 changed files with 78 additions and 39 deletions
|
@ -43,6 +43,14 @@ RID World2D::get_canvas() const {
|
|||
}
|
||||
|
||||
RID World2D::get_space() const {
|
||||
if (space.is_null()) {
|
||||
space = PhysicsServer2D::get_singleton()->space_create();
|
||||
PhysicsServer2D::get_singleton()->space_set_active(space, true);
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY, GLOBAL_GET("physics/2d/default_gravity"));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_GET("physics/2d/default_gravity_vector"));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_LINEAR_DAMP, GLOBAL_GET("physics/2d/default_linear_damp"));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP, GLOBAL_GET("physics/2d/default_angular_damp"));
|
||||
}
|
||||
return space;
|
||||
}
|
||||
|
||||
|
@ -71,19 +79,11 @@ void World2D::_bind_methods() {
|
|||
}
|
||||
|
||||
PhysicsDirectSpaceState2D *World2D::get_direct_space_state() {
|
||||
return PhysicsServer2D::get_singleton()->space_get_direct_state(space);
|
||||
return PhysicsServer2D::get_singleton()->space_get_direct_state(get_space());
|
||||
}
|
||||
|
||||
World2D::World2D() {
|
||||
canvas = RenderingServer::get_singleton()->canvas_create();
|
||||
|
||||
// Create and configure space2D to be more friendly with pixels than meters
|
||||
space = PhysicsServer2D::get_singleton()->space_create();
|
||||
PhysicsServer2D::get_singleton()->space_set_active(space, true);
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY, GLOBAL_DEF_BASIC("physics/2d/default_gravity", 980.0));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF_BASIC("physics/2d/default_gravity_vector", Vector2(0, 1)));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_LINEAR_DAMP, GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "physics/2d/default_linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), 0.1));
|
||||
PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF(PropertyInfo(Variant::FLOAT, "physics/2d/default_angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater"), 1.0));
|
||||
}
|
||||
|
||||
World2D::~World2D() {
|
||||
|
@ -91,7 +91,9 @@ World2D::~World2D() {
|
|||
ERR_FAIL_NULL(PhysicsServer2D::get_singleton());
|
||||
ERR_FAIL_NULL(NavigationServer2D::get_singleton());
|
||||
RenderingServer::get_singleton()->free(canvas);
|
||||
PhysicsServer2D::get_singleton()->free(space);
|
||||
if (space.is_valid()) {
|
||||
PhysicsServer2D::get_singleton()->free(space);
|
||||
}
|
||||
if (navigation_map.is_valid()) {
|
||||
NavigationServer2D::get_singleton()->free(navigation_map);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue