--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## --]] local SuperVillain, L = unpack(select(2, ...)); local MOD = SuperVillain.Registry:Expose('SVUnit'); local _, ns = ...; local oUF_SuperVillain = ns.oUF; --[[ MUNGLUNCH's FASTER ASSERT FUNCTION ]]-- local assert = enforce; assert(oUF_SuperVillain, "SVUI was unable to locate oUF."); local tinsert = table.insert; --[[ ########################################################## TANK HANDLERS ########################################################## ]]-- local function UpdateTankFrame(header) local db = MOD.db["tank"] header.colors = oUF_SuperVillain.colors; header:RegisterForClicks(MOD.db.fastClickTarget and "AnyDown" or "AnyUp") if header.isChild and header.originalParent then local targets = db.targetsGroup; if not header.originalParent.childList then header.originalParent.childList = {} end header.originalParent.childList[header] = true; if not InCombatLockdown()then if targets.enable then header:SetParent(header.originalParent) header:Size(targets.width, targets.height) header:ClearAllPoints() SuperVillain:ReversePoint(header, targets.anchorPoint, header.originalParent, targets.xOffset, targets.yOffset) else header:SetParent(SuperVillain.Cloaked) end end elseif not InCombatLockdown()then header:Size(db.width, db.height) end MOD:RefreshUnitLayout(header, "tank") do local nametext = header.InfoPanel.Name; if oUF_SuperVillain.colors.healthclass then header:Tag(nametext, "[name:10]") else header:Tag(nametext, "[name:color][name:10]") end end header:UpdateAllElements() end function MOD.Construct:tank() self:SetScript("OnEnter", UnitFrame_OnEnter) self:SetScript("OnLeave", UnitFrame_OnLeave) MOD:SetActionPanel(self, "tank") self.Health = MOD:CreateHealthBar(self, true) self.RaidIcon = MOD:CreateRaidIcon(self) self.RaidIcon:SetPoint("BOTTOMRIGHT") self.Range = { insideAlpha = 1, outsideAlpha = 1 } UpdateTankFrame(self) self.originalParent = self:GetParent() return self end function MOD.HeaderUpdate:tank() local db = MOD.db["tank"] local header = self if db.enable ~= true then UnregisterAttributeDriver(header, "state-visibility") header:Hide() return end header:Hide() MOD:DetachSubFrames(header:GetChildren()) header:SetAttribute("startingIndex", -1) RegisterAttributeDriver(header, "state-visibility", "show") header.dirtyWidth, header.dirtyHeight = header:GetSize() RegisterAttributeDriver(header, "state-visibility", "[@raid1, exists] show;hide") header:SetAttribute("startingIndex", 1) header:SetAttribute("point", "BOTTOM") header:SetAttribute("columnAnchorPoint", "LEFT") MOD:DetachSubFrames(header:GetChildren()) header:SetAttribute("yOffset", 7) if not header.positioned then header:ClearAllPoints() header:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 4, -40) SuperVillain:SetSVMovable(header, header:GetName().."_MOVE", L["Tank Frames"], nil, nil, nil, "ALL, RAID10, RAID25, RAID40") header.Avatar.positionOverride = "TOPLEFT" header:SetAttribute("minHeight", header.dirtyHeight) header:SetAttribute("minWidth", header.dirtyWidth) header.positioned = true end for i = 1, header:GetNumChildren() do local childFrame = select(i, header:GetChildren()) UpdateTankFrame(childFrame) if(_G[childFrame:GetName().."Pet"]) then UpdateTankFrame(_G[childFrame:GetName().."Pet"]) end if(_G[childFrame:GetName().."Target"]) then UpdateTankFrame(_G[childFrame:GetName().."Target"]) end end end --[[ ########################################################## ASSIST UPDATE ########################################################## ]]-- local function UpdateAssistFrame(header) local db = MOD.db["assist"] header.colors = oUF_SuperVillain.colors; header:RegisterForClicks(MOD.db.fastClickTarget and "AnyDown" or "AnyUp") if header.isChild and header.originalParent then local targets = db.targetsGroup; if not header.originalParent.childList then header.originalParent.childList = {} end header.originalParent.childList[header] = true; if not InCombatLockdown()then if targets.enable then header:SetParent(header.originalParent) header:Size(targets.width, targets.height) header:ClearAllPoints() SuperVillain:ReversePoint(header, targets.anchorPoint, header.originalParent, targets.xOffset, targets.yOffset) else header:SetParent(SuperVillain.Cloaked) end end elseif not InCombatLockdown()then header:Size(db.width, db.height) end MOD:RefreshUnitLayout(header, "assist") do local nametext = header.InfoPanel.Name; if oUF_SuperVillain.colors.healthclass then header:Tag(nametext, "[name:10]") else header:Tag(nametext, "[name:color][name:10]") end end header:UpdateAllElements() end function MOD.Construct:assist() self:SetScript("OnEnter", UnitFrame_OnEnter) self:SetScript("OnLeave", UnitFrame_OnLeave) MOD:SetActionPanel(self, "assist") self.Health = MOD:CreateHealthBar(self, true) self.RaidIcon = MOD:CreateRaidIcon(self) self.RaidIcon:SetPoint("BOTTOMRIGHT") self.Range = { insideAlpha = 1, outsideAlpha = 1 } UpdateAssistFrame(self) self.originalParent = self:GetParent() return self end function MOD.HeaderUpdate:assist() local db = MOD.db["assist"] local header = self header:Hide() MOD:DetachSubFrames(header:GetChildren()) header:SetAttribute("startingIndex", -1) RegisterAttributeDriver(header, "state-visibility", "show") header.dirtyWidth, header.dirtyHeight = header:GetSize() RegisterAttributeDriver(header, "state-visibility", "[@raid1, exists] show;hide") header:SetAttribute("startingIndex", 1) header:SetAttribute("point", "BOTTOM") header:SetAttribute("columnAnchorPoint", "LEFT") MOD:DetachSubFrames(header:GetChildren()) header:SetAttribute("yOffset", 7) if not header.positioned then header:ClearAllPoints() header:Point("TOPLEFT", SuperVillain.UIParent, "TOPLEFT", 4, -140) SuperVillain:SetSVMovable(header, header:GetName().."_MOVE", L["Assist Frames"], nil, nil, nil, "ALL, RAID10, RAID25, RAID40") header.Avatar.positionOverride = "TOPLEFT" header:SetAttribute("minHeight", header.dirtyHeight) header:SetAttribute("minWidth", header.dirtyWidth) header.positioned = true end for i = 1, header:GetNumChildren() do local childFrame = select(i, header:GetChildren()) UpdateAssistFrame(childFrame) if(_G[childFrame:GetName().."Pet"]) then UpdateAssistFrame(_G[childFrame:GetName().."Pet"]) end if(_G[childFrame:GetName().."Target"]) then UpdateAssistFrame(_G[childFrame:GetName().."Target"]) end end end