/* model/collisionmesh.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_MODEL_COLLISIONMESH_H__ #define __INCLUDED_MODEL_COLLISIONMESH_H__ #include "math/mathlib.h" #include "BulletCollision/CollisionShapes/btTriangleMesh.h" #include #include namespace model { class CollisionMesh { public: /// type definition for the material registry typedef std::map Registry; CollisionMesh(const std::string &name); ~CollisionMesh(); /* ---- inspectors ----------------------------------------- */ inline const std::string &name() const { return collisionmesh_name; } /** * @brief the number of triangles in the collision mesh */ inline size_t size() const { return collisionmesh_size; } static bool initialized() { return collisionmesh_initialized; } /** * @brief the bullet triangle mesh object */ inline btTriangleMesh *triangles() { return collisionmesh_triangles; } /* ---- mutators ------------------------------------------- */ /** * @brief add a triangle to the collision mesh */ void add_triangle(const math::Vector3f & v0, const math::Vector3f & v1, const math::Vector3f & v2); /* ---- static ----------------------------------------------------- */ /** * @brief initialize collisionmesh registry */ static void init(); /** * @brief shutdown collisionmesh registry */ static void shutdown(); /** * @brief clear collisionmesh registry */ static void clear(); /** * @brief find a collisionmesh in the registry */ static CollisionMesh *find(const std::string &name); /** * @brief add a collisionmesh to the registry */ static void add(CollisionMesh *collisionmesh); private: /// the materials registry static Registry collisionmesh_registry; static bool collisionmesh_initialized; std::string collisionmesh_name; size_t collisionmesh_size; btTriangleMesh *collisionmesh_triangles; }; } // namespace model #endif // __INCLUDED_MODEL_COLLISIONMESH_H__