X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/ad67f41cf4019dca1e2ea587019fe825f92fdcf0..c39801df4486661ba42940fa59d24536e27131a1:/OmaRF/RaidFrame.lua diff --git a/OmaRF/RaidFrame.lua b/OmaRF/RaidFrame.lua index 5d94ff0..89e728c 100644 --- a/OmaRF/RaidFrame.lua +++ b/OmaRF/RaidFrame.lua @@ -34,6 +34,7 @@ local barTexture = "Interface\\AddOns\\OmaRF\\images\\minimalist"; local class = nil; local party = {}; local raid = {}; +local updaters = {}; local M = {}; OmaRaidFrame = M; @@ -41,33 +42,40 @@ OmaRaidFrame = M; local function unitUpdate(frame) -- there's no in/out of range event, have to check each frame -- from FrameXML/CompactUnitFrame.lua - local inRange, checked = UnitInRange(frame.displayed); - if checked and not inRange then - frame:SetAlpha(0.55); - else - frame:SetAlpha(1); + if frame.updating then + local inRange, checked = UnitInRange(frame.displayed); + if checked and not inRange then + frame:SetAlpha(0.55); + else + frame:SetAlpha(1); + end + CTimerAfter(0.25, updaters[frame]); end end local function frameShow(frame) registerEvents(frame); registerUnitEvents(frame); - frame:SetScript("OnUpdate", unitUpdate); + frame.updating = true; + CTimerAfter(0.25, updaters[frame]); unitEvent(frame, "UPDATE_ALL_BARS"); end local function frameHide(frame) frame:UnregisterAllEvents(); - frame:SetScript("OnUpdate", nil); + frame.updating = nil; end local function showTooltip(secure) - GameTooltip_SetDefaultAnchor(GameTooltip, secure); - GameTooltip:SetUnit(secure:GetAttribute("unit")); + -- only show raid frame tooltips out of combat + if not InCombatLockdown() then + GameTooltip_SetDefaultAnchor(GameTooltip, secure); + GameTooltip:SetUnit(secure:GetAttribute("unit")); + end end local function hideTooltip(secure) - GameTooltip:FadeOut(); + if GameTooltip:IsOwned(secure) then GameTooltip:Hide() end end local function setupFrame(frame, secure, unit) @@ -97,11 +105,6 @@ local function setupFrame(frame, secure, unit) frame.health:SetPoint("TOPLEFT", frame.background, "TOPLEFT"); frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT"); frame.health:SetVertexColor(unpack(healthColor)); - frame.mana = frame:CreateTexture(nil, "BORDER"); - frame.mana:SetPoint("TOPLEFT", frame.background, "BOTTOMLEFT", 0, 2); - frame.mana:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT"); - frame.mana:SetColorTexture(1, 1, 1); - frame.mana:Hide(); frame.shield = frame:CreateTexture(nil, "BORDER"); frame.shield:SetPoint("TOPLEFT", frame.health, "TOPRIGHT"); frame.shield:SetPoint("BOTTOMLEFT", frame.health, "BOTTOMRIGHT"); @@ -139,11 +142,6 @@ local function setupFrame(frame, secure, unit) frame.text:SetFont(STANDARD_TEXT_FONT, 13); frame.text:SetPoint("CENTER", frame.background, "CENTER", 0, -1); frame.text:Hide(); - frame.rez = frame:CreateTexture(nil, "OVERLAY"); - frame.rez:SetPoint("TOPLEFT", frame.background, "CENTER", -12, 12); - frame.rez:SetPoint("BOTTOMRIGHT", frame.background, "CENTER", 12, -12); - frame.rez:SetTexture("Interface\\RaidFrame\\Raid-Icon-Rez"); - frame.rez:Hide(); frame.ready = frame:CreateTexture(nil, "OVERLAY"); frame.ready:SetPoint("TOPLEFT", frame.background, "BOTTOMLEFT", 0, 14); frame.ready:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMLEFT", 14, 0); @@ -162,6 +160,8 @@ local function setupFrame(frame, secure, unit) frame:SetScript("OnEvent", unitEvent); secure:SetScript("OnEnter", showTooltip); secure:SetScript("OnLeave", hideTooltip); + -- set up periodic updates + updaters[frame] = function() return unitUpdate(frame) end -- set attributes secure:RegisterForClicks("AnyDown"); for attr, val in pairs(attributes) do @@ -331,22 +331,13 @@ local function hideBlizzardRaid() end end -local function updateTooltipFuncs() - -- let MoveAnything hook these to anchor tooltip elsewhere - GameTooltip = _G["GameTooltip"]; - GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"]; -end - CFrame:RegisterEvent("PLAYER_LOGIN"); -CFrame:RegisterEvent("PLAYER_ENTERING_WORLD"); CFrame:RegisterEvent("PLAYER_REGEN_ENABLED"); CFrame:SetScript("OnEvent", function(self, event, addon) if event == "PLAYER_REGEN_ENABLED" then -- if CompactRaidFrameManager_UpdateOptionsFlowContainer was called in combat -- couldn't hide the button hideBlizzardRaidButton(); - elseif event == "PLAYER_ENTERING_WORLD" then - CTimerAfter(0.01, updateTooltipFuncs); elseif event == "PLAYER_LOGIN" then OmaRFLoadChar(); hideBlizzardRaid();