galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
LuaFS.cpp
Go to the documentation of this file.
1
7
8#include <entt/locator/locator.hpp>
9#include <sol/sol.hpp>
10
17
18namespace galaxy
19{
20 namespace lua
21 {
22 std::string fileutils_read_wrapper(const std::string& filepath) noexcept
23 {
24 const auto result = fileutils::read(filepath);
25 if (result)
26 {
27 return result.value();
28 }
29
30 const auto& error = result.error();
31 error.log();
32
33 return error.m_reason;
34 }
35
36 void inject_fs()
37 {
38 auto& lua = entt::locator<sol::state>::value();
39
40 // clang-format off
41 lua.new_enum<fs::DialogButton>("DialogButton",
42 {
43 {"cancel_no", fs::DialogButton::cancel_no},
44 {"ok_yes", fs::DialogButton::ok_yes},
45 {"yes_no_cancel", fs::DialogButton::yes_no_cancel}
46 });
47
48 lua.new_enum<fs::DialogIcon>("DialogIcons",
49 {
50 {"info", fs::DialogIcon::info},
51 {"warning", fs::DialogIcon::warning},
52 {"error", fs::DialogIcon::error}
53 });
54
55 lua.new_enum<fs::DialogType>("DialogType",
56 {
57 {"ok", fs::DialogType::ok},
58 {"okcancel", fs::DialogType::okcancel},
59 {"yesno", fs::DialogType::yesno},
60 {"yesnocancel", fs::DialogType::yesnocancel}
61 });
62 // clang-format on
63
64 auto fileerror =
65 lua.new_usertype<FileError>("FileError", sol::constructors<FileError(), FileError(const std::string&, const std::string&, const std::filesystem::path&)>());
66 fileerror["log"] = &FileError::log;
67 fileerror["mode"] = &FileError::m_mode;
68 fileerror["reason"] = &FileError::m_reason;
69 fileerror["path"] = [](const FileError& self) {
70 return self.m_path.string();
71 };
72
73 lua.set_function("fs_extension", &fileutils::extension);
74 lua.set_function("fs_read", &fileutils_read_wrapper);
75 lua.set_function("fs_write", &fileutils::write);
76
77 auto vfs_type = lua.new_usertype<VirtualFileSystem>("VirtualFileSystem", sol::no_constructor);
78 vfs_type["read"] = &VirtualFileSystem::read;
79 vfs_type["read_binary"] = &VirtualFileSystem::read_binary;
80 vfs_type["write"] = &VirtualFileSystem::write;
81 vfs_type["write_binary"] = &VirtualFileSystem::write_binary;
82 vfs_type["write_raw"] = &VirtualFileSystem::write_raw;
83 vfs_type["mkdir"] = &VirtualFileSystem::mkdir;
84 vfs_type["remove"] = &VirtualFileSystem::remove;
85 vfs_type["exists"] = &VirtualFileSystem::exists;
86 vfs_type["is_dir"] = &VirtualFileSystem::is_dir;
87 vfs_type["list"] = &VirtualFileSystem::list;
88 vfs_type["alert"] = &VirtualFileSystem::alert;
89 vfs_type["notification"] = &VirtualFileSystem::notification;
90 vfs_type["message_box"] = &VirtualFileSystem::message_box;
91 vfs_type["input_box"] = &VirtualFileSystem::input_box;
92 vfs_type["open_save_dialog"] = &VirtualFileSystem::open_save_dialog;
93 vfs_type["open_file_dialog"] = &VirtualFileSystem::open_file_dialog;
94 vfs_type["select_folder_dialog"] = &VirtualFileSystem::select_folder_dialog;
95 }
96 } // namespace lua
97} // namespace galaxy
Stores information about a File I/O error.
Definition FileError.hpp:20
void log() const noexcept
Prints the file error in a nice format to the console.
Definition FileError.cpp:29
std::string m_reason
Reason for file i/o failure.
Definition FileError.hpp:55
std::string m_mode
File I/O mode.
Definition FileError.hpp:50
File System to make managing files easier.
void alert() noexcept
Trigger a standard filesystem audio alert.
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.
int message_box(const std::string &title, const std::string &msg, const fs::DialogType type, const fs::DialogIcon icon, const fs::DialogButton btn) noexcept
Opens a platform specific message box.
std::string input_box(const std::string &title, const std::string &msg, const std::string &default_text="", const bool password=false) noexcept
Opens a platform specific text input box.
bool exists(const std::string &file) noexcept
Does the file exist in the vfs.
std::string open_file_dialog(const std::vector< const char * > &filters={}, const std::string &def_path="")
Open a file dialog.
std::string open_save_dialog(const std::string &default_filename, const std::vector< const char * > &filters={})
Open a save file dialog.
void notification(const std::string &title, const std::string &msg, const fs::DialogIcon icon) noexcept
Trigger a system notification.
std::string select_folder_dialog(const std::string &def_path="")
Select a folder using a dialog.
void remove(const std::string &path) noexcept
Delete a file or folder.
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.
std::optional< FileError > write(const std::string &filepath, const std::string &data)
Writes a non-binary file to disk.
Definition FileUtils.cpp:56
std::optional< std::string > extension(const std::string &filepath) noexcept
Get a file or path's extension.
Definition FileUtils.cpp:16
std::expected< std::string, FileError > read(const std::string &filepath)
Read a non-binary file on disk.
Definition FileUtils.cpp:27
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.
std::string fileutils_read_wrapper(const std::string &filepath) noexcept
Definition LuaFS.cpp:22
void inject_fs()
Injects VFS support into Lua.
Definition LuaFS.cpp:36
Timer.hpp galaxy.
Definition Timer.cpp:18