diff --git a/src/logic/scripting/lua/libs/libbjson.cpp b/src/logic/scripting/lua/libs/libbjson.cpp index 71498dbc..8c28f04e 100644 --- a/src/logic/scripting/lua/libs/libbjson.cpp +++ b/src/logic/scripting/lua/libs/libbjson.cpp @@ -1,7 +1,6 @@ #include "coders/binary_json.hpp" #include "api_lua.hpp" #include "util/Buffer.hpp" -#include "../lua_custom_types.hpp" static int l_tobytes(lua::State* L) { auto value = lua::tovalue(L, 1); diff --git a/src/logic/scripting/lua/libs/libgeneration.cpp b/src/logic/scripting/lua/libs/libgeneration.cpp index e215b4fb..15bdad5c 100644 --- a/src/logic/scripting/lua/libs/libgeneration.cpp +++ b/src/logic/scripting/lua/libs/libgeneration.cpp @@ -9,7 +9,7 @@ #include "content/Content.hpp" #include "content/ContentControl.hpp" #include "engine/Engine.hpp" -#include "../lua_custom_types.hpp" +#include "../usertypes/lua_type_voxelfragment.hpp" using namespace scripting; diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index 6395dc5b..fc3732a1 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -22,6 +22,7 @@ #include "items/Inventories.hpp" #include "util/stringutil.hpp" #include "world/Level.hpp" +#include "../usertypes/lua_type_canvas.hpp" using namespace gui; using namespace scripting; diff --git a/src/logic/scripting/lua/libs/libutf8.cpp b/src/logic/scripting/lua/libs/libutf8.cpp index ec746caa..e6538c2e 100644 --- a/src/logic/scripting/lua/libs/libutf8.cpp +++ b/src/logic/scripting/lua/libs/libutf8.cpp @@ -3,7 +3,6 @@ #include #include -#include "../lua_custom_types.hpp" #include "util/stringutil.hpp" static int l_tobytes(lua::State* L) { diff --git a/src/logic/scripting/lua/lua_commons.hpp b/src/logic/scripting/lua/lua_commons.hpp index f272dbf0..bb3163c8 100644 --- a/src/logic/scripting/lua/lua_commons.hpp +++ b/src/logic/scripting/lua/lua_commons.hpp @@ -48,4 +48,9 @@ namespace lua { void log_error(const std::string& text); + class Userdata { + public: + virtual ~Userdata() {}; + virtual const std::string& getTypeName() const = 0; + }; } diff --git a/src/logic/scripting/lua/lua_custom_types.hpp b/src/logic/scripting/lua/lua_custom_types.hpp deleted file mode 100644 index c17a78bc..00000000 --- a/src/logic/scripting/lua/lua_custom_types.hpp +++ /dev/null @@ -1,134 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#include "lua_commons.hpp" - -struct fnl_state; -class Heightmap; -class VoxelFragment; -class Texture; -class ImageData; - -namespace lua { - class Userdata { - public: - virtual ~Userdata() {}; - virtual const std::string& getTypeName() const = 0; - }; - - class LuaHeightmap : public Userdata { - std::shared_ptr map; - std::unique_ptr noise; - public: - LuaHeightmap(const std::shared_ptr& map); - LuaHeightmap(uint width, uint height); - - virtual ~LuaHeightmap(); - - uint getWidth() const; - - uint getHeight() const; - - float* getValues(); - - const float* getValues() const; - - const std::string& getTypeName() const override { - return TYPENAME; - } - - const std::shared_ptr& getHeightmap() const { - return map; - } - - fnl_state* getNoise() { - return noise.get(); - } - - void setSeed(int64_t seed); - - static int createMetatable(lua::State*); - inline static std::string TYPENAME = "Heightmap"; - }; - static_assert(!std::is_abstract()); - - class LuaVoxelFragment : public Userdata { - std::array, 4> fragmentVariants; - public: - LuaVoxelFragment( - std::array, 4> fragmentVariants - ); - - virtual ~LuaVoxelFragment(); - - std::shared_ptr getFragment(size_t rotation) const { - return fragmentVariants.at(rotation & 0b11); - } - - const std::string& getTypeName() const override { - return TYPENAME; - } - - static int createMetatable(lua::State*); - inline static std::string TYPENAME = "VoxelFragment"; - }; - static_assert(!std::is_abstract()); - - class LuaCanvas : public Userdata { - public: - explicit LuaCanvas( - std::shared_ptr inTexture, - std::shared_ptr inData - ); - ~LuaCanvas() override = default; - - const std::string& getTypeName() const override { - return TYPENAME; - } - - [[nodiscard]] auto& texture() const { - return *mTexture; - } - - [[nodiscard]] auto& data() const { - return *mData; - } - - [[nodiscard]] bool hasTexture() const { - return mTexture != nullptr; - } - - auto shareTexture() const { - return mTexture; - } - - void createTexture(); - - static int createMetatable(lua::State*); - inline static std::string TYPENAME = "Canvas"; - private: - std::shared_ptr mTexture; // nullable - std::shared_ptr mData; - }; - static_assert(!std::is_abstract()); - - class LuaRandom : public Userdata { - public: - std::mt19937 rng; - - explicit LuaRandom(uint64_t seed) : rng(seed) {} - virtual ~LuaRandom() override = default; - - const std::string& getTypeName() const override { - return TYPENAME; - } - - static int createMetatable(lua::State*); - inline static std::string TYPENAME = "__vc_Random"; - }; - static_assert(!std::is_abstract()); -} diff --git a/src/logic/scripting/lua/lua_engine.cpp b/src/logic/scripting/lua/lua_engine.cpp index 08d2eb85..05adb354 100644 --- a/src/logic/scripting/lua/lua_engine.cpp +++ b/src/logic/scripting/lua/lua_engine.cpp @@ -8,7 +8,10 @@ #include "debug/Logger.hpp" #include "util/stringutil.hpp" #include "libs/api_lua.hpp" -#include "lua_custom_types.hpp" +#include "usertypes/lua_type_heightmap.hpp" +#include "usertypes/lua_type_voxelfragment.hpp" +#include "usertypes/lua_type_canvas.hpp" +#include "usertypes/lua_type_random.hpp" #include "engine/Engine.hpp" static debug::Logger logger("lua-state"); diff --git a/src/logic/scripting/lua/lua_util.hpp b/src/logic/scripting/lua/lua_util.hpp index a8fb246e..29f25f34 100644 --- a/src/logic/scripting/lua/lua_util.hpp +++ b/src/logic/scripting/lua/lua_util.hpp @@ -6,7 +6,6 @@ #include #include "data/dv.hpp" -#include "lua_custom_types.hpp" #include "lua_wrapper.hpp" #define GLM_ENABLE_EXPERIMENTAL #include diff --git a/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp b/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp index ec086904..3343fe71 100644 --- a/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp +++ b/src/logic/scripting/lua/usertypes/lua_type_canvas.cpp @@ -1,12 +1,13 @@ -#include +#include "lua_type_canvas.hpp" #include "graphics/core/ImageData.hpp" #include "graphics/core/Texture.hpp" -#include "logic/scripting/lua/lua_custom_types.hpp" #include "logic/scripting/lua/lua_util.hpp" #include "engine/Engine.hpp" #include "assets/Assets.hpp" +#include + using namespace lua; LuaCanvas::LuaCanvas( diff --git a/src/logic/scripting/lua/usertypes/lua_type_canvas.hpp b/src/logic/scripting/lua/usertypes/lua_type_canvas.hpp new file mode 100644 index 00000000..43fbbd10 --- /dev/null +++ b/src/logic/scripting/lua/usertypes/lua_type_canvas.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include "../lua_commons.hpp" + +class Texture; +class ImageData; + +namespace lua { + class LuaCanvas : public Userdata { + public: + explicit LuaCanvas( + std::shared_ptr inTexture, + std::shared_ptr inData + ); + ~LuaCanvas() override = default; + + const std::string& getTypeName() const override { + return TYPENAME; + } + + [[nodiscard]] auto& texture() const { + return *mTexture; + } + + [[nodiscard]] auto& data() const { + return *mData; + } + + [[nodiscard]] bool hasTexture() const { + return mTexture != nullptr; + } + + auto shareTexture() const { + return mTexture; + } + + void createTexture(); + + static int createMetatable(lua::State*); + inline static std::string TYPENAME = "Canvas"; + private: + std::shared_ptr mTexture; // nullable + std::shared_ptr mData; + }; + static_assert(!std::is_abstract()); +} diff --git a/src/logic/scripting/lua/usertypes/lua_type_heightmap.cpp b/src/logic/scripting/lua/usertypes/lua_type_heightmap.cpp index 290e1345..4e2f05a9 100644 --- a/src/logic/scripting/lua/usertypes/lua_type_heightmap.cpp +++ b/src/logic/scripting/lua/usertypes/lua_type_heightmap.cpp @@ -1,9 +1,4 @@ -#include "../lua_custom_types.hpp" - -#include -#include -#include -#include +#include "lua_type_heightmap.hpp" #include "util/functional_util.hpp" #define FNL_IMPL @@ -14,6 +9,12 @@ #include "maths/Heightmap.hpp" #include "engine/Engine.hpp" #include "../lua_util.hpp" +#include "lua_type_heightmap.hpp" + +#include +#include +#include +#include using namespace lua; diff --git a/src/logic/scripting/lua/usertypes/lua_type_heightmap.hpp b/src/logic/scripting/lua/usertypes/lua_type_heightmap.hpp new file mode 100644 index 00000000..4109be67 --- /dev/null +++ b/src/logic/scripting/lua/usertypes/lua_type_heightmap.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include "../lua_commons.hpp" + +struct fnl_state; +class Heightmap; + +namespace lua { + class LuaHeightmap : public Userdata { + std::shared_ptr map; + std::unique_ptr noise; + public: + LuaHeightmap(const std::shared_ptr& map); + LuaHeightmap(uint width, uint height); + + virtual ~LuaHeightmap(); + + uint getWidth() const; + + uint getHeight() const; + + float* getValues(); + + const float* getValues() const; + + const std::string& getTypeName() const override { + return TYPENAME; + } + + const std::shared_ptr& getHeightmap() const { + return map; + } + + fnl_state* getNoise() { + return noise.get(); + } + + void setSeed(int64_t seed); + + static int createMetatable(lua::State*); + inline static std::string TYPENAME = "Heightmap"; + }; + static_assert(!std::is_abstract()); +} diff --git a/src/logic/scripting/lua/usertypes/lua_type_random.cpp b/src/logic/scripting/lua/usertypes/lua_type_random.cpp index 99177056..bdbe4a1a 100644 --- a/src/logic/scripting/lua/usertypes/lua_type_random.cpp +++ b/src/logic/scripting/lua/usertypes/lua_type_random.cpp @@ -1,5 +1,5 @@ -#include "../lua_custom_types.hpp" #include "../lua_util.hpp" +#include "lua_type_random.hpp" #include diff --git a/src/logic/scripting/lua/usertypes/lua_type_random.hpp b/src/logic/scripting/lua/usertypes/lua_type_random.hpp new file mode 100644 index 00000000..06ab24f8 --- /dev/null +++ b/src/logic/scripting/lua/usertypes/lua_type_random.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "../lua_commons.hpp" + +#include + +namespace lua { + class LuaRandom : public Userdata { + public: + std::mt19937 rng; + + explicit LuaRandom(uint64_t seed) : rng(seed) {} + virtual ~LuaRandom() override = default; + + const std::string& getTypeName() const override { + return TYPENAME; + } + + static int createMetatable(lua::State*); + inline static std::string TYPENAME = "__vc_Random"; + }; + static_assert(!std::is_abstract()); +} diff --git a/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.cpp b/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.cpp index 271a2a5a..17cf37d1 100644 --- a/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.cpp +++ b/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.cpp @@ -1,7 +1,6 @@ -#include "../lua_custom_types.hpp" +#include "lua_type_voxelfragment.hpp" #include "../lua_util.hpp" - #include "world/generator/VoxelFragment.hpp" #include "util/stringutil.hpp" #include "world/Level.hpp" diff --git a/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.hpp b/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.hpp new file mode 100644 index 00000000..789076cc --- /dev/null +++ b/src/logic/scripting/lua/usertypes/lua_type_voxelfragment.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "../lua_commons.hpp" + +class VoxelFragment; + +namespace lua { + class LuaVoxelFragment : public Userdata { + std::array, 4> fragmentVariants; + public: + LuaVoxelFragment( + std::array, 4> fragmentVariants + ); + + virtual ~LuaVoxelFragment(); + + std::shared_ptr getFragment(size_t rotation) const { + return fragmentVariants.at(rotation & 0b11); + } + + const std::string& getTypeName() const override { + return TYPENAME; + } + + static int createMetatable(lua::State*); + inline static std::string TYPENAME = "VoxelFragment"; + }; + static_assert(!std::is_abstract()); +} diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 997b5f82..a4eccbe3 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -17,7 +17,6 @@ #include "logic/BlocksController.hpp" #include "logic/LevelController.hpp" #include "lua/lua_engine.hpp" -#include "lua/lua_custom_types.hpp" #include "maths/Heightmap.hpp" #include "objects/Player.hpp" #include "util/stringutil.hpp" diff --git a/src/logic/scripting/scripting_world_generation.cpp b/src/logic/scripting/scripting_world_generation.cpp index bf6c1dd1..3199b46c 100644 --- a/src/logic/scripting/scripting_world_generation.cpp +++ b/src/logic/scripting/scripting_world_generation.cpp @@ -6,7 +6,7 @@ #include "scripting_commons.hpp" #include "typedefs.hpp" #include "lua/lua_engine.hpp" -#include "lua/lua_custom_types.hpp" +#include "lua/usertypes/lua_type_heightmap.hpp" #include "content/Content.hpp" #include "voxels/Block.hpp" #include "voxels/Chunk.hpp"