#ifndef BSA_BA2_DX10_FILE_H #define BSA_BA2_DX10_FILE_H #include #include #include #include #include #include namespace Bsa { class BA2DX10File : private BSAFile { private: struct TextureChunkRecord { uint32_t size = 0; uint32_t packedSize = 0; int64_t offset = 0; uint16_t startMip = 0; uint16_t endMip = 0; }; struct FileRecord { uint8_t unknownTex = 0; uint16_t height = 0; uint16_t width = 0; uint8_t numMips = 0; uint8_t DXGIFormat = 0; uint16_t cubeMaps = 0; std::vector texturesChunks; }; uint32_t mVersion{ 0u }; using FolderRecord = std::map, FileRecord>; std::map mFolders; std::list> mFileNames; std::optional getFileRecord(const std::string& str) const; Files::IStreamPtr getFile(const FileRecord& fileRecord); void loadFiles(uint32_t fileCount, std::istream& in); public: using BSAFile::getFilename; using BSAFile::getList; using BSAFile::open; BA2DX10File(); virtual ~BA2DX10File(); /// Read header information from the input source void readHeader() override; Files::IStreamPtr getFile(const char* filePath); Files::IStreamPtr getFile(const FileStruct* fileStruct); void addFile(const std::string& filename, std::istream& file); }; } #endif