Minecraft Community Edition 0.1.0
Loading...
Searching...
No Matches
VirtualFileSystem.hpp
1#pragma once
2#include <EASTL/string.h>
3#include <EASTL/unordered_map.h>
4#include <EASTL/vector.h>
5#define JSON_NOEXCEPTION
6#include "nlohmann/json.hpp"
7#include "Stream/FileInputStream.hpp"
8
9namespace mce {
18 public:
23 enum FileBinaryType : unsigned char {
24 NONE = 0,
28 };
29
36 union Version {
37
44 static Version makeVersion(unsigned char major, unsigned char minor, unsigned char patch);
45
46 struct {
47 unsigned char major, minor, patch;
48 };
49
50 unsigned int quad;
51 };
52
61
66 Config& getConfig();
67
74 bool getFile(const eastl::string_view& fileTag, eastl::vector<char>& bytes);
75
82 bool buildJSONMappingFile(const std::string& fileInName, const std::string& fileOutName);
83
89 bool loadFile(const std::string& fileName);
90 private:
91#ifdef _DEBUG
97 bool loadJSONMappingFile(const std::string& fileName);
98#else
104 bool loadVirtualFileSystem(const std::string& fileName);
105#endif
109 struct File {
110 std::string path;
111 size_t start, end;
112
113 size_t size;
114 };
115
121 eastl::unordered_map<eastl::string, File> files;
122
123 Config cfg;
124#ifdef _DEBUG
125 nlohmann::json data;
126#else
127 FileInputStream fileInStream;
133 char* binary;
134#endif
135 };
136}
VirtualFileSystem manages a collection of files referenced by tags.
Definition VirtualFileSystem.hpp:17
FileBinaryType
Types of virtual file collections that can be stored in a VFS file.
Definition VirtualFileSystem.hpp:23
@ SOURCE_FILE
Definition VirtualFileSystem.hpp:26
@ ASSETS_FILE
Definition VirtualFileSystem.hpp:25
@ WORLD_FILE
Definition VirtualFileSystem.hpp:27
@ NONE
Definition VirtualFileSystem.hpp:24
bool buildJSONMappingFile(const std::string &fileInName, const std::string &fileOutName)
Build a binary VFS file from a JSON mapping.
Definition VirtualFileSystem.cpp:184
bool getFile(const eastl::string_view &fileTag, eastl::vector< char > &bytes)
Retrieve a file's bytes identified by its tag.
Definition VirtualFileSystem.cpp:108
bool loadFile(const std::string &fileName)
Load the virtual file system from a file.
Definition VirtualFileSystem.cpp:300
Config & getConfig()
Access the runtime configuration.
Definition VirtualFileSystem.cpp:89
Configuration for how the VirtualFileSystem should operate.
Definition VirtualFileSystem.hpp:56
FileBinaryType fileType
Definition VirtualFileSystem.hpp:58
Version version
Definition VirtualFileSystem.hpp:59
bool useStreamInput
Definition VirtualFileSystem.hpp:57
Version information for the virtual file system format.
Definition VirtualFileSystem.hpp:36
unsigned char patch
Definition VirtualFileSystem.hpp:47
static Version makeVersion(unsigned char major, unsigned char minor, unsigned char patch)
Create a Version from components.
Definition VirtualFileSystem.cpp:37
unsigned int quad
Definition VirtualFileSystem.hpp:50