--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## 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 ceil,tinsert = math.ceil,table.insert local lastArenaFrame, lastBossFrame --[[ ########################################################## BOSS HANDLERS ########################################################## ]]-- function MOD.Construct:boss() local frame = self MOD:SetActionPanel(frame, "boss") frame.Health = MOD:CreateHealthBar(frame, true, true) frame.Power = MOD:CreatePowerBar(frame, true, true) MOD:CreatePortrait(frame) frame.Buffs = MOD:CreateBuffs(frame, "boss") frame.Debuffs = MOD:CreateDebuffs(frame, "boss") frame.Afflicted = MOD:CreateAfflicted(frame) frame.Castbar = MOD:CreateCastbar(frame, true, nil, true, nil, true) frame.RaidIcon = MOD:CreateRaidIcon(frame) frame.AltPowerBar = MOD:CreateAltPowerBar(frame) frame.Range = { insideAlpha = 1, outsideAlpha = 1 } frame:SetAttribute("type2", "focus") if(not _G["SVUI_Boss_MOVE"]) then frame:Point("RIGHT", SuperVillain.UIParent, "RIGHT", -105, 0) SuperVillain:SetSVMovable(frame, "SVUI_Boss_MOVE", L["Boss Frames"], nil, nil, nil, "ALL, PARTY, RAID10, RAID25, RAID40") else frame:Point("TOPRIGHT", lastBossFrame, "BOTTOMRIGHT", 0, -20) end lastBossFrame = frame end function MOD.FrameUpdate:boss() local frame = self local db = MOD.db["boss"] local INDEX = frame.index; local holder = _G["SVUI_Boss_MOVE"] local UNIT_WIDTH = db.width; local UNIT_HEIGHT = db.height; frame.colors = oUF_SuperVillain.colors; frame:Size(UNIT_WIDTH, UNIT_HEIGHT) frame:ClearAllPoints() if(tonumber(INDEX) == 1) then holder:Width(UNIT_WIDTH) holder:Height(UNIT_HEIGHT + (UNIT_HEIGHT + 12 + db.castbar.height) * 4) if db.showBy == "UP"then frame:Point("BOTTOMRIGHT", holder, "BOTTOMRIGHT") else frame:Point("TOPRIGHT", holder, "TOPRIGHT") end else local yOffset = (UNIT_HEIGHT + 12 + db.castbar.height) * (INDEX - 1) if db.showBy == "UP"then frame:Point("BOTTOMRIGHT", holder, "BOTTOMRIGHT", 0, yOffset) else frame:Point("TOPRIGHT", holder, "TOPRIGHT", 0, -yOffset) end end frame:RegisterForClicks(MOD.db.fastClickTarget and "AnyDown" or "AnyUp") MOD:RefreshUnitLayout(frame, "boss") frame:UpdateAllElements() end --[[ ########################################################## ARENA HANDLERS ########################################################## ]]-- function MOD.Construct:arena() local frame = self local selfName = frame:GetName() local prepName = selfName.."PrepFrame"; local selfID = frame:GetID() MOD:SetActionPanel(frame, "arena") frame.Health = MOD:CreateHealthBar(frame, true, true) frame.Power = MOD:CreatePowerBar(frame, true) MOD:CreatePortrait(frame) frame.Buffs = MOD:CreateBuffs(frame, "arena") frame.Debuffs = MOD:CreateDebuffs(frame, "arena") frame.Castbar = MOD:CreateCastbar(frame, true, nil, true, nil, true) frame.Trinket = MOD:CreateTrinket(frame) frame.PVPSpecIcon = MOD:CreatePVPSpecIcon(frame) frame.Range = { insideAlpha = 1, outsideAlpha = 1 } frame:SetAttribute("type2", "focus") if not _G[prepName] then local prep = CreateFrame("Frame", prepName, UIParent) prep:SetFrameStrata("MEDIUM") prep:SetAllPoints(frame) prep:SetID(selfID) prep:SetPanelTemplate("Bar", true, 3, 3, 3) prep.Health = CreateFrame("StatusBar", nil, prep) prep.Health:SetAllPoints(prep) prep.Health:SetStatusBarTexture([[Interface\AddOns\SVUI\assets\artwork\Bars\DEFAULT]]) prep.Health:SetPanelTemplate("Bar", true, 3, 3, 3) prep.Icon = prep:CreateTexture(nil, "OVERLAY") prep.Icon.bg = CreateFrame("Frame", nil, prep) prep.Icon.bg:Point("TOPLEFT", prep, "TOPRIGHT", 1, 0) prep.Icon.bg:Point("BOTTOMRIGHT", prep, "BOTTOMRIGHT", 1, 0) prep.Icon.bg:SetFixedPanelTemplate("Default", true) prep.Icon:SetParent(prep.Icon.bg) prep.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) prep.Icon:FillInner(prep.Icon.bg) prep.SpecClass = prep.Health:CreateFontString(nil, "OVERLAY") prep.SpecClass:SetFont(SuperVillain.Media.font.names, 12, "OUTLINE") prep.SpecClass:SetTextColor(1, 1, 1) prep.SpecClass:SetPoint("CENTER") prep:Hide() end if(not _G["SVUI_Arena_MOVE"]) then frame:Point("RIGHT", SuperVillain.UIParent, "RIGHT", -105, 0) SuperVillain:SetSVMovable(frame, "SVUI_Arena_MOVE", L["Arena Frames"], nil, nil, nil, "ALL, ARENA") else frame:Point("TOPRIGHT", lastArenaFrame, "BOTTOMRIGHT", 0, -20) end lastArenaFrame = frame end function MOD.FrameUpdate:arena() local frame = self local db = MOD.db["arena"] local INDEX = frame.index; local holder = _G["SVUI_Arena_MOVE"] local UNIT_WIDTH = db.width; local UNIT_HEIGHT = db.height; frame.colors = oUF_SuperVillain.colors; frame:Size(UNIT_WIDTH, UNIT_HEIGHT) frame:RegisterForClicks(MOD.db.fastClickTarget and "AnyDown" or "AnyUp") do local trinket = frame.Trinket; trinket.bg:Size(db.pvpTrinket.size) trinket.bg:ClearAllPoints() if(db.pvpTrinket.position == "RIGHT") then trinket.bg:Point("LEFT", frame, "RIGHT", db.pvpTrinket.xOffset, db.pvpTrinket.yOffset) else trinket.bg:Point("RIGHT", frame, "LEFT", db.pvpTrinket.xOffset, db.pvpTrinket.yOffset) end if db.pvpTrinket.enable and not frame:IsElementEnabled("Trinket")then frame:EnableElement("Trinket") elseif not db.pvpTrinket.enable and frame:IsElementEnabled("Trinket")then frame:DisableElement("Trinket") end end do local pvp = frame.PVPSpecIcon; pvp.bg:Point("RIGHT", frame, "RIGHT") pvp.bg:Size(UNIT_HEIGHT, UNIT_HEIGHT) if db.pvpSpecIcon then frame.InfoPanel:Point("TOPLEFT", frame, "TOPLEFT", 0, 0) frame.InfoPanel:Point("BOTTOMRIGHT", frame.PVPSpecIcon, "BOTTOMLEFT", 0, 0) if frame:IsElementEnabled("PVPSpecIcon")then frame:EnableElement("PVPSpecIcon") end elseif frame:IsElementEnabled("PVPSpecIcon")then frame:DisableElement("PVPSpecIcon") end end MOD:RefreshUnitLayout(frame, "arena") frame:ClearAllPoints() if(tonumber(INDEX) == 1) then holder:Width(UNIT_WIDTH) holder:Height(UNIT_HEIGHT + (UNIT_HEIGHT + 12 + db.castbar.height) * 4) if(db.showBy == "UP") then frame:Point("BOTTOMRIGHT", holder, "BOTTOMRIGHT") else frame:Point("TOPRIGHT", holder, "TOPRIGHT") end else local yOffset = (UNIT_HEIGHT + 12 + db.castbar.height) * (INDEX - 1) if(db.showBy == "UP") then frame:Point("BOTTOMRIGHT", holder, "BOTTOMRIGHT", 0, yOffset) else frame:Point("TOPRIGHT", holder, "TOPRIGHT", 0, -yOffset) end end frame:UpdateAllElements() end --[[ ########################################################## PREP FRAME HANDLER ########################################################## ]]-- local ArenaPrepHandler = CreateFrame("Frame") local ArenaPrepHandler_OnEvent = function(self, event) local _, instanceType = IsInInstance() if(not MOD.db.arena.enable or instanceType ~= "arena") then return end if event == "PLAYER_LOGIN" then for i = 1, 5 do local prepframe = _G["SVUI_Arena"..i.."PrepFrame"] if(prepframe) then prepframe:SetAllPoints(_G["SVUI_Arena"..i]) end end elseif event == "ARENA_OPPONENT_UPDATE" then for i = 1, 5 do local prepframe = _G["SVUI_Arena"..i.."PrepFrame"] if(prepframe and prepframe:IsShown()) then prepframe:Hide() end end else local numOpps = GetNumArenaOpponentSpecs() if numOpps > 0 then for i = 1, 5 do local prepframe = _G["SVUI_Arena"..i.."PrepFrame"] if i <= numOpps then local s = GetArenaOpponentSpec(i) local _, spec, class = nil, "UNKNOWN", "UNKNOWN" if s and s > 0 then _, spec, _, icon, _, _, class = GetSpecializationInfoByID(s) end if class and spec then prepframe.SpecClass:SetText(spec .. " - " .. LOCALIZED_CLASS_NAMES_MALE[class]) prepframe.Icon:SetTexture(icon or [[INTERFACE\ICONS\INV_MISC_QUESTIONMARK]]) local color = RAID_CLASS_COLORS[class] local textcolor = SVUI_CLASS_COLORS[class] or color if color then prepframe.Health:SetStatusBarColor(color.r, color.g, color.b) prepframe.SpecClass:SetTextColor(color.r, color.g, color.b) else prepframe.Health:SetStatusBarColor(0.25, 0.25, 0.25) prepframe.SpecClass:SetTextColor(1, 1, 1) end prepframe:Show() end else prepframe:Hide() end end else for i = 1, 5 do local prepframe = _G["SVUI_Arena"..i.."PrepFrame"] if(prepframe and prepframe:IsShown()) then prepframe:Hide() end end end end end ArenaPrepHandler:RegisterEvent("PLAYER_LOGIN") ArenaPrepHandler:RegisterEvent("PLAYER_ENTERING_WORLD") ArenaPrepHandler:RegisterEvent("ARENA_OPPONENT_UPDATE") ArenaPrepHandler:RegisterEvent("ARENA_PREP_OPPONENT_SPECIALIZATIONS") ArenaPrepHandler:SetScript("OnEvent", ArenaPrepHandler_OnEvent)