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
LuaCore.cpp
Go to the documentation of this file.
1
7
8#include <entt/locator/locator.hpp>
9#include <sol/sol.hpp>
10
14
15#include "../Lua.hpp"
16
17namespace galaxy
18{
19 std::string root_path_wrapper() noexcept
20 {
21 return Settings::root_dir().string();
22 }
23
24 std::string assets_path_wrapper() noexcept
25 {
26 return Settings::assets_dir().string();
27 }
28
29 std::string editor_path_wrapper() noexcept
30 {
31 return Settings::editor_dir().string();
32 }
33
34 void Lua::inject_core() noexcept
35 {
36 auto& lua = entt::locator<sol::state>::value();
37
38 auto config_type = lua.new_usertype<Config>("Config", sol::no_constructor);
39 config_type["load"] = &Config::load;
40 config_type["save"] = &Config::save;
41 config_type["set_bool"] = sol::resolve<void(const std::string&, const bool&)>(&Config::set<bool>);
42 config_type["set_int"] = sol::resolve<void(const std::string&, const int&)>(&Config::set<int>);
43 config_type["set_float"] = sol::resolve<void(const std::string&, const float&)>(&Config::set<float>);
44 config_type["set_string"] = sol::resolve<void(const std::string&, const std::string&)>(&Config::set<std::string>);
45 config_type["set_section_bool"] = sol::resolve<void(const std::string&, const bool&, const std::string&, const std::string&)>(&Config::set<bool>);
46 config_type["set_section_int"] = sol::resolve<void(const std::string&, const int&, const std::string&, const std::string&)>(&Config::set<int>);
47 config_type["set_section_float"] = sol::resolve<void(const std::string&, const float&, const std::string&, const std::string&)>(&Config::set<float>);
48 config_type["set_section_string"] = sol::resolve<void(const std::string&, const std::string&, const std::string&, const std::string&)>(&Config::set<std::string>);
49 config_type["restore_bool"] = sol::resolve<void(const std::string&, const bool&)>(&Config::restore<bool>);
50 config_type["restore_int"] = sol::resolve<void(const std::string&, const int&)>(&Config::restore<int>);
51 config_type["restore_float"] = sol::resolve<void(const std::string&, const float&)>(&Config::restore<float>);
52 config_type["restore_string"] = sol::resolve<void(const std::string&, const std::string&)>(&Config::restore<std::string>);
53 config_type["restore_section_bool"] = sol::resolve<void(const std::string&, const bool&, const std::string&, const std::string&)>(&Config::restore<bool>);
54 config_type["restore_section_int"] = sol::resolve<void(const std::string&, const int&, const std::string&, const std::string&)>(&Config::restore<int>);
55 config_type["restore_section_float"] = sol::resolve<void(const std::string&, const float&, const std::string&, const std::string&)>(&Config::restore<float>);
56 config_type["restore_section_string"] = sol::resolve<void(const std::string&, const std::string&, const std::string&, const std::string&)>(&Config::restore<std::string>);
57 config_type["has"] = sol::resolve<bool(const std::string&)>(&Config::has);
58 config_type["has_section"] = sol::resolve<bool(const std::string&, const std::string&, const std::string&)>(&Config::has);
59 config_type["get_bool"] = sol::resolve<std::optional<bool>(const std::string&)>(&Config::get<bool>);
60 config_type["get_int"] = sol::resolve<std::optional<int>(const std::string&)>(&Config::get<int>);
61 config_type["get_float"] = sol::resolve<std::optional<float>(const std::string&)>(&Config::get<float>);
62 config_type["get_string"] = sol::resolve<std::optional<std::string>(const std::string&)>(&Config::get<std::string>);
63 config_type["get_section_int"] = sol::resolve<std::optional<int>(const std::string&, const std::string&, const std::string&)>(&Config::get<int>);
64 config_type["get_section_float"] = sol::resolve<std::optional<float>(const std::string&, const std::string&, const std::string&)>(&Config::get<float>);
65 config_type["get_section_string"] = sol::resolve<std::optional<std::string>(const std::string&, const std::string&, const std::string&)>(&Config::get<std::string>);
66 config_type["get_section_bool"] = sol::resolve<std::optional<bool>(const std::string&, const std::string&, const std::string&)>(&Config::get<bool>);
67 config_type["empty"] = &Config::empty;
68
69 lua.set_function("settings_set_to_default", &Settings::set_config_to_default);
70 lua.set_function("settings_set_from_config", &Settings::set_settings_from_config);
71 lua.set_function("settings_window_width", &Settings::window_width);
72 lua.set_function("settings_window_height", &Settings::window_height);
73 lua.set_function("settings_window_icon", &Settings::window_icon);
74 lua.set_function("settings_fullscreen", &Settings::fullscreen);
75 lua.set_function("settings_maximized", &Settings::maximized);
76 lua.set_function("settings_vsync", &Settings::vsync);
77 lua.set_function("settings_window_resizable", &Settings::window_resizable);
78 lua.set_function("settings_window_border", &Settings::window_border);
79 lua.set_function("settings_mouse_grabbed", &Settings::mouse_grabbed);
80 lua.set_function("settings_cursor_show", &Settings::cursor_show);
81 lua.set_function("settings_cursor_icon", &Settings::cursor_icon);
82 lua.set_function("settings_cursor_hotspot", &Settings::cursor_hotspot);
83 lua.set_function("settings_audio_freq", &Settings::audio_freq);
84 lua.set_function("settings_title", &Settings::title);
85 lua.set_function("settings_version", &Settings::version);
86 lua.set_function("settings_identifier", &Settings::identifier);
87 lua.set_function("settings_creator", &Settings::creator);
88 lua.set_function("settings_copyright", &Settings::copyright);
89 lua.set_function("settings_website", &Settings::website);
90 lua.set_function("settings_log_dir", &Settings::log_dir);
91 lua.set_function("settings_root_dir", &root_path_wrapper);
92 lua.set_function("settings_assets_dir", &assets_path_wrapper);
93 lua.set_function("settings_editor_dir", &editor_path_wrapper);
94 lua.set_function("settings_asset_pack", &Settings::asset_pack);
95 lua.set_function("settings_use_loose_assets", &Settings::use_loose_assets);
96 lua.set_function("settings_assets_dir_music", &Settings::assets_dir_music);
97 lua.set_function("settings_assets_dir_sfx", &Settings::assets_dir_sfx);
98 lua.set_function("settings_assets_dir_voice", &Settings::assets_dir_voice);
99 lua.set_function("settings_assets_dir_font", &Settings::assets_dir_font);
100 lua.set_function("settings_assets_dir_script", &Settings::assets_dir_script);
101 lua.set_function("settings_assets_dir_shaders", &Settings::assets_dir_shaders);
102 lua.set_function("settings_assets_dir_animation", &Settings::assets_dir_animation);
103 lua.set_function("settings_assets_dir_texture", &Settings::assets_dir_texture);
104 lua.set_function("settings_assets_dir_prefabs", &Settings::assets_dir_prefabs);
105 lua.set_function("settings_assets_dir_maps", &Settings::assets_dir_maps);
106 lua.set_function("settings_assets_dir_video", &Settings::assets_dir_video);
107 lua.set_function("settings_assets_dir_ui", &Settings::assets_dir_ui);
108
109 auto window_type = lua.new_usertype<Window>("Window", sol::no_constructor);
110 window_type["append_title"] = &Window::append_title;
111 window_type["close"] = &Window::close;
112 window_type["get_keyboard"] = &Window::get_keyboard;
113 window_type["get_mouse"] = &Window::get_mouse;
114 window_type["get_pixel_size"] = &Window::get_pixel_size;
115 window_type["hide"] = &Window::hide;
116 window_type["is_open"] = &Window::is_open;
117 window_type["maximize"] = &Window::maximize;
118 window_type["minimize"] = &Window::minimize;
119 window_type["raise"] = &Window::raise;
120 window_type["request_attention"] = &Window::request_attention;
121 window_type["resize"] = &Window::resize;
122 window_type["restore"] = &Window::restore;
123 window_type["set_fullscreen"] = &Window::set_fullscreen;
124 window_type["set_icon"] = &Window::set_icon;
125 window_type["set_taskbar_progress"] = &Window::set_taskbar_progress;
126 window_type["show"] = &Window::show;
127
128 /*auto registry_type = lua.new_usertype<Registry>("Registry", sol::constructors<Registry()>());
129 registry_type["clear"] = &Registry::clear;
130 registry_type["create"] = &Registry::create;
131 registry_type["create_from_prefab"] = &Registry::create_from_prefab;
132 registry_type["is_valid"] = &Registry::is_valid;
133 registry_type["entt"] = &Registry::m_entt;
134
135 auto prefab_type = lua.new_usertype<Prefab>("Prefab", sol::constructors<Prefab(entt::entity, entt::registry&), Prefab(const nlohmann::json&)>());
136 prefab_type["from_entity"] = &Prefab::from_entity;
137 prefab_type["from_json"] = &Prefab::from_json;
138 prefab_type["to_entity"] = &Prefab::to_entity;
139 prefab_type["to_json"] = &Prefab::to_json;
140 prefab_type["load"] = &Prefab::load;
141 lua.set_function("galaxy_load_user_config", &load_config_wrapper);
142 lua.set_function("galaxy_load_window_config", &load_window_wrapper);*/
143 }
144} // namespace galaxy
Allows you to read, write and manipulate JSON config files.
Definition Config.hpp:23
void save()
Save the config file. Must be opened first.
Definition Config.cpp:59
void load(std::string_view file)
Loads config json from disk.
Definition Config.cpp:30
std::optional< Value > get(const std::string &key)
Retrieve a root config value.
Definition Config.hpp:268
void restore(const std::string &key, const Value &value) noexcept
Sets a new setting, only if key or value does not already exist.
Definition Config.hpp:250
bool empty() const
Is the config file blank.
Definition Config.cpp:106
void set(const std::string &key, const Value &value) noexcept
Set a new key-value pair for the config.
Definition Config.hpp:217
bool has(const std::string &key) noexcept
Check if the config file actually has a value.
Definition Config.cpp:68
static void inject_core() noexcept
Inject galaxy core services into Lua.
Definition LuaCore.cpp:34
RAII Window. Handles events, input & display.
Definition Window.hpp:33
void set_fullscreen(const bool fullscreen) const noexcept
Toggle fullscreen.
Definition Window.cpp:508
bool is_open() const noexcept
Is the window open or closed.
Definition Window.cpp:553
void raise() const noexcept
Raise the window to be on top of other windows.
Definition Window.cpp:492
void resize(const int width, const int height) const noexcept
Resizes window.
Definition Window.cpp:502
void maximize() const noexcept
Maximize window.
Definition Window.cpp:478
Keyboard & get_keyboard() noexcept
Get keyboard.
Definition Window.cpp:563
void append_title(const std::string &append)
Append to window title.
Definition Window.cpp:519
void close() noexcept
Close window.
Definition Window.cpp:452
void set_taskbar_progress(const float progress) noexcept
Sets the taskbar icon progress overlay.
Definition Window.cpp:514
glm::ivec2 get_pixel_size() noexcept
Get window size in pixels.
Definition Window.cpp:568
void hide() const noexcept
Hide window.
Definition Window.cpp:467
void show() const noexcept
Show window.
Definition Window.cpp:462
void minimize() const noexcept
Minimize window.
Definition Window.cpp:472
Mouse & get_mouse() noexcept
Get mouse cursor.
Definition Window.cpp:558
void set_icon(const std::string &icon) noexcept
Set window icon.
Definition Window.cpp:525
void request_attention() const noexcept
Flash window on taskbar for user attention.
Definition Window.cpp:497
void restore() const noexcept
Restore window to previous *mize state.
Definition Window.cpp:485
Animated.cpp galaxy.
Definition Animated.cpp:16
std::string assets_path_wrapper() noexcept
Definition LuaCore.cpp:24
std::string root_path_wrapper() noexcept
Definition LuaCore.cpp:19
std::string editor_path_wrapper() noexcept
Definition LuaCore.cpp:29
static auto window_icon() noexcept -> const std::string &
Window icon file in vfs.
Definition Settings.cpp:126
static auto root_dir() noexcept -> std::filesystem::path
Current root directory of application, unless it has been changed.
Definition Settings.cpp:217
static auto window_height() noexcept -> int
Window creation height.
Definition Settings.cpp:121
static auto log_dir() noexcept -> const std::string &
Current root directory of application, unless it has been changed.
Definition Settings.cpp:211
static auto fullscreen() noexcept -> bool
Is window started fullscreen.
Definition Settings.cpp:131
static auto assets_dir_prefabs() noexcept -> const std::string &
Prefab asset location.
Definition Settings.cpp:282
static auto copyright() noexcept -> const std::string &
Copyright message.
Definition Settings.cpp:201
static auto assets_dir_texture() noexcept -> const std::string &
Textures asset location.
Definition Settings.cpp:277
static auto vsync() noexcept -> bool
Vsync control.
Definition Settings.cpp:141
static auto assets_dir_voice() noexcept -> const std::string &
Voice asset location.
Definition Settings.cpp:252
static auto window_width() noexcept -> int
Window creation width.
Definition Settings.cpp:116
static auto assets_dir_shaders() noexcept -> const std::string &
Shaders asset location.
Definition Settings.cpp:267
static auto window_border() noexcept -> bool
Controls if a window has a border around it (including titlebar).
Definition Settings.cpp:151
static auto assets_dir_ui() noexcept -> const std::string &
UI asset location.
Definition Settings.cpp:297
static auto set_settings_from_config() -> void
Set all our settings using the provided config file.
Definition Settings.cpp:70
static auto use_loose_assets() noexcept -> bool
Should asset data be read from pack or assets dir.
Definition Settings.cpp:237
static auto assets_dir_animation() noexcept -> const std::string &
Animation data location.
Definition Settings.cpp:272
static auto assets_dir_script() noexcept -> const std::string &
Scripts asset location.
Definition Settings.cpp:262
static auto assets_dir_music() noexcept -> const std::string &
Music asset location.
Definition Settings.cpp:242
static auto window_resizable() noexcept -> bool
Is the window resizable.
Definition Settings.cpp:146
static auto identifier() noexcept -> const std::string &
Game identifier i.e. com.galaxy.app.
Definition Settings.cpp:191
static auto maximized() noexcept -> bool
Is window started maximized?
Definition Settings.cpp:136
static auto title() noexcept -> const std::string &
Game title.
Definition Settings.cpp:181
static auto cursor_show() noexcept -> bool
Is the mouse cursor visible or not.
Definition Settings.cpp:161
static auto assets_dir() noexcept -> std::filesystem::path
Main data directory.
Definition Settings.cpp:222
static auto cursor_hotspot() noexcept -> const glm::ivec2 &
Cursor selector point (hotspot).
Definition Settings.cpp:171
static auto asset_pack() noexcept -> const std::string &
Name of packed assets file.
Definition Settings.cpp:232
static auto version() noexcept -> const std::string &
Game semver.
Definition Settings.cpp:186
static auto audio_freq() noexcept -> int
Set audio frequency to use with SDL.
Definition Settings.cpp:176
static auto mouse_grabbed() noexcept -> bool
Is the cursor grabbed.
Definition Settings.cpp:156
static auto website() noexcept -> const std::string &
Website URL.
Definition Settings.cpp:206
static auto assets_dir_sfx() noexcept -> const std::string &
SFX asset location.
Definition Settings.cpp:247
static auto assets_dir_maps() noexcept -> const std::string &
Maps asset location.
Definition Settings.cpp:287
static auto set_config_to_default() -> void
Restore all config settings to default.
Definition Settings.cpp:22
static auto editor_dir() noexcept -> std::filesystem::path
Directory for editor specific stuff.
Definition Settings.cpp:227
static auto assets_dir_video() noexcept -> const std::string &
Video asset location.
Definition Settings.cpp:292
static auto cursor_icon() noexcept -> const std::string &
Cursor texture file in vfs.
Definition Settings.cpp:166
static auto assets_dir_font() noexcept -> const std::string &
Font asset location.
Definition Settings.cpp:257
static auto creator() noexcept -> const std::string &
Owner.
Definition Settings.cpp:196