summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-02-13 17:24:34 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-02-13 17:24:34 +0100
commite0c24eb554cee4af93b9858d8c90237209863405 (patch)
tree9d2d4f098e578e62b0b7dc98b00c69016856f67c
parentaab55ef57c9138b9f369f439900d54281037fda2 (diff)
parent87446fd9b3174a6b1c1b088ec3b9e1b14e109eb0 (diff)
downloadredot-engine-e0c24eb554cee4af93b9858d8c90237209863405.tar.gz
Merge pull request #88282 from rburing/concave_motion_2d
`GodotCollisionSolver2D::solve_concave`: Fix culling in case of motion
-rw-r--r--servers/physics_2d/godot_collision_solver_2d.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/servers/physics_2d/godot_collision_solver_2d.cpp b/servers/physics_2d/godot_collision_solver_2d.cpp
index 64f1cc8362..a1acbe9cf0 100644
--- a/servers/physics_2d/godot_collision_solver_2d.cpp
+++ b/servers/physics_2d/godot_collision_solver_2d.cpp
@@ -189,8 +189,7 @@ bool GodotCollisionSolver2D::solve_concave(const GodotShape2D *p_shape_A, const
Transform2D rel_transform = p_transform_A;
rel_transform.columns[2] -= p_transform_B.get_origin();
- //quickly compute a local Rect2
-
+ // Quickly compute a local Rect2.
Rect2 local_aabb;
for (int i = 0; i < 2; i++) {
Vector2 axis(p_transform_B.columns[i]);
@@ -205,6 +204,12 @@ bool GodotCollisionSolver2D::solve_concave(const GodotShape2D *p_shape_A, const
local_aabb.position[i] = smin;
local_aabb.size[i] = smax - smin;
}
+ // In case of motion, expand the Rect2 in the motion direction.
+ if (p_motion_A != Vector2()) {
+ Rect2 moved_aabb = local_aabb;
+ moved_aabb.position += p_motion_A;
+ local_aabb = local_aabb.merge(moved_aabb);
+ }
concave_B->cull(local_aabb, concave_callback, &cinfo);