aboutsummaryrefslogtreecommitdiff
path: root/builtin/common/vector.lua
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/common/vector.lua')
-rw-r--r--builtin/common/vector.lua25
1 files changed, 23 insertions, 2 deletions
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