In final phase of test_body_motion, move and cull AABB for body once, instead of for every shape
This commit is contained in:
parent
0217d44dfd
commit
d525ea2614
@ -888,6 +888,9 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D::
|
||||
// Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
|
||||
rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
|
||||
|
||||
body_aabb.position += p_parameters.motion * unsafe;
|
||||
int amount = _cull_aabb_for_body(p_body, body_aabb);
|
||||
|
||||
int from_shape = best_shape != -1 ? best_shape : 0;
|
||||
int to_shape = best_shape != -1 ? best_shape + 1 : p_body->get_shape_count();
|
||||
|
||||
@ -899,10 +902,6 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D::
|
||||
Transform2D body_shape_xform = ugt * p_body->get_shape_transform(j);
|
||||
GodotShape2D *body_shape = p_body->get_shape(j);
|
||||
|
||||
body_aabb.position += p_parameters.motion * unsafe;
|
||||
|
||||
int amount = _cull_aabb_for_body(p_body, body_aabb);
|
||||
|
||||
for (int i = 0; i < amount; i++) {
|
||||
const GodotCollisionObject2D *col_obj = intersection_query_results[i];
|
||||
if (p_parameters.exclude_bodies.has(col_obj->get_self())) {
|
||||
|
@ -926,6 +926,9 @@ bool GodotSpace3D::test_body_motion(GodotBody3D *p_body, const PhysicsServer3D::
|
||||
// Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
|
||||
rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
|
||||
|
||||
body_aabb.position += p_parameters.motion * unsafe;
|
||||
int amount = _cull_aabb_for_body(p_body, body_aabb);
|
||||
|
||||
int from_shape = best_shape != -1 ? best_shape : 0;
|
||||
int to_shape = best_shape != -1 ? best_shape + 1 : p_body->get_shape_count();
|
||||
|
||||
@ -937,10 +940,6 @@ bool GodotSpace3D::test_body_motion(GodotBody3D *p_body, const PhysicsServer3D::
|
||||
Transform3D body_shape_xform = ugt * p_body->get_shape_transform(j);
|
||||
GodotShape3D *body_shape = p_body->get_shape(j);
|
||||
|
||||
body_aabb.position += p_parameters.motion * unsafe;
|
||||
|
||||
int amount = _cull_aabb_for_body(p_body, body_aabb);
|
||||
|
||||
for (int i = 0; i < amount; i++) {
|
||||
const GodotCollisionObject3D *col_obj = intersection_query_results[i];
|
||||
if (p_parameters.exclude_bodies.has(col_obj->get_self())) {
|
||||
|
Loading…
Reference in New Issue
Block a user