summaryrefslogtreecommitdiffstats
path: root/src/collision/Collision.cpp
diff options
context:
space:
mode:
authoraap <aap@papnet.eu>2021-02-01 10:57:55 +0100
committeraap <aap@papnet.eu>2021-02-01 10:57:55 +0100
commit3f60034c391fd5da66639e4a29f121f18ead6255 (patch)
treef7d5c6b8ac6c7fba1a7a499c600ea551653f6f23 /src/collision/Collision.cpp
parentfix realloc (diff)
downloadre3-3f60034c391fd5da66639e4a29f121f18ead6255.tar
re3-3f60034c391fd5da66639e4a29f121f18ead6255.tar.gz
re3-3f60034c391fd5da66639e4a29f121f18ead6255.tar.bz2
re3-3f60034c391fd5da66639e4a29f121f18ead6255.tar.lz
re3-3f60034c391fd5da66639e4a29f121f18ead6255.tar.xz
re3-3f60034c391fd5da66639e4a29f121f18ead6255.tar.zst
re3-3f60034c391fd5da66639e4a29f121f18ead6255.zip
Diffstat (limited to '')
-rw-r--r--src/collision/Collision.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/collision/Collision.cpp b/src/collision/Collision.cpp
index bead5183..82681645 100644
--- a/src/collision/Collision.cpp
+++ b/src/collision/Collision.cpp
@@ -24,6 +24,10 @@
#include "Camera.h"
#include "ColStore.h"
+// gotta figure out how they handled CSphere exactly
+// so using this to remind me to look into it again.
+#define CVECTORHACK(rwv3d) CVector(rwv3d)
+
#ifdef VU_COLLISION
#include "VuCollision.h"
@@ -391,7 +395,7 @@ CCollision::TestLineSphere(const CColLine &line, const CColSphere &sph)
// The length of the tangent would be this: Sqrt((c-p0)^2 - r^2).
// Negative if p0 is inside the sphere! This breaks the test!
float tansq = 4.0f * linesq *
- (sph.center.MagnitudeSqr() - 2.0f*DotProduct(sph.center, line.p0) + line.p0.MagnitudeSqr() - sph.radius*sph.radius);
+ (CVECTORHACK(sph.center).MagnitudeSqr() - 2.0f*DotProduct(sph.center, line.p0) + line.p0.MagnitudeSqr() - sph.radius*sph.radius);
float diffsq = projline*projline - tansq;
// if diffsq < 0 that means the line is a passant, so no intersection
if(diffsq < 0.0f)
@@ -470,9 +474,9 @@ CCollision::TestSphereTriangle(const CColSphere &sphere,
case 2:
// closest to an edge
// looks like original game as DistToLine manually inlined
- if(!insideAB) dist = DistToLine(&va, &vb, &sphere.center);
- else if(!insideAC) dist = DistToLine(&va, &vc, &sphere.center);
- else if(!insideBC) dist = DistToLine(&vb, &vc, &sphere.center);
+ if(!insideAB) dist = DistToLine(&va, &vb, &CVECTORHACK(sphere.center));
+ else if(!insideAC) dist = DistToLine(&va, &vc, &CVECTORHACK(sphere.center));
+ else if(!insideBC) dist = DistToLine(&vb, &vc, &CVECTORHACK(sphere.center));
else assert(0);
break;
case 3:
@@ -1279,9 +1283,9 @@ CCollision::ProcessSphereTriangle(const CColSphere &sphere,
case 2:
// closest to an edge
// looks like original game as DistToLine manually inlined
- if(!insideAB) dist = DistToLine(&va, &vb, &sphere.center, p);
- else if(!insideAC) dist = DistToLine(&va, &vc, &sphere.center, p);
- else if(!insideBC) dist = DistToLine(&vb, &vc, &sphere.center, p);
+ if(!insideAB) dist = DistToLine(&va, &vb, &CVECTORHACK(sphere.center), p);
+ else if(!insideAC) dist = DistToLine(&va, &vc, &CVECTORHACK(sphere.center), p);
+ else if(!insideBC) dist = DistToLine(&vb, &vc, &CVECTORHACK(sphere.center), p);
else assert(0);
break;
case 3: