Commit Graph

108 Commits

Author SHA1 Message Date
Marcel Admiraal 14ecd66a21
Ignore Bullet collision contact points with distance = 0
(cherry picked from commit 27b52f6c46)
2021-11-18 20:27:24 +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
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
Hugo Locurcio 4a140294fe
Fix typo in Bullet method name: "collisin" -> "collision"
This method is not exposed to scripting, so compatibility with
existing projects should be preserved.
2021-07-07 22:07:32 +02:00
Marcel Admiraal 7e03bd1671 Remove duplicate WARN_PRINTS macro 2021-06-18 12:57:59 +01:00
Marcel Admiraal 5a58516231 Remove duplicate ERR_PRINTS macro 2021-06-16 11:56:25 +01:00
Rémi Verschelde 80e1585a6e
Style: Cleanup uses of double spaces between words
Or after punctuation. Tried to leave third-party stuff alone, unless it has
been heavily modified for Godot.

(cherry picked from commit c1c76850cb)
2021-06-07 12:06:59 +02:00
Rémi Verschelde 140350d767
Style: Enforce braces around if blocks and loops
Using clang-tidy's `readability-braces-around-statements`.
https://clang.llvm.org/extra/clang-tidy/checks/readability-braces-around-statements.html
2021-05-05 15:02:01 +02:00
Rémi Verschelde b4af1eba0a
Style: Enforce use of bool literals instead of integers
Using clang-tidy's `modernize-use-bool-literals`.
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-bool-literals.html
2021-05-04 16:39:13 +02:00
Rémi Verschelde a828398655
Style: Replaces uses of 0/NULL by nullptr (C++11)
Using clang-tidy's `modernize-use-nullptr`.
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
2021-05-04 16:30:23 +02:00
Rémi Verschelde b5e1e05ef2
Style: clang-format: Disable KeepEmptyLinesAtTheStartOfBlocks 2021-05-04 14:45:16 +02:00
Marcel Admiraal 1e28e234c5
Check for the use of an empty shape in Bullet Kinematic collisions
(cherry picked from commit ff9a6c4e39)
2021-04-06 22:37:35 +02:00
Rémi Verschelde d298949513
Merge pull request #42882 from madmiraal/fix-39767-3.2
[3.2] Set Bullet collision shape index to zero when using a single shape or ConcavePolygonShape
2021-01-14 20:46:06 +01:00
Rémi Verschelde 152415a006
Merge pull request #43924 from madmiraal/fix-43588-3.2
[3.2] Fix cast_motion sometimes failing
2021-01-14 20:44:40 +01:00
Rémi Verschelde f93c2ddc92
Merge pull request #45163 from akien-mga/3.2-cherrypicks
Cherry-picks for the 3.2 branch (future 3.2.4) - 16th batch
2021-01-13 17:38:05 +01:00
Rémi Verschelde 652105dcdd
Merge pull request #44704 from madmiraal/fix-44510-3.2
[3.2] Add signal to inform joint that body has exited tree
2021-01-13 17:16:19 +01:00
Rémi Verschelde 49646383f1
Update copyright statements to 2021
Happy new year to the wonderful Godot community!

2020 has been a tough year for most of us personally, but a good year for
Godot development nonetheless with a huge amount of work done towards Godot
4.0 and great improvements backported to the long-lived 3.2 branch.

We've had close to 400 contributors to engine code this year, authoring near
7,000 commit! (And that's only for the `master` branch and for the engine code,
there's a lot more when counting docs, demos and other first-party repos.)

Here's to a great year 2021 for all Godot users 🎆

(cherry picked from commit b5334d14f7)
2021-01-13 16:17:06 +01:00
Marcel Admiraal 47657cd140 Only remove Bullet's body constraints when removing body from space 2021-01-13 13:45:40 +00:00
Marcel Admiraal 6b3bab6e54 Add signal to inform joint that body has exited tree 2020-12-31 14:51:07 +00:00
Marcel Admiraal 2e99b5b137 Fix cast_motion sometimes failing
- Fixes Godot physics failing when the cast Shape is inside of, or
already colliding with another Shape.
- Fixes Bullet physics failing when there is no motion.
- Ensures Godot and Bullet physics behave the same.
- Updates the documentation to exclude the caveats for the failures and
differences.
2020-11-27 15:32:25 +00:00
Marcel Admiraal 4bfcaeff5a Remove any constraints connected to a Bullet body when removing it 2020-11-26 18:16:47 +00:00
Marcel Admiraal b7d00a364e Set Bullet collision shape index to zero when using a single shape
or ConcavePolygonShape.
2020-10-19 11:50:29 +01:00
Rafał Mikrut 808615ec3e Fixes leak when creating bullet shape 2020-08-05 10:08:05 +02:00
Rémi Verschelde 10544f1cf7 Revert "Move Bullet physics query flush from Bullet space pre-tick callback to"
This reverts commit e7d8464f87.

Fixes #40508 regression.

This will be re-applied and the regression fixed for a future 3.2.x release.
2020-07-28 11:42:04 +02:00
Marcel Admiraal 98aabe111f Use difference in position to check whether motion in Bullet is too close
to zero.
2020-07-18 13:20:19 +01:00
Marcel Admiraal e7d8464f87 Move Bullet physics query flush from Bullet space pre-tick callback to
Bullet physics flush_queries() as is done in Godot physics, and remove
the pre-tick callback.
2020-07-08 11:42:29 +01:00
Rémi Verschelde 44a516986d
Merge pull request #39084 from madmiraal/backport-37314
[3.2] Better damping implementation for Bullet rigid bodies
2020-07-02 13:26:03 +02:00
PouleyKetchoupp d2aa3031dc Fix crashes with invalid shapes in BulletPhysicsDirectSpaceState queries
(cherry picked from commit 8b0232bf29)
2020-06-22 12:03:21 +02:00
Marcel Admiraal b006f5402d Check for motion in cast_motion() before doing Bullet convexSweepTest().
Also ensure that default closest_safe and closest_unsafe values are
defined in cast_motion() and before cast_motion() is called.
2020-06-21 16:28:01 +01:00
Marcel Admiraal 8f0f2bf4ef Better damping implementation for Bullet rigid bodies 2020-05-27 17:50:24 +01:00
Phischermen c75459ac95 Enabled concave collision detection with Areas in Bullet.
(cherry picked from commit 2c01cf54f8)
2020-03-04 09:51:15 +01:00
Rémi Verschelde 0b185278f3
Merge pull request #34225 from madmiraal/fix-34210
Add check for zero length motion at beginning of each sweep test loop in SpaceBullet::test_body_motion
2020-01-11 11:57:41 +01:00
Rémi Verschelde a7f49ac9a1 Update copyright statements to 2020
Happy new year to the wonderful Godot community!

We're starting a new decade with a well-established, non-profit, free
and open source game engine, and tons of further improvements in the
pipeline from hundreds of contributors.

Godot will keep getting better, and we're looking forward to all the
games that the community will keep developing and releasing with it.
2020-01-01 11:16:22 +01:00
Marcel Admiraal e0d252311e Add check for zero length motion at beginning of each sweep test loop
in SpaceBullet::test_body_motion.
2019-12-10 08:16:32 +01:00
Marcel Admiraal 78055cbdaf Check that motion is not zero before doing a sweep test.
Fixes #25476.
2019-12-09 09:21:38 +01:00
PouleyKetchoupp 655694b394 Fixed RigidBody stuttering when changing collision layer/mask
- Changing collision layer/mask now only updates the broadphase proxy to avoid the velocity to be reset each time (also avoids unnecessary computations)
- No rigid body update at all when the collision layer/mask stays the same
- Same changes for Area for optimization purpose

Fixes #32577
2019-10-08 14:40:24 +02:00
Robin Hübner 8aeade74db Replace 'ERR_EXPLAIN' with 'ERR_FAIL_*_MSG' in rest of 'modules/' 2019-08-12 10:15:54 +02:00
PouleyKetchoupp 189e4e59ad Fixed KinematicCollision.get_local_shape() - the local shape id was never set during move_and_collide()
Fixes #31144
2019-08-07 12:32:32 +02:00
qarmin aab8da25ad Fix some code found by Coverity Scan and PVS Studio 2019-07-23 09:14:31 +02:00
Rémi Verschelde e0574e1d98 Fix typos with codespell
Using codespell 1.15.0.

Method:
```
$ cat > ../godot-word-whitelist.txt << EOF
ang
curvelinear
doubleclick
leapyear
lod
merchantibility
nd
numer
ois
ony
que
seeked
synching
te
uint
unselect
webp
EOF

$ codespell -w -q 3 -I ../godot-word-whitelist.txt --skip="./thirdparty,*.po"
$ git diff // undo unwanted changes
```
2019-05-19 13:10:35 +02:00
Daniel Rakos 6dd65c0d67 KinematicBody performance and quality improvements
With this change finally one can use compound collisions (like those created
by Gridmaps) without serious performance issues. The previous KinematicBody
code for Bullet was practically doing a whole bunch of unnecessary
calculations. Gridmaps with fairly large octant sizes (in my case 32) can get
up to 10000x speedup with this change (literally!). I expect the FPS demo to
get a fair speedup as well.

List of fixes and improvements:

- Fixed a general bug in move_and_slide that affects both GodotPhysics and
  Bullet, where ray shapes would be ignored unless the stop_on_slope parameter
  is disabled. Not sure where that came from, but looking at the 2D physics
  code it was obvious there's a difference.
- Enabled the dynamic AABB tree that Bullet uses to allow broadphase collision
  tests against individual shapes of compound shapes. This is crucial to get
  good performance with Gridmaps and in general improves the performance
  whenever a KinematicBody collides with compound collision shapes.
- Added code to the broadphase collision detection code used by the Bullet
  module for KinematicBodies to also do broadphase on the sub-shapes of
  compound collision shapes. This is possible thanks to the dynamic AABB
  tree that was previously disabled and it's the change that provides the
  biggest performance boost.
- Now broadphase test is only done once per KinematicBody in Bullet instead of
  once per each of its shapes which was completely unnecessary.
- Fixed the way how the ray separation results are populated in Bullet which
  was completely broken previously, overwriting previous results and similar
  non-sense.
- Fixed ray shapes for good now. Previously the margin set in the editor was
  not respected at all, and the KinematicBody code for ray separation was
  complete bogus, thus all previous attempts to fix it were mislead.
- Fixed an obvious bug also in GodotPhysics where an out-of-bounds index was
  used in the ray result array.

There are a whole set of other problems with the KinematicBody code of Bullet
which cost performance and may cause unexpected behavior, but those are not
addressed in this change (need to keep it "simple").

Not sure whether this fixes any outstanding Github issues but I wouldn't be
surprised.
2019-03-27 00:39:47 +01:00
Rémi Verschelde e22f6e9ace
Revert "Optimized area check" 2019-02-22 12:46:54 +01:00
Rémi Verschelde ced77db950
Merge pull request #26111 from AndreaCatania/areaopti
Optimized area check
2019-02-21 13:58:38 +01:00
Andrea Catania b1934cfd0d Optimized area check 2019-02-21 08:41:31 +01:00
Rémi Verschelde 2f9b7e6b63
Merge pull request #25788 from aqnuep/rayshape_fix
Fix RayShape collision when used with a KinematicBody (Bullet Physics)
2019-02-19 14:42:04 +01:00
Daniel Rakos f7511511b1 Fix RayShape collision when used with a KinematicBody (Bullet Physics)
- Added code handling non-compound collision to recover_from_penetration_ray()
  which is now needed due to the optimization avoiding the use of compound
  collisions when only a single collision shape is used.
- Removed arbitrary margin applied in the collision algorithm of RayShapes
  which causes jittered movement. For lack of a better replacement and for
  lack of any explanation on why it has been introduced, it's now using the
  shape's margin property instead which is small enough to not show visible
  jitter.
- Tried to get rid of inconsistent uses of the collision margin.
- Removed hack from GodotDeepPenetrationContactResultCallback::addContactPoint
  for RayShape collision as it's no longer needed as the collision algorithm
  of RayShapes correctly calculates the contact normal for a while now.

Fixes #25227.
2019-02-19 11:16:05 +01:00
Andrea Catania 66420aea9c Fixed area collision report with concave 2019-02-18 14:15:27 +01:00