/* 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 "model/fragment.h" #include "BulletCollision/CollisionShapes/btTriangleMesh.h" #include #include namespace model { /** * @brief a collection of triangles, representing the collision geometry of a model * A CollisionModel consists of a number of collisionmeshes. * */ class CollisionMesh { public: /// type definition for the collisionmesh registry typedef std::list Registry; CollisionMesh(); ~CollisionMesh(); /* ---- inspectors ----------------------------------------- */ /** * @brief the number of triangles in the collision mesh */ inline size_t size() const { return collisionmesh_size; } /** * @brief the bullet triangle mesh object */ inline btTriangleMesh *triangles() { return collisionmesh_triangles; } /* ---- mutators ------------------------------------------- */ /** * @brief change the group type * */ void set_type(const FragmentGroup::Type type); /** * @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); static bool initialized() { return collisionmesh_initialized; } private: /// the materials registry static Registry collisionmesh_registry; static bool collisionmesh_initialized; size_t collisionmesh_size; btTriangleMesh *collisionmesh_triangles; FragmentGroup::Type collisionmesh_type; }; } // namespace model #endif // __INCLUDED_MODEL_COLLISIONMESH_H__