summaryrefslogtreecommitdiffstats
path: root/src/core/Collision.h
diff options
context:
space:
mode:
authoraap <aap@papnet.eu>2020-05-06 17:56:38 +0200
committeraap <aap@papnet.eu>2020-05-06 17:56:38 +0200
commitf1c1f56b1268b900a01a479f9ad67cd92e63eb52 (patch)
treef936f78ebcc7b736995b68b4d65a66c26cc790c2 /src/core/Collision.h
parentMerge remote-tracking branch 'origin/master' into miami (diff)
downloadre3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.tar
re3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.tar.gz
re3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.tar.bz2
re3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.tar.lz
re3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.tar.xz
re3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.tar.zst
re3-f1c1f56b1268b900a01a479f9ad67cd92e63eb52.zip
Diffstat (limited to 'src/core/Collision.h')
-rw-r--r--src/core/Collision.h39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/core/Collision.h b/src/core/Collision.h
index 18fad76b..4b0c2fb9 100644
--- a/src/core/Collision.h
+++ b/src/core/Collision.h
@@ -10,26 +10,37 @@
#define MAX_COLLISION_POINTS 32
#endif
-struct CColSphere
+struct CSphere
{
CVector center;
float radius;
+ void Set(float radius, const CVector &center) { this->center = center; this->radius = radius; }
+};
+
+struct CBox
+{
+ CVector min;
+ CVector max;
+ CVector GetSize(void) { return max - min; }
+ void Set(const CVector &min, const CVector &max) { this->min = min; this->max = max; }
+};
+
+struct CColSphere : public CSphere
+{
uint8 surface;
uint8 piece;
void Set(float radius, const CVector &center, uint8 surf, uint8 piece);
- void Set(float radius, const CVector &center) { this->center = center; this->radius = radius; }
+ using CSphere::Set;
};
-struct CColBox
+struct CColBox : public CBox
{
- CVector min;
- CVector max;
uint8 surface;
uint8 piece;
void Set(const CVector &min, const CVector &max, uint8 surf, uint8 piece);
- CVector GetSize(void) { return max - min; }
+ using CBox::Set;
};
struct CColLine
@@ -85,15 +96,15 @@ struct CStoredCollPoly
bool valid;
};
+//--MIAMI: done struct
struct CColModel
{
- // TODO(MIAMI): CSphere and CBox
- CColSphere boundingSphere;
- CColBox boundingBox;
+ CSphere boundingSphere;
+ CBox boundingBox;
int16 numSpheres;
- int16 numLines;
int16 numBoxes;
int16 numTriangles;
+ int8 numLines;
uint8 level; // colstore slot but probably still named level
bool ownsCollisionVolumes;
CColSphere *spheres;
@@ -133,10 +144,10 @@ public:
static void CalculateTrianglePlanes(CColModel *model);
// all these return true if there's a collision
- static bool TestSphereSphere(const CColSphere &s1, const CColSphere &s2);
- static bool TestSphereBox(const CColSphere &sph, const CColBox &box);
- static bool TestLineBox(const CColLine &line, const CColBox &box);
- static bool TestVerticalLineBox(const CColLine &line, const CColBox &box);
+ static bool TestSphereSphere(const CSphere &s1, const CSphere &s2);
+ static bool TestSphereBox(const CSphere &sph, const CBox &box);
+ static bool TestLineBox(const CColLine &line, const CBox &box);
+ static bool TestVerticalLineBox(const CColLine &line, const CBox &box);
static bool TestLineTriangle(const CColLine &line, const CVector *verts, const CColTriangle &tri, const CColTrianglePlane &plane);
static bool TestLineSphere(const CColLine &line, const CColSphere &sph);
static bool TestSphereTriangle(const CColSphere &sphere, const CVector *verts, const CColTriangle &tri, const CColTrianglePlane &plane);