Fixed 2D intersect_shape limiting broadphase results
Physics2DDirectSpaceStateSW was applying the result limit to broadphase
collision detection instead of narrow. This is inconsistent with its 3D
variant, as well as the rest of the 2D direct space state functions.
Broadphase is now limited by INTERSECTION_QUERY_MAX like everything else,
and narrow phase is exited early when the result limit has been reached.
(cherry picked from commit 1ba106a71e
)
This commit is contained in:
parent
3fcdb3198b
commit
cc8e1e93c3
|
@ -180,12 +180,15 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Trans
|
||||||
Rect2 aabb = p_xform.xform(shape->get_aabb());
|
Rect2 aabb = p_xform.xform(shape->get_aabb());
|
||||||
aabb = aabb.grow(p_margin);
|
aabb = aabb.grow(p_margin);
|
||||||
|
|
||||||
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, p_result_max, space->intersection_query_subindex_results);
|
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, Space2DSW::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
|
||||||
|
|
||||||
int cc = 0;
|
int cc = 0;
|
||||||
|
|
||||||
for (int i = 0; i < amount; i++) {
|
for (int i = 0; i < amount; i++) {
|
||||||
|
|
||||||
|
if (cc >= p_result_max)
|
||||||
|
break;
|
||||||
|
|
||||||
if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
|
if (!_can_collide_with(space->intersection_query_results[i], p_collision_mask))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue