1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details 2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt 3 4 #ifndef _GEOM_H 5 #define _GEOM_H 6 7 #include "../matrix4x4.h" 8 #include "../vector3.h" 9 10 struct CollisionContact; 11 class GeomTree; 12 struct isect_t; 13 struct Sphere; 14 struct BVHNode; 15 16 class Geom { 17 public: 18 Geom(const GeomTree *geomtree, const matrix4x4d &m, const vector3d &pos, void *data); 19 void MoveTo(const matrix4x4d &m); 20 void MoveTo(const matrix4x4d &m, const vector3d &pos); GetInvTransform()21 inline const matrix4x4d &GetInvTransform() const { return m_invOrient; } GetTransform()22 inline const matrix4x4d &GetTransform() const { return m_orient; } 23 //matrix4x4d GetRotation() const; GetPosition()24 inline const vector3d &GetPosition() const { return m_pos; } Enable()25 inline void Enable() { m_active = true; } Disable()26 inline void Disable() { m_active = false; } IsEnabled()27 inline bool IsEnabled() const { return m_active; } GetGeomTree()28 inline const GeomTree *GetGeomTree() const { return m_geomtree; } 29 void Collide(Geom *b, void (*callback)(CollisionContact *)) const; 30 void CollideSphere(Sphere &sphere, void (*callback)(CollisionContact *)) const; GetUserData()31 inline void *GetUserData() const { return m_data; } SetMailboxIndex(int idx)32 inline void SetMailboxIndex(int idx) { m_mailboxIndex = idx; } GetMailboxIndex()33 inline int GetMailboxIndex() const { return m_mailboxIndex; } SetGroup(int g)34 inline void SetGroup(int g) { m_group = g; } GetGroup()35 inline int GetGroup() const { return m_group; } 36 37 matrix4x4d m_animTransform; 38 39 private: 40 void CollideEdgesWithTrisOf(int &maxContacts, const Geom *b, const matrix4x4d &transTo, void (*callback)(CollisionContact *)) const; 41 void CollideEdgesTris(int &maxContacts, const BVHNode *edgeNode, const matrix4x4d &transToB, 42 const Geom *b, const BVHNode *btriNode, void (*callback)(CollisionContact *)) const; 43 44 // double-buffer position so we can keep previous position 45 matrix4x4d m_orient, m_invOrient; 46 vector3d m_pos; 47 const GeomTree *m_geomtree; 48 void *m_data; 49 int m_group; 50 int m_mailboxIndex; // used to avoid duplicate collisions 51 bool m_active; 52 }; 53 54 #endif /* _GEOM_H */ 55