mirror of
https://github.com/godotengine/godot.git
synced 2024-11-23 12:43:43 +00:00
Merge pull request #50257 from Calinou/physicsserver3d-add-set-iterations-3.x
Add a method to set the number of physics solver iterations in 3D (3.x)
This commit is contained in:
commit
b0b2b7df31
@ -1009,7 +1009,7 @@
|
|||||||
<argument index="0" name="iterations" type="int">
|
<argument index="0" name="iterations" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
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.
|
Sets the amount of iterations for calculating velocities of colliding bodies. The greater the amount of iterations, the more accurate the collisions will be. However, a greater amount of iterations requires more CPU power, which can decrease performance. The default value is [code]8[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="shape_get_data" qualifiers="const">
|
<method name="shape_get_data" qualifiers="const">
|
||||||
|
@ -1155,6 +1155,16 @@
|
|||||||
Activates or deactivates the 3D physics engine.
|
Activates or deactivates the 3D physics engine.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="set_collision_iterations">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="iterations" type="int">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Sets the amount of iterations for calculating velocities of colliding bodies. The greater the amount of iterations, the more accurate the collisions will be. However, a greater amount of iterations requires more CPU power, which can decrease performance. The default value is [code]8[/code].
|
||||||
|
[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the default Bullet physics engine.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="shape_create">
|
<method name="shape_create">
|
||||||
<return type="RID">
|
<return type="RID">
|
||||||
</return>
|
</return>
|
||||||
|
@ -1546,6 +1546,10 @@ void BulletPhysicsServer::finish() {
|
|||||||
BulletPhysicsDirectBodyState::destroySingleton();
|
BulletPhysicsDirectBodyState::destroySingleton();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BulletPhysicsServer::set_collision_iterations(int p_iterations) {
|
||||||
|
WARN_PRINT("Changing the number of 3D physics collision iterations is only supported when using GodotPhysics, not Bullet.");
|
||||||
|
}
|
||||||
|
|
||||||
int BulletPhysicsServer::get_process_info(ProcessInfo p_info) {
|
int BulletPhysicsServer::get_process_info(ProcessInfo p_info) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -398,6 +398,8 @@ public:
|
|||||||
|
|
||||||
virtual bool is_flushing_queries() const { return false; }
|
virtual bool is_flushing_queries() const { return false; }
|
||||||
|
|
||||||
|
virtual void set_collision_iterations(int p_iterations);
|
||||||
|
|
||||||
virtual int get_process_info(ProcessInfo p_info);
|
virtual int get_process_info(ProcessInfo p_info);
|
||||||
|
|
||||||
CollisionObjectBullet *get_collision_object(RID p_object) const;
|
CollisionObjectBullet *get_collision_object(RID p_object) const;
|
||||||
|
@ -1274,6 +1274,10 @@ void PhysicsServerSW::set_active(bool p_active) {
|
|||||||
active = p_active;
|
active = p_active;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void PhysicsServerSW::set_collision_iterations(int p_iterations) {
|
||||||
|
iterations = p_iterations;
|
||||||
|
};
|
||||||
|
|
||||||
void PhysicsServerSW::init() {
|
void PhysicsServerSW::init() {
|
||||||
last_step = 0.001;
|
last_step = 0.001;
|
||||||
iterations = 8; // 8?
|
iterations = 8; // 8?
|
||||||
|
@ -363,6 +363,8 @@ public:
|
|||||||
virtual void flush_queries();
|
virtual void flush_queries();
|
||||||
virtual void finish();
|
virtual void finish();
|
||||||
|
|
||||||
|
virtual void set_collision_iterations(int p_iterations);
|
||||||
|
|
||||||
virtual bool is_flushing_queries() const { return flushing_queries; }
|
virtual bool is_flushing_queries() const { return flushing_queries; }
|
||||||
|
|
||||||
int get_process_info(ProcessInfo p_info);
|
int get_process_info(ProcessInfo p_info);
|
||||||
|
@ -555,7 +555,7 @@ public:
|
|||||||
|
|
||||||
virtual bool is_flushing_queries() const = 0;
|
virtual bool is_flushing_queries() const = 0;
|
||||||
|
|
||||||
virtual void set_collision_iterations(int iterations) = 0;
|
virtual void set_collision_iterations(int p_iterations) = 0;
|
||||||
|
|
||||||
enum ProcessInfo {
|
enum ProcessInfo {
|
||||||
|
|
||||||
|
@ -671,6 +671,8 @@ void PhysicsServer::_bind_methods() {
|
|||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_active", "active"), &PhysicsServer::set_active);
|
ClassDB::bind_method(D_METHOD("set_active", "active"), &PhysicsServer::set_active);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_collision_iterations", "iterations"), &PhysicsServer::set_collision_iterations);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_process_info", "process_info"), &PhysicsServer::get_process_info);
|
ClassDB::bind_method(D_METHOD("get_process_info", "process_info"), &PhysicsServer::get_process_info);
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(SHAPE_PLANE);
|
BIND_ENUM_CONSTANT(SHAPE_PLANE);
|
||||||
|
@ -726,6 +726,8 @@ public:
|
|||||||
|
|
||||||
virtual bool is_flushing_queries() const = 0;
|
virtual bool is_flushing_queries() const = 0;
|
||||||
|
|
||||||
|
virtual void set_collision_iterations(int p_iterations) = 0;
|
||||||
|
|
||||||
enum ProcessInfo {
|
enum ProcessInfo {
|
||||||
|
|
||||||
INFO_ACTIVE_OBJECTS,
|
INFO_ACTIVE_OBJECTS,
|
||||||
|
Loading…
Reference in New Issue
Block a user