14#include <unordered_map>
21namespace fs = std::filesystem;
54 std::unique_ptr<FileData>
load_file(
const std::string& virtual_path);
62 std::unique_ptr<std::istream>
open_file_stream(
const std::string& virtual_path);
84 std::vector<std::string>
list_files(
const std::string& virtual_dir =
"");
98 static void SetVpakKey(
const std::string& key);
104 static std::string s_vpak_key;
110 uint32_t names_offset;
111 uint32_t data_offset;
112 uint32_t solid_compressed_size;
113 uint32_t solid_uncompressed_size;
118 uint32_t name_offset;
119 uint32_t data_offset;
120 uint32_t uncompressed_size;
126 std::vector<VPKFileEntry> entries;
127 std::vector<std::string> file_names;
128 std::vector<uint8_t> solid_data;
129 std::ifstream file_stream;
130 std::string file_path;
138 std::vector<char> buffer;
144 std::memcpy(buffer.data(), data, size);
145 setg(buffer.data(), buffer.data(), buffer.data() + size);
154 : std::istream(&buf), buf(data, size) {}
157 std::unique_ptr<LoadedVPK> m_loaded_vpk;
158 std::string m_base_path;
159 bool m_use_packed_assets;
161 std::mutex stream_mutex;
169 std::string
clean_path(
const std::string& path);
VPKStreamBuf(const char *data, size_t size)
Method to initialize the buffer with data.
VPKStream(const char *data, size_t size)
Constructor to initialize the buffer with data.
std::vector< std::string > list_files(const std::string &virtual_dir="")
Lists all files contained within a specific directory.
std::string get_base_path() const
Gets the base path of the virtual file system.
std::unique_ptr< FileData > load_file(const std::string &virtual_path)
Loads a file into memory from the specified path.
VirtualFileSystem()
Constructor for VirtualFileSystem.
std::string clean_path(const std::string &path)
cleans path from unwanted string eg "Assets/"
size_t get_file_size(const std::string &virtual_path)
Gets the size of a file in bytes.
std::string resolve_relative_path(const std::string &base_path, const std::string &relative_path)
Resolves a relative path to a normalized, cleaner format.
const VPKFileEntry * find_file_entry(const std::string &virtual_path)
Method to find a file entry by its virtual path.
std::unique_ptr< std::istream > open_file_stream(const std::string &virtual_path)
Opens a file stream for reading from a specified path.
bool initialize(const std::string &base_path)
Initializes the virtual file system.
bool load_vpk_file(const std::string &vpk_path)
Method to load a VPK file.
static std::string GetVpakKey()
Gets the current VPAK decryption key.
static void SetVpakKey(const std::string &key)
Sets the VPAK decryption key.
bool file_exists(const std::string &virtual_path)
Checks if a file exists in the currently active file system mode.
Simple struct needed to represent loaded file with data and size.
std::vector< uint8_t > data
raw file data
size_t size
size of the file data in bytes.
struct holding data of loaded vpk file.
struct defining virtual file "header", used to identify files in the virtual file system.