summaryrefslogtreecommitdiff
path: root/servers/physics_2d
AgeCommit message (Collapse)Author
2021-06-09Refactor CommandQueueMTreduz
* RingBuffer had no reason to be in this context * A single buffer is used that can grow as much as the game needs. This should make thread loading entirely reliable.
2021-06-04Safe margin cleanupPouleyKetchoupp
Safe margin property on CharacterBody only, used as argument in move_and_collide. Removed kinematic_safe_margin in 3D physics server, not really useful and now harmonized with 2D.
2021-06-04More explanatory names for RigidBody modesPouleyKetchoupp
MODE_DYNAMIC instead of MODE_RIGID MODE_DYNAMIC_LOCKED instead of MODE_CHARACTER No more special case for sleeping behavior for MODE_DYNAMIC_LOCKED (MODE_CHARACTER was forcing the body not to sleep, which is redundant with can_sleep and wasn't done in Bullet).
2021-06-03Rename Vector2 clamped to limit_length and add limit_length to Vector3Aaron Franke
2021-05-19Enable setting of collision iterations in PhysicsServer2DRhathe
This allows fine-tuning of collision iterations for more accurate collision physics with a performance cost.
2021-05-10Dynamic BVH broadphase in 2D & 3D Godot PhysicsPouleyKetchoupp
Port lawnjelly's dynamic BVH implementation from 3.x to be used in both 2D and 3D broadphases. Removed alternative broadphase implementations which are not meant to be used anymore since they are much slower. Includes changes in Rect2, Vector2, Vector3 that help with the template implementation of the dynamic BVH by uniformizing the interface between 2D and 3D math. Co-authored-by: lawnjelly <lawnjelly@gmail.com>
2021-04-26Godot Physics collisions and solver processed on threadsPouleyKetchoupp
Use ThreadWorkPool to process physics step tasks in multiple threads. Collisions are all processed in parallel and solving impulses is processed in parallel for rigid body islands. Additional changes: - Proper islands for soft bodies linked to active bodies - All moving areas are on separate islands (can be parallelized) - Fix inconsistencies with body islands (Kinematic bodies could link bodies together or not depending on the processing order) - Completely prevent static bodies to be active (it could cause islands to be wrongly created and cause dangerous multi-threading operations as well as inconsistencies in created islands) - Apply impulses only on dynamic bodies to avoid unsafe multi-threaded operations (static bodies can be on multiple islands) - Removed inverted iterations when populating body islands, it's now faster in regular order (maybe after fixing inconsistencies)
2021-04-22Unexpose _direct_state_changed in PhysicsBodyrafallus
Removed _direct_state_changed bindings Affects 2D and 3D nodes Callbacks now use Callable Tests were changed accordingly
2021-04-16Merge pull request #47942 from nekomatata/joint-check-body-typesRémi Verschelde
Fix errors related to joints setup with two non-dynamic bodies
2021-04-15Fix errors related to joints setup with two non-dynamic bodiesPouleyKetchoupp
2021-04-15Optimize BroadPhase2dHashGrid to not pair elements on different layersHenry Conklin
Clean up logic in _check_motion Closes 45824
2021-04-12Godot Physics solver optimizationPouleyKetchoupp
Several optimizations in the way solver islands are processed in both 2D and 3D physics: - Use LocalVector instead of linked list to avoid cache misses (with persistent storage based on worst case scenario) - Remove pairs when setup fails (no valid contact) to avoid unnecessary solving of non-colliding rigid bodies just to return immediately
2021-04-06Merge pull request #47678 from madmiraal/fix-47436.1Rémi Verschelde
Check for empty ConcavePolygonShape2D before checking for intersection
2021-04-06Merge pull request #47675 from madmiraal/fix-47436Rémi Verschelde
Check ConvexPolygonShape2D point count before calcuating moment of inertia
2021-04-06Check for empty ConcavePolygonShape2D before checking for intersectionMarcel Admiraal
2021-04-06Check ConvexPolygonShape2D point count before calcuating moment of inertiaMarcel Admiraal
2021-04-06Ensure ConvexPolygonShape support count variable is initialisedMarcel Admiraal
2021-03-26Merge pull request #44695 from madmiraal/fix-44632Rémi Verschelde
Remove all elements from monitored_bodies and monitored_areas when processed
2021-03-11Fix GodotPhysics solver with kinematic body set to report contactsPouleyKetchoupp
In 3D, collision is disabled between kinematic/static bodies when contacts are generated only to report them. In 2D, this case was already fixed but the code is cleaned to make it easier to follow.
2021-02-27Refactor removal of constraints from bodies in 2D jointsEryk Dwornicki
2021-02-24Merge pull request #45863 from nekomatata/physics-queries-disabled-shapesRémi Verschelde
Fix physics queries not filtering out disabled collision shapes
2021-02-18Merge pull request #45617 from RandomShaper/modernize_atomicsRémi Verschelde
Modernize atomics (and fix `volatile`)
2021-02-18Modernize atomicsPedro J. Estébanez
- Based on C++11's `atomic` - Reworked `SafeRefCount` (based on the rewrite by @hpvb) - Replaced free atomic functions by the new `SafeNumeric<T>` - Replaced wrong cases of `volatile bool` by the new `SafeFlag` - Platform-specific implementations no longer needed Co-authored-by: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
2021-02-17Fix test_body_motion recoveryPouleyKetchoupp
This change makes test_body_motion more reliable when the kinematic body recovers from being stuck. - When recovery occurs, the rest information is generated, in order to make sure collision results from test_move, move_and_collide and move_and_slide are consistent and return a collision in case of overlap. - The new calculation for recovery vector makes sure the recovery is never more than the overlap depth between shapes. This can help with cases where the kinematic body overlaps with several shapes. Recovery is made iteratively, without forcing a full overlap at each step. This helps with getting proper rest information when recovery occurs. - One Way Collision: When attempting motion, contact direction is checked against motion before skipping in order to solve cases where kinematic bodies can sink into one-way collision shapes. Rest info now sets max contact depth in order to properly handle one-way collision. - Low speed motion is now handled in the rest info, by never setting min_allowed_depth lower than motion length. Separation is always applied with full margin, otherwise contact is lost when low speed motion occurs right after higher speed motion. - Similar changes are applied to 3D in order to make 2D and 3D consistent.
2021-02-10Make Servers truly Thread Safereduz
-Rendering server now uses a split RID allocate/initialize internally, this allows generating RIDs immediately but initialization to happen later on the proper thread (as rendering APIs generally requiere to call on the right thread). -RenderingServerWrapMT is no more, multithreading is done in RenderingServerDefault. -Some functions like texture or mesh creation, when renderer supports it, can register and return immediately (so no waiting for server API to flush, and saving staging and command buffer memory). -3D physics server changed to be made multithread friendly. -Added PhysicsServer3DWrapMT to use 3D physics server from multiple threads. -Disablet Bullet (too much effort to make multithread friendly, this needs to be fixed eventually).
2021-02-09Fix physics queries not filtering out disabled collision shapesPouleyKetchoupp
This change allows collide_shape, intersect_shape, cast_motion and rest_info in both 2D and 3D to ignore disabled shapes and make them consistent with the physics simulation. In some other cases, _cull_aabb_for_body is used and filters shapes out internally, but whenever a physics query uses the broadphase directly without calling _cull_aabb_for_body, disabled shapes can be returned and need to be filtered out.
2021-02-01Merge pull request #37547 from aaronfranke/tauRémi Verschelde
Use Math_TAU and deg2rad/etc in more places and optimize code
2021-01-31Merge pull request #45315 from RandomShaper/modernize_threadRémi Verschelde
Modernize Thread
2021-01-29Modernize ThreadPedro J. Estébanez
- Based on C++11's `thread` and `thread_local` - No more need to allocate-deallocate or check for null - No pointer anymore, just a member variable - Platform-specific implementations no longer needed (except for the few cases of non-portable functions) - Simpler for `NO_THREADS` - Thread ids are now the same across platforms (main is 1; others follow)
2021-01-28Use real_t in physics codeAaron Franke
2021-01-14Merge pull request #43923 from madmiraal/fix-43588Rémi Verschelde
Fix cast_motion sometimes failing
2021-01-09Use Math_TAU and deg2rad/rad2deg in more places and optimize codeAaron Franke
2021-01-07Fix multiple issues with one-way collisionsMarcel Admiraal
For RigidBodies, uses the collision normal determined by relative motion to determine whether or not a one-way collision has occurred. For KinematicBodies, performs additional checks to ensure a one-way collision has occurred, and averages the recovery step over all collision shapes. Co-authored-by: Sergej Gureev <sergej.gureev@relex.fi>
2021-01-01Update copyright statements to 2021Rémi Verschelde
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 🎆
2020-12-28Merge pull request #44149 from madmiraal/rename-tangent-orthogonalRémi Verschelde
Rename Vector2.tangent() to Vector2.orthogonal()
2020-12-28Rename empty() to is_empty()Marcel Admiraal
2020-12-26Remove all elements from monitored_bodies and monitored_areas when processedMarcel Admiraal
2020-12-06Rename Vector2.tangent() to Vector2.orthogonal()Marcel Admiraal
2020-12-04make 2d constraint solving more deterministic by solving in push orderJordan Schidlowsky
2020-11-27Fix cast_motion sometimes failingMarcel Admiraal
- 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-16Remove empty lines around braces with the formatting scriptAaron Franke
2020-11-16Merge pull request #42167 from madmiraal/fix-42108Rémi Verschelde
Remove the unnecessary sync() and the restrictions it imposes on 3D Physics.
2020-11-07Reorganized core/ directory, it was too fatty alreadyreduz
-Removed FuncRef, since Callable makes it obsolete -Removed int_types.h as its obsolete in c++11+ -Changed color names code
2020-10-03Fix how Line2D obtains the other object's supportsMarcel Admiraal
Measure the distance from the line against the rotated object, not the rotated line, when obtaining the object's supports against a line.
2020-09-23Ignore thread models when compiling with NO_THREADFabio Alessandrelli
The thread model option for physics (2D) and rendering (single-unsafe, single-safe, multithread), was causing crashes/locks when set as multithreaded and exported for a platform that does not support threads (namely HTML5). This commit ensures that when threads support is not available, that option is ignored, and the equivalent of "single-unsafe" is always used instead.
2020-09-18Remove the unnecessary sync() and the restrictions it imposes on 3D Physics.Marcel Admiraal
2020-09-17Merge pull request #41528 from keegano/physics-fix-wrap-angleRémi Verschelde
Wrap angles to (-pi, pi) in momentum calculation.
2020-08-28Fixed 2D physics regression that causes RigidBody2D nodes to spin ↵TwistedTwigleg
uncontrollably when colliding
2020-08-26Wrap angles to (-pi, pi) in momentum calculation.Keegan Owsley
Fixes a bug that causes KinematicBody2Ds to produce too much angular momentum when rotating beyond 180 degrees.
2020-08-01Wake up RigidBody 2D after applying torqueMarkus Sauermann