Commit Graph

326 Commits

Author SHA1 Message Date
Marcel Admiraal 7669f6e660 Store Bullet total gravity, linear damp and angular damp calculations
so they can be retrieved from PhysicsDirectBodyState
2022-12-09 19:53:50 +01:00
bruvzg 987723b386
[iOS] Fix build with warnings=extra. 2022-10-31 11:59:31 +02:00
Cory Petkovsek d7ba3b73a9 Clarify invalid RID errors in Server free() functions. 2022-08-12 23:02:09 +08:00
Ryan Heath 4f5c268a60 Add area monitor callback error checking 2022-08-07 13:57:06 -07:00
Rémi Verschelde d9d3861f76
Merge pull request #55764 from tinmanjuggernaut/validate_rid
[3.x] Validate RIDs before freeing
2022-08-05 22:38:49 +02:00
Rémi Verschelde 818f1eed31 Code quality: Fix header guards consistency
Adds `header_guards.sh` bash script, used in CI to validate future
changes. Can be run locally to fix invalid header guards.
2022-07-25 14:53:37 +02:00
Rémi Verschelde 8dc32619f2 Bullet: Don't include unused BulletInverseDynamics
Follow-up to #63143.
2022-07-19 17:57:28 +02:00
Rémi Verschelde fe1e84ec6c Bullet: Remove unused Bullet3 and clew libraries 2022-07-18 13:15:21 +02:00
Marcel Admiraal 25bedade3b Do not set gravity and damping when Custom Integrator is enabled. 2022-07-04 15:37:27 +01:00
AndreaCatania 6b08a22968 Exposes the BulletSpace internals.
This change is really useful to use internal bullet physics features not supported by godot.
2022-06-10 11:47:30 +02:00
Riordan 941a440996 Added recovery vector to shape position before bullet penetration detection to prevent recovery vector from adding repeat penetration responses. 2022-05-19 10:47:40 +02:00
Rémi Verschelde 7515b47e8e bullet: Sync with upstream 3.24
Remove upstreamed patch.
2022-05-17 11:45:52 +02:00
Cory Petkovsek 2be0738304 Visual/Physics/Navigation Servers validate RIDs with documentation update 2022-05-06 03:39:06 +08:00
Rémi Verschelde 288dbe41a2
Merge pull request #59864 from rburing/bullet_skip_depenetrate_from_void_3.x 2022-04-29 14:41:31 +02:00
Ricardo Buring 79317f9cb1 BulletPhysicsServer::area_get_space: null check
This is now the same as e.g. body_get_space.
2022-04-10 23:00:50 +02:00
Ricardo Buring 887a5cd4f9 SpaceBullet::recover_from_penetration: skip compound shapes without child shapes
Before, this case would incorrectly get caught as an error, causing an
early return, in particular skipping other possibly relevant shapes.
2022-04-04 11:07:57 +02:00
Ricardo Buring 1d16153881 collide_shape: return contact points in world space 2022-03-24 20:27:36 +01:00
Rémi Verschelde 1639b3a6a9
Merge pull request #58674 from Calinou/smooth-trimesh-collision-always-setting-3.x 2022-03-10 21:11:44 +01:00
PouleyKetchoupp 622ef48dae Fixed ccd enabled by default on Bullet bodies
It was due to main_shape_changed being called two times for each
added body. The first time it disables ccd, which sets the internal ccd
threshold to be 10000. The second time, it enables ccd again because
the internal threshold is > 0.

Bodies are now consistently set with a ccd threshold of 0 when ccd is
disabled.

This was causing crashing asserts in Bullet when adding bodies in some
scenarios, in btVector3::normalize():
btAssert(!fuzzyZero());

These crashes will still happen with ccd enabled.

(cherry picked from commit faca8b77aa)
2022-03-10 19:02:01 +01:00
Hugo Locurcio 413689559c
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.
2022-03-02 18:50:21 +01:00
Hugo Locurcio e7934661da
Tweak the Bullet RigidBody kinematic trimesh warning message
This makes it clearer that primitive or convex shapes must be
used instead.
2022-02-10 22:28:32 +01:00
lawnjelly adf14bfdde Add nodiscard to core math classes to catch c++ errors.
A common source of errors is to call functions (such as round()) expecting them to work in place, but them actually being designed only to return the processed value. Not using the return value in this case in indicative of a bug, and can be flagged as a warning by using the [[nodiscard]] attribute.
2022-01-20 17:28:31 +00:00
Rémi Verschelde a627cdafc5
Update copyright statements to 2022
Happy new year to the wonderful Godot community!
2022-01-13 15:54:13 +01:00
PouleyKetchoupp f29f996199
Fix shape index in multiple physics queries with Bullet
Two main changes:

- Better handling of concave shapes to make sure the queries don't
return a triangle index instead of shape index.
Note: A concave shape within a compound shape will always return a shape
index of 0 because of Bullet limitations.

- Extra check for compound shapes in some queries to avoid undefined
behavior, because the shape index can have an uninitialized value with
convex shapes in some cases.

(cherry picked from commit 02d40de30d)
2021-12-01 23:49:26 +01:00
Marcel Admiraal 216fb38da1 Add shape data to area overlap data. 2021-11-21 07:18:49 +00:00
Marcel Admiraal 702529d63e Give each RigidBody its own DirectBodyState wrapper. 2021-11-20 08:17:04 +00:00
Marcel Admiraal 2176b694ac
Trigger RigidBodyBullet space override updates when Area properties change.
(cherry picked from commit 41d85ed5a9)
2021-11-18 20:31:41 +01:00
Marcel Admiraal 84af1d9248
Update Bullet Area overlaps when Area properties or shapes change.
(cherry picked from commit 0d3e8538ef)
2021-11-18 20:31:40 +01:00
Marcel Admiraal 14ecd66a21
Ignore Bullet collision contact points with distance = 0
(cherry picked from commit 27b52f6c46)
2021-11-18 20:27:24 +01:00
Marcel Admiraal 4d3690eba5 Remove unimplemented methods 2021-11-18 12:47:36 +00:00
PouleyKetchoupp b93aeec4a2 Fix errors in KinematicBody when floor is destroyed or removed
In all physics servers, body_get_direct_state() now silently returns
nullptr when the body has been already freed or is removed from space,
so the client code can detect this state and invalidate the body rid.

In 2D, there is no change in behavior (just no more errors).

In 3D, the Bullet server returned a valid direct body state when the
body was removed from the physics space, but in this case it didn't
make sense to use the information from the body state.
2021-11-09 15:15:40 -07:00
Rémi Verschelde 3be409aa5e
Merge pull request #54039 from nekomatata/fix-soft-body-memory-corruption-bullet-3.x 2021-11-08 23:59:05 +01:00
Rémi Verschelde 14c366ddd7
Bump version to 3.5-beta 2021-11-05 16:10:17 +01:00
PouleyKetchoupp 63f6d91a1a Fix SoftBody memory corruption when using invalid mesh
In case of failure the new soft body wasn't created but the previous one
wasn't destroyed, causing discrepancies with visual server updates.
2021-10-20 10:39:16 -07:00
Haoyu Qiu ed5a98c3c6 Fix crash when pinned SoftBody point is out of range 2021-10-04 15:47:12 +08:00
Rémi Verschelde 06e0260699
Merge pull request #53349 from LATRio/53331_1 2021-10-03 12:16:45 +02:00
LATRio 56aa9f71b6 Prevent out of bound access through 'm_nodes' in SoftBodyBullet 2021-10-03 16:36:01 +09:00
LATRio be69d26403 Fix crash at SoftBodyBullet::reset_all_node_positions when bt_soft_body isn't initialized
Update soft_body_bullet.cpp
2021-10-02 22:03:54 +09:00
Rémi Verschelde fba9fb2439
Merge pull request #53183 from m4nu3lf/threadsafe_bullet_3.x 2021-09-29 21:34:56 +02:00
Rémi Verschelde b7901c773c
bullet: Sync with upstream 3.17
Stop include Bullet headers using `-isystem` for GCC/Clang as it misleads
SCons into not properly rebuilding all files when headers change.

This means we also need to make sure Bullet builds without warning, and
current version fares fairly well, there were just a couple to fix (patch
included).

Increase minimum version for distro packages to 2.90 (this was never released
as the "next" version after 2.89 was 3.05... but that covers it too).
2021-09-29 16:30:34 +02:00
Manuele Finocchiaro 6f81c213a6 Compile bullet with threasafe switch on 2021-09-28 17:21:26 +01:00
BimDav 9de9994444
Reload kinematic shapes when changing PhysicsBody mode to Kinematic
Prevents a crash when calling test_body_motion. Call reload_kinematic_shapes
from init_kinematic_utilities as they are always called together.

(cherry picked from commits 112985c5bc
and 3540e716f9)
2021-09-27 18:10:30 +02:00
Haoyu Qiu 70853fd669 Remove do{ } while(0) wrapper around error macros 2021-09-12 15:04:53 +08:00
Rémi Verschelde 85e13a4e02
Merge pull request #51858 from nekomatata/bullet-test-body-motion-depth-3.x
[3.x] Add collision depth and safe/unsafe fraction to Bullet body_test_motion
2021-08-18 22:45:54 +02:00
PouleyKetchoupp 02adb0e361 Add collision depth and safe/unsafe fraction to Bullet body_test_motion
It was only implemented for godot physics before.
2021-08-18 13:09:27 -07:00
PouleyKetchoupp db47b670f6 Fix crash in body_test_motion when used with RigidBody3D in Bullet
Kinematic utilities are now initialized for a rigid body if needed for a
call to body_test_motion.
2021-08-18 13:07:21 -07:00
PouleyKetchoupp da159cd258 Fix 3D moving platform logic
Same thing that was already done in 2D, applies moving platform motion
by using a call to move_and_collide that excludes the platform itself,
instead of making it part of the body motion.

Helps with handling walls and slopes correctly when the character walks
on the moving platform.

Also made some minor adjustments to the 2D version and documentation.

Co-authored-by: fabriceci <fabricecipolla@gmail.com>
2021-08-09 18:55:49 -07:00
PouleyKetchoupp f101349225 Fix applied rotation from moving platforms in move_and_slide
When synchronizing KinematicBody motion with moving the platform using
direct body state, only the linear velocity was taken into account.

This change exposes velocity at local point in direct body state and
uses it in move_and_slide to get the proper velocity that includes
rotations.
2021-08-09 12:04:57 -07:00
Rémi Verschelde b0b2b7df31
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)
2021-07-14 07:56:57 +02:00
Hugo Locurcio 9259b4adc4
Add a method to set the number of physics solver iterations in 3D
This is only for GodotPhysics, and adds a 3D counterpart to the 2D
method that was recently added.
2021-07-10 16:29:41 +02:00