// Copyright (C) 2006-2012 Luke Hoschke // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h // B3D Mesh loader // File format designed by Mark Sibly for the Blitz3D engine and has been // declared public domain #pragma once #include "IMeshLoader.h" #include "ISceneManager.h" #include "CSkinnedMesh.h" #include "SB3DStructs.h" #include "IReadFile.h" namespace irr { namespace scene { //! Meshloader for B3D format class CB3DMeshFileLoader : public IMeshLoader { public: //! Constructor CB3DMeshFileLoader(scene::ISceneManager *smgr); //! returns true if the file maybe is able to be loaded by this class //! based on the file extension (e.g. ".bsp") bool isALoadableFileExtension(const io::path &filename) const override; //! creates/loads an animated mesh from the file. //! \return Pointer to the created mesh. Returns 0 if loading failed. //! If you no longer need the mesh, you should call IAnimatedMesh::drop(). //! See IReferenceCounted::drop() for more information. IAnimatedMesh *createMesh(io::IReadFile *file) override; private: bool load(); bool readChunkNODE(CSkinnedMesh::SJoint *InJoint); bool readChunkMESH(CSkinnedMesh::SJoint *InJoint); bool readChunkVRTS(CSkinnedMesh::SJoint *InJoint); bool readChunkTRIS(scene::SSkinMeshBuffer *MeshBuffer, u32 MeshBufferID, s32 Vertices_Start); bool readChunkBONE(CSkinnedMesh::SJoint *InJoint); bool readChunkKEYS(CSkinnedMesh::SJoint *InJoint); bool readChunkANIM(); bool readChunkTEXS(); bool readChunkBRUS(); std::string readString(); void readFloats(f32 *vec, u32 count); core::array B3dStack; core::array Materials; core::array Textures; core::array AnimatedVertices_VertexID; core::array AnimatedVertices_BufferID; core::array BaseVertices; CSkinnedMesh *AnimatedMesh; io::IReadFile *B3DFile; // B3Ds have Vertex ID's local within the mesh I don't want this // Variable needs to be class member due to recursion in calls u32 VerticesStart; bool NormalsInFile; bool HasVertexColors; bool ShowWarning; }; } // end namespace scene } // end namespace irr