// Copyright (C) 2002-2009 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h #ifndef __C_LWO_MESH_FILE_LOADER_H_INCLUDED__ #define __C_LWO_MESH_FILE_LOADER_H_INCLUDED__ #include "IMeshLoader.h" #include "SMeshBuffer.h" #include "irrString.h" namespace irr { namespace io { class IReadFile; class IFileSystem; } // end namespace io namespace scene { struct SMesh; class ISceneManager; //! Meshloader capable of loading Lightwave 3D meshes. class CLWOMeshFileLoader : public IMeshLoader { public: //! Constructor CLWOMeshFileLoader(scene::ISceneManager* smgr, io::IFileSystem* fs); //! destructor virtual ~CLWOMeshFileLoader(); //! returns true if the file maybe is able to be loaded by this class //! based on the file extension (e.g. ".bsp") virtual bool isALoadableFileExtension(const io::path& filename) const; //! 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 IUnknown::drop() for more information. virtual IAnimatedMesh* createMesh(io::IReadFile* file); private: struct tLWOMaterial; bool readFileHeader(); bool readChunks(); void readObj1(u32 size); void readTagMapping(u32 size); void readVertexMapping(u32 size); void readDiscVertexMapping (u32 size); void readObj2(u32 size); void readMat(u32 size); u32 readString(core::stringc& name, u32 size=0); u32 readVec(core::vector3df& vec); u32 readVX(u32& num); u32 readColor(video::SColor& color); video::ITexture* loadTexture(const core::stringc& file); scene::ISceneManager* SceneManager; io::IFileSystem* FileSystem; io::IReadFile* File; SMesh* Mesh; core::array Points; core::array > Indices; core::array UvName; core::array > UvIndex; core::array DUvName; core::array > VmPolyPointsIndex; core::array > VmCoordsIndex; core::array MaterialMapping; core::array > TCoords; core::array Materials; core::array Images; u8 FormatVersion; }; } // end namespace scene } // end namespace irr #endif