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_requested_width", &Settings::requested_width);
72 lua.set_function("settings_requested_height", &Settings::requested_height);
73 lua.set_function("settings_virtual_width", &Settings::virtual_width);
74 lua.set_function("settings_virtual_height", &Settings::virtual_height);
75 lua.set_function("settings_window_icon", &Settings::icon);
76 lua.set_function("settings_fullscreen", &Settings::fullscreen);
77 lua.set_function("settings_maximized", &Settings::maximized);
78 lua.set_function("settings_vsync", &Settings::vsync);
79 lua.set_function("settings_window_resizable", &Settings::window_resizable);
80 lua.set_function("settings_mouse_grabbed", &Settings::mouse_grabbed);
81 // lua.set_function("settings_window_border", &Settings::window_border);
82 // lua.set_function("settings_cursor_show", &Settings::cursor_show);
83 // lua.set_function("settings_cursor_icon", &Settings::cursor_icon);
84 // lua.set_function("settings_cursor_hotspot", &Settings::cursor_hotspot);
85 lua.set_function("settings_audio_freq", &Settings::audio_freq);
86 // lua.set_function("settings_ansiotrophy", &Settings::ansiotrophy);
87 // lua.set_function("settings_mipmap", &Settings::mipmap);
88 // lua.set_function("settings_texture_filter", &Settings::texture_filter);
89 // lua.set_function("settings_max_quads", &Settings::max_quads);
90 lua.set_function("settings_title", &Settings::title);
91 lua.set_function("settings_version", &Settings::version);
92 lua.set_function("settings_identifier", &Settings::identifier);
93 lua.set_function("settings_creator", &Settings::creator);
94 lua.set_function("settings_copyright", &Settings::copyright);
95 lua.set_function("settings_website", &Settings::website);
96 lua.set_function("settings_logs_dir", &Settings::logs_dir);
97 lua.set_function("settings_root_dir", &root_path_wrapper);
98 lua.set_function("settings_assets_dir", &assets_path_wrapper);
99 lua.set_function("settings_editor_dir", &editor_path_wrapper);
100 lua.set_function("settings_asset_pack", &Settings::asset_pack);
101 lua.set_function("settings_use_loose_assets", &Settings::use_loose_assets);
102 lua.set_function("settings_assets_dir_music", &Settings::assets_dir_music);
103 lua.set_function("settings_assets_dir_sfx", &Settings::assets_dir_sfx);
104 lua.set_function("settings_assets_dir_voice", &Settings::assets_dir_voice);
105 lua.set_function("settings_assets_dir_font", &Settings::assets_dir_font);
106 lua.set_function("settings_assets_dir_script", &Settings::assets_dir_script);
107 lua.set_function("settings_assets_dir_shaders", &Settings::assets_dir_shaders);
108 lua.set_function("settings_assets_dir_animation", &Settings::assets_dir_animation);
109 lua.set_function("settings_assets_dir_texture", &Settings::assets_dir_texture);
110 lua.set_function("settings_assets_dir_prefabs", &Settings::assets_dir_prefabs);
111 lua.set_function("settings_assets_dir_maps", &Settings::assets_dir_maps);
112 lua.set_function("settings_assets_dir_video", &Settings::assets_dir_video);
113 lua.set_function("settings_assets_dir_ui", &Settings::assets_dir_ui);
114
115 auto window_type = lua.new_usertype<Window>("Window", sol::no_constructor);
116 window_type["append_title"] = &Window::append_title;
117 window_type["close"] = &Window::close;
118 window_type["get_display_scale"] = &Window::get_display_scale;
119 window_type["hide"] = &Window::hide;
120 window_type["is_open"] = &Window::is_open;
121 window_type["maximize"] = &Window::maximize;
122 window_type["minimize"] = &Window::minimize;
123 window_type["raise"] = &Window::raise;
124 window_type["request_attention"] = &Window::request_attention;
125 window_type["resize"] = &Window::resize;
126 window_type["restore"] = &Window::restore;
127 window_type["screen_height"] = &Window::screen_height;
128 window_type["screen_width"] = &Window::screen_width;
129 window_type["set_fullscreen"] = &Window::set_fullscreen;
130 window_type["set_icon"] = &Window::set_icon;
131 window_type["set_taskbar_progress"] = &Window::set_taskbar_progress;
132 window_type["set_title"] = &Window::set_title;
133 window_type["show"] = &Window::show;
134 window_type["virtual_screen_height"] = &Window::virtual_screen_height;
135 window_type["virtual_screen_width"] = &Window::virtual_screen_width;
136 }
137} // 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
Handles events, input & display.
Definition Window.hpp:29
void set_fullscreen(const bool fullscreen) const noexcept
Toggle fullscreen.
Definition Window.cpp:215
int screen_width() const noexcept
Return the current drawable width in pixels.
Definition Window.cpp:281
bool is_open() const noexcept
Is the window open or closed.
Definition Window.cpp:301
void raise() const noexcept
Raise the window to be on top of other windows.
Definition Window.cpp:199
void resize(const int width, const int height) const noexcept
Resizes window.
Definition Window.cpp:209
void maximize() const noexcept
Maximize window.
Definition Window.cpp:185
int virtual_screen_height() const noexcept
Return the configured logical screen height.
Definition Window.cpp:296
int virtual_screen_width() const noexcept
Return the configured logical screen width.
Definition Window.cpp:291
void append_title(const std::string &append)
Append to window title from the settings.
Definition Window.cpp:230
void close() noexcept
Close window.
Definition Window.cpp:158
void set_taskbar_progress(const float progress) noexcept
Sets the taskbar icon progress overlay.
Definition Window.cpp:220
void hide() const noexcept
Hide window.
Definition Window.cpp:174
void show() const noexcept
Show window.
Definition Window.cpp:169
float get_display_scale() const noexcept
Get display content scale.
Definition Window.cpp:306
void minimize() const noexcept
Minimize window.
Definition Window.cpp:179
int screen_height() const noexcept
Return the current drawable height in pixels.
Definition Window.cpp:286
void set_icon(const std::string &icon) noexcept
Set window icon.
Definition Window.cpp:236
void set_title(const std::string &title)
Set window title.
Definition Window.cpp:225
void request_attention() const noexcept
Flash window on taskbar for user attention.
Definition Window.cpp:204
void restore() const noexcept
Restore window to previous *mize state.
Definition Window.cpp:192
Application.hpp galaxy.
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 root_dir() noexcept -> std::filesystem::path
Current root directory of application, unless it has been changed.
Definition Settings.cpp:176
static auto logs_dir() noexcept -> const std::string &
Current root directory of application, unless it has been changed.
Definition Settings.cpp:171
static auto assets_dir_prefabs() noexcept -> const std::string &
Prefab asset location.
Definition Settings.cpp:241
static auto copyright() noexcept -> const std::string &
Copyright message.
Definition Settings.cpp:161
static auto assets_dir_texture() noexcept -> const std::string &
Textures asset location.
Definition Settings.cpp:236
static auto vsync() noexcept -> bool
Vsync control.
Definition Settings.cpp:131
static auto assets_dir_voice() noexcept -> const std::string &
Voice asset location.
Definition Settings.cpp:211
static auto assets_dir_shaders() noexcept -> const std::string &
Shaders asset location.
Definition Settings.cpp:226
static auto assets_dir_ui() noexcept -> const std::string &
UI asset location.
Definition Settings.cpp:256
static auto set_settings_from_config() -> void
Set all our settings using the provided config file.
Definition Settings.cpp:77
static auto use_loose_assets() noexcept -> bool
Should asset data be read from pack or assets dir.
Definition Settings.cpp:196
static auto assets_dir_animation() noexcept -> const std::string &
Animation data location.
Definition Settings.cpp:231
static auto assets_dir_script() noexcept -> const std::string &
Scripts asset location.
Definition Settings.cpp:221
static auto assets_dir_music() noexcept -> const std::string &
Music asset location.
Definition Settings.cpp:201
static auto identifier() noexcept -> const std::string &
Game identifier i.e. com.galaxy.app.
Definition Settings.cpp:151
static auto title() noexcept -> const std::string &
Game title.
Definition Settings.cpp:141
static auto assets_dir() noexcept -> std::filesystem::path
Main data directory.
Definition Settings.cpp:181
static auto asset_pack() noexcept -> const std::string &
Name of packed assets file.
Definition Settings.cpp:191
static auto version() noexcept -> const std::string &
Game semver.
Definition Settings.cpp:146
static auto audio_freq() noexcept -> int
Set audio frequency to use with SDL.
Definition Settings.cpp:136
static auto website() noexcept -> const std::string &
Website URL.
Definition Settings.cpp:166
static auto assets_dir_sfx() noexcept -> const std::string &
SFX asset location.
Definition Settings.cpp:206
static auto assets_dir_maps() noexcept -> const std::string &
Maps asset location.
Definition Settings.cpp:246
static auto set_config_to_default() -> void
Restore all config settings to default.
Definition Settings.cpp:23
static auto editor_dir() noexcept -> std::filesystem::path
Directory for editor specific stuff.
Definition Settings.cpp:186
static auto assets_dir_video() noexcept -> const std::string &
Video asset location.
Definition Settings.cpp:251
static auto assets_dir_font() noexcept -> const std::string &
Font asset location.
Definition Settings.cpp:216
static auto creator() noexcept -> const std::string &
Owner.
Definition Settings.cpp:156