Compare with Previous | Blame | View Log
local settings = oUF_Settings local caelNamePlates = CreateFrame("Frame", nil, UIParent) caelNamePlates:SetScript("OnEvent", function(self, event, ...) self[event](self, ...) end) local barTexture = settings.normTex local overlayTexture = [=[Interface\Tooltips\Nameplate-Border]=] local glowTexture = settings.glowTex local font, fontSize, fontOutline = settings.font, 10, "THINOUTLINE" local backdrop = { edgeFile = glowTexture, edgeSize = 5, insets = {left = 3, right = 3, top = 3, bottom = 3} } local select = select local IsValidFrame = function(frame) if frame:GetName() then return end overlayRegion = select(2, frame:GetRegions()) return overlayRegion and overlayRegion:GetObjectType() == "Texture" and overlayRegion:GetTexture() == overlayTexture end local UpdateTime = function(self, curValue) local minValue, maxValue = self:GetMinMaxValues() if self.channeling then self.time:SetFormattedText("%.1f ", curValue) else self.time:SetFormattedText("%.1f ", maxValue - curValue) end end local ThreatUpdate = function(self, elapsed) self.elapsed = self.elapsed + elapsed if self.elapsed >= 0.2 then if not self.oldglow:IsShown() then self.healthBar.hpGlow:SetBackdropBorderColor(0, 0, 0) else self.healthBar.hpGlow:SetBackdropBorderColor(self.oldglow:GetVertexColor()) end self.healthBar:SetStatusBarColor(self.r, self.g, self.b) self.elapsed = 0 end end local UpdateFrame = function(self) local r, g, b = self.healthBar:GetStatusBarColor() local newr, newg, newb if g + b == 0 then newr, newg, newb = 0.69, 0.31, 0.31 self.healthBar:SetStatusBarColor(0.69, 0.31, 0.31) elseif r + b == 0 then newr, newg, newb = 0.33, 0.59, 0.33 self.healthBar:SetStatusBarColor(0.33, 0.59, 0.33) elseif r + g == 0 then newr, newg, newb = 0.31, 0.45, 0.63 self.healthBar:SetStatusBarColor(0.31, 0.45, 0.63) elseif 2 - (r + g) < 0.05 and b == 0 then newr, newg, newb = 0.65, 0.63, 0.35 self.healthBar:SetStatusBarColor(0.65, 0.63, 0.35) else newr, newg, newb = r, g, b end self.r, self.g, self.b = newr, newg, newb self.healthBar:ClearAllPoints() self.healthBar:SetPoint("CENTER", self.healthBar:GetParent()) self.healthBar:SetHeight(10) self.healthBar:SetWidth(80) self.castBar:ClearAllPoints() self.castBar:SetPoint("TOP", self.healthBar, "BOTTOM", 0, -4) self.castBar:SetHeight(10) self.castBar:SetWidth(80) self.highlight:ClearAllPoints() self.highlight:SetAllPoints(self.healthBar) self.name:SetText(self.oldname:GetText()) local level, elite, mylevel = tonumber(self.level:GetText()), self.elite:IsShown(), UnitLevel("player") self.level:ClearAllPoints() self.level:SetPoint("RIGHT", self.healthBar, "LEFT", -2, 1) if self.boss:IsShown() then self.level:SetText("B") self.level:SetTextColor(0.8, 0.05, 0) self.level:Show() elseif not elite and level == mylevel then self.level:Hide() else self.level:SetText(level..(elite and "+" or "")) end end local FixCastbar = function(self) self.castbarOverlay:Hide() self:SetHeight(10) self:ClearAllPoints() self:SetPoint("TOP", self.healthBar, "BOTTOM", 0, -4) end local ColorCastBar = function(self, shielded) if shielded then self:SetStatusBarColor(0.8, 0.05, 0) self.cbGlow:SetBackdropBorderColor(0.75, 0.75, 0.75) else self.cbGlow:SetBackdropBorderColor(0, 0, 0) end end local OnSizeChanged = function(self) self.needFix = true end local OnValueChanged = function(self, curValue) UpdateTime(self, curValue) if self.needFix then FixCastbar(self) self.needFix = nil end end local OnShow = function(self) self.channeling = UnitChannelInfo("target") FixCastbar(self) ColorCastBar(self, self.shieldedRegion:IsShown()) end local OnHide = function(self) self.highlight:Hide() self.healthBar.hpGlow:SetBackdropBorderColor(0, 0, 0) end local OnEvent = function(self, event, unit) if unit == "target" then if self:IsShown() then ColorCastBar(self, event == "UNIT_SPELLCAST_NOT_INTERRUPTIBLE") end end end local CreateFrame = function(frame) if frame.done then return end frame.nameplate = true frame.healthBar, frame.castBar = frame:GetChildren() local healthBar, castBar = frame.healthBar, frame.castBar local glowRegion, overlayRegion, castbarOverlay, shieldedRegion, spellIconRegion, highlightRegion, nameTextRegion, levelTextRegion, bossIconRegion, raidIconRegion, stateIconRegion = frame:GetRegions() frame.oldname = nameTextRegion nameTextRegion:Hide() local newNameRegion = frame:CreateFontString() newNameRegion:SetPoint("BOTTOM", healthBar, "TOP", 0, 1) newNameRegion:SetFont(font, fontSize, fontOutline) newNameRegion:SetTextColor(0.84, 0.75, 0.65) newNameRegion:SetShadowOffset(1.25, -1.25) frame.name = newNameRegion frame.level = levelTextRegion levelTextRegion:SetFont(font, fontSize, fontOutline) levelTextRegion:SetShadowOffset(1.25, -1.25) healthBar:SetStatusBarTexture(barTexture) healthBar.hpBackground = healthBar:CreateTexture(nil, "BORDER") healthBar.hpBackground:SetAllPoints(healthBar) healthBar.hpBackground:SetTexture(barTexture) healthBar.hpBackground:SetVertexColor(0.15, 0.15, 0.15) healthBar.hpGlow = CreateFrame("Frame", nil, healthBar) healthBar.hpGlow:SetPoint("TOPLEFT", healthBar, "TOPLEFT", -4.5, 4) healthBar.hpGlow:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", 4.5, -4.5) healthBar.hpGlow:SetBackdrop(backdrop) healthBar.hpGlow:SetBackdropColor(0, 0, 0) healthBar.hpGlow:SetBackdropBorderColor(0, 0, 0) castBar.castbarOverlay = castbarOverlay castBar.healthBar = healthBar castBar.shieldedRegion = shieldedRegion castBar:SetStatusBarTexture(barTexture) castBar:HookScript("OnShow", OnShow) castBar:HookScript("OnSizeChanged", OnSizeChanged) castBar:HookScript("OnValueChanged", OnValueChanged) castBar:HookScript("OnEvent", OnEvent) castBar:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE") castBar:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE") castBar.time = castBar:CreateFontString(nil, "ARTWORK") castBar.time:SetPoint("RIGHT", castBar, "LEFT", -2, 1) castBar.time:SetFont(font, fontSize, fontOutline) castBar.time:SetTextColor(0.84, 0.75, 0.65) castBar.time:SetShadowOffset(1.25, -1.25) castBar.cbBackground = castBar:CreateTexture(nil, "BORDER") castBar.cbBackground:SetAllPoints(castBar) castBar.cbBackground:SetTexture(barTexture) castBar.cbBackground:SetVertexColor(0.15, 0.15, 0.15) castBar.cbGlow = CreateFrame("Frame", nil, castBar) castBar.cbGlow:SetPoint("TOPLEFT", castBar, "TOPLEFT", -4.5, 4) castBar.cbGlow:SetPoint("BOTTOMRIGHT", castBar, "BOTTOMRIGHT", 4.5, -4.5) castBar.cbGlow:SetBackdrop(backdrop) castBar.cbGlow:SetBackdropColor(0, 0, 0) castBar.cbGlow:SetBackdropBorderColor(0, 0, 0) spellIconRegion:SetHeight(0.01) spellIconRegion:SetWidth(0.01) highlightRegion:SetTexture(barTexture) highlightRegion:SetVertexColor(0.25, 0.25, 0.25) frame.highlight = highlightRegion raidIconRegion:ClearAllPoints() raidIconRegion:SetPoint("LEFT", healthBar, "RIGHT", 2, 0) raidIconRegion:SetHeight(15) raidIconRegion:SetWidth(15) frame.oldglow = glowRegion frame.elite = stateIconRegion frame.boss = bossIconRegion frame.done = true glowRegion:SetTexture(nil) overlayRegion:SetTexture(nil) shieldedRegion:SetTexture(nil) castbarOverlay:SetTexture(nil) stateIconRegion:SetTexture(nil) bossIconRegion:SetTexture(nil) UpdateFrame(frame) frame:SetScript("OnShow", UpdateFrame) frame:SetScript("OnHide", OnHide) frame.elapsed = 0 frame:SetScript("OnUpdate", ThreatUpdate) end local numKids = 0 local lastUpdate = 0 local OnUpdate = function(self, elapsed) lastUpdate = lastUpdate + elapsed if lastUpdate > 0.1 then lastUpdate = 0 if WorldFrame:GetNumChildren() ~= numKids then numKids = WorldFrame:GetNumChildren() for i = 1, select("#", WorldFrame:GetChildren()) do frame = select(i, WorldFrame:GetChildren()) if IsValidFrame(frame) then CreateFrame(frame) end end end end end caelNamePlates:SetScript("OnUpdate", OnUpdate) --caelNamePlates:RegisterEvent("PLAYER_REGEN_ENABLED") function caelNamePlates:PLAYER_REGEN_ENABLED() SetCVar("nameplateShowEnemies", 0) end caelNamePlates:RegisterEvent("PLAYER_REGEN_DISABLED") function caelNamePlates.PLAYER_REGEN_DISABLED() SetCVar("nameplateShowEnemies", 1) end