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.

139 lines
3.1 KiB

local AddonName, MDT = ...
MDT.U = {}
local U = MDT.U
local tinsert = 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()
-- Open VDT to see the results, times are in elapsed milliseconds
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
local function getGroupMembers(reversed, forceParty)
local unit = (not forceParty and IsInRaid()) and 'raid' or 'party'
local numGroupMembers = forceParty and GetNumSubgroupMembers() or GetNumGroupMembers()
local i = reversed and numGroupMembers or (unit == 'party' and 0 or 1)
return function()
local ret
if i == 0 and unit == 'party' then
ret = 'player'
elseif i <= numGroupMembers and i > 0 then
ret = unit .. i
end
i = i + (reversed and -1 or 1)
return ret
end
end
U.GetGroupMembers = function()
local groupMembers = {}
--iterate over all group members and add them to the list
for unit in getGroupMembers(false, false) do
local name = UnitName(unit)
if name then
local _, class = UnitClass(unit)
local _, _, _, classHexString = GetClassColor(class)
local coloredName = "|c" .. classHexString .. name .. "|r"
tinsert(groupMembers, coloredName)
end
end
return groupMembers
end