diff --git a/init.lua b/init.lua index b6c0522..07ff608 100644 --- a/init.lua +++ b/init.lua @@ -30,6 +30,8 @@ for _,file in pairs({"metadata", "inventory", "player"}) do loadfile(path.."/"..file..".lua")(check, secure_table) end +dofile(path.."/misc.lua") + if minetest.is_singleplayer() then minetest.register_chatcommand("fakelib_test", { description = "Test fakelib's API.", diff --git a/misc.lua b/misc.lua new file mode 100644 index 0000000..ece4c52 --- /dev/null +++ b/misc.lua @@ -0,0 +1,10 @@ + +function fakelib.is_vector(x, add_metatable) + if type(x) ~= "table" or type(x.x) ~= "number" or type(x.y) ~= "number" or type(x.z) ~= "number" then + return false + end + if add_metatable and getmetatable(x) ~= vector.metatable then + setmetatable(x, vector.metatable) + end + return true +end diff --git a/player.lua b/player.lua index e3c939b..186e557 100644 --- a/player.lua +++ b/player.lua @@ -26,10 +26,10 @@ function fakelib.create_player(options) if type(options.name) == "string" then data.name = options.name end - if type(options.position) == "table" then + if fakelib.is_vector(options.position) then data.position = vector.copy(options.position) end - if type(options.direction) == "table" then + if fakelib.is_vector(options.direction) then local dir = vector.normalize(options.direction) data.pitch = -math.asin(dir.y) data.yaw = math.atan2(-dir.x, dir.z) % (math.pi * 2)