summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerorcun <erorcunerorcun@hotmail.com.tr>2021-01-27 22:51:43 +0100
committererorcun <erorcunerorcun@hotmail.com.tr>2021-01-28 00:18:04 +0100
commit2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a (patch)
treeb6c42b3c3ce8b1122e90ad871b3c06bd3e21c7b0
parentMerge pull request #1004 from GaryOderNichts/fix1 (diff)
downloadre3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.tar
re3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.tar.gz
re3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.tar.bz2
re3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.tar.lz
re3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.tar.xz
re3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.tar.zst
re3-2b269ff1c0b834d9a89c3b6acbec4c73c98cd35a.zip
-rw-r--r--src/collision/Collision.cpp21
-rw-r--r--src/core/World.cpp8
2 files changed, 23 insertions, 6 deletions
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;
diff --git a/src/core/World.cpp b/src/core/World.cpp
index 6ecc294a..62162dcd 100644
--- a/src/core/World.cpp
+++ b/src/core/World.cpp
@@ -431,10 +431,10 @@ CWorld::ProcessVerticalLineSector(CSector &sector, const CColLine &line, CColPoi
}
bool
-CWorld::ProcessVerticalLineSectorList(CPtrList &list, const CColLine &line, CColPoint &point, float &dist,
+CWorld::ProcessVerticalLineSectorList(CPtrList &list, const CColLine &line, CColPoint &point, float &mindist,
CEntity *&entity, bool ignoreSeeThrough, CStoredCollPoly *poly)
{
- float mindist = dist;
+ float dist = mindist;
CPtrNode *node;
CEntity *e;
CColModel *colmodel;
@@ -451,8 +451,8 @@ CWorld::ProcessVerticalLineSectorList(CPtrList &list, const CColLine &line, CCol
}
}
- if(mindist < dist) {
- dist = mindist;
+ if(dist < mindist) {
+ mindist = dist;
return true;
} else
return false;