mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 08:24:44 +00:00
132 lines
4.4 KiB
Lua
132 lines
4.4 KiB
Lua
local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local mod = E:GetModule("DataBars");
|
|
local LSM = LibStub("LibSharedMedia-3.0");
|
|
|
|
--Cache global variables
|
|
--Lua functions
|
|
local _G = _G
|
|
local format = format
|
|
--WoW API / Variables
|
|
local GetWatchedFactionInfo, GetNumFactions, GetFactionInfo = GetWatchedFactionInfo, GetNumFactions, GetFactionInfo
|
|
local InCombatLockdown = InCombatLockdown
|
|
local FACTION_BAR_COLORS = FACTION_BAR_COLORS
|
|
local REPUTATION, STANDING = REPUTATION, STANDING
|
|
|
|
local backupColor = FACTION_BAR_COLORS[1]
|
|
local FactionStandingLabelUnknown = UNKNOWN
|
|
function mod:UpdateReputation(event)
|
|
if not mod.db.reputation.enable then return end
|
|
|
|
local bar = self.repBar
|
|
|
|
local ID, standingLabel
|
|
local name, reaction, min, max, value = GetWatchedFactionInfo()
|
|
local numFactions = GetNumFactions()
|
|
|
|
if not name then
|
|
bar:Hide()
|
|
elseif name then
|
|
bar:Show()
|
|
|
|
local text = ""
|
|
local textFormat = self.db.reputation.textFormat
|
|
local color = FACTION_BAR_COLORS[reaction] or backupColor
|
|
bar.statusBar:SetStatusBarColor(color.r, color.g, color.b)
|
|
|
|
bar.statusBar:SetMinMaxValues(min, max)
|
|
bar.statusBar:SetValue(value)
|
|
|
|
for i = 1, numFactions do
|
|
local factionName, _, standingID = GetFactionInfo(i)
|
|
if factionName == name then
|
|
ID = standingID;
|
|
end
|
|
end
|
|
|
|
if ID then
|
|
standingLabel = _G["FACTION_STANDING_LABEL"..ID]
|
|
else
|
|
standingLabel = FactionStandingLabelUnknown
|
|
end
|
|
|
|
--Prevent a division by zero
|
|
local maxMinDiff = max - min
|
|
if maxMinDiff == 0 then
|
|
maxMinDiff = 1
|
|
end
|
|
|
|
if textFormat == "PERCENT" then
|
|
text = format("%s: %d%% [%s]", name, ((value - min) / maxMinDiff * 100), standingLabel)
|
|
elseif textFormat == "CURMAX" then
|
|
text = format("%s: %s - %s [%s]", name, E:ShortValue(value - min), E:ShortValue(max - min), standingLabel)
|
|
elseif textFormat == "CURPERC" then
|
|
text = format("%s: %s - %d%% [%s]", name, E:ShortValue(value - min), ((value - min) / maxMinDiff * 100), standingLabel)
|
|
elseif textFormat == "CUR" then
|
|
text = format("%s: %s [%s]", name, E:ShortValue(value - min), standingLabel)
|
|
elseif textFormat == "REM" then
|
|
text = format("%s: %s [%s]", name, E:ShortValue((max - min) - (value-min)), standingLabel)
|
|
elseif textFormat == "CURREM" then
|
|
text = format("%s: %s - %s [%s]", name, E:ShortValue(value - min), E:ShortValue((max - min) - (value-min)), standingLabel)
|
|
elseif textFormat == "CURPERCREM" then
|
|
text = format("%s: %s - %d%% (%s) [%s]", name, E:ShortValue(value - min), ((value - min) / maxMinDiff * 100), E:ShortValue((max - min) - (value-min)), standingLabel)
|
|
end
|
|
|
|
bar.text:SetText(text)
|
|
end
|
|
end
|
|
|
|
function mod:ReputationBar_OnEnter()
|
|
if mod.db.reputation.mouseover then
|
|
UIFrameFadeIn(this, 0.4, this:GetAlpha(), 1)
|
|
end
|
|
GameTooltip:ClearLines()
|
|
GameTooltip:SetOwner(this, "ANCHOR_CURSOR", 0, -4)
|
|
|
|
local name, reaction, min, max, value = GetWatchedFactionInfo()
|
|
if name then
|
|
GameTooltip:AddLine(name)
|
|
GameTooltip:AddLine(" ")
|
|
|
|
GameTooltip:AddDoubleLine(STANDING..":", _G["FACTION_STANDING_LABEL"..reaction], 1, 1, 1)
|
|
GameTooltip:AddDoubleLine(REPUTATION..":", format("%d / %d (%d%%)", value - min, max - min, (value - min) / ((max - min == 0) and max or (max - min)) * 100), 1, 1, 1)
|
|
end
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
function mod:ReputationBar_OnClick()
|
|
ToggleCharacter("ReputationFrame");
|
|
end
|
|
|
|
function mod:UpdateReputationDimensions()
|
|
self.repBar:SetWidth(self.db.reputation.width)
|
|
self.repBar:SetHeight(self.db.reputation.height)
|
|
self.repBar.statusBar:SetOrientation(self.db.reputation.orientation)
|
|
E:FontTemplate(self.repBar.text, LSM:Fetch("font", self.db.reputation.font), self.db.reputation.textSize, self.db.reputation.fontOutline)
|
|
if self.db.reputation.mouseover then
|
|
self.repBar:SetAlpha(0)
|
|
else
|
|
self.repBar:SetAlpha(1)
|
|
end
|
|
end
|
|
|
|
function mod:EnableDisable_ReputationBar()
|
|
if self.db.reputation.enable then
|
|
self:RegisterEvent("UPDATE_FACTION", "UpdateReputation")
|
|
self:UpdateReputation()
|
|
E:EnableMover(self.repBar.mover:GetName())
|
|
else
|
|
self:UnregisterEvent("UPDATE_FACTION")
|
|
self.repBar:Hide()
|
|
E:DisableMover(self.repBar.mover:GetName())
|
|
end
|
|
end
|
|
|
|
function mod:LoadReputationBar()
|
|
self.repBar = self:CreateBar("ElvUI_ReputationBar", self.ReputationBar_OnEnter, self.ReputationBar_OnClick, "RIGHT", RightChatPanel, "LEFT", E.Border - E.Spacing*3, 0)
|
|
E:RegisterStatusBar(self.repBar.statusBar)
|
|
|
|
self:UpdateReputationDimensions()
|
|
|
|
E:CreateMover(self.repBar, "ReputationBarMover", L["Reputation Bar"])
|
|
self:EnableDisable_ReputationBar()
|
|
end |