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.cc
parent4af61dca099d2b7010d4fa83833ceeeef01b0b0f (diff)
Support structures for complex entity collision,
renamed sv_arrysize cvar to mem_vertex.
Diffstat (limited to 'src/model/collisionmesh.cc')
-rw-r--r--src/model/collisionmesh.cc76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/model/collisionmesh.cc b/src/model/collisionmesh.cc
new file mode 100644
index 0000000..616ee0d
--- /dev/null
+++ b/src/model/collisionmesh.cc
@@ -0,0 +1,76 @@
+/*
+ model/collisionmesh.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "sys/sys.h"
+#include "model/collisionmesh.h"
+
+namespace model {
+
+CollisionMesh::Registry CollisionMesh::collisionmesh_registry;
+bool CollisionMesh::collisionmesh_initialized = false;
+
+void CollisionMesh::init()
+{
+ clear();
+ collisionmesh_initialized = true;
+}
+
+void CollisionMesh::shutdown()
+{
+ clear();
+ collisionmesh_initialized = false;
+}
+
+void CollisionMesh::add(CollisionMesh *collisionmesh)
+{
+ collisionmesh_registry[collisionmesh->name()] = collisionmesh;
+}
+
+void CollisionMesh::clear()
+{
+ con_debug << " clearing collision meshes" << std::endl;
+
+ for (Registry::iterator i = collisionmesh_registry.begin(); i != collisionmesh_registry.end(); ++i) {
+ delete(*i).second;
+ }
+
+ collisionmesh_registry.clear();
+}
+
+CollisionMesh *CollisionMesh::find(const std::string &name)
+{
+ for (Registry::iterator i = collisionmesh_registry.begin(); i != collisionmesh_registry.end(); ++i) {
+ if ((*i).first.compare(name) == 0)
+ return (*i).second;
+ }
+
+ return 0;
+}
+
+CollisionMesh::CollisionMesh(const std::string &name) :
+ collisionmesh_name(name)
+{
+ collisionmesh_size = 0;
+ // btTriangleMesh (bool use32bitIndices=true, bool use4componentVertices=true)
+ collisionmesh_triangles = new btTriangleMesh(true, false);
+}
+
+CollisionMesh::~CollisionMesh()
+{
+ delete collisionmesh_triangles;
+}
+
+void CollisionMesh::add_triangle(const math::Vector3f & v0, const math::Vector3f & v1, const math::Vector3f & v2)
+{
+ collisionmesh_triangles->addTriangle(
+ to_btVector3(v0),
+ to_btVector3(v1),
+ to_btVector3(v1)
+ );
+ collisionmesh_size += 1;
+}
+
+} // namespace model