/* 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.push_back(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); (*i) = 0; } collisionmesh_registry.clear(); } CollisionMesh::CollisionMesh() { collisionmesh_type = FragmentGroup::None; collisionmesh_size = 0; // btTriangleMesh (bool use32bitIndices=true, bool use4componentVertices=true) collisionmesh_triangles = new btTriangleMesh(true, false); collisionmesh_scale = 1.0f; collisionmesh_speed = 0.0f; collisionmesh_distance = 0.0f; } CollisionMesh::~CollisionMesh() { delete collisionmesh_triangles; } void CollisionMesh::set_params(const FragmentGroup *group) { collisionmesh_type = group->type(); collisionmesh_location.assign(group->location()); collisionmesh_axis.assign(group->axis()); collisionmesh_scale = group->scale(); collisionmesh_speed = group->speed(); collisionmesh_distance = group->distance(); } 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++; } } // namespace model