X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/6e06bfb151855f946ceb1885d310598e612fa128..a88a019ffe8be4ec72a568f7ebf47c25aa08b3ba:/OmaUF/UnitFrames.lua diff --git a/OmaUF/UnitFrames.lua b/OmaUF/UnitFrames.lua index d2e5fcc..6f40e0d 100644 --- a/OmaUF/UnitFrames.lua +++ b/OmaUF/UnitFrames.lua @@ -1,252 +1,23 @@ --- RaidFrame.lua +-- UnitFrames.lua local _; -local unpack, pairs = unpack, pairs; -local format = string.format; -local UnitHealthMax, UnitPowerMax = UnitHealthMax, UnitPowerMax; -local CreateFrame, RegisterStateDriver, RegisterUnitWatch = CreateFrame, RegisterStateDriver, RegisterUnitWatch; -local STANDARD_TEXT_FONT = STANDARD_TEXT_FONT; -local GameTooltip = nil; -local GameTooltip_SetDefaultAnchor = nil; +local pairs = pairs; +local InCombatLockdown = InCombatLockdown; -local registerEvents = OmaUFEvents.RegisterEvents; -local unitEvent = OmaUFEvents.UnitEvent; -local createAuraFrame = OmaUFAuras.CreateAuraFrame; - -local Settings = OmaUFSettings; -local indSize = Settings.IndSize; -local baseColor = Settings.BaseColor; -local bgColor = Settings.BgColor; -local healthColor = Settings.HealthColor; -local shieldColor = Settings.ShieldColor; -local shieldhlColor = Settings.ShieldhlColor; -local healpredColor = Settings.HealpredColor; -local healabsorbColor = Settings.HealabsorbColor; --- placeholders with visible values when error happens -local width, height = 10, 10; -local anchorX, anchorY = 10, 10; -local attributes = {}; - -local UnitFrames = CreateFrame("Frame", "OmaUnitFrames"); -local inheritedFrames = "SecureUnitButtonTemplate,SecureHandlerStateTemplate"; - -local events = { - ["player"] = { - "UNIT_ENTERED_VEHICLE", - "UNIT_EXITED_VEHICLE", - "UNIT_PET", - "PLAYER_ROLES_ASSIGNED", - "PLAYER_ENTERING_WORLD", - "PLAYER_LEVEL_UP", - "PLAYER_REGEN_DISABLED", - "PLAYER_REGEN_ENABLED", - "PLAYER_UPDATE_RESTING", - }, - ["target"] = { - "UNIT_ENTERED_VEHICLE", - "UNIT_EXITED_VEHICLE", - "UNIT_PET", - "UNIT_LEVEL", - "GROUP_ROSTER_UPDATE", - "PLAYER_ROLES_ASSIGNED", - "PLAYER_ENTERING_WORLD", - "PLAYER_TARGET_CHANGED", - }, -}; +local UnitFrames = CreateFrame("Frame", "OmaUnitFrames", UIParent); local M = {}; OmaUnitFrames = M; -local function frameShow(frame) - for _, ev in pairs(events[frame.unit]) do - frame:RegisterEvent(ev); - end - registerEvents(frame); - unitEvent(frame, "UPDATE_ALL_BARS"); -end - -local function frameHide(frame) - frame:UnregisterAllEvents(); -end - -local function showTooltip(frame) - GameTooltip_SetDefaultAnchor(GameTooltip, PlayerFrame); - GameTooltip:SetUnit(frame:GetAttribute("unit")); -end - -local function hideTooltip(frame) - GameTooltip:FadeOut(); -end - -local function setupFrame(frame, secure, unit) - secure:SetAttribute("unit", unit); - frame:SetAttribute("unit", unit); - frame.unit = 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 - -- create visuals - frame.base = frame:CreateTexture(nil, "BACKGROUND"); - frame.base:SetAllPoints(); - frame.base:SetColorTexture(1, 1, 1); - frame.base:SetVertexColor(unpack(baseColor)); - frame.healthback = frame:CreateTexture(nil, "BACKGROUND", nil, 1); - frame.healthback:SetPoint("TOPLEFT", frame, "TOPLEFT", 1, -1); - frame.healthback:SetPoint("BOTTOMRIGHT", frame, "RIGHT", -1, -5); - frame.healthback:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill"); - frame.healthback:SetVertexColor(unpack(bgColor)); - frame.health = frame:CreateTexture(nil, "BORDER"); - frame.health:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill"); - frame.health:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT"); - frame.health:SetPoint("BOTTOMLEFT", frame.healthback, "BOTTOMLEFT"); - frame.health:SetVertexColor(unpack(healthColor)); - frame.health:SetWidth(width); - frame.health.max = UnitHealthMax(unit); - frame.healthText = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlightLarge"); - frame.healthText:SetPoint("RIGHT", frame.healthback, "RIGHT", -2, 0); - frame.healthText:Hide(); - frame.manaback = frame:CreateTexture(nil, "BACKGROUND", nil, 1); - frame.manaback:SetPoint("TOPLEFT", frame, "LEFT", 1, -5); - frame.manaback:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -1, 1); - frame.manaback:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill"); - frame.manaback:SetVertexColor(unpack(bgColor)); - frame.mana = frame:CreateTexture(nil, "BORDER"); - frame.mana:SetPoint("TOPLEFT", frame.manaback, "TOPLEFT"); - frame.mana:SetPoint("BOTTOMLEFT", frame.manaback, "BOTTOMLEFT"); - frame.mana:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill"); - frame.mana:SetWidth(width); - frame.mana.max = UnitPowerMax(unit); - frame.manaText = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight"); - frame.manaText:SetPoint("RIGHT", frame.manaback, "RIGHT", -2, 0); - frame.manaText:Hide(); - frame.shield = frame:CreateTexture(nil, "BORDER"); - frame.shield:SetPoint("TOPLEFT", frame.health, "TOPRIGHT"); - frame.shield:SetPoint("BOTTOMLEFT", frame.health, "BOTTOMRIGHT"); - frame.shield:SetTexture("Interface\\RaidFrame\\Shield-Fill"); - frame.shield:SetVertexColor(unpack(shieldColor)); - frame.shield:Hide(); - frame.shieldhl = frame:CreateTexture(nil, "ARTWORK"); - frame.shieldhl:SetPoint("TOPLEFT", frame.healthback, "TOPRIGHT", -1, 0); - frame.shieldhl:SetPoint("BOTTOMRIGHT", frame.healthback, "BOTTOMRIGHT", 1, 0); - frame.shieldhl:SetColorTexture(unpack(shieldhlColor)); - frame.shieldhl:Hide(); - frame.healpred = frame:CreateTexture(nil, "ARTWORK"); - frame.healpred:SetPoint("TOPLEFT", frame.health, "TOPRIGHT"); - frame.healpred:SetPoint("BOTTOMLEFT", frame.health, "BOTTOMRIGHT"); - frame.healpred:SetColorTexture(unpack(healpredColor)); - frame.healpred:Hide(); - frame.healabsorb = frame:CreateTexture(nil, "ARTWORK"); - frame.healabsorb:SetPoint("TOPRIGHT", frame.health, "TOPRIGHT"); - frame.healabsorb:SetPoint("BOTTOMRIGHT", frame.health, "BOTTOMRIGHT"); - frame.healabsorb:SetColorTexture(unpack(healabsorbColor)); - frame.healabsorb:Hide(); - frame.overlay = frame:CreateTexture(nil, "ARTWORK", nil, 1); - frame.overlay:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT"); - frame.overlay:SetPoint("BOTTOMRIGHT", frame.healthback, "BOTTOMRIGHT"); - frame.overlay:SetColorTexture(1, 1, 1); - frame.overlay:Hide(); - frame.role = frame:CreateTexture(nil, "OVERLAY"); - frame.role:SetPoint("TOPLEFT", frame.healthback, "TOPRIGHT", -8, 8); - frame.role:SetPoint("BOTTOMRIGHT", frame.healthback, "TOPRIGHT", 8, -8); - frame.role:SetTexture("Interface\\LFGFRAME\\UI-LFG-ICON-PORTRAITROLES"); - frame.role:Hide(); - frame.status = frame:CreateTexture(nil, "OVERLAY"); - frame.status:SetPoint("TOPLEFT", frame.manaback, "BOTTOMLEFT", -8, 8); - frame.status:SetPoint("BOTTOMRIGHT", frame.manaback, "BOTTOMLEFT", 8, -8); - frame.status:SetTexture("Interface\\CHARACTERFRAME\\UI-StateIcon"); - frame.status:Hide(); - frame.pvp = frame:CreateTexture(nil, "OVERLAY"); - frame.pvp:SetPoint("TOPLEFT", frame.manaback, "BOTTOMLEFT", 8, 6); - frame.pvp:SetPoint("BOTTOMRIGHT", frame.manaback, "BOTTOMLEFT", 32, -18); - frame.pvp:SetTexture("Interface\\TARGETINGFRAME\\UI-PVP-Horde"); - frame.pvp:Hide(); - frame.leader = frame:CreateTexture(nil, "OVERLAY"); - frame.leader:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT", -6, 6); - frame.leader:SetPoint("BOTTOMRIGHT", frame.healthback, "TOPLEFT", 6, -6); - frame.leader:Hide(); - frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge"); - frame.name:SetPoint("LEFT", frame.healthback, "LEFT", 2, 1); - frame.level = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight"); - frame.level:SetPoint("LEFT", frame.manaback, "LEFT", 2, 1); - -- 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 - secure:RegisterForClicks("AnyDown"); - for attr, val in pairs(attributes) do - secure:SetAttribute(attr, val); - end - -- rest give target and menu - secure:SetAttribute("*type1", "target"); - secure:SetAttribute("*type2", "togglemenu"); -end - --- vehicle toggle from Shadowed Unit Frames -local vehicletoggle = [=[ - local unit = self:GetAttribute("unit"); - if unit and newstate == "vehicle" and not UnitTargetsVehicleInRaidUI(unit) then - self:SetAttribute("toggleForVehicle", false); - else - self:SetAttribute("toggleForVehicle", true); - end -]=] - -local function initializePlayer(parent) - local secure = CreateFrame("Button", "OmaPlayerSecure", parent, inheritedFrames); - local frame = CreateFrame("Frame", "OmaPlayer", parent); - local unit = "player"; - secure:SetPoint("CENTER", parent, "CENTER", -300, -175); - secure:SetWidth(width+2); - secure:SetHeight(height+2); - frame:SetPoint("CENTER", parent, "CENTER", -300, -175); - frame:SetWidth(width+2); - frame:SetHeight(height+2); - setupFrame(frame, secure, unit); - RegisterUnitWatch(frame); - RegisterUnitWatch(secure); - RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no"); - secure:SetAttribute("_onstate-vehicleui", vehicletoggle); -end - -local function initializeTarget(parent) - local secure = CreateFrame("Button", "OmaTargetSecure", parent, inheritedFrames); - local frame = CreateFrame("Frame", "OmaTarget", parent); - local unit = "target"; - secure:SetPoint("CENTER", parent, "CENTER", 300, -175); - secure:SetWidth(width+2); - secure:SetHeight(height+2); - frame:SetPoint("CENTER", parent, "CENTER", 300, -175); - frame:SetWidth(width+2); - frame:SetHeight(height+2); - setupFrame(frame, secure, unit); - createAuraFrame(frame, unit); - RegisterUnitWatch(frame); - RegisterUnitWatch(secure); - RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no"); - secure:SetAttribute("_onstate-vehicleui", vehicletoggle); -end - -local function loadCharSettings() - width, height = Settings.Character.Width, Settings.Character.Height; - anchorX, anchorY = Settings.Character.AnchorX, Settings.Character.AnchorY; - attributes = Settings.Character.Clickheal; -end - local function initialize() - loadCharSettings(); - initializePlayer(UIParent); - initializeTarget(UIParent); - -- TODO boss frames, pet frame, (arena frames) + UnitFrames:SetFrameStrata("LOW"); + UnitFrames:SetPoint("CENTER"); + UnitFrames:SetWidth(1); + UnitFrames:SetHeight(1); + local player = M.InitializePlayer(UnitFrames); + M.InitializePet(player); + local target = M.InitializeTarget(UnitFrames); + --M.InitializeToT(target); -- might not do this + M.InitializeBoss(UnitFrames); end local hidden = false; @@ -254,23 +25,24 @@ local function hideBlizzardFrames() if hidden then return end hidden = true; - for _, frame in pairs({PlayerFrame, TargetFrame, TargetFrameToT}) do + local frames = {PlayerFrame, TargetFrame, TargetFrameToT, PetFrame, + PlayerFrameAlternateManaBar, ComboFrame, PriestBarFrame, RuneFrame, + WarlockPowerFrame, MonkHarmonyBarFrame, PaladinPowerBarFrame, + MageArcaneChargesFrame, CastingBarFrame, PetCastingBarFrame}; + for i = 1,MAX_BOSS_FRAMES do + table.insert(frames, _G["Boss"..i.."TargetFrame"]); + table.insert(frames, _G["Boss"..i.."TargetFrameHealthBar"]); + table.insert(frames, _G["Boss"..i.."TargetFrameManaBar"]); + end + for _, frame in pairs(frames) do frame:UnregisterAllEvents(); - frame.healthbar:UnregisterAllEvents(); - frame.manabar:UnregisterAllEvents(); + if frame.healthbar then frame.healthbar:UnregisterAllEvents() end + if frame.manabar then frame.manabar:UnregisterAllEvents() end if frame.spellbar then frame.spellbar:UnregisterAllEvents() end if frame.powerBarAlt then frame.powerBarAlt:UnregisterAllEvents() end frame:Hide(); end - -- TODO create frames for class powers, currently using Simple Holy Power - for _, frame in pairs({PlayerFrameAlternateManaBar, ComboFrame, - PriestBarFrame, RuneFrame, WarlockPowerFrame, MonkHarmonyBarFrame, - PaladinPowerBarFrame, MageArcaneChargesFrame}) do - frame:UnregisterAllEvents(); - frame:Hide(); - end - -- from ShadowedUF, re-register vehicle events for default auras PlayerFrame:RegisterEvent("PLAYER_ENTERING_WORLD"); PlayerFrame:RegisterEvent("UNIT_ENTERING_VEHICLE"); @@ -282,12 +54,30 @@ local function hideBlizzardFrames() PlayerFrame:SetDontSavePosition(true); end +-- untested, not playing arena, from ShadowedUF +local hiddenFrame = CreateFrame("Frame"); +hiddenFrame:Hide(); +local arenaHidden = false; +local function hideArenaFrames() + -- not run if /reload happens in combat, may cause problems? + if not arenaHidden and not InCombatLockdown() then + arenaHidden = true; + ArenaEnemyFrames:UnregisterAllEvents(); + ArenaEnemyFrames:SetParent(hiddenFrame); + ArenaPrepFrames:UnregisterAllEvents(); + ArenaPrepFrames:SetParent(hiddenFrame); + SetCVar("showArenaEnemyFrames", 0, "SHOW_ARENA_ENEMY_FRAMES_TEXT"); + end +end + UnitFrames:RegisterEvent("PLAYER_LOGIN"); -UnitFrames:SetScript("OnEvent", function(self, event) +UnitFrames:RegisterEvent("ADDON_LOADED"); +UnitFrames:SetScript("OnEvent", function(self, event, addon) if event == "PLAYER_LOGIN" then OmaUFLoadChar(); - OmaUFEvents.LoadChar(); hideBlizzardFrames(); initialize(); + elseif event == "ADDON_LOADED" and addon == "Blizzard_ArenaUI" then + hideArenaFrames(); end end);