forked from ReikaKalseki/DragonIndustries
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharrays.lua
132 lines (119 loc) · 2.36 KB
/
arrays.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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 areTablesEqual(t1, t2)
if #t1 ~= #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 getTableSize(val)
--[[
local count = 0
for key,num in pairs(val) do
count = count+1
end
return count
--]]
return table_size(val)
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