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
13
14namespace galaxy
15{
16 namespace lua
17 {
18 std::string root_path_wrapper() noexcept
19 {
20 return settings::root_dir().string();
21 }
22
23 std::string assets_path_wrapper() noexcept
24 {
25 return settings::assets_dir().string();
26 }
27
28 std::string editor_path_wrapper() noexcept
29 {
30 return settings::editor_dir().string();
31 }
32
33 /*void load_config_wrapper()
34 {
35 ServiceLocator<Loader>::ref().load_user_config();
36 }
37
38 void load_window_wrapper()
39 {
40 ServiceLocator<Loader>::ref().load_window();
41 }*/
42
44 {
45 auto& lua = entt::locator<sol::state>::value();
46
47 auto config_type = lua.new_usertype<Config>("Config", sol::no_constructor);
48 config_type["load"] = &Config::load;
49 config_type["save"] = &Config::save;
50 config_type["set_bool"] = sol::resolve<void(const std::string&, const bool&)>(&Config::set<bool>);
51 config_type["set_int"] = sol::resolve<void(const std::string&, const int&)>(&Config::set<int>);
52 config_type["set_float"] = sol::resolve<void(const std::string&, const float&)>(&Config::set<float>);
53 config_type["set_string"] = sol::resolve<void(const std::string&, const std::string&)>(&Config::set<std::string>);
54 config_type["set_section_bool"] = sol::resolve<void(const std::string&, const bool&, const std::string&, const std::string&)>(&Config::set<bool>);
55 config_type["set_section_int"] = sol::resolve<void(const std::string&, const int&, const std::string&, const std::string&)>(&Config::set<int>);
56 config_type["set_section_float"] = sol::resolve<void(const std::string&, const float&, const std::string&, const std::string&)>(&Config::set<float>);
57 config_type["set_section_string"] = sol::resolve<void(const std::string&, const std::string&, const std::string&, const std::string&)>(&Config::set<std::string>);
58 config_type["restore_bool"] = sol::resolve<void(const std::string&, const bool&)>(&Config::restore<bool>);
59 config_type["restore_int"] = sol::resolve<void(const std::string&, const int&)>(&Config::restore<int>);
60 config_type["restore_float"] = sol::resolve<void(const std::string&, const float&)>(&Config::restore<float>);
61 config_type["restore_string"] = sol::resolve<void(const std::string&, const std::string&)>(&Config::restore<std::string>);
62 config_type["restore_section_bool"] = sol::resolve<void(const std::string&, const bool&, const std::string&, const std::string&)>(&Config::restore<bool>);
63 config_type["restore_section_int"] = sol::resolve<void(const std::string&, const int&, const std::string&, const std::string&)>(&Config::restore<int>);
64 config_type["restore_section_float"] = sol::resolve<void(const std::string&, const float&, const std::string&, const std::string&)>(&Config::restore<float>);
65 config_type["restore_section_string"] =
66 sol::resolve<void(const std::string&, const std::string&, const std::string&, const std::string&)>(&Config::restore<std::string>);
67 config_type["has"] = sol::resolve<bool(const std::string&)>(&Config::has);
68 config_type["has_section"] = sol::resolve<bool(const std::string&, const std::string&, const std::string&)>(&Config::has);
69 config_type["get_bool"] = sol::resolve<std::optional<bool>(const std::string&)>(&Config::get<bool>);
70 config_type["get_int"] = sol::resolve<std::optional<int>(const std::string&)>(&Config::get<int>);
71 config_type["get_float"] = sol::resolve<std::optional<float>(const std::string&)>(&Config::get<float>);
72 config_type["get_string"] = sol::resolve<std::optional<std::string>(const std::string&)>(&Config::get<std::string>);
73 config_type["get_section_int"] = sol::resolve<std::optional<int>(const std::string&, const std::string&, const std::string&)>(&Config::get<int>);
74 config_type["get_section_float"] = sol::resolve<std::optional<float>(const std::string&, const std::string&, const std::string&)>(&Config::get<float>);
75 config_type["get_section_string"] = sol::resolve<std::optional<std::string>(const std::string&, const std::string&, const std::string&)>(&Config::get<std::string>);
76 config_type["get_section_bool"] = sol::resolve<std::optional<bool>(const std::string&, const std::string&, const std::string&)>(&Config::get<bool>);
77 config_type["empty"] = &Config::empty;
78
79 // lua.set_function("galaxy_load_user_config", &load_config_wrapper);
80 // lua.set_function("galaxy_load_window_config", &load_window_wrapper);
81
82 /*lua.set_function("settings_dt", &settings::dt);
83 lua.set_function("settings_ups", &settings::ups);
84 lua.set_function("settings_window_width", &settings::window_width);
85 lua.set_function("settings_window_height", &settings::window_height);
86 lua.set_function("settings_window_title", &settings::window_title);
87 lua.set_function("settings_window_icon", &settings::window_icon);
88 lua.set_function("settings_fullscreen", &settings::fullscreen);
89 lua.set_function("settings_key_repeat", &settings::key_repeat);
90 lua.set_function("settings_vsync", &settings::vsync);
91 lua.set_function("settings_msaa", &settings::msaa);
92 lua.set_function("settings_cursor_visible", &settings::cursor_visible);
93 lua.set_function("settings_cursor_grabbed", &settings::cursor_grabbed);
94 lua.set_function("settings_cursor_icon", &settings::cursor_icon);
95 lua.set_function("settings_cursor_icon_size", &settings::cursor_icon_size);
96 lua.set_function("settings_cursor_hotspot", &settings::cursor_hotspot);*/
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 registry_type = lua.new_usertype<Registry>("Registry", sol::constructors<Registry()>());
116 registry_type["clear"] = &Registry::clear;
117 registry_type["create"] = &Registry::create;
118 registry_type["create_from_prefab"] = &Registry::create_from_prefab;
119 registry_type["is_valid"] = &Registry::is_valid;
120 registry_type["entt"] = &Registry::m_entt;
121
122 auto prefab_type = lua.new_usertype<Prefab>("Prefab", sol::constructors<Prefab(entt::entity, entt::registry&), Prefab(const nlohmann::json&)>());
123 prefab_type["from_entity"] = &Prefab::from_entity;
124 prefab_type["from_json"] = &Prefab::from_json;
125 prefab_type["to_entity"] = &Prefab::to_entity;
126 prefab_type["to_json"] = &Prefab::to_json;
127 prefab_type["load"] = &Prefab::load;
128 lua.set_function("galaxy_load_user_config", &load_config_wrapper);
129 lua.set_function("galaxy_load_window_config", &load_window_wrapper);*/
130 }
131 } // namespace lua
132} // 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
std::string root_path_wrapper() noexcept
Definition LuaCore.cpp:18
std::string editor_path_wrapper() noexcept
Definition LuaCore.cpp:28
std::string assets_path_wrapper() noexcept
Definition LuaCore.cpp:23
void inject_core()
Inject galaxy core services into Lua.
Definition LuaCore.cpp:43
Timer.hpp galaxy.
Definition Timer.cpp:18
static auto assets_dir_video() noexcept -> const std::string &
Video asset location.
Definition Settings.cpp:275
static auto assets_dir_voice() noexcept -> const std::string &
Voice asset location.
Definition Settings.cpp:235
static auto assets_dir_script() noexcept -> const std::string &
Scripts asset location.
Definition Settings.cpp:245
static auto asset_pack() noexcept -> const std::string &
Name of packed assets file.
Definition Settings.cpp:215
static auto root_dir() noexcept -> std::filesystem::path
Current root directory of application, unless it has been changed.
Definition Settings.cpp:200
static auto assets_dir_prefabs() noexcept -> const std::string &
Prefab asset location.
Definition Settings.cpp:265
static auto assets_dir_shaders() noexcept -> const std::string &
Shaders asset location.
Definition Settings.cpp:250
static auto assets_dir_animation() noexcept -> const std::string &
Animation data location.
Definition Settings.cpp:255
static auto editor_dir() noexcept -> std::filesystem::path
Directory for editor specific stuff.
Definition Settings.cpp:210
static auto assets_dir_font() noexcept -> const std::string &
Font asset location.
Definition Settings.cpp:240
static auto assets_dir_maps() noexcept -> const std::string &
Maps asset location.
Definition Settings.cpp:270
static auto assets_dir() noexcept -> std::filesystem::path
Main data directory.
Definition Settings.cpp:205
static auto assets_dir_texture() noexcept -> const std::string &
Textures asset location.
Definition Settings.cpp:260
static auto use_loose_assets() noexcept -> bool
Should asset data be read from pack or assets dir.
Definition Settings.cpp:220
static auto assets_dir_music() noexcept -> const std::string &
Music asset location.
Definition Settings.cpp:225
static auto assets_dir_sfx() noexcept -> const std::string &
SFX asset location.
Definition Settings.cpp:230
static auto assets_dir_ui() noexcept -> const std::string &
UI asset location.
Definition Settings.cpp:280