diff options
author | Sergeanur <s.anureev@yandex.ua> | 2021-02-16 17:08:19 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2021-02-16 17:08:19 +0100 |
commit | e38467ef3affef25b83daf0c0c3b8a61f04e8a65 (patch) | |
tree | 3628aed1314f21147e7a46f3095fa341088d8044 /src/collision | |
parent | fix mailbox particle (diff) | |
parent | PR rules (diff) | |
download | re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.tar re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.tar.gz re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.tar.bz2 re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.tar.lz re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.tar.xz re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.tar.zst re3-e38467ef3affef25b83daf0c0c3b8a61f04e8a65.zip |
Diffstat (limited to 'src/collision')
-rw-r--r-- | src/collision/Collision.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/collision/Collision.cpp b/src/collision/Collision.cpp index 82681645..1f15670d 100644 --- a/src/collision/Collision.cpp +++ b/src/collision/Collision.cpp @@ -311,8 +311,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; @@ -1131,8 +1139,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; |