diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-10-18 18:01:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-18 18:01:44 -0400 |
commit | b38ffdec279bcded98e34f5116c8d676aa9f73a7 (patch) | |
tree | 31cafdb009b2f81b61a96286a3800a8e408f8f3d /builtin/common | |
parent | 23e9f5db4330a6efee5270160a3959422926ce77 (diff) | |
download | minetest-b38ffdec279bcded98e34f5116c8d676aa9f73a7.tar.xz |
Implement vector and node conversion in Lua (#12609)
Co-authored-by: sfan5 <sfan5@live.de>
Diffstat (limited to 'builtin/common')
-rw-r--r-- | builtin/common/item_s.lua | 14 | ||||
-rw-r--r-- | builtin/common/tests/misc_helpers_spec.lua | 1 | ||||
-rw-r--r-- | builtin/common/tests/serialize_spec.lua | 1 | ||||
-rw-r--r-- | builtin/common/tests/vector_spec.lua | 2 | ||||
-rw-r--r-- | builtin/common/vector.lua | 25 |
5 files changed, 38 insertions, 5 deletions
diff --git a/builtin/common/item_s.lua b/builtin/common/item_s.lua index 6e4269b7d..f848ef6d8 100644 --- a/builtin/common/item_s.lua +++ b/builtin/common/item_s.lua @@ -223,3 +223,17 @@ function builtin_shared.cache_content_ids() end end end + +if core.set_read_node and core.set_push_node then + local function read_node(node) + return name2content[node.name], node.param1, node.param2 + end + core.set_read_node(read_node) + core.set_read_node = nil + + local function push_node(content, param1, param2) + return {name = content2name[content], param1 = param1, param2 = param2} + end + core.set_push_node(push_node) + core.set_push_node = nil +end diff --git a/builtin/common/tests/misc_helpers_spec.lua b/builtin/common/tests/misc_helpers_spec.lua index 7d046d5b7..ff0f0298a 100644 --- a/builtin/common/tests/misc_helpers_spec.lua +++ b/builtin/common/tests/misc_helpers_spec.lua @@ -1,5 +1,4 @@ _G.core = {} -_G.vector = {metatable = {}} dofile("builtin/common/vector.lua") dofile("builtin/common/misc_helpers.lua") diff --git a/builtin/common/tests/serialize_spec.lua b/builtin/common/tests/serialize_spec.lua index 340e226ee..d4e501468 100644 --- a/builtin/common/tests/serialize_spec.lua +++ b/builtin/common/tests/serialize_spec.lua @@ -1,5 +1,4 @@ _G.core = {} -_G.vector = {metatable = {}} _G.setfenv = require 'busted.compatibility'.setfenv diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua index 6a0b81a89..a738e068f 100644 --- a/builtin/common/tests/vector_spec.lua +++ b/builtin/common/tests/vector_spec.lua @@ -1,4 +1,4 @@ -_G.vector = {metatable = {}} +_G.vector = {} dofile("builtin/common/vector.lua") describe("vector", function() diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua index a08472e32..cebc99580 100644 --- a/builtin/common/vector.lua +++ b/builtin/common/vector.lua @@ -6,8 +6,10 @@ Note: The vector.*-functions must be able to accept old vectors that had no meta -- localize functions local setmetatable = setmetatable --- vector.metatable is set by C++. -local metatable = vector.metatable +vector = {} + +local metatable = {} +vector.metatable = metatable local xyz = {"x", "y", "z"} @@ -366,3 +368,22 @@ function vector.dir_to_rotation(forward, up) end return rot end + +if rawget(_G, "core") and core.set_read_vector and core.set_push_vector then + local function read_vector(v) + return v.x, v.y, v.z + end + core.set_read_vector(read_vector) + core.set_read_vector = nil + + if rawget(_G, "jit") then + -- This is necessary to prevent trace aborts. + local function push_vector(x, y, z) + return (fast_new(x, y, z)) + end + core.set_push_vector(push_vector) + else + core.set_push_vector(fast_new) + end + core.set_push_vector = nil +end |