8#include <entt/locator/locator.hpp>
11#include <tinyfiledialogs.h>
21#ifdef GALAXY_WIN_PLATFORM
36 PHYSFS_Allocator a = {};
41 a.Realloc = mi_realloc;
47 PHYSFS_permitSymbolicLinks(
false);
50 write_dir.make_preferred();
54 read_dir.make_preferred();
88 PHYSFS_File* f = PHYSFS_openRead(file.c_str());
91 const auto len = PHYSFS_fileLength(f);
124 PHYSFS_File* f = PHYSFS_openRead(file.c_str());
127 const auto len = PHYSFS_fileLength(f);
131 std::vector<std::uint8_t> buffer;
160 return write_raw(data.data(), data.size() *
sizeof(
char), file);
165 return write_raw(data.data(), data.size_bytes(), file);
170 auto path = std::filesystem::path(file);
171 if (path.is_absolute())
173 path = path.filename();
176 PHYSFS_File* f = PHYSFS_openWrite(path.string().c_str());
179 const auto len = PHYSFS_fileLength(f);
215 return PHYSFS_exists(file.c_str());
220 return PHYSFS_isDirectory(path.c_str());
225 std::vector<std::string>
list;
229 [](
void* data,
const char* origdir,
const char* fname) -> PHYSFS_EnumerateCallbackResult {
230 if (data != nullptr && fname != nullptr)
232 std::string o = origdir;
233 std::string f = fname;
235 auto* my_list = static_cast<std::vector<std::string>*>(data);
236 my_list->emplace_back(o + f);
239 return PHYSFS_ENUM_OK;
247 void VirtualFileSystem::alert() noexcept
252 void VirtualFileSystem::notification(
const std::string& title,
const std::string& msg,
const fs::DialogIcon icon)
noexcept
254 std::string tinyfd_icon {magic_enum::enum_name(icon)};
255 tinyfd_notifyPopup(title.c_str(), msg.c_str(), tinyfd_icon.c_str());
260 std::string tinyfd_type {magic_enum::enum_name(type)};
261 std::string tinyfd_icon {magic_enum::enum_name(icon)};
263 return tinyfd_messageBox(title.c_str(), msg.c_str(), tinyfd_type.c_str(), tinyfd_icon.c_str(),
static_cast<int>(btn));
266 std::string VirtualFileSystem::input_box(
const std::string& title,
const std::string& msg,
const std::string& default_text,
const bool password)
noexcept
268 const char* dt = password ? nullptr : default_text.c_str();
269 return tinyfd_inputBox(title.c_str(), msg.c_str(), dt);
272 std::string VirtualFileSystem::open_save_dialog(
const std::string& default_filename,
const std::vector<const char*>& filters)
274 const char*
const* filter_patterns = (filters.size() > 0) ? filters.data() :
nullptr;
275 const char* result = tinyfd_saveFileDialog(
"Save file", default_filename.c_str(),
static_cast<int>(filters.size()), filter_patterns,
nullptr);
277 if (result !=
nullptr)
287 std::string VirtualFileSystem::open_file_dialog(
const std::vector<const char*>& filters,
const std::string& def_path)
289 const auto default_path = (settings::root_dir() / def_path).
string();
291 const char*
const* filter_patterns = (filters.size() > 0) ? filters.data() :
nullptr;
292 const char* result = tinyfd_openFileDialog(
"Open file", default_path.c_str(),
static_cast<int>(filters.size()), filter_patterns,
"Select a file",
false);
294 if (result !=
nullptr)
304 std::string VirtualFileSystem::select_folder_dialog(
const std::string& def_path)
306 const auto default_path = (settings::root_dir() / def_path).
string();
307 const char* result = tinyfd_selectFolderDialog(
"Select folder", default_path.c_str());
309 if (result !=
nullptr)
320#ifdef GALAXY_WIN_PLATFORM
#define GALAXY_LOG(level, msg,...)
#define GALAXY_DISABLE_WARNING_POP
#define GALAXY_DISABLE_WARNING(x)
#define GALAXY_DISABLE_WARNING_PUSH
Macro for windows platform detection.
~VirtualFileSystem() noexcept
Destructor.
bool is_dir(const std::string &path) noexcept
Checks if a file is a folder.
bool write_binary(std::span< std::uint8_t > data, const std::string &file)
Writes a binary file to disk.
std::vector< std::string > list(const std::string &dir)
Get assets in an asset folder.
std::string read(const std::string &file)
Read a file.
bool write_raw(const void *data, const std::size_t size, const std::string &file)
Raw data writing.
bool write(const std::string &data, const std::string &file)
Writes a file to disk.
bool exists(const std::string &file) noexcept
Does the file exist in the vfs.
void remove(const std::string &path) noexcept
Delete a file or folder.
VirtualFileSystem() noexcept
Constructor.
std::vector< std::uint8_t > read_binary(const std::string &file)
Read a binary file.
void mkdir(const std::string &dir) noexcept
Creates an empty folder in the filesystem relative to the root.
DialogType
Type of dialog box for use with tinyfd.
DialogIcon
Type of native system icon to display on file dialogs.
DialogButton
Type of button for tinyfd boxes.
bool physfs_check(const int code) noexcept
Call a physfs function with error handling and logs a message for you.
static auto assets_dir_video() noexcept -> const std::string &
Video asset location.
static auto assets_dir_voice() noexcept -> const std::string &
Voice asset location.
static auto assets_dir_script() noexcept -> const std::string &
Scripts asset location.
static auto asset_pack() noexcept -> const std::string &
Name of packed assets file.
static auto root_dir() noexcept -> std::filesystem::path
Current root directory of application, unless it has been changed.
static auto assets_dir_prefabs() noexcept -> const std::string &
Prefab asset location.
static auto assets_dir_shaders() noexcept -> const std::string &
Shaders asset location.
static auto assets_dir_animation() noexcept -> const std::string &
Animation data location.
static auto editor_dir() noexcept -> std::filesystem::path
Directory for editor specific stuff.
static auto assets_dir_font() noexcept -> const std::string &
Font asset location.
static auto assets_dir_maps() noexcept -> const std::string &
Maps asset location.
static auto assets_dir() noexcept -> std::filesystem::path
Main data directory.
static auto assets_dir_texture() noexcept -> const std::string &
Textures asset location.
static auto use_loose_assets() noexcept -> bool
Should asset data be read from pack or assets dir.
static auto assets_dir_music() noexcept -> const std::string &
Music asset location.
static auto assets_dir_sfx() noexcept -> const std::string &
SFX asset location.
static auto assets_dir_ui() noexcept -> const std::string &
UI asset location.