f477e371b172c575bd57ed03aff1c907afd31b72
[wowui.git] / OmaUF / UnitFrames.lua
1 -- UnitFrames.lua
2 local _;
3 local pairs = pairs;
4 local InCombatLockdown = InCombatLockdown;
5 local CTimerAfter = C_Timer.After;
6
7 local updateAuraTooltips = OmaUFAuras.UpdateAuraTooltips;
8
9 local UnitFrames = CreateFrame("Frame", "OmaUnitFrames", UIParent);
10
11 local M = {};
12 OmaUnitFrames = M;
13
14 local function initialize()
15     UnitFrames:SetFrameStrata("LOW");
16     UnitFrames:SetPoint("CENTER");
17     UnitFrames:SetWidth(1);
18     UnitFrames:SetHeight(1);
19     local player = M.InitializePlayer(UnitFrames);
20     M.InitializePet(player);
21     local target = M.InitializeTarget(UnitFrames);
22     --M.InitializeToT(target); -- might not do this
23     M.InitializeBoss(UnitFrames);
24 end
25
26 local hidden = false;
27 local function hideBlizzardFrames()
28     if hidden then return end
29     hidden = true;
30
31     local frames = {PlayerFrame, TargetFrame, TargetFrameToT, PetFrame,
32         PlayerFrameAlternateManaBar, ComboFrame, PriestBarFrame, RuneFrame,
33         WarlockPowerFrame, MonkHarmonyBarFrame, PaladinPowerBarFrame,
34         MageArcaneChargesFrame, CastingBarFrame, PetCastingBarFrame};
35     for i = 1,MAX_BOSS_FRAMES do
36         --table.insert(frames, _G["Boss"..i.."TargetFrame"]);
37         --table.insert(frames, _G["Boss"..i.."TargetFrameHealthBar"]);
38         --table.insert(frames, _G["Boss"..i.."TargetFrameManaBar"]);
39     end
40     for _, frame in pairs(frames) do
41         frame:UnregisterAllEvents();
42         if frame.healthbar then frame.healthbar:UnregisterAllEvents() end
43         if frame.manabar then frame.manabar:UnregisterAllEvents() end
44         if frame.spellbar then frame.spellbar:UnregisterAllEvents() end
45         if frame.powerBarAlt then frame.powerBarAlt:UnregisterAllEvents() end
46         frame:Hide();
47     end
48
49     -- from ShadowedUF, re-register vehicle events for default auras
50     PlayerFrame:RegisterEvent("PLAYER_ENTERING_WORLD");
51     PlayerFrame:RegisterEvent("UNIT_ENTERING_VEHICLE");
52     PlayerFrame:RegisterEvent("UNIT_ENTERED_VEHICLE");
53     PlayerFrame:RegisterEvent("UNIT_EXITING_VEHICLE");
54     PlayerFrame:RegisterEvent("UNIT_EXITED_VEHICLE");
55     PlayerFrame:SetMovable(true);
56     PlayerFrame:SetUserPlaced(true);
57     PlayerFrame:SetDontSavePosition(true);
58 end
59
60 -- untested, not playing arena, from ShadowedUF
61 local hiddenFrame = CreateFrame("Frame");
62 hiddenFrame:Hide();
63 local arenaHidden = false;
64 local function hideArenaFrames()
65     -- not run if /reload happens in combat, may cause problems?
66     if not arenaHidden and not InCombatLockdown() then
67         arenaHidden = true;
68         ArenaEnemyFrames:UnregisterAllEvents();
69         ArenaEnemyFrames:SetParent(hiddenFrame);
70         ArenaPrepFrames:UnregisterAllEvents();
71         ArenaPrepFrames:SetParent(hiddenFrame);
72         SetCVar("showArenaEnemyFrames", 0, "SHOW_ARENA_ENEMY_FRAMES_TEXT");
73     end
74 end
75
76 local function updateTooltipFuncs()
77     -- let MoveAnything hook these to anchor tooltip elsewhere
78     M.UpdatePlayerTooltips();
79     M.UpdatePetTooltips();
80     M.UpdateTargetTooltips();
81     M.UpdateBossTooltips();
82     updateAuraTooltips();
83 end
84
85 UnitFrames:RegisterEvent("PLAYER_LOGIN");
86 UnitFrames:RegisterEvent("PLAYER_ENTERING_WORLD");
87 UnitFrames:RegisterEvent("ADDON_LOADED");
88 UnitFrames:SetScript("OnEvent", function(self, event, addon)
89     if event == "PLAYER_ENTERING_WORLD" then
90         CTimerAfter(0.01, updateTooltipFuncs);
91     elseif event == "ADDON_LOADED" and addon == "Blizzard_ArenaUI" then
92         hideArenaFrames();
93     elseif event == "PLAYER_LOGIN" then
94         OmaUFLoadChar();
95         hideBlizzardFrames();
96         initialize();
97     end
98 end);