From 035653e94a3d74b8f18c993034199d7cd08a895a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Fri, 21 Jan 2011 14:41:35 +0000 Subject: Support structures for complex entity collision, renamed sv_arrysize cvar to mem_vertex. --- src/model/collisionmesh.cc | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/model/collisionmesh.cc (limited to 'src/model/collisionmesh.cc') 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 -- cgit v1.2.3