/* 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::CollisionMesh() { collisionmesh_type = FragmentGroup::None; collisionmesh_size = 0; // btTriangleMesh (bool use32bitIndices=true, bool use4componentVertices=true) collisionmesh_triangles = new btTriangleMesh(true, false); collisionmesh_owns_triangles = true; collisionmesh_scale = 1.0f; collisionmesh_speed = 0.0f; collisionmesh_distance = 0.0f; } CollisionMesh::CollisionMesh(const CollisionMesh &other) { collisionmesh_type = other.type(); collisionmesh_size = other.size(); collisionmesh_triangles = other.collisionmesh_triangles; collisionmesh_owns_triangles = false; collisionmesh_scale = other.scale(); collisionmesh_speed = other.speed(); collisionmesh_distance = other.distance(); collisionmesh_location.assign(other.location()); collisionmesh_axis.assign(other.axis()); collisionmesh_movement.assign(other.movement()); } CollisionMesh::~CollisionMesh() { if (collisionmesh_owns_triangles) delete collisionmesh_triangles; collisionmesh_triangles = 0; } void CollisionMesh::set_params(const FragmentGroup & group) { collisionmesh_type = group.type(); collisionmesh_location.assign(group.location()); collisionmesh_axis.assign(group.axis()); collisionmesh_movement.assign(group.movement()); 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