summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Locurcio <hugo.locurcio@hugo.pro>2022-03-02 01:10:18 +0100
committerHugo Locurcio <hugo.locurcio@hugo.pro>2022-03-02 18:49:34 +0100
commit4219485a827ff37dc25c72786c8786962e5b55f2 (patch)
tree302d587436a0ba97b0736c12edfa478ade5dcb63
parent62765fb7ca7cca7ae0c56be99cc99d9b3b0bd040 (diff)
Always register the Smooth Trimesh Collision project setting
This ensures the project setting never disappears from the editor, even if the current physics engine is GodotPhysics. This also adds documentation for the Smooth Trimesh Collision project setting.
-rw-r--r--core/config/project_settings.cpp3
-rw-r--r--doc/classes/ProjectSettings.xml4
-rw-r--r--modules/bullet/shape_bullet.cpp2
3 files changed, 8 insertions, 1 deletions
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp
index 3a7fc828aa..c9b615fb0a 100644
--- a/core/config/project_settings.cpp
+++ b/core/config/project_settings.cpp
@@ -1240,6 +1240,9 @@ ProjectSettings::ProjectSettings() {
custom_prop_info["rendering/driver/threads/thread_model"] = PropertyInfo(Variant::INT, "rendering/driver/threads/thread_model", PROPERTY_HINT_ENUM, "Single-Unsafe,Single-Safe,Multi-Threaded");
GLOBAL_DEF("physics/2d/run_on_separate_thread", false);
GLOBAL_DEF("physics/3d/run_on_separate_thread", false);
+ // Required to make the project setting appear even if the physics engine is GodotPhysics,
+ // while also making it appear in the ProjectSettings class documentation.
+ GLOBAL_DEF("physics/3d/smooth_trimesh_collision", false);
GLOBAL_DEF("debug/settings/profiler/max_functions", 16384);
custom_prop_info["debug/settings/profiler/max_functions"] = PropertyInfo(Variant::INT, "debug/settings/profiler/max_functions", PROPERTY_HINT_RANGE, "128,65535,1");
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index a3810bb575..be2c1ad372 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -1504,6 +1504,10 @@
<member name="physics/3d/sleep_threshold_linear" type="float" setter="" getter="" default="0.1">
Threshold linear velocity under which a 3D physics body will be considered inactive. See [constant PhysicsServer3D.SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD].
</member>
+ <member name="physics/3d/smooth_trimesh_collision" type="bool" setter="" getter="" default="false">
+ If [code]true[/code], smooths out collision with trimesh shapes ([ConcavePolygonShape3D]) by telling the Bullet physics engine to generate internal edge information for every trimesh shape created.
+ [b]Note:[/b] Only effective if [member physics/3d/physics_engine] is set to [code]Bullet[/code], [i]not[/i] [code]DEFAULT[/code] or [code]GodotPhysics[/code].
+ </member>
<member name="physics/3d/solver/contact_max_allowed_penetration" type="float" setter="" getter="" default="0.01">
Maximum distance a shape can penetrate another shape before it is considered a collision. See [constant PhysicsServer3D.SPACE_PARAM_CONTACT_MAX_ALLOWED_PENETRATION].
</member>
diff --git a/modules/bullet/shape_bullet.cpp b/modules/bullet/shape_bullet.cpp
index 77a583ad86..cf6bcb6c85 100644
--- a/modules/bullet/shape_bullet.cpp
+++ b/modules/bullet/shape_bullet.cpp
@@ -422,7 +422,7 @@ void ConcavePolygonShapeBullet::setup(Vector<Vector3> p_faces) {
meshShape = bulletnew(btBvhTriangleMeshShape(shapeInterface, useQuantizedAabbCompression));
- if (GLOBAL_DEF("physics/3d/smooth_trimesh_collision", false)) {
+ if (GLOBAL_GET("physics/3d/smooth_trimesh_collision")) {
btTriangleInfoMap *triangleInfoMap = new btTriangleInfoMap();
btGenerateInternalEdgeInfo(meshShape, triangleInfoMap);
}