From bed47a82e706a13c22799fcf644753c69fdec6ad Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Sun, 7 Mar 2021 11:43:47 +0100 Subject: Projection friction impulses on an implicit cone instead of a pyramidal approximation. --- src/pipeline/physics_hooks.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/pipeline') diff --git a/src/pipeline/physics_hooks.rs b/src/pipeline/physics_hooks.rs index c3621ea..72b635f 100644 --- a/src/pipeline/physics_hooks.rs +++ b/src/pipeline/physics_hooks.rs @@ -81,7 +81,15 @@ impl<'a> ContactModificationContext<'a> { // normal, so remove all the contacts and mark further contacts // as forbidden. self.solver_contacts.clear(); - *self.user_data = CONTACT_CURRENTLY_FORBIDDEN; + + // NOTE: in some very rare cases `local_n1` will be + // zero if the objects are exactly touching at one point. + // So in this case we can't really conclude. + // If the norm is non-zero, then we can tell we need to forbid + // further contacts. Otherwise we have to wait for the next frame. + if self.manifold.local_n1.norm_squared() > 0.1 { + *self.user_data = CONTACT_CURRENTLY_FORBIDDEN; + } } } CONTACT_CURRENTLY_FORBIDDEN => { -- cgit