summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);