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
18#include "../Lua.hpp"
19
20namespace galaxy
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 bool fileutils_write_wrapper(const std::string& filepath, const std::string& data) noexcept
37 {
38 const auto result = fileutils::write(filepath, data);
39 if (result)
40 {
41 return result.value();
42 }
43
44 const auto& error = result.error();
45 error.log();
46 return false;
47 }
48
49 void Lua::inject_fs() noexcept
50 {
51 auto& lua = entt::locator<sol::state>::value();
52
53 // clang-format off
54 lua.new_enum<DialogButton>("DialogButton",
55 {
56 {"cancel_no", DialogButton::cancel_no},
57 {"ok_yes", DialogButton::ok_yes},
58 {"yes_no_cancel", DialogButton::yes_no_cancel}
59 });
60
61 lua.new_enum<DialogIcon>("DialogIcons",
62 {
63 {"info", DialogIcon::info},
64 {"warning", DialogIcon::warning},
65 {"error", DialogIcon::error}
66 });
67
68 lua.new_enum<DialogType>("DialogType",
69 {
70 {"ok", DialogType::ok},
71 {"okcancel", DialogType::okcancel},
72 {"yesno", DialogType::yesno},
73 {"yesnocancel", DialogType::yesnocancel}
74 });
75 // clang-format on
76
77 auto fileerror =
78 lua.new_usertype<FileError>("FileError", sol::constructors<FileError(), FileError(const std::string&, const std::string&, const std::filesystem::path&)>());
79 fileerror["log"] = &FileError::log;
80 fileerror["mode"] = &FileError::m_mode;
81 fileerror["reason"] = &FileError::m_reason;
82 fileerror["path"] = [](const FileError& self) {
83 return self.m_path.string();
84 };
85
86 lua.set_function("fs_extension", &fileutils::extension);
87 lua.set_function("fs_read", &fileutils_read_wrapper);
88 lua.set_function("fs_write", &fileutils_write_wrapper);
89 lua.set_function("fs_open_url", &fileutils::open_url);
90
91 auto vfs_type = lua.new_usertype<VirtualFileSystem>("VirtualFileSystem", sol::no_constructor);
92 vfs_type["read"] = &VirtualFileSystem::read;
93 vfs_type["read_binary"] = &VirtualFileSystem::read_binary;
94 vfs_type["write"] = &VirtualFileSystem::write;
95 vfs_type["write_binary"] = &VirtualFileSystem::write_binary;
96 vfs_type["write_raw"] = &VirtualFileSystem::write_raw;
97 vfs_type["mkdir"] = &VirtualFileSystem::mkdir;
98 vfs_type["remove"] = &VirtualFileSystem::remove;
99 vfs_type["exists"] = &VirtualFileSystem::exists;
100 vfs_type["is_dir"] = &VirtualFileSystem::is_dir;
101 vfs_type["list"] = &VirtualFileSystem::list;
102 vfs_type["alert"] = &VirtualFileSystem::alert;
103 vfs_type["notification"] = &VirtualFileSystem::notification;
104 vfs_type["message_box"] = &VirtualFileSystem::message_box;
105 vfs_type["input_box"] = &VirtualFileSystem::input_box;
106 vfs_type["open_save_dialog"] = &VirtualFileSystem::open_save_dialog;
107 vfs_type["open_file_dialog"] = &VirtualFileSystem::open_file_dialog;
108 vfs_type["select_folder_dialog"] = &VirtualFileSystem::select_folder_dialog;
109 }
110} // 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
static void inject_fs() noexcept
Injects VFS support into Lua.
Definition LuaFS.cpp:49
File System to make managing files easier.
void alert() noexcept
Trigger a standard filesystem audio alert.
int message_box(const std::string &title, const std::string &msg, const DialogType type, const DialogIcon icon, const DialogButton btn) noexcept
Opens a platform specific message box.
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.
void notification(const std::string &title, const std::string &msg, const DialogIcon icon) noexcept
Trigger a system notification.
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.
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.
void open_url(const std::string &url) noexcept
Open URL in default webbrowser.
std::expected< std::string, FileError > extension(const std::string &filepath) noexcept
Get a file or path's extension.
Definition FileUtils.cpp:21
std::expected< bool, FileError > write(const std::string &filepath, const std::string &data)
Writes a non-binary file to disk.
Definition FileUtils.cpp:62
std::expected< std::string, FileError > read(const std::string &filepath)
Read a non-binary file on disk.
Definition FileUtils.cpp:32
Application.hpp galaxy.
DialogButton
Type of button for tinyfd boxes.
DialogType
Type of dialog box for use with tinyfd.
std::string fileutils_read_wrapper(const std::string &filepath) noexcept
Definition LuaFS.cpp:22
bool fileutils_write_wrapper(const std::string &filepath, const std::string &data) noexcept
Definition LuaFS.cpp:36
DialogIcon
Type of native system icon to display on file dialogs.