diff --git a/doc/classes/Physics2DServer.xml b/doc/classes/Physics2DServer.xml index ab8e872b9a5..d9e5d114211 100644 --- a/doc/classes/Physics2DServer.xml +++ b/doc/classes/Physics2DServer.xml @@ -1003,6 +1003,15 @@ Activates or deactivates the 2D physics engine. + + + + + + + Sets the amount of iterations for calculating velocities of colliding bodies. The greater the amount, the more accurate the collisions, but with a performance loss. + + diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp index 440d9ac2609..ad79d2a02a0 100644 --- a/servers/physics_2d/physics_2d_server_sw.cpp +++ b/servers/physics_2d/physics_2d_server_sw.cpp @@ -1195,6 +1195,10 @@ void Physics2DServerSW::set_active(bool p_active) { active = p_active; }; +void Physics2DServerSW::set_collision_iterations(int p_iterations) { + iterations = p_iterations; +}; + void Physics2DServerSW::init() { doing_sync = false; last_step = 0.001; diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h index ba797f6be99..1d64c02dff8 100644 --- a/servers/physics_2d/physics_2d_server_sw.h +++ b/servers/physics_2d/physics_2d_server_sw.h @@ -282,6 +282,8 @@ public: virtual void end_sync(); virtual void finish(); + virtual void set_collision_iterations(int p_iterations); + virtual bool is_flushing_queries() const { return flushing_queries; } int get_process_info(ProcessInfo p_info); diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.h b/servers/physics_2d/physics_2d_server_wrap_mt.h index 628fdabf8d8..d2deed5db66 100644 --- a/servers/physics_2d/physics_2d_server_wrap_mt.h +++ b/servers/physics_2d/physics_2d_server_wrap_mt.h @@ -297,6 +297,7 @@ public: FUNC1(free, RID); FUNC1(set_active, bool); + FUNC1(set_collision_iterations, int); virtual void init(); virtual void step(real_t p_step); diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp index 38b4ee7db11..bfda6a1a493 100644 --- a/servers/physics_2d_server.cpp +++ b/servers/physics_2d_server.cpp @@ -649,6 +649,8 @@ void Physics2DServer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_active", "active"), &Physics2DServer::set_active); + ClassDB::bind_method(D_METHOD("set_collision_iterations", "iterations"), &Physics2DServer::set_collision_iterations); + ClassDB::bind_method(D_METHOD("get_process_info", "process_info"), &Physics2DServer::get_process_info); BIND_ENUM_CONSTANT(SPACE_PARAM_CONTACT_RECYCLE_RADIUS); diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h index 2214b61e143..5c33587de89 100644 --- a/servers/physics_2d_server.h +++ b/servers/physics_2d_server.h @@ -583,6 +583,8 @@ public: virtual bool is_flushing_queries() const = 0; + virtual void set_collision_iterations(int iterations) = 0; + enum ProcessInfo { INFO_ACTIVE_OBJECTS,