aboutsummaryrefslogtreecommitdiff
path: root/builtin/common
diff options
context:
space:
mode:
authorJude Melton-Houghton <jwmhjwmh@gmail.com>2022-10-18 18:01:44 -0400
committerGitHub <noreply@github.com>2022-10-18 18:01:44 -0400
commitb38ffdec279bcded98e34f5116c8d676aa9f73a7 (patch)
tree31cafdb009b2f81b61a96286a3800a8e408f8f3d /builtin/common
parent23e9f5db4330a6efee5270160a3959422926ce77 (diff)
downloadminetest-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.lua14
-rw-r--r--builtin/common/tests/misc_helpers_spec.lua1
-rw-r--r--builtin/common/tests/serialize_spec.lua1
-rw-r--r--builtin/common/tests/vector_spec.lua2
-rw-r--r--builtin/common/vector.lua25
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