8#include <entt/locator/locator.hpp>
11#include <tinyfiledialogs.h>
22#ifdef GALAXY_WIN_PLATFORM
39 PHYSFS_Allocator a = {};
44 a.Realloc = mi_realloc;
50 PHYSFS_permitSymbolicLinks(
false);
53 write_dir.make_preferred();
57 read_dir.make_preferred();
91 PHYSFS_File* f = PHYSFS_openRead(file.c_str());
94 const auto len = PHYSFS_fileLength(f);
127 PHYSFS_File* f = PHYSFS_openRead(file.c_str());
130 const auto len = PHYSFS_fileLength(f);
134 std::vector<std::uint8_t> buffer;
163 return write_raw(data.data(), data.size() *
sizeof(
char), file);
168 return write_raw(data.data(), data.size_bytes(), file);
173 auto path = std::filesystem::path(file);
174 if (path.is_absolute())
176 path = path.filename();
179 PHYSFS_File* f = PHYSFS_openWrite(path.string().c_str());
182 const auto len = PHYSFS_fileLength(f);
218 return PHYSFS_exists(file.c_str());
223 return PHYSFS_isDirectory(path.c_str());
228 std::vector<std::string>
list;
232 [](
void* data,
const char* origdir,
const char* fname) -> PHYSFS_EnumerateCallbackResult {
233 if (data != nullptr && fname != nullptr)
235 std::string o = origdir;
236 std::string f = fname;
238 auto* my_list = static_cast<std::vector<std::string>*>(data);
239 my_list->emplace_back(o + f);
242 return PHYSFS_ENUM_OK;
250 void VirtualFileSystem::alert() noexcept
255 void VirtualFileSystem::notification(
const std::string& title,
const std::string& msg,
const DialogIcon icon)
noexcept
257 std::string tinyfd_icon {magic_enum::enum_name(icon)};
258 tinyfd_notifyPopup(title.c_str(), msg.c_str(), tinyfd_icon.c_str());
263 std::string tinyfd_type {magic_enum::enum_name(type)};
264 std::string tinyfd_icon {magic_enum::enum_name(icon)};
266 return tinyfd_messageBox(title.c_str(), msg.c_str(), tinyfd_type.c_str(), tinyfd_icon.c_str(),
static_cast<int>(btn));
269 std::string VirtualFileSystem::input_box(
const std::string& title,
const std::string& msg,
const std::string& default_text,
const bool password)
noexcept
271 const char* dt = password ? nullptr : default_text.c_str();
272 return tinyfd_inputBox(title.c_str(), msg.c_str(), dt);
275 std::string VirtualFileSystem::open_save_dialog(
const std::string& default_filename,
const std::vector<const char*>& filters)
277 const char*
const* filter_patterns = (filters.size() > 0) ? filters.data() :
nullptr;
278 const char* result = tinyfd_saveFileDialog(
"Save file", default_filename.c_str(),
static_cast<int>(filters.size()), filter_patterns,
nullptr);
280 if (result !=
nullptr)
290 std::string VirtualFileSystem::open_file_dialog(
const std::vector<const char*>& filters,
const std::string& def_path)
294 const char*
const* filter_patterns = (filters.size() > 0) ? filters.data() :
nullptr;
295 const char* result = tinyfd_openFileDialog(
"Open file", default_path.c_str(),
static_cast<int>(filters.size()), filter_patterns,
"Select a file",
false);
297 if (result !=
nullptr)
307 std::string VirtualFileSystem::select_folder_dialog(
const std::string& def_path)
310 const char* result = tinyfd_selectFolderDialog(
"Select folder", default_path.c_str());
312 if (result !=
nullptr)
322 std::string VirtualFileSystem::get_file_extension(
const std::string& file_name)
noexcept
324 const auto path = std::filesystem::path(file_name);
325 if (path.has_extension())
327 return path.extension().string();
337#ifdef GALAXY_WIN_PLATFORM
#define GALAXY_LOG(level, msg,...)
#define GALAXY_DISABLE_WARNING_POP
#define GALAXY_DISABLE_WARNING(x)
#define GALAXY_DISABLE_WARNING_PUSH
Pragma.hpp galaxy.
bool is_dir(const std::string &path) noexcept
Checks if a file is a folder.
bool exists(const std::string &file) noexcept
Does the file exist in the vfs.
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.
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.
std::vector< std::string > list(const std::string &dir)
Get assets in an asset folder.
VirtualFileSystem()
Constructor.
bool write_binary(std::span< std::uint8_t > data, const std::string &file)
Writes a binary file to disk.
std::string read(const std::string &file)
Read a file.
void remove(const std::string &path) noexcept
Delete a file or folder.
~VirtualFileSystem()
Destructor.
DialogIcon
Type of native system icon to display on file dialogs.
DialogType
Type of dialog box for use with tinyfd.
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.