X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/ac5ca8a9cb3cd9c2a6f5850ba5774bd81307fb51..3e6730c2c495d9016dde6cbb76c2bd6f86b05cbe:/OmaUF/UnitFrames.lua diff --git a/OmaUF/UnitFrames.lua b/OmaUF/UnitFrames.lua index d5ec0b7..b0738ee 100644 --- a/OmaUF/UnitFrames.lua +++ b/OmaUF/UnitFrames.lua @@ -1,259 +1,88 @@ --- 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 registerEvents = OmaUFEvents.RegisterEvents; -local unitEvent = OmaUFEvents.UnitEvent; - -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 pairs = pairs; +local InCombatLockdown = InCombatLockdown; 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 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(); +local function initialize() + local player = M.InitializePlayer(UIParent); + M.InitializePet(player); + local target = M.InitializeTarget(UIParent); + --M.InitializeToT(target); -- might not do this + M.InitializeBoss(UIParent); + -- TODO boss frames, (arena frames) 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); +local hidden = false; +local function hideBlizzardFrames() + if hidden then return end + hidden = true; + + local frames = {PlayerFrame, TargetFrame, TargetFrameToT, PetFrame, + PlayerFrameAlternateManaBar, ComboFrame, PriestBarFrame, RuneFrame, + WarlockPowerFrame, MonkHarmonyBarFrame, PaladinPowerBarFrame, + MageArcaneChargesFrame}; + 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 - -- 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); + for _, frame in pairs(frames) do + frame: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 -]=] - -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", -320, -100); - secure:SetWidth(width+2); - secure:SetHeight(height+2); - frame:SetPoint("CENTER", parent, "CENTER", -320, -100); - 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", 320, -100); - secure:SetWidth(width+2); - secure:SetHeight(height+2); - frame:SetPoint("CENTER", parent, "CENTER", 320, -100); - frame:SetWidth(width+2); - frame:SetHeight(height+2); - setupFrame(frame, secure, unit); - -- TODO target frame buffs/debuffs - RegisterUnitWatch(frame); - RegisterUnitWatch(secure); - RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no"); - secure:SetAttribute("_onstate-vehicleui", vehicletoggle); -end -local function initialize() - initializePlayer(UIParent); - initializeTarget(UIParent); + -- 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"); + PlayerFrame:RegisterEvent("UNIT_ENTERED_VEHICLE"); + PlayerFrame:RegisterEvent("UNIT_EXITING_VEHICLE"); + PlayerFrame:RegisterEvent("UNIT_EXITED_VEHICLE"); + PlayerFrame:SetMovable(true); + PlayerFrame:SetUserPlaced(true); + PlayerFrame:SetDontSavePosition(true); end -local function loadCharSettings() - width, height = Settings.Character.Width, Settings.Character.Height; - anchorX, anchorY = Settings.Character.AnchorX, Settings.Character.AnchorY; - attributes = Settings.Character.Clickheal; +-- 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("ADDON_LOADED"); 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 - initialize(); - elseif event == "ADDON_LOADED" then OmaUFLoadChar(); - loadCharSettings(); - OmaUFEvents.LoadChar(); + hideBlizzardFrames(); + initialize(); + elseif event == "ADDON_LOADED" and addon == "Blizzard_ArenaUI" then + hideArenaFrames(); end end);