From 8543be87dfb426ec0e410a1885bf1842afab67c2 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 22 Nov 2024 09:36:48 +0300 Subject: [PATCH] add block.materials table --- src/logic/scripting/scripting.cpp | 12 ++++++++++++ src/voxels/Block.cpp | 9 +++++++++ src/voxels/Block.hpp | 2 ++ 3 files changed, 23 insertions(+) diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 77f15473..0778fd45 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -160,6 +160,18 @@ void scripting::process_post_runnables() { void scripting::on_content_load(Content* content) { scripting::content = content; scripting::indices = content->getIndices(); + + auto L = lua::get_main_state(); + if (lua::getglobal(L, "block")) { + const auto& materials = content->getBlockMaterials(); + lua::createtable(L, 0, materials.size()); + for (const auto& [name, material] : materials) { + lua::pushvalue(L, material->serialize()); + lua::setfield(L, name); + } + lua::setfield(L, "materials"); + lua::pop(L); + } } void scripting::on_world_load(LevelController* controller) { diff --git a/src/voxels/Block.cpp b/src/voxels/Block.cpp index 6d4ff761..520f9f99 100644 --- a/src/voxels/Block.cpp +++ b/src/voxels/Block.cpp @@ -8,6 +8,15 @@ #include "presets/ParticlesPreset.hpp" #include "util/stringutil.hpp" +dv::value BlockMaterial::serialize() const { + return dv::object({ + {"name", name}, + {"stepsSound", stepsSound}, + {"placeSound", placeSound}, + {"breakSound", breakSound} + }); +} + std::string to_string(BlockModel model) { switch (model) { case BlockModel::none: diff --git a/src/voxels/Block.hpp b/src/voxels/Block.hpp index 84835534..4fe51b0d 100644 --- a/src/voxels/Block.hpp +++ b/src/voxels/Block.hpp @@ -104,6 +104,8 @@ struct BlockMaterial { std::string stepsSound {""}; std::string placeSound {""}; std::string breakSound {""}; + + dv::value serialize() const; }; /// @brief Block properties definition