mirror of
https://github.com/HybridDog/vector_extras.git
synced 2024-11-26 09:23:47 +01:00
Remove functions which are deprecated and which I do not recommend to use
Removing deprecated functionality can help to clean up the code a bit. I remove the following deprecated functions and values: * vector.zero * vector.plane() * vector.pos_to_string() * vector.quickadd() * vector.scalar() * vector.get_data_from_pos() * vector.set_data_to_pos() * vector.set_data_to_pos_optional() * vector.remove_data_from_pos() * vector.get_data_pos_table() Furthermore, I remove the unused, experimental vector_meta.lua file and make luacheck linting more strict so that it can show accidental uses of deprecated functions in the code of this mod if there are any. This change can break compatility with old mods which use vector_extras.
This commit is contained in:
parent
63edf837d7
commit
f400a91e90
10
.luacheckrc
10
.luacheckrc
@ -1,5 +1,11 @@
|
||||
read_globals = {
|
||||
-- Defined by Minetest
|
||||
"minetest", "PseudoRandom", "VoxelArea", "string", "dump", "math"
|
||||
"minetest", "PseudoRandom", "VoxelArea", "string", "dump", "math",
|
||||
vector = {
|
||||
fields = {
|
||||
"add", "cross", "direction", "distance", "dot", "multiply",
|
||||
"new", "normalize", "round", "subtract",
|
||||
"from_number", "get_max_coord", "twoline", "threeline", "rayIter"
|
||||
}
|
||||
}
|
||||
}
|
||||
globals = {"vector", "vector_extras_functions"}
|
||||
|
18
doc.md
18
doc.md
@ -134,21 +134,3 @@ See e.g. `minetest.line_of_sight`.
|
||||
* If `time` is omitted, it uses the current time.
|
||||
* This function does not yet support the moon;
|
||||
at night it simply returns `nil`.
|
||||
|
||||
|
||||
## Helpers which I don't recommend to use now
|
||||
|
||||
* `vector.pos_to_string(pos)`: returns a string
|
||||
* It is similar to `minetest.pos_to_string`; it uses a different format:
|
||||
`"("..pos.x.."|"..pos.y.."|"..pos.z..")"`
|
||||
* `vector.zero`
|
||||
* The zero vector `{x=0, y=0, z=0}`
|
||||
* `vector.quickadd(pos, [z],[y],[x])`
|
||||
* Adds values to the vector components in-place
|
||||
|
||||
|
||||
## Deprecated helpers
|
||||
|
||||
* `vector.plane`
|
||||
* should be removed soon; it should have done the same as vector.triangle
|
||||
|
||||
|
94
init.lua
94
init.lua
@ -2,10 +2,6 @@ local path = minetest.get_modpath"vector_extras"
|
||||
|
||||
local funcs = {}
|
||||
|
||||
function funcs.pos_to_string(pos)
|
||||
return "("..pos.x.."|"..pos.y.."|"..pos.z..")"
|
||||
end
|
||||
|
||||
local r_corr = 0.25 --remove a bit more nodes (if shooting diagonal) to let it
|
||||
-- look like a hole (sth like antialiasing)
|
||||
|
||||
@ -270,63 +266,6 @@ function funcs.pnorm(v, p)
|
||||
return (math.abs(v.x)^p + math.abs(v.y)^p + math.abs(v.z)^p)^(1 / p)
|
||||
end
|
||||
|
||||
--not optimized
|
||||
--local areas = {}
|
||||
function funcs.plane(ps)
|
||||
-- sort positions and imagine the first one (A) as vector.zero
|
||||
vector.sort_positions(ps)
|
||||
local pos = ps[1]
|
||||
local B = vector.subtract(ps[2], pos)
|
||||
local C = vector.subtract(ps[3], pos)
|
||||
|
||||
-- get the positions for the fors
|
||||
local cube_p1 = {x=0, y=0, z=0}
|
||||
local cube_p2 = {x=0, y=0, z=0}
|
||||
for i in pairs(cube_p1) do
|
||||
cube_p1[i] = math.min(B[i], C[i], 0)
|
||||
cube_p2[i] = math.max(B[i], C[i], 0)
|
||||
end
|
||||
cube_p1 = vector.apply(cube_p1, math.floor)
|
||||
cube_p2 = vector.apply(cube_p2, math.ceil)
|
||||
|
||||
local vn = vector.normalize(vector.cross(B, C))
|
||||
|
||||
local nAB = vector.normalize(B)
|
||||
local nAC = vector.normalize(C)
|
||||
local angle_BAC = math.acos(vector.dot(nAB, nAC))
|
||||
|
||||
local nBA = vector.multiply(nAB, -1)
|
||||
local nBC = vector.normalize(vector.subtract(C, B))
|
||||
local angle_ABC = math.acos(vector.dot(nBA, nBC))
|
||||
|
||||
for z = cube_p1.z, cube_p2.z do
|
||||
for y = cube_p1.y, cube_p2.y do
|
||||
for x = cube_p1.x, cube_p2.x do
|
||||
local p = {x=x, y=y, z=z}
|
||||
local n = -vector.dot(p, vn)/vector.dot(vn, vn)
|
||||
if math.abs(n) <= 0.5 then
|
||||
local ep = vector.add(p, vector.multiply(vn, n))
|
||||
local nep = vector.normalize(ep)
|
||||
local angle_BAep = math.acos(vector.dot(nAB, nep))
|
||||
local angle_CAep = math.acos(vector.dot(nAC, nep))
|
||||
local angldif = angle_BAC - (angle_BAep+angle_CAep)
|
||||
if math.abs(angldif) < 0.001 then
|
||||
ep = vector.subtract(ep, B)
|
||||
nep = vector.normalize(ep)
|
||||
local angle_ABep = math.acos(vector.dot(nBA, nep))
|
||||
local angle_CBep = math.acos(vector.dot(nBC, nep))
|
||||
angldif = angle_ABC - (angle_ABep+angle_CBep)
|
||||
if math.abs(angldif) < 0.001 then
|
||||
table.insert(ps, vector.add(pos, p))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return ps
|
||||
end
|
||||
|
||||
function funcs.straightdelay(s, v, a)
|
||||
if not a then
|
||||
return s/v
|
||||
@ -334,17 +273,6 @@ function funcs.straightdelay(s, v, a)
|
||||
return (math.sqrt(v*v+2*a*s)-v)/a
|
||||
end
|
||||
|
||||
-- override vector.zero
|
||||
-- builtin used not to have the vector.zero function. to keep compatibility,
|
||||
-- vector.zero has to be a 0-vector and vector.zero() has to return a 0-vector
|
||||
-- => we make a callable 0-vector table
|
||||
if not vector.zero then
|
||||
vector.zero = {x = 0, y = 0, z = 0}
|
||||
else
|
||||
local old_zero = vector.zero
|
||||
vector.zero = setmetatable({x = 0, y = 0, z = 0}, {__call = old_zero})
|
||||
end
|
||||
|
||||
function funcs.sun_dir(time)
|
||||
if not time then
|
||||
time = minetest.get_timeofday()
|
||||
@ -901,18 +829,6 @@ function funcs.update_minp_maxp(minp, maxp, pos)
|
||||
end
|
||||
end
|
||||
|
||||
function funcs.quickadd(pos, z,y,x)
|
||||
if z then
|
||||
pos.z = pos.z+z
|
||||
end
|
||||
if y then
|
||||
pos.y = pos.y+y
|
||||
end
|
||||
if x then
|
||||
pos.x = pos.x+x
|
||||
end
|
||||
end
|
||||
|
||||
function funcs.unpack(pos)
|
||||
return pos.z, pos.y, pos.x
|
||||
end
|
||||
@ -1021,20 +937,12 @@ function funcs.triangle(pos1, pos2, pos3)
|
||||
return points, n, barycentric_coords
|
||||
end
|
||||
|
||||
|
||||
vector_extras_functions = funcs
|
||||
|
||||
dofile(path .. "/legacy.lua")
|
||||
--dofile(minetest.get_modpath("vector_extras").."/vector_meta.lua")
|
||||
|
||||
vector_extras_functions = nil
|
||||
|
||||
|
||||
for name,func in pairs(funcs) do
|
||||
if vector[name] then
|
||||
minetest.log("error", "[vector_extras] vector."..name..
|
||||
" already exists.")
|
||||
else
|
||||
-- luacheck: globals vector
|
||||
vector[name] = func
|
||||
end
|
||||
end
|
||||
|
94
legacy.lua
94
legacy.lua
@ -1,94 +0,0 @@
|
||||
local funcs = vector_extras_functions
|
||||
|
||||
function funcs.scalar(v1, v2)
|
||||
minetest.log("deprecated", "[vector_extras] vector.scalar is " ..
|
||||
"deprecated, use vector.dot instead.")
|
||||
return vector.dot(v1, v2)
|
||||
end
|
||||
|
||||
function funcs.get_data_from_pos(tab, z,y,x)
|
||||
minetest.log("deprecated", "[vector_extras] get_data_from_pos is " ..
|
||||
"deprecated, use the minetest pos hash function instead.")
|
||||
local data = tab[z]
|
||||
if data then
|
||||
data = data[y]
|
||||
if data then
|
||||
return data[x]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function funcs.set_data_to_pos(tab, z,y,x, data)
|
||||
minetest.log("deprecated", "[vector_extras] set_data_to_pos is " ..
|
||||
"deprecated, use the minetest pos hash function instead.")
|
||||
if tab[z] then
|
||||
if tab[z][y] then
|
||||
tab[z][y][x] = data
|
||||
return
|
||||
end
|
||||
tab[z][y] = {[x] = data}
|
||||
return
|
||||
end
|
||||
tab[z] = {[y] = {[x] = data}}
|
||||
end
|
||||
|
||||
function funcs.set_data_to_pos_optional(tab, z,y,x, data)
|
||||
minetest.log("deprecated", "[vector_extras] set_data_to_pos_optional is " ..
|
||||
"deprecated, use the minetest pos hash function instead.")
|
||||
if vector.get_data_from_pos(tab, z,y,x) ~= nil then
|
||||
return
|
||||
end
|
||||
funcs.set_data_to_pos(tab, z,y,x, data)
|
||||
end
|
||||
|
||||
function funcs.remove_data_from_pos(tab, z,y,x)
|
||||
minetest.log("deprecated", "[vector_extras] remove_data_from_pos is " ..
|
||||
"deprecated, use the minetest pos hash function instead.")
|
||||
if vector.get_data_from_pos(tab, z,y,x) == nil then
|
||||
return
|
||||
end
|
||||
tab[z][y][x] = nil
|
||||
if not next(tab[z][y]) then
|
||||
tab[z][y] = nil
|
||||
end
|
||||
if not next(tab[z]) then
|
||||
tab[z] = nil
|
||||
end
|
||||
end
|
||||
|
||||
function funcs.get_data_pos_table(tab)
|
||||
minetest.log("deprecated", "[vector_extras] get_data_pos_table likely " ..
|
||||
"is deprecated, use the minetest pos hash function instead.")
|
||||
local t,n = {},1
|
||||
local minz, miny, minx, maxz, maxy, maxx
|
||||
for z,yxs in pairs(tab) do
|
||||
if not minz then
|
||||
minz = z
|
||||
maxz = z
|
||||
else
|
||||
minz = math.min(minz, z)
|
||||
maxz = math.max(maxz, z)
|
||||
end
|
||||
for y,xs in pairs(yxs) do
|
||||
if not miny then
|
||||
miny = y
|
||||
maxy = y
|
||||
else
|
||||
miny = math.min(miny, y)
|
||||
maxy = math.max(maxy, y)
|
||||
end
|
||||
for x,v in pairs(xs) do
|
||||
if not minx then
|
||||
minx = x
|
||||
maxx = x
|
||||
else
|
||||
minx = math.min(minx, x)
|
||||
maxx = math.max(maxx, x)
|
||||
end
|
||||
t[n] = {z,y,x, v}
|
||||
n = n+1
|
||||
end
|
||||
end
|
||||
end
|
||||
return t, {x=minx, y=miny, z=minz}, {x=maxx, y=maxy, z=maxz}, n-1
|
||||
end
|
183
vector_meta.lua
183
vector_meta.lua
@ -1,183 +0,0 @@
|
||||
vector.meta = vector.meta or {}
|
||||
vector.meta.nodes = {}
|
||||
|
||||
vector.meta.nodes_file = {
|
||||
load = function()
|
||||
local nodesfile = io.open(minetest.get_worldpath()..'/vector_nodes.txt', "r")
|
||||
if nodesfile then
|
||||
local contents = nodesfile:read('*all')
|
||||
io.close(nodesfile)
|
||||
if contents ~= nil then
|
||||
local lines = string.split(contents, "\n")
|
||||
for _,entry in ipairs(lines) do
|
||||
local name, px, py, pz, meta = unpack(string.split(entry, "°"))
|
||||
vector.meta.set_node({x=px, y=py, z=pz}, name, meta)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
save = function() --WRITE CHANGES TO FILE
|
||||
local output = ''
|
||||
for x,ys in pairs(vector.meta.nodes) do
|
||||
for y,zs in pairs(ys) do
|
||||
for z,names in pairs(zs) do
|
||||
for name,meta in pairs(names) do
|
||||
output = name.."°"..x.."°"..y.."°"..z.."°"..dump(meta).."\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local f = io.open(minetest.get_worldpath()..'/vector_nodes.txt', "w")
|
||||
f:write(output)
|
||||
io.close(f)
|
||||
end
|
||||
}
|
||||
|
||||
local function table_empty(tab) --looks if it's an empty table
|
||||
if next(tab) == nil then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function vector.meta.nodes_info() --returns an info string of the node table
|
||||
local tmp = "[vector] "..dump(vector.meta.nodes).."\n[vector]:\n"
|
||||
for x,a in pairs(vector.meta.nodes) do
|
||||
for y,b in pairs(a) do
|
||||
for z,c in pairs(b) do
|
||||
for name,meta in pairs(c) do
|
||||
tmp = tmp..">\t"..name.." "..x.." "..y.." "..z.." "..dump(meta).."\n"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return tmp
|
||||
end
|
||||
|
||||
function vector.meta.clean_node_table() --replaces {} with nil
|
||||
local again = true
|
||||
while again do
|
||||
again = false
|
||||
for x,ys in pairs(vector.meta.nodes) do
|
||||
if table_empty(ys) then
|
||||
vector.meta.nodes[x] = nil
|
||||
again = true
|
||||
else
|
||||
for y,zs in pairs(ys) do
|
||||
if table_empty(zs) then
|
||||
vector.meta.nodes[x][y] = nil
|
||||
again = true
|
||||
else
|
||||
for z,names in pairs(zs) do
|
||||
if table_empty(names) then
|
||||
vector.meta.nodes[x][y][z] = nil
|
||||
again = true
|
||||
else
|
||||
for name,meta in pairs(names) do
|
||||
if table_empty(meta)
|
||||
or meta == "" then
|
||||
vector.meta.nodes[x][y][z][name] = nil
|
||||
again = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function vector.meta.complete_node_table(pos, name) --neccesary because tab[1] wouldn't work if tab is not a table
|
||||
local tmp = vector.meta.nodes[pos.x]
|
||||
if not tmp then
|
||||
vector.meta.nodes[pos.x] = {}
|
||||
end
|
||||
tmp = vector.meta.nodes[pos.x][pos.y]
|
||||
if not tmp then
|
||||
vector.meta.nodes[pos.x][pos.y] = {}
|
||||
end
|
||||
tmp = vector.meta.nodes[pos.x][pos.y][pos.z]
|
||||
if not tmp then
|
||||
vector.meta.nodes[pos.x][pos.y][pos.z] = {}
|
||||
end
|
||||
tmp = vector.meta.nodes[pos.x][pos.y][pos.z][name]
|
||||
if not tmp then
|
||||
vector.meta.nodes[pos.x][pos.y][pos.z][name] = {}
|
||||
end
|
||||
end
|
||||
|
||||
function vector.meta.get_node(pos, name)
|
||||
if not pos then
|
||||
return false
|
||||
end
|
||||
local tmp = vector.meta.nodes[pos.x]
|
||||
if not tmp
|
||||
or table_empty(tmp) then
|
||||
return false
|
||||
end
|
||||
tmp = vector.meta.nodes[pos.x][pos.y]
|
||||
if not tmp
|
||||
or table_empty(tmp) then
|
||||
return false
|
||||
end
|
||||
tmp = vector.meta.nodes[pos.x][pos.y][pos.z]
|
||||
if not tmp
|
||||
or table_empty(tmp) then
|
||||
return false
|
||||
end
|
||||
|
||||
-- if name isn't mentioned, just look if there's a node
|
||||
if not name then
|
||||
return true
|
||||
end
|
||||
|
||||
tmp = vector.meta.nodes[pos.x][pos.y][pos.z][name]
|
||||
if not tmp
|
||||
or table_empty(tmp) then
|
||||
return false
|
||||
end
|
||||
return tmp
|
||||
end
|
||||
|
||||
function vector.meta.remove_node(pos)
|
||||
if not pos then
|
||||
return false
|
||||
end
|
||||
if vector.meta.get_node(pos) then
|
||||
vector.meta.nodes[pos.x][pos.y][pos.z] = nil
|
||||
local xarr = vector.meta.nodes[pos.x]
|
||||
if table_empty(xarr[pos.y]) then
|
||||
vector.meta.nodes[pos.x][pos.y] = nil
|
||||
end
|
||||
if table_empty(xarr) then
|
||||
vector.meta.nodes[pos.x] = nil
|
||||
end
|
||||
else
|
||||
print("[vector_extras] Warning: The node at "..vector.pos_to_string(pos).." wasn't stored in vector.meta.nodes.")
|
||||
end
|
||||
end
|
||||
|
||||
function vector.meta.set_node(pos, name, meta)
|
||||
if not (name or pos) then
|
||||
return false
|
||||
end
|
||||
vector.meta.complete_node_table(pos, name)
|
||||
meta = meta or true
|
||||
vector.meta.nodes[pos.x][pos.y][pos.z][name] = meta
|
||||
end
|
||||
|
||||
minetest.register_chatcommand('cleanvectormetatable',{
|
||||
description = 'Tidy up it.',
|
||||
params = "",
|
||||
privs = {},
|
||||
func = function(name)
|
||||
vector.meta.clean_node_table()
|
||||
local tmp = vector.meta.nodes_info()
|
||||
minetest.chat_send_player(name, tmp)
|
||||
print("[vector_extras] "..tmp)
|
||||
end
|
||||
})
|
||||
|
||||
vector.meta.nodes_file.load()
|
Loading…
Reference in New Issue
Block a user