diff options
author | Spartan322 <Megacake1234@gmail.com> | 2024-11-06 01:07:22 -0500 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2024-11-06 01:12:36 -0500 |
commit | b8b8a7127e3040582c5937fd2dff4c99e94a3b57 (patch) | |
tree | 849c2d29b6fb90100f31de20340d5f0ef4238edf /modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp | |
parent | d14f2a31558686f00c4f351ea659918576711a7a (diff) | |
parent | 87318a2fb7fffeb72adca934e31915be077c3d1f (diff) | |
download | redot-engine-b8b8a7127e3040582c5937fd2dff4c99e94a3b57.tar.gz |
Merge commit godotengine/godot@87318a2fb7fffeb72adca934e31915be077c3d1f
Diffstat (limited to 'modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp')
-rw-r--r-- | modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp b/modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp index afa50d6a13..58843f1ad6 100644 --- a/modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp +++ b/modules/godot_physics_3d/godot_collision_solver_3d_sat.cpp @@ -78,8 +78,9 @@ struct _CollectorCallback { Vector3 *prev_axis = nullptr; _FORCE_INLINE_ void call(const Vector3 &p_point_A, const Vector3 &p_point_B, Vector3 p_normal) { - if (p_normal.dot(p_point_B - p_point_A) < 0) + if (p_normal.dot(p_point_B - p_point_A) < 0) { p_normal = -p_normal; + } if (swap) { callback(p_point_B, 0, p_point_A, 0, -p_normal, userdata); } else { @@ -177,10 +178,11 @@ static void _generate_contacts_edge_edge(const Vector3 *p_points_A, int p_point_ // The normal should be perpendicular to both edges. Vector3 normal = rel_A.cross(rel_B); real_t normal_len = normal.length(); - if (normal_len > 1e-3) + if (normal_len > 1e-3) { normal /= normal_len; - else + } else { normal = p_callback->normal; + } p_callback->call(closest_A, closest_B, normal); } @@ -786,8 +788,9 @@ static void analytic_sphere_collision(const Vector3 &p_origin_a, real_t p_radius // Calculate the sphere overlap, and bail if not overlapping real_t overlap = p_radius_a + p_radius_b - b_to_a_len; - if (overlap < 0) + if (overlap < 0) { return; + } // Report collision p_collector->collided = true; |