Minetest-WorldEditAdditions/worldeditadditions/utils/player.lua

46 lines
2.1 KiB
Lua
Raw Normal View History

2021-07-29 03:06:10 +02:00
-- Returns the player's position (at leg level).
-- @param name string The name of the player to return facing direction of.
-- @return Returns position.
function worldeditadditions.player_vector(name)
return minetest.get_player_by_name(name):get_pos()
end
2021-02-25 04:42:24 +01:00
-- Returns the player's facing direction on the horizontal axes only.
-- @param name string The name of the player to return facing direction of.
2021-03-09 20:05:03 +01:00
-- @return Returns axis name and sign multiplier.
function worldeditadditions.player_axis2d(name)
2021-07-29 03:06:10 +02:00
-- minetest.get_player_by_name("singleplayer"):
2021-03-09 20:05:03 +01:00
local dir = minetest.get_player_by_name(name):get_look_dir()
local x, z= math.abs(dir.x), math.abs(dir.z)
if x > z then return "x", dir.x > 0 and 1 or -1
else return "z", dir.z > 0 and 1 or -1 end
end
2021-03-09 20:05:03 +01:00
-- Returns the axis and sign of the axis to the left of the input axis.
-- @param axis string x or z.
-- @param sign int Sign multiplier.
-- @return Returns axis name and sign multiplier.
function worldeditadditions.axis_left(axis,sign)
if not axis:match("[xz]") then return false, "Error: Not a horizontal axis!"
elseif axis == "x" then return true, "z", sign
else return true, "x", -sign end
end
2021-03-17 19:36:12 +01:00
--- Dehumanize Direction: translates up, down, left, right, front, into xyz based on player orientation.
-- @param name string The name of the player to return facing direction of.
-- @param dir string Relative direction to translate.
-- @return Returns axis name and sign multiplier.
2021-03-20 00:25:26 +01:00
function worldeditadditions.dir_to_xyz(name, dir)
2021-03-17 19:36:12 +01:00
local axfac, drfac = worldeditadditions.player_axis2d(name)
local _, axlft, drlft = worldeditadditions.axis_left(axfac,drfac)
if dir:match("front") or dir:match("back") then
return axfac, dir:match("front") and drfac or -drfac
elseif dir:match("left") or dir:match("right") then
return axlft, dir:match("left") and drlft or -drlft
elseif dir:match("up") or dir:match("down") then
return "y", dir == "down" and -1 or 1
else return false, "\"" .. dir .. "\" not a recognized direction! Try: (up | down | left | right | front | back)" end
end
-- Tests
-- /lua print(worldeditadditions.table.unpack(worldeditadditions.player_axis2d(myname)))