#ifndef OPENMW_COMPONENTS_NIFBULLET_BULLETNIFLOADER_HPP #define OPENMW_COMPONENTS_NIFBULLET_BULLETNIFLOADER_HPP #include #include #include #include #include #include #include #include #include #include #include class btTriangleMesh; class btCompoundShape; class btCollisionShape; namespace Nif { class Node; struct Transformation; struct NiTriShape; } namespace NifBullet { /** *Load bulletShape from NIF files. */ class BulletNifLoader { public: BulletNifLoader(); virtual ~BulletNifLoader(); void warn(const std::string &msg) { std::cerr << "NIFLoader: Warn:" << msg << "\n"; } void fail(const std::string &msg) { std::cerr << "NIFLoader: Fail: "<< msg << std::endl; abort(); } osg::ref_ptr load(const Nif::NIFFilePtr& file); private: bool findBoundingBox(const Nif::Node* node, int flags = 0); void handleNode(Nif::Node const *node, int flags, bool isCollisionNode, bool isAnimated=false, bool autogenerated=false); bool hasAutoGeneratedCollision(const Nif::Node *rootNode); void handleNiTriShape(const Nif::NiTriShape *shape, int flags, const osg::Matrixf& transform, bool isAnimated); btCompoundShape* mCompoundShape; btTriangleMesh* mStaticMesh; osg::ref_ptr mShape; }; } #endif