end
local function showTooltip(frame)
- -- tooltip handling from TargetFrame.xml
+ -- tooltip handling from FrameXML/TargetFrame.xml
GameTooltip:SetOwner(frame, "ANCHOR_BOTTOMRIGHT", 15, -25);
GameTooltip:SetUnitAura(frame.unit, frame.index, frame.filter);
frame:SetScript("OnUpdate", updateTooltip);
aura.cd:SetReverse(true);
aura.cd:SetHideCountdownNumbers(true);
aura.cd:SetAllPoints();
- aura.unit = unit;
+ aura.unit = unit; -- TODO add aura.stack text
aura:SetScript("OnEnter", showTooltip);
aura:SetScript("OnLeave", hideTooltip);
aura:Hide();
--- /dev/null
+-- BossFrames.lua
+local _;
+local unpack, pairs = unpack, pairs;
+local format = string.format;
+local GameTooltip = nil;
+local GameTooltip_SetDefaultAnchor = nil;
+
+local registerUnitEvents = OmaUFEvents.RegisterUnitEvents;
+local unitEvent = OmaUFEvents.UnitEvent;
+
+local Settings = OmaUFSettings;
+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;
+local width, height = Settings.Boss.Width, Settings.Boss.Height;
+local anchorX, anchorY = Settings.Boss.AnchorX, Settings.Boss.AnchorY;
+-- placeholders with visible values when error happens
+local attributes = {};
+
+local inheritedFrames = "SecureUnitButtonTemplate,SecureHandlerStateTemplate";
+
+local function frameShow(frame)
+ frame:RegisterEvent("PLAYER_ENTERING_WORLD");
+ frame:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT");
+ frame:RegisterEvent("UNIT_TARGETABLE_CHANGED");
+ frame:RegisterUnitEvent("UNIT_LEVEL", frame.unit);
+ registerUnitEvents(frame);
+ unitEvent(frame, "UPDATE_ALL_BARS");
+end
+
+local function frameHide(frame)
+ frame:UnregisterAllEvents();
+end
+
+local function showTooltip(secure)
+ GameTooltip_SetDefaultAnchor(GameTooltip, secure);
+ GameTooltip:SetUnit(secure:GetAttribute("unit"));
+end
+
+local function hideTooltip(secure)
+ GameTooltip:FadeOut();
+end
+
+local function createFrame(framename, securename, parent, unit, anchorX, anchorY)
+ local secure = CreateFrame("Button", securename, parent, inheritedFrames);
+ local frame = CreateFrame("Frame", framename, parent);
+ secure:SetPoint("CENTER", parent, "CENTER", anchorX, anchorY);
+ secure:SetAttribute("unit", unit);
+ frame:SetPoint("CENTER", parent, "CENTER", anchorX, anchorY);
+ frame:SetAttribute("unit", unit);
+ frame.unit = unit;
+ frame.displayed = unit;
+ -- hide frame to get initial frameShow call
+ frame:Hide();
+ -- create visuals
+ secure:SetWidth(width+2);
+ secure:SetHeight(height+2);
+ frame:SetWidth(width+2);
+ frame:SetHeight(height+2);
+ frame.width = width;
+ 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:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT");
+ frame.health:SetPoint("BOTTOMLEFT", frame.healthback, "BOTTOMLEFT");
+ frame.health:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill");
+ frame.health:SetVertexColor(unpack(healthColor));
+ frame.healthText = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight");
+ frame.healthText:SetPoint("RIGHT", frame.healthback, "RIGHT", -2, 0);
+ frame.healthText.percent = true;
+ 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.manaText = frame:CreateFontString(nil, "ARTWORK", "GameFontWhiteTiny");
+ 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.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.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+ frame.name:SetPoint("LEFT", frame.healthback, "LEFT", 2, 1);
+ frame.name.count = 10;
+ frame.level = frame:CreateFontString(nil, "OVERLAY", "GameFontWhiteTiny");
+ frame.level:SetPoint("LEFT", frame.manaback, "LEFT", 2, 1);
+ frame.targeticon = frame:CreateTexture(nil, "OVERLAY");
+ frame.targeticon:SetPoint("CENTER", frame.healthback, "TOP");
+ frame.targeticon:SetWidth(16);
+ frame.targeticon:SetHeight(16);
+ frame.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons");
+ frame.targeticon:Hide();
+ -- set scripts
+ frame:SetScript("OnShow", frameShow);
+ frame:SetScript("OnHide", frameHide);
+ frame:SetScript("OnEvent", unitEvent);
+ secure:SetScript("OnEnter", showTooltip);
+ secure:SetScript("OnLeave", hideTooltip);
+ -- set attributes
+ -- TODO other set of click cast on boss frames possibly
+ 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");
+ secure:SetAttribute("toggleForVehicle", false);
+ RegisterUnitWatch(frame);
+ RegisterUnitWatch(secure);
+end
+
+function OmaUnitFrames.InitializeBoss(parent)
+ GameTooltip = _G["GameTooltip"];
+ GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"];
+ attributes = Settings.Character.Clickheal;
+
+ createFrame("OmaBoss1", "OmaBossSecure1", parent, "boss1", anchorX, anchorY);
+ for i = 2,MAX_BOSS_FRAMES do
+ createFrame("OmaBoss"..i, "OmaBossSecure"..i, _G["OmaBoss"..(i-1)], "boss"..i, 0, -height-15);
+ end
+ -- Arena frames are in the same spot
+ createFrame("OmaArena1", "OmaArenaSecure1", parent, "arena1", anchorX, anchorY);
+ -- MAX_ARENA_ENEMIES from AddOns/Blizzard_ArenaUI/Blizzard_ArenaUI.lua not available
+ -- as the addon is not loaded yet, update manually if it changes
+ for i = 2,5 do
+ createFrame("OmaArena"..i, "OmaArenaSecure"..i, _G["OmaArena"..(i-1)], "arena"..i, 0, -height-15);
+ end
+end
local HasLFGRestrictions = HasLFGRestrictions;
local UnitPlayerControlled, UnitIsPlayer = UnitPlayerControlled, UnitIsPlayer;
local UnitIsTapDenied, UnitSelectionColor = UnitIsTapDenied, UnitSelectionColor;
+local GetRaidTargetIndex, SetRaidTargetIconTexture = GetRaidTargetIndex, SetRaidTargetIconTexture;
local RAID_CLASS_COLORS = RAID_CLASS_COLORS;
local updateAuraFrames = OmaUFAuras.UpdateAuras;
local M = {};
OmaUFEvents = M;
function M.RegisterUnitEvents(frame)
- -- events are taken from FrameXML/CompactUnitFrame.lua
- -- TODO raid marker support,
- -- player flags support (/afk, /dnd)
+ -- events are taken from FrameXML/CompactUnitFrame.lua and FrameXML/TargetFrame.lua
+ -- TODO player flags support (/afk, /dnd)
+ frame:RegisterEvent("RAID_TARGET_UPDATE"); -- have to register all and just check
local displayed = frame.unit ~= frame.displayed and frame.displayed or nil;
frame:RegisterUnitEvent("UNIT_HEALTH", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_MAXHEALTH", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit, displayed);
+ if frame.mana then
+ frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit, displayed);
+ frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit, displayed);
+ end
+ if frame.healpred then
+ frame:RegisterUnitEvent("UNIT_HEAL_PREDICTION", frame.unit, displayed);
+ end
+ if frame.shield then
+ frame:RegisterUnitEvent("UNIT_ABSORB_AMOUNT_CHANGED", frame.unit, displayed);
+ end
+ if frame.healabsorb then
+ frame:RegisterUnitEvent("UNIT_HEAL_ABSORB_AMOUNT_CHANGED", frame.unit, displayed);
+ end
+ if frame.auras then
+ frame:RegisterUnitEvent("UNIT_AURA", frame.unit, displayed);
+ end
frame:RegisterUnitEvent("UNIT_NAME_UPDATE", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_AURA", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_HEAL_PREDICTION", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_ABSORB_AMOUNT_CHANGED", frame.unit, displayed);
- frame:RegisterUnitEvent("UNIT_HEAL_ABSORB_AMOUNT_CHANGED", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_THREAT_SITUATION_UPDATE", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_CONNECTION", frame.unit, displayed);
frame:RegisterUnitEvent("UNIT_FACTION", frame.unit, displayed);
frame.healthText:SetText("Dead");
elseif not UnitIsConnected(unit) then
frame.healthText:SetText("DC");
+ elseif frame.healthText.percent then
+ frame.healthText:SetFormattedText("%.1f", UnitHealth(unit)/frame.health.max*100);
else
local current = UnitHealth(unit);
- if current > 1200000000 then -- 1.2B
- frame.healthText:SetFormattedText("%.1fB", current / 1000000000);
- elseif current > 1200000 then -- 1.2M
- frame.healthText:SetFormattedText("%.1fM", current / 1000000);
+ if current > 1000000000 then -- 1.0B
+ frame.healthText:SetFormattedText("%.2fB", current / 1000000000);
+ elseif current > 1000000 then -- 1.0M
+ frame.healthText:SetFormattedText("%.2fM", current / 1000000);
elseif current > 1000 then -- 1K
frame.healthText:SetFormattedText("%.1fK", current / 1000);
else
local function updateName(frame, unit)
local name = UnitName(unit);
if not name then return end
- frame.name:SetText(ssub(name, 1, 10));
+ frame.name:SetText(ssub(name, 1, frame.name.count));
end
local function updateHealPred(frame, unit)
end
end
+-- only works for player frame
local function updateVehicle(frame)
- local shouldTargetVehicle = UnitHasVehicleUI(frame.unit) and
- UnitTargetsVehicleInRaidUI(frame.unit) and UnitExists(frame.vehicle);
+ local shouldTargetVehicle = UnitHasVehicleUI("player") and
+ UnitTargetsVehicleInRaidUI("player") and UnitExists("vehicle");
if shouldTargetVehicle then
if not frame.inVehicle then
frame.inVehicle = true;
end
end
+local function updateRaidMarker(frame, unit)
+ local index = GetRaidTargetIndex(unit);
+ if index then
+ SetRaidTargetIconTexture(frame.targeticon, index);
+ frame.targeticon:Show();
+ else
+ frame.targeticon:Hide();
+ end
+end
+
local eventFuncs = {
["UNIT_HEALTH"] = function(frame)
updateHealth(frame, frame.displayed);
updateHealthText(frame, frame.displayed);
- updateShield(frame, frame.displayed);
- updateHealAbsorb(frame, frame.displayed);
+ if frame.shield then updateShield(frame, frame.displayed) end
+ if frame.healabsorb then updateHealAbsorb(frame, frame.displayed) end
end,
["UNIT_POWER"] = function(frame)
updatePower(frame, frame.displayed);
updateMaxHealth(frame, frame.displayed);
updateHealth(frame, frame.displayed);
updateHealthText(frame, frame.displayed);
- updateShield(frame, frame.displayed);
- updateHealAbsorb(frame, frame.displayed);
+ if frame.shield then updateShield(frame, frame.displayed) end
+ if frame.healabsorb then updateHealAbsorb(frame, frame.displayed) end
end,
["UNIT_MAXPOWER"] = function(frame)
updateMaxPower(frame, frame.displayed);
["PARTY_LEADER_CHANGED"] = function(frame)
updateLeaderIcon(frame, frame.unit);
end,
+ ["RAID_TARGET_UPDATE"] = function(frame)
+ updateRaidMarker(frame, frame.displayed);
+ end,
["UPDATE_ALL_BARS"] = function(frame)
if frame.vehicle then updateVehicle(frame) end
updateMaxHealth(frame, frame.displayed);
- updateMaxPower(frame, frame.displayed);
updateHealth(frame, frame.displayed);
updateHealthText(frame, frame.displayed);
- updatePower(frame, frame.displayed);
- updatePowerText(frame, frame.displayed);
- updateAuras(frame, frame.displayed);
- updateShield(frame, frame.displayed);
- updateHealPred(frame, frame.displayed);
- updateHealAbsorb(frame, frame.displayed);
- updatePowerColor(frame, frame.displayed);
+ updateHealthColor(frame, frame.displayed);
updateAggro(frame, frame.displayed);
+ updateRaidMarker(frame, frame.displayed);
+ if frame.mana then
+ updateMaxPower(frame, frame.displayed);
+ updatePower(frame, frame.displayed);
+ updatePowerText(frame, frame.displayed);
+ updatePowerColor(frame, frame.displayed);
+ end
+ if frame.auras then updateAuras(frame, frame.displayed) end
+ if frame.shield then updateShield(frame, frame.displayed) end
+ if frame.healpred then updateHealPred(frame, frame.displayed) end
+ if frame.healabsorb then updateHealAbsorb(frame, frame.displayed) end
if frame.name then updateName(frame, frame.displayed) end
if frame.level then updateLevelText(frame, frame.unit) end
if frame.status then updateStatus(frame, frame.unit) end
if frame.pvp then updatePVP(frame, frame.unit) end
if frame.leader then updateLeaderIcon(frame, frame.unit) end
- updateHealthColor(frame, frame.displayed);
end,
};
eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"];
eventFuncs["GROUP_ROSTER_UPDATE"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["PLAYER_ENTERING_WORLD"] = eventFuncs["UPDATE_ALL_BARS"];
eventFuncs["PLAYER_TARGET_CHANGED"] = eventFuncs["UPDATE_ALL_BARS"];
+eventFuncs["INSTANCE_ENCOUNTER_ENGAGE_UNIT"] = eventFuncs["UPDATE_ALL_BARS"];
+eventFuncs["UNIT_TARGETABLE_CHANGED"] = eventFuncs["UPDATE_ALL_BARS"];
function M.UnitEvent(self, event, arg1)
eventFuncs[event](self, arg1);
Events.lua
UnitFrames.lua
PlayerFrame.lua
+PetFrame.lua
TargetFrame.lua
+BossFrames.lua
--- /dev/null
+-- PetFrame.lua
+local _;
+local unpack, pairs = unpack, pairs;
+local format = string.format;
+local GameTooltip = nil;
+local GameTooltip_SetDefaultAnchor = nil;
+
+local registerUnitEvents = OmaUFEvents.RegisterUnitEvents;
+local unitEvent = OmaUFEvents.UnitEvent;
+
+local Settings = OmaUFSettings;
+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;
+local width, height = Settings.Pet.Width, Settings.Pet.Height;
+local anchorX, anchorY = Settings.Pet.AnchorX, Settings.Pet.AnchorY;
+-- placeholders with visible values when error happens
+local attributes = {};
+
+local inheritedFrames = "SecureUnitButtonTemplate,SecureHandlerStateTemplate";
+
+local function frameShow(frame)
+ frame:RegisterEvent("UNIT_ENTERED_VEHICLE");
+ frame:RegisterEvent("UNIT_EXITED_VEHICLE");
+ frame:RegisterEvent("UNIT_PET");
+ frame:RegisterEvent("PLAYER_ENTERING_WORLD");
+ registerUnitEvents(frame);
+ unitEvent(frame, "UPDATE_ALL_BARS");
+end
+
+local function frameHide(frame)
+ frame:UnregisterAllEvents();
+end
+
+local function showTooltip(secure)
+ GameTooltip_SetDefaultAnchor(GameTooltip, secure);
+ GameTooltip:SetUnit(secure:GetAttribute("displayed"));
+end
+
+local function hideTooltip(secure)
+ GameTooltip:FadeOut();
+end
+
+local vehicletoggle = [=[
+ if newstate == "vehicle" then
+ self:SetAttribute("displayed", self:GetAttribute("vehicle"));
+ else
+ self:SetAttribute("displayed", self:GetAttribute("unit"));
+ end
+]=]
+
+function OmaUnitFrames.InitializePet(parent)
+ GameTooltip = _G["GameTooltip"];
+ GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"];
+ attributes = Settings.Character.Clickheal; -- TODO pet clickheal separate with Mend Pet etc.
+
+ local secure = CreateFrame("Button", "OmaPetSecure", parent, inheritedFrames);
+ local frame = CreateFrame("Frame", "OmaPet", parent);
+ local unit = "pet";
+ secure:SetPoint("TOPRIGHT", parent, "TOPLEFT", anchorX, anchorY);
+ secure:SetAttribute("unit", unit);
+ secure:SetAttribute("displayed", unit);
+ secure:SetAttribute("vehicle", "player");
+ frame:SetPoint("TOPRIGHT", parent, "TOPLEFT", anchorX, anchorY);
+ frame:SetAttribute("unit", unit);
+ frame.unit = unit;
+ frame.displayed = unit;
+ frame.vehicle = "player";
+ -- hide frame to get initial frameShow call
+ frame:Hide();
+ -- create visuals
+ secure:SetWidth(width+2);
+ secure:SetHeight(height+2);
+ frame:SetWidth(width+2);
+ frame:SetHeight(height+2);
+ frame.width = width;
+ 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, "BOTTOMRIGHT", -1, 1);
+ frame.healthback:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill");
+ frame.healthback:SetVertexColor(unpack(bgColor));
+ frame.health = frame:CreateTexture(nil, "BORDER");
+ frame.health:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT");
+ frame.health:SetPoint("BOTTOMLEFT", frame.healthback, "BOTTOMLEFT");
+ frame.health:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill");
+ frame.health:SetVertexColor(unpack(healthColor));
+ frame.healthText = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight");
+ frame.healthText:SetPoint("RIGHT", frame.healthback, "RIGHT", -2, 0);
+ frame.targeticon = frame:CreateTexture(nil, "OVERLAY");
+ frame.targeticon:SetPoint("CENTER", frame.healthback, "TOP");
+ frame.targeticon:SetWidth(18);
+ frame.targeticon:SetHeight(18);
+ frame.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons");
+ frame.targeticon:Hide();
+ -- set scripts
+ frame:SetScript("OnShow", frameShow);
+ frame:SetScript("OnHide", frameHide);
+ frame:SetScript("OnEvent", unitEvent);
+ 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");
+ secure:SetAttribute("toggleForVehicle", true);
+ RegisterUnitWatch(frame);
+ RegisterUnitWatch(secure);
+ RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no");
+ secure:SetAttribute("_onstate-vehicleui", vehicletoggle);
+ return frame;
+end
local _;
local unpack, pairs = unpack, pairs;
local format = string.format;
-local CreateFrame, RegisterStateDriver, RegisterUnitWatch = CreateFrame, RegisterStateDriver, RegisterUnitWatch;
-local STANDARD_TEXT_FONT = STANDARD_TEXT_FONT;
local GameTooltip = nil;
local GameTooltip_SetDefaultAnchor = nil;
local registerUnitEvents = OmaUFEvents.RegisterUnitEvents;
local unitEvent = OmaUFEvents.UnitEvent;
-local createAuraFrame = OmaUFAuras.CreateAuraFrame;
local Settings = OmaUFSettings;
local baseColor = Settings.BaseColor;
local function frameShow(frame)
frame:RegisterEvent("UNIT_ENTERED_VEHICLE");
frame:RegisterEvent("UNIT_EXITED_VEHICLE");
- frame:RegisterEvent("UNIT_PET"); -- TODO needed?
+ frame:RegisterEvent("GROUP_ROSTER_UPDATE");
frame:RegisterEvent("PLAYER_ENTERING_WORLD");
frame:RegisterEvent("PLAYER_LEVEL_UP");
frame:RegisterEvent("PLAYER_REGEN_DISABLED");
local function showTooltip(secure)
GameTooltip_SetDefaultAnchor(GameTooltip, secure);
- GameTooltip:SetUnit(secure:GetAttribute("unit"));
+ GameTooltip:SetUnit(secure:GetAttribute("displayed"));
end
local function hideTooltip(secure)
GameTooltip:FadeOut();
end
+local vehicletoggle = [=[
+ if newstate == "vehicle" then
+ self:SetAttribute("displayed", self:GetAttribute("vehicle"));
+ else
+ self:SetAttribute("displayed", self:GetAttribute("unit"));
+ end
+]=]
+
function OmaUnitFrames.InitializePlayer(parent)
GameTooltip = _G["GameTooltip"];
GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"];
local unit = "player";
secure:SetPoint("CENTER", parent, "CENTER", anchorX, anchorY);
secure:SetAttribute("unit", unit);
+ secure:SetAttribute("displayed", unit);
+ secure:SetAttribute("vehicle", "vehicle");
frame:SetPoint("CENTER", parent, "CENTER", anchorX, anchorY);
frame:SetAttribute("unit", unit);
frame.unit = unit;
frame.leader:Hide();
frame.level = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
frame.level:SetPoint("LEFT", frame.manaback, "LEFT", 2, 1);
+ frame.targeticon = frame:CreateTexture(nil, "OVERLAY");
+ frame.targeticon:SetPoint("CENTER", frame.healthback, "TOP");
+ frame.targeticon:SetWidth(18);
+ frame.targeticon:SetHeight(18);
+ frame.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons");
+ frame.targeticon:Hide();
-- set scripts
frame:SetScript("OnShow", frameShow);
frame:SetScript("OnHide", frameHide);
-- rest give target and menu
secure:SetAttribute("*type1", "target");
secure:SetAttribute("*type2", "togglemenu");
+ secure:SetAttribute("toggleForVehicle", true);
RegisterUnitWatch(frame);
RegisterUnitWatch(secure);
+ RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no");
+ secure:SetAttribute("_onstate-vehicleui", vehicletoggle);
return frame;
end
AnchorX = 300,
AnchorY = -175,
},
- ToT = {
- Width = 80,
- Height = 25,
- AnchorX = 10,
- AnchorY = 0,
+ Boss = {
+ Width = 140,
+ Height = 30,
+ AnchorX = 550,
+ AnchorY = 300,
},
BaseColor = {0, 0, 0, 0.5},
BgColor = {0.1, 0.1, 0.1, 0.4},
local _;
local unpack, pairs = unpack, pairs;
local format = string.format;
-local CreateFrame, RegisterStateDriver, RegisterUnitWatch = CreateFrame, RegisterStateDriver, RegisterUnitWatch;
-local STANDARD_TEXT_FONT = STANDARD_TEXT_FONT;
local GameTooltip = nil;
local GameTooltip_SetDefaultAnchor = nil;
local inheritedFrames = "SecureUnitButtonTemplate,SecureHandlerStateTemplate";
local function frameShow(frame)
- frame:RegisterEvent("UNIT_ENTERED_VEHICLE");
- frame:RegisterEvent("UNIT_EXITED_VEHICLE");
- frame:RegisterEvent("UNIT_PET");
- frame:RegisterEvent("GROUP_ROSTER_UPDATE"); -- TODO needed? won't be having group number in frames
+ frame:RegisterEvent("GROUP_ROSTER_UPDATE");
frame:RegisterEvent("PLAYER_ENTERING_WORLD");
frame:RegisterEvent("PLAYER_TARGET_CHANGED");
frame:RegisterEvent("PARTY_LEADER_CHANGED");
frame:SetAttribute("unit", unit);
frame.unit = unit;
frame.displayed = unit;
- --frame.vehicle = unit.."pet"; -- TODO nothing extra needed for target vehicles?
-- hide frame to get initial frameShow call
frame:Hide();
-- create visuals
frame.leader:Hide();
frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge");
frame.name:SetPoint("LEFT", frame.healthback, "LEFT", 2, 1);
+ frame.name.count = 9;
frame.level = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
frame.level:SetPoint("LEFT", frame.manaback, "LEFT", 2, 1);
+ frame.targeticon = frame:CreateTexture(nil, "OVERLAY");
+ frame.targeticon:SetPoint("CENTER", frame.healthback, "TOP");
+ frame.targeticon:SetWidth(18);
+ frame.targeticon:SetHeight(18);
+ frame.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons");
+ frame.targeticon:Hide();
-- set scripts
frame:SetScript("OnShow", frameShow);
frame:SetScript("OnHide", frameHide);
-- rest give target and menu
secure:SetAttribute("*type1", "target");
secure:SetAttribute("*type2", "togglemenu");
+ secure:SetAttribute("toggleForVehicle", false);
createAuraFrame(frame, unit);
RegisterUnitWatch(frame);
RegisterUnitWatch(secure);
-- UnitFrames.lua
local _;
local pairs = pairs;
+local InCombatLockdown = InCombatLockdown;
local UnitFrames = CreateFrame("Frame", "OmaUnitFrames");
local function initialize()
local player = M.InitializePlayer(UIParent);
- --M.InitializePet(player);
+ M.InitializePet(player);
local target = M.InitializeTarget(UIParent);
- --M.InitializeToT(target);
+ --M.InitializeToT(target); -- might not do this
+ M.InitializeBoss(UIParent);
-- TODO boss frames, (arena frames)
end
if hidden then return end
hidden = true;
- for _, frame in pairs({PlayerFrame, TargetFrame, TargetFrameToT, PetFrame}) do
+ 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
+ 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
+ --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: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();
hideBlizzardFrames();
initialize();
+ elseif event == "ADDON_LOADED" and addon == "Blizzard_ArenaUI" then
+ hideArenaFrames();
end
end);