-- Indicators.lua local pairs, ipairs = pairs, ipairs; local GetTime = GetTime; local UnitAura = UnitAura; local UnitIsPlayer = UnitIsPlayer; local CTimerAfter = C_Timer.After; local watchedAuras = { [53563] = "TOPRIGHT", [156910] = "TOPRIGHT", [200025] = "TOPRIGHT", [200654] = "BOTTOMLEFT", }; local majorAuras = { ["Psychic Assault"] = true, ["Everburning Flames"] = true, ["Corrupt"] = true, ["Sleep Canister"] = true, ["Misery"] = true, ["Necrotic Embrace"] = true, ["Fulminating Pulse"] = true, ["Chilled Blood"] = true, ["Soulblight"] = true, ["Soulburst"] = true, ["Soulbomb"] = true, ["Aqua Bomb"] = true, }; local updaters = {}; local positions = {"TOPRIGHT", "BOTTOMLEFT"}; local auraFilters = {"HELPFUL", "HARMFUL"}; -- TODO text --[[local function remaining(expires, current) if expires == 0 then return "" end local remain = expires - current; if remain > 60 then return format("%dm", ceil(remain/60)); end return floor(remain+0.5); end]] --[[local function updateIndicators(frame, unit) if not frame:IsShown() then return; elseif not UnitIsConnected(unit) or UnitIsDeadOrGhost(unit) then if frame.inds:IsShown() then frame.inds:Hide() end return; elseif not frame.inds:IsShown() then frame.inds:Show(); end local current = GetTime(); for pos, ind in pairs(frame.inds) do if ind.expires ~= nil then if OmaRF.db.profile.indicators[pos].showText then ind.text:SetText(remaining(ind.expires, current)); end else if ind.icon:IsShown() then ind.icon:Hide() end if ind.text:IsShown() then ind.text:Hide() end end end for _, ind in ipairs(frame.majorInds) do if ind.expires ~= nil then ind.expireText:SetText(remaining(ind.expires, current)); else if ind.icon:IsShown() then ind.icon:Hide() end if ind.expireText:IsShown() then ind.expireText:Hide() end if ind.stackText:IsShown() then ind.stackText:Hide() end end end end]] --local function showIndicator(ind, caster, expires, current, config) local function showIndicator(ind, caster) --if not config.mine or UnitIsPlayer(caster) then if UnitIsPlayer(caster) then --if config.showIcon and not ind:IsShown() then if not ind:IsShown() then ind:Show(); end --ind.expires = expires; --[[if config.showText then ind.text:SetText(remaining(expires, current)); if not ind.text:IsShown() then ind.text:Show() end end]] end end function OmaCheckIndicators(frame, unit) for _, pos in pairs(positions) do --ind.expires = nil; if frame.inds[pos]:IsShown() then frame.inds[pos]:Hide() end end for i = 1,3 do --ind.expires = nil; if frame.major[1]:IsShown() then frame.major[1]:Hide() end end frame.showInds = false; frame.showMajors = false; local name, icon, count, expires, caster, id; local majorPos = 1; local current = GetTime(); for _, filter in ipairs(auraFilters) do local i = 1; while true do name, _, icon, count, _, _, expires, caster, _, _, id = UnitAura(unit, i, filter); if not id then break end local pos = watchedAuras[id] or watchedAuras[name]; if pos then frame.showInds = true; if UnitIsPlayer(caster) and not frame.inds[pos]:IsShown() then frame.inds[pos]:Show(); end end if (majorAuras[id] or majorAuras[name]) and majorPos <= 3 then frame.major[majorPos]:SetTexture(icon); frame.major[majorPos]:Show(); frame.showMajors = true; majorPos = majorPos + 1; end i = i + 1; end end if frame.showInds then if not frame.inds:IsShown() then frame.inds:Show() end -- create a function for updating the indicator each second --[[local func = updaters[frame]; if not func then func = function() updateIndicators(frame, unit) end; updaters[frame] = func; end CTimerAfter(1, func);]] elseif frame.inds:IsShown() then frame.inds:Hide(); end if frame.showMajors then if not frame.major:IsShown() then frame.major:Show() end elseif frame.major:IsShown() then frame.major:Hide(); end end