2014-01-31 08:23:00 +13:00
|
|
|
|
|
|
|
|
#ifndef MESHCOLLIDER_H
|
|
|
|
|
#define MESHCOLLIDER_H
|
|
|
|
|
|
2019-01-18 15:55:06 +01:00
|
|
|
#include "collision.hpp"
|
2014-01-31 08:23:00 +13:00
|
|
|
|
2019-01-18 17:04:17 +01:00
|
|
|
class MeshCollider {
|
|
|
|
|
public:
|
|
|
|
|
struct Vertex {
|
2014-01-31 08:23:00 +13:00
|
|
|
Vector coords;
|
|
|
|
|
};
|
2019-01-18 17:04:17 +01:00
|
|
|
struct Triangle {
|
|
|
|
|
void* surface;
|
|
|
|
|
int verts[3], index;
|
2014-01-31 08:23:00 +13:00
|
|
|
};
|
2019-01-18 17:04:17 +01:00
|
|
|
MeshCollider(const vector<Vertex>& verts, const vector<Triangle>& tris);
|
2014-01-31 08:23:00 +13:00
|
|
|
~MeshCollider();
|
|
|
|
|
|
|
|
|
|
//sphere collision
|
2019-01-18 17:04:17 +01:00
|
|
|
bool collide(const Line& line, float radius, Collision* curr_coll, const Transform& tform);
|
2014-01-31 08:23:00 +13:00
|
|
|
|
2019-01-18 17:04:17 +01:00
|
|
|
bool intersects(const MeshCollider& c, const Transform& t) const;
|
2014-01-31 08:23:00 +13:00
|
|
|
|
2019-01-18 17:04:17 +01:00
|
|
|
private:
|
|
|
|
|
vector<Vertex> vertices;
|
2014-01-31 08:23:00 +13:00
|
|
|
vector<Triangle> triangles;
|
|
|
|
|
|
2019-01-18 17:04:17 +01:00
|
|
|
struct Node {
|
|
|
|
|
Box box;
|
|
|
|
|
Node * left, *right;
|
2014-01-31 08:23:00 +13:00
|
|
|
vector<int> triangles;
|
2019-01-18 17:04:17 +01:00
|
|
|
Node() : left(0), right(0) {}
|
|
|
|
|
~Node()
|
|
|
|
|
{
|
|
|
|
|
delete left;
|
|
|
|
|
delete right;
|
|
|
|
|
}
|
2014-01-31 08:23:00 +13:00
|
|
|
};
|
|
|
|
|
|
2019-01-18 17:04:17 +01:00
|
|
|
Node* tree;
|
2014-01-31 08:23:00 +13:00
|
|
|
vector<Node*> leaves;
|
|
|
|
|
|
2019-01-18 17:04:17 +01:00
|
|
|
Box nodeBox(const vector<int>& tris);
|
|
|
|
|
Node* createLeaf(const vector<int>& tris);
|
|
|
|
|
Node* createNode(const vector<int>& tris);
|
|
|
|
|
bool collide(const Box& box, const Line& line, float radius, const Transform& tform, Collision* curr_coll,
|
|
|
|
|
Node* node);
|
2014-01-31 08:23:00 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|