135 lines
2.5 KiB
Lua

function getLinearArray(num)
local ret = {}
for i = 1,num do
ret[i] = i
end
return ret
end
function getArrayOf(vals, num)
local ret = {}
while #ret < num do
for i,e in pairs(vals) do
if #ret < num then
table.insert(ret, e)
end
end
end
return ret
end
function hasCollisionMask(object, mask)
return object.prototype and object.prototype.collision_mask[mask]
end
function getTableSize(val)
if not val then return -1 end
if type(val) ~= "table" then error("Value '" .. serpent.block(val) .. "' is not a table!") end
--[[
local count = 0
for key,num in pairs(val) do
count = count+1
end
return count
--]]
return table_size(val)
end
function areTablesEqual(t1, t2)
if getTableSize(t1) ~= getTableSize(t2) then return false end
for i,e in ipairs(t1) do
if type(e) == "table" then
if not areTablesEqual(e, t2[i]) then return false end
else
if t2[i] ~= e then return false end
end
end
return true
end
function getRandomTableEntry(value, randFunc)
local size = getTableSize(value)
local idx = randFunc and randFunc(0, size-1) or math.random(0, size-1)
--game.print(idx .. "/" .. size)
local i = 0
for key,val in pairs(value) do
--game.print(i .. " >> " .. val)
if i == idx then
--game.print(val)
return val
end
i = i+1
end
end
function removeEntryFromListIf(list, func)
for i = #list,1,-1 do
if func(list[i]) then
table.remove(list, i)
end
end
end
function removeEntryFromList(list, val)
for i = #list,1,-1 do
if list[i] == val then
table.remove(list, i)
end
end
end
function listHasValue(list, val)
for _,entry in pairs(list) do
if type(val) == "table" then
log("Checking tables in " .. serpent.block(list))
if areTablesEqual(entry, val) then return end
else
if entry == val then return true end
end
end
end
function removeNilValues(list)
local ret = {}
for i,entry in pairs(list) do
if entry then
ret[#ret+1] = entry
end
end
return ret
end
function getHighestTableKey(list)
local lim = -9999999
local ret = nil
for k,v in pairs(list) do
if v > lim then
lim = v
ret = k
end
end
return ret
end
function isTableAnArray(t)
return #t == getTableSize(t)--[[
--are all indices numerical; count for later
local count = 0
for k,v in pairs(t) do
if type(k) ~= "number" then
return false
else
count = count+1
end
end
--check if indices are 1->N in order
for i = 1,count do
if (not t[i]) and type(t[i]) ~= "nil" then --The value might be nil, have to check the type too
return false
end
end
return true--]]
end