Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2011-01-21 14:41:35 +0000
committerStijn Buys <ingar@osirion.org>2011-01-21 14:41:35 +0000
commit035653e94a3d74b8f18c993034199d7cd08a895a (patch)
tree6acc56c14a86b499657b6e7faaf50f9e6f7ff57d /src/model/collisionmesh.h
parent4af61dca099d2b7010d4fa83833ceeeef01b0b0f (diff)
Support structures for complex entity collision,
renamed sv_arrysize cvar to mem_vertex.
Diffstat (limited to 'src/model/collisionmesh.h')
-rw-r--r--src/model/collisionmesh.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/model/collisionmesh.h b/src/model/collisionmesh.h
new file mode 100644
index 0000000..9efd21a
--- /dev/null
+++ b/src/model/collisionmesh.h
@@ -0,0 +1,102 @@
+/*
+ model/collisionmesh.h
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_MODEL_COLLISIONMESH_H__
+#define __INCLUDED_MODEL_COLLISIONMESH_H__
+
+#include "math/mathlib.h"
+
+#include "BulletCollision/CollisionShapes/btTriangleMesh.h"
+
+#include <string>
+#include <map>
+
+namespace model
+{
+
+class CollisionMesh
+{
+public:
+
+ /// type definition for the material registry
+ typedef std::map<std::string, CollisionMesh *> Registry;
+
+ CollisionMesh(const std::string &name);
+
+ ~CollisionMesh();
+
+ /* ---- inspectors ----------------------------------------- */
+
+ inline const std::string &name() const {
+ return collisionmesh_name;
+ }
+
+ /**
+ * @brief the number of triangles in the collision mesh
+ */
+ inline size_t size() const {
+ return collisionmesh_size;
+ }
+
+ static bool initialized() {
+ return collisionmesh_initialized;
+ }
+
+ /**
+ * @brief the bullet triangle mesh object
+ */
+ inline btTriangleMesh *triangles() {
+ return collisionmesh_triangles;
+ }
+
+ /* ---- mutators ------------------------------------------- */
+
+ /**
+ * @brief add a triangle to the collision mesh
+ */
+ void add_triangle(const math::Vector3f & v0, const math::Vector3f & v1, const math::Vector3f & v2);
+
+ /* ---- static ----------------------------------------------------- */
+
+ /**
+ * @brief initialize collisionmesh registry
+ */
+ static void init();
+
+ /**
+ * @brief shutdown collisionmesh registry
+ */
+ static void shutdown();
+
+ /**
+ * @brief clear collisionmesh registry
+ */
+ static void clear();
+
+ /**
+ * @brief find a collisionmesh in the registry
+ */
+ static CollisionMesh *find(const std::string &name);
+
+ /**
+ * @brief add a collisionmesh to the registry
+ */
+ static void add(CollisionMesh *collisionmesh);
+
+private:
+
+ /// the materials registry
+ static Registry collisionmesh_registry;
+ static bool collisionmesh_initialized;
+
+ std::string collisionmesh_name;
+ size_t collisionmesh_size;
+ btTriangleMesh *collisionmesh_triangles;
+};
+
+} // namespace model
+
+#endif // __INCLUDED_MODEL_COLLISIONMESH_H__