/* 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; (*i).second = 0; } 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(v2), true ); collisionmesh_size += 1; } } // namespace model