#pragma once #include <cstdint> #include <string> #include <vector> #include <filesystem> #include "Pack.h" #pragma pack(push, 1) struct PackFileIndex { uint32_t m_Crc; int32_t m_LowerCrc; int32_t m_UpperCrc; uint32_t m_PackFileIndex; uint32_t m_IsCompressed; // u32 bool? }; #pragma pack(pop) class PackIndex { public: PackIndex(const std::filesystem::path& filePath); ~PackIndex(); const std::vector<std::string>& GetPackPaths() { return m_PackPaths; } const std::vector<PackFileIndex>& GetPackFileIndices() { return m_PackFileIndices; } const std::vector<Pack*>& GetPacks() { return m_Packs; } private: std::ifstream m_FileStream; uint32_t m_Version; uint32_t m_PackPathCount; std::vector<std::string> m_PackPaths; uint32_t m_PackFileIndexCount; std::vector<PackFileIndex> m_PackFileIndices; std::vector<Pack*> m_Packs; };