Add support for motion in 2D intersect_shape function

It was only missing extended rect for broadphase check, the solver was
already taking the motion from parameters into account.
This commit is contained in:
PouleyKetchoupp 2021-11-04 11:43:30 -07:00
parent ec0dc93083
commit 160346f794
2 changed files with 2 additions and 2 deletions

View file

@ -100,8 +100,7 @@
<argument index="0" name="shape" type="Physics2DShapeQueryParameters" /> <argument index="0" name="shape" type="Physics2DShapeQueryParameters" />
<argument index="1" name="max_results" type="int" default="32" /> <argument index="1" name="max_results" type="int" default="32" />
<description> <description>
Checks the intersections of a shape, given through a [Physics2DShapeQueryParameters] object, against the space. Checks the intersections of a shape, given through a [Physics2DShapeQueryParameters] object, against the space. The intersected shapes are returned in an array containing dictionaries with the following fields:
[b]Note:[/b] This method does not take into account the [code]motion[/code] property of the object. The intersected shapes are returned in an array containing dictionaries with the following fields:
[code]collider[/code]: The colliding object. [code]collider[/code]: The colliding object.
[code]collider_id[/code]: The colliding object's ID. [code]collider_id[/code]: The colliding object's ID.
[code]metadata[/code]: The intersecting shape's metadata. This metadata is different from [method Object.get_meta], and is set with [method Physics2DServer.shape_set_data]. [code]metadata[/code]: The intersecting shape's metadata. This metadata is different from [method Object.get_meta], and is set with [method Physics2DServer.shape_set_data].

View file

@ -210,6 +210,7 @@ int Physics2DDirectSpaceStateSW::intersect_shape(const RID &p_shape, const Trans
ERR_FAIL_COND_V(!shape, 0); ERR_FAIL_COND_V(!shape, 0);
Rect2 aabb = p_xform.xform(shape->get_aabb()); Rect2 aabb = p_xform.xform(shape->get_aabb());
aabb = aabb.merge(Rect2(aabb.position + p_motion, aabb.size)); //motion
aabb = aabb.grow(p_margin); aabb = aabb.grow(p_margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, Space2DSW::INTERSECTION_QUERY_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);