You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.1 KiB
110 lines
2.1 KiB
local AddonName, MDT = ...
|
|
MDT.U = {}
|
|
local U = MDT.U
|
|
local twipe,tinsert = table.wipe,table.insert
|
|
|
|
|
|
U.count_if = function(t, func)
|
|
local count = 0
|
|
|
|
for k, v in pairs(t) do
|
|
if func(v) then
|
|
count = count + 1
|
|
end
|
|
end
|
|
|
|
return count
|
|
end
|
|
|
|
U.do_if = function(t, func)
|
|
local updated = 0
|
|
|
|
for k, v in pairs(t) do
|
|
if func.condition(v) then
|
|
func.update(t, k)
|
|
updated = updated + 1
|
|
end
|
|
end
|
|
|
|
return updated
|
|
end
|
|
|
|
U.iremove_if = function(t, condition)
|
|
local removed = 0
|
|
|
|
for old_index=1, #t do
|
|
local new_index = old_index - removed
|
|
local entry = t[new_index]
|
|
if entry then
|
|
if condition(entry) then
|
|
removed = removed + 1
|
|
table.remove(t, new_index)
|
|
end
|
|
end
|
|
end
|
|
|
|
return removed
|
|
end
|
|
|
|
U.contains = function(t, needle)
|
|
for k, v in pairs(t) do
|
|
if type(v) == type(needle) and v == needle then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
U.copy = function(t)
|
|
local new = {}
|
|
|
|
for k,v in pairs(t) do
|
|
if type(v) == "table" then
|
|
new[k] = U.copy(v)
|
|
else
|
|
new[k] = v
|
|
end
|
|
end
|
|
|
|
return new
|
|
end
|
|
|
|
U.lerp = function(a, b, alpha)
|
|
return (b - a) * alpha + a
|
|
end
|
|
|
|
U.isInRange = function(value, min, max)
|
|
return (value >= min and value <= max)
|
|
end
|
|
|
|
--[[
|
|
Performance measurement
|
|
Usage:
|
|
MDT.U:TMStart("DungeonEnemies_UpdateEnemies")
|
|
MDT.U:TMStep("ReleaseAll")
|
|
MDT.U:TMStep("AddBlips")
|
|
MDT.U:TMEnd()
|
|
]]
|
|
|
|
local debugTimes
|
|
U.TMStart = function(self,segmentName)
|
|
debugTimes = {}
|
|
tinsert(debugTimes,{name=segmentName,time=debugprofilestop()})
|
|
end
|
|
|
|
U.TMStep = function(self,segmentName)
|
|
tinsert(debugTimes,{name=segmentName,time=debugprofilestop()})
|
|
end
|
|
|
|
|
|
U.TMEnd = function()
|
|
local stepTimes = {}
|
|
for segmentIdx,data in ipairs(debugTimes) do
|
|
if segmentIdx>1 then
|
|
local time = data.time-debugTimes[segmentIdx-1].time
|
|
stepTimes[data.name] = time
|
|
end
|
|
end
|
|
ViragDevTool_AddData(stepTimes)
|
|
end
|
|
|