#pragma once #include #include #include #include #include #include enum Mtyp { null, dynamicMesh, cloth, bone, staticMesh, shadowMesh = 6 }; struct ChunkHeader { char name[5]; std::uint32_t size; std::streampos position; }; struct Modl { std::string name; std::string parent; Mtyp type; std::uint32_t renderFlags; glm::mat4 m4x4Translation; struct { float scale[3]; float rotation[4]; float translation[3]; } tran; struct { std::uint32_t type; float data1; float data2; float data3; } swci; std::string texture; float* vertex; float* uv; std::uint32_t* mesh; std::uint32_t meshSize; }; class Object { public: Object(const char* path); ~Object(); private: std::vector vModls; std::fstream fsMesh; std::vector vTextures; private: void setModlDefault(Modl* model); void loadChunks(std::list &destination, std::streampos start, const std::uint32_t end); void analyseMsh2Chunks(std::list &chunkList); void analyseMatdChunks(std::list &chunkList); void analyseModlChunks(Modl* dataDestination, std::list &chunkList); void analyseGeomChunks(Modl* dataDestination, std::list &chunkList); void analyseSegmChunks(Modl* dataDestination, std::list &chunkList); void analyseClthChunks(Modl* dataDestination, std::list &chunkList); void readVertex(Modl* dataDestination, std::streampos position); void readUV(Modl* dataDestination, std::streampos position); public: std::vector getVertex() const; std::vector getUV() const; std::uint32_t getSize() const; std::list getTexture() const; std::vector getModels() const; };