The
derArtifactBar itself isn't recreated constantly, but a dynamic container frame with just a FontString on it. This creates one FontString attached directly to
derArtifactBar. I also made a few optimizations.
Lua Code:
local AXP_COLOR = { r = 0.6, g = 0.2, b = 0.1 }
local derArtifactBar = CreateFrame("Statusbar", "derArtifactBar",artifactFrame)
derArtifactBar:SetPoint("CENTER", 0, 0)
derArtifactBar:SetHeight(18)
derArtifactBar:SetWidth(artifactFrame:GetWidth() * .968)
derArtifactBar:SetStatusBarTexture("Interface\\AddOns\\_Deranjata\\media\\cast\\Waterline")
derArtifactBar:SetStatusBarColor(AXP_COLOR.r, AXP_COLOR.g, AXP_COLOR.b, 0.5)
derArtifactBar:SetBackdrop({
bgFile = "Interface\\AddOns\\_Deranjata\\media\\cast\\Lines",
insets = { left = 1, right = 1, top = 1, bottom = 1 }
})
derArtifactBar:SetBackdropColor(0.1, 0.1, 0.1)
derArtifactBar:SetBackdropBorderColor(0.6, 0.6, 0.6)
derArtifactBar.Text=derArtifactBar:CreateFontString(nil, "OVERLAY", "GameFontNormal")
derArtifactBar.Text:SetPoint("CENTER")
derArtifactBar:RegisterEvent("PLAYER_ENTERING_WORLD")
derArtifactBar:RegisterEvent("ARTIFACT_XP_UPDATE")
derArtifactBar:RegisterEvent("UNIT_INVENTORY_CHANGED")
derArtifactBar:SetScript("OnEvent", function(self, event, ...)
if not HasArtifactEquipped() then self:Hide() return end
self:Show()
local itemID, altItemID, name, icon, totalXP, pointsSpent = C_ArtifactUI.GetEquippedArtifactInfo()
local numPoints, artifactXP, xpForNextPoint = MainMenuBar_GetNumArtifactTraitsPurchasableFromXP(pointsSpent, totalXP)
self:SetMinMaxValues(0,xpForNextPoint)
self:SetValue(artifactXP)
self.Text:SetFormattedText("Artifact XP: %d / %d ",artifactXP,xpForNextPoint)
end)