From 2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a Mon Sep 17 00:00:00 2001 From: erorcun Date: Thu, 28 Jan 2021 00:51:43 +0300 Subject: Fix some Collision NaN/inf's --- src/collision/Collision.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/collision/Collision.cpp') diff --git a/src/collision/Collision.cpp b/src/collision/Collision.cpp index 396e3b85..9d656581 100644 --- a/src/collision/Collision.cpp +++ b/src/collision/Collision.cpp @@ -477,8 +477,16 @@ CCollision::TestLineTriangle(const CColLine &line, const CompressedVector *verts if(plane.CalcPoint(line.p0) * plane.CalcPoint(line.p1) > 0.0f) return false; + float p0dist = DotProduct(line.p1 - line.p0, normal); + +#ifdef FIX_BUGS + // line lines in the plane, assume no collision + if (p0dist == 0.0f) + return false; +#endif + // intersection parameter on line - t = -plane.CalcPoint(line.p0) / DotProduct(line.p1 - line.p0, normal); + t = -plane.CalcPoint(line.p0) / p0dist; // find point of intersection CVector p = line.p0 + (line.p1-line.p0)*t; @@ -1286,8 +1294,17 @@ CCollision::ProcessLineTriangle(const CColLine &line, if(plane.CalcPoint(line.p0) * plane.CalcPoint(line.p1) > 0.0f) return false; + float p0dist = DotProduct(line.p1 - line.p0, normal); + +#ifdef FIX_BUGS + // line lines in the plane, assume no collision + if (p0dist == 0.0f) + return false; +#endif + // intersection parameter on line - t = -plane.CalcPoint(line.p0) / DotProduct(line.p1 - line.p0, normal); + t = -plane.CalcPoint(line.p0) / p0dist; + // early out if we're beyond the mindist if(t >= mindist) return false; -- cgit v1.2.3