X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/d76a52e46fc339db35e6a068c0f1564db7b9cf46..a5940de0c59cc9f6acc34c09402dbe137fcf4650:/OmaRF/RaidFrame.lua diff --git a/OmaRF/RaidFrame.lua b/OmaRF/RaidFrame.lua index 783cdeb..f8ca89f 100644 --- a/OmaRF/RaidFrame.lua +++ b/OmaRF/RaidFrame.lua @@ -1,8 +1,7 @@ -- RaidFrame.lua local _; -local unpack, pairs, rawget = unpack, pairs, rawget; +local unpack, pairs = unpack, pairs; local format = string.format; -local UnitHealthMax, UnitPowerMax = UnitHealthMax, UnitPowerMax; local UnitInRange = UnitInRange; local InCombatLockdown = InCombatLockdown; local CreateFrame, RegisterStateDriver, RegisterUnitWatch = CreateFrame, RegisterStateDriver, RegisterUnitWatch; @@ -11,10 +10,11 @@ local GameTooltip = nil; local GameTooltip_SetDefaultAnchor = nil; local registerEvents = OmaRFEvents.RegisterEvents; +local registerUnitEvents = OmaRFEvents.RegisterUnitEvents; local unitEvent = OmaRFEvents.UnitEvent; +local setupIndicators = OmaRFIndicators.SetupIndicators; local Settings = OmaRFSettings; -local indSize = Settings.IndSize; local baseColor = Settings.BaseColor; local bgColor = Settings.BgColor; local healthColor = Settings.HealthColor; @@ -24,83 +24,34 @@ local healpredColor = Settings.HealpredColor; local healabsorbColor = Settings.HealabsorbColor; local width, height = Settings.Width, Settings.Height; -- placeholders with visible values when error happens -local positions = {}; local anchorX, anchorY = 10, 10; local attributes = {}; local CFrame = CreateFrame("Frame", "OmaRFFrame", UIParent); local inheritedFrames = "SecureUnitButtonTemplate,SecureHandlerStateTemplate"; +local class = nil; local party = {}; local raid = {}; local M = {}; OmaRaidFrame = M; -local function setupIndicators(frame) - frame.inds = CreateFrame("Frame", nil, frame); - frame.inds:SetAllPoints(); - frame.inds:Hide(); - for _, pos in pairs(positions) do - frame.inds[pos] = frame.inds:CreateTexture(nil, "OVERLAY"); - frame.inds[pos]:SetPoint(pos, frame.inds, pos); - frame.inds[pos]:SetWidth(indSize); - frame.inds[pos]:SetHeight(indSize); - frame.inds[pos]:SetTexture("Interface\\AddOns\\OmaRF\\images\\rhomb"); - frame.inds[pos]:SetVertexColor(1, 0, 0); - frame.inds[pos]:Hide(); - frame.inds[pos].text = frame.inds:CreateFontString(nil, "OVERLAY", "GameFontHighlight"); - frame.inds[pos].text:SetPoint("BOTTOMRIGHT", frame.inds[pos], "BOTTOMRIGHT"); - frame.inds[pos].text:Hide(); - end - frame.major = CreateFrame("Frame", nil, frame); - frame.major:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -indSize + 4); - frame.major:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT"); - for i = 1,3 do - frame.major[i] = frame.major:CreateTexture(nil, "OVERLAY"); - if i == 1 then - frame.major[i]:SetPoint("TOPLEFT", frame.major, "TOPLEFT"); - else - frame.major[i]:SetPoint("TOPLEFT", frame.major[i-1], "TOPRIGHT"); - end - frame.major[i]:SetWidth(indSize*2); - frame.major[i]:SetHeight(indSize*2); - frame.major[i]:Hide(); - frame.major[i].text = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight"); - frame.major[i].text:SetPoint("BOTTOMRIGHT", frame.major[i], "BOTTOMRIGHT"); - frame.major[i].text:Hide(); - frame.major[i].stack = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight"); - frame.major[i].stack:SetPoint("TOPLEFT", frame.major[i], "TOPLEFT"); - frame.major[i].stack:Hide(); - end -end - -local function unitUpdate(self, elapsed) +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(self.displayed); + local inRange, checked = UnitInRange(frame.displayed); if checked and not inRange then - self:SetAlpha(0.55); + frame:SetAlpha(0.55); else - self:SetAlpha(1); + frame:SetAlpha(1); end end local function frameShow(frame) - frame:RegisterEvent("PARTY_MEMBER_ENABLE"); - frame:RegisterEvent("PARTY_MEMBER_DISABLE"); - frame:RegisterEvent("UNIT_ENTERED_VEHICLE"); - frame:RegisterEvent("UNIT_EXITED_VEHICLE"); - frame:RegisterEvent("UNIT_PET"); - frame:RegisterEvent("PLAYER_ROLES_ASSIGNED"); - frame:RegisterEvent("GROUP_ROSTER_UPDATE"); - frame:RegisterEvent("PLAYER_ENTERING_WORLD"); - frame:RegisterEvent("READY_CHECK"); - frame:RegisterEvent("READY_CHECK_CONFIRM"); - frame:RegisterEvent("READY_CHECK_FINISHED"); - if frame.unit == "focus" then frame:RegisterEvent("PLAYER_FOCUS_CHANGED") end registerEvents(frame); + registerUnitEvents(frame); frame:SetScript("OnUpdate", unitUpdate); - unitEvent(frame, "UPDATE_ALL_BARS", frame.displayed); + unitEvent(frame, "UPDATE_ALL_BARS"); end local function frameHide(frame) @@ -108,12 +59,12 @@ local function frameHide(frame) frame:SetScript("OnUpdate", nil); end -local function showTooltip(frame) - GameTooltip_SetDefaultAnchor(GameTooltip, frame); - GameTooltip:SetUnit(frame:GetAttribute("unit")); +local function showTooltip(secure) + GameTooltip_SetDefaultAnchor(GameTooltip, secure); + GameTooltip:SetUnit(secure:GetAttribute("unit")); end -local function hideTooltip(frame) +local function hideTooltip(secure) GameTooltip:FadeOut(); end @@ -124,11 +75,8 @@ local function setupFrame(frame, secure, unit) frame.displayed = unit; -- hide frame to get initial frameShow call frame:Hide(); - if unit == "player" then - frame.vehicle = "vehicle"; - else - frame.vehicle = unit.."pet"; - end + if unit == "player" then frame.vehicle = "vehicle" + else frame.vehicle = unit.."pet" end -- create visuals secure:SetWidth(width+2); secure:SetHeight(height+2); @@ -145,16 +93,13 @@ local function setupFrame(frame, secure, unit) frame.health = frame:CreateTexture(nil, "BORDER"); frame.health:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill"); frame.health:SetPoint("TOPLEFT", frame.background, "TOPLEFT"); - frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT", 0, 2); + frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT"); frame.health:SetVertexColor(unpack(healthColor)); - frame.health:SetWidth(width); - frame.health.max = UnitHealthMax(unit); 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:SetWidth(width); - frame.mana.max = UnitPowerMax(unit); + frame.mana:Hide(); frame.shield = frame:CreateTexture(nil, "BORDER"); frame.shield:SetPoint("TOPLEFT", frame.health, "TOPRIGHT"); frame.shield:SetPoint("BOTTOMLEFT", frame.health, "BOTTOMRIGHT"); @@ -178,12 +123,11 @@ local function setupFrame(frame, secure, unit) frame.role = frame:CreateTexture(nil, "ARTWORK"); frame.role:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT", -2, 2); frame.role:SetPoint("TOPLEFT", frame.background, "BOTTOMRIGHT", -14, 14); - frame.role:SetTexCoord(0.75, 1, 0, 1); frame.role:SetTexture("Interface\\LFGFRAME\\LFGROLE"); frame.role:Hide(); frame.overlay = frame:CreateTexture(nil, "ARTWORK", nil, 1); frame.overlay:SetPoint("TOPLEFT", frame.background, "TOPLEFT"); - frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT", 0, 2); + frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT"); frame.overlay:SetColorTexture(1, 1, 1); frame.overlay:Hide(); frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight"); @@ -198,18 +142,21 @@ local function setupFrame(frame, secure, unit) 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, 12); - frame.ready:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMLEFT", 12, 0); + frame.ready:SetPoint("TOPLEFT", frame.background, "BOTTOMLEFT", 0, 14); + frame.ready:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMLEFT", 14, 0); frame.ready:Hide(); + frame.targeticon = frame:CreateTexture(nil, "OVERLAY"); + frame.targeticon:SetPoint("CENTER", frame.background, "TOP"); + frame.targeticon:SetWidth(12); + frame.targeticon:SetHeight(12); + frame.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons"); + frame.targeticon:Hide(); -- set up indicators - setupIndicators(frame); + setupIndicators(frame, class); -- set scripts frame:SetScript("OnShow", frameShow); frame:SetScript("OnHide", frameHide); frame:SetScript("OnEvent", unitEvent); - -- let other addons hook these to anchor tooltip elsewhere - GameTooltip = _G["GameTooltip"]; - GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"]; secure:SetScript("OnEnter", showTooltip); secure:SetScript("OnLeave", hideTooltip); -- set attributes @@ -322,17 +269,16 @@ local function initializeFocus(parent) secure:SetAttribute("_onstate-vehicleui", vehicletoggle); end -local function loadCharSettings() +local function initialize() + -- let other addons hook these to anchor tooltip elsewhere + GameTooltip = _G["GameTooltip"]; + GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"]; + _, class = UnitClass("player"); anchorX, anchorY = Settings.Character.AnchorX, Settings.Character.AnchorY; attributes = Settings.Character.Clickheal; - positions = Settings.Character.Positions; -end - -local function initialize() - loadCharSettings(); CFrame:SetPoint("CENTER", nil, "CENTER", anchorX, anchorY); CFrame:SetHeight((height+2)*8); - CFrame:SetWidth((width+2)*5+1); + CFrame:SetWidth((width+2)*5); initializeParty(CFrame); initializeRaid(CFrame); initializeFocus(CFrame); @@ -389,7 +335,6 @@ CFrame:RegisterEvent("PLAYER_REGEN_ENABLED"); CFrame:SetScript("OnEvent", function(self, event, addon) if event == "PLAYER_LOGIN" then OmaRFLoadChar(); - OmaRFIndicators.LoadChar(); hideBlizzardRaid(); initialize(); elseif event == "PLAYER_REGEN_ENABLED" then