Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Compiled Lua sources
luac.out

# luarocks build files
*.src.rock
*.zip
*.tar.gz

# Object files
*.o
*.os
*.ko
*.obj
*.elf

# Precompiled Headers
*.gch
*.pch

# Libraries
*.lib
*.a
*.la
*.lo
*.def
*.exp

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

# custom
*.vscode

38 changes: 38 additions & 0 deletions Core/Config/GUI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,43 @@ local function CreateRangeSettings(containerParent)
GUIWidgets.DeepDisable(Container, not RangeDB.Enabled, Toggle)
end

local function CreateGlobalOutOfCombatFadeSettings(containerParent)
local FadeDB = UUF.db.profile.General.OutOfCombatFade
local Container = GUIWidgets.CreateInlineGroup(containerParent, "Out of Combat Fade")

GUIWidgets.CreateInformationTag(Container, "Fade unit frames when out of combat. Per-frame settings can override this global setting.")

local UseGlobalToggle = AG:Create("CheckBox")
UseGlobalToggle:SetLabel("Use Global Out of Combat Fade")
UseGlobalToggle:SetValue(FadeDB.UseGlobal)
UseGlobalToggle:SetFullWidth(true)
UseGlobalToggle:SetCallback("OnValueChanged", function(_, _, value) FadeDB.UseGlobal = value UUF:UpdateOutOfCombatFade() GUIWidgets.DeepDisable(Container, not value, UseGlobalToggle) end)
UseGlobalToggle:SetRelativeWidth(0.5)
Container:AddChild(UseGlobalToggle)

local GlobalOpacitySlider = AG:Create("Slider")
GlobalOpacitySlider:SetLabel("Global Out of Combat Opacity")
GlobalOpacitySlider:SetValue(FadeDB.GlobalOpacity)
GlobalOpacitySlider:SetSliderValues(0.0, 1.0, 0.01)
GlobalOpacitySlider:SetFullWidth(true)
GlobalOpacitySlider:SetCallback("OnValueChanged", function(_, _, value) FadeDB.GlobalOpacity = value UUF:UpdateOutOfCombatFade() end)
GlobalOpacitySlider:SetRelativeWidth(0.5)
GlobalOpacitySlider:SetIsPercent(true)
Container:AddChild(GlobalOpacitySlider)

local FadeInWithTargetToggle = AG:Create("CheckBox")
FadeInWithTargetToggle:SetLabel("Fade In When Target Is Set")
FadeInWithTargetToggle:SetValue(FadeDB.FadeInWithTarget)
FadeInWithTargetToggle:SetFullWidth(true)
FadeInWithTargetToggle:SetCallback("OnValueChanged", function(_, _, value) FadeDB.FadeInWithTarget = value UUF:UpdateOutOfCombatFade() end)
FadeInWithTargetToggle:SetRelativeWidth(0.5)
Container:AddChild(FadeInWithTargetToggle)

GUIWidgets.CreateInformationTag(Container, "When enabled, frames will fade to full opacity if you have a target, even while out of combat.")

GUIWidgets.DeepDisable(Container, not FadeDB.UseGlobal, UseGlobalToggle)
end

local function CreateColourSettings(containerParent)
local Container = GUIWidgets.CreateInlineGroup(containerParent, "Colours")

Expand Down Expand Up @@ -2252,6 +2289,7 @@ local function CreateGlobalSettings(containerParent)

CreateFontSettings(GlobalContainer)
CreateTextureSettings(GlobalContainer)
CreateGlobalOutOfCombatFadeSettings(GlobalContainer)
-- CreateRangeSettings(GlobalContainer)
CreateAuraDurationSettings(GlobalContainer)

Expand Down
11 changes: 11 additions & 0 deletions Core/Core.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ function UnhaltedUnitFrames:OnInitialize()
local playerSpecalizationChangedEventFrame = CreateFrame("Frame")
playerSpecalizationChangedEventFrame:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED")
playerSpecalizationChangedEventFrame:SetScript("OnEvent", function(_, event, ...) if event == "PLAYER_SPECIALIZATION_CHANGED" then local unit = ... if unit == "player" then UUF:UpdateAllUnitFrames() end end end)

-- Combat fade event handler
UUF.CombatFadeEventFrame = CreateFrame("Frame")
UUF.CombatFadeEventFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
UUF.CombatFadeEventFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
UUF.CombatFadeEventFrame:RegisterEvent("PLAYER_TARGET_CHANGED")
UUF.CombatFadeEventFrame:SetScript("OnEvent", function(_, event, ...)
UUF:UpdateOutOfCombatFade()
end)
end

function UnhaltedUnitFrames:OnEnable()
Expand All @@ -32,4 +41,6 @@ function UnhaltedUnitFrames:OnEnable()
UUF:SpawnUnitFrame("focustarget")
UUF:SpawnUnitFrame("pet")
UUF:SpawnUnitFrame("boss")
-- Initial fade setup
UUF:UpdateOutOfCombatFade()
end
40 changes: 40 additions & 0 deletions Core/Defaults.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ local Defaults = {
Separator = "||",
ToTSeparator = "»",
UseCustomAbbreviations = false,
OutOfCombatFade = {
UseGlobal = true,
GlobalOpacity = 0.5,
FadeInWithTarget = false,
},
UIScale = {
Enabled = false,
Scale = 1.0,
Expand Down Expand Up @@ -68,6 +73,11 @@ local Defaults = {
Height = 42,
Layout = {"CENTER", "CENTER", -425.1, -275.1},
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down Expand Up @@ -267,6 +277,11 @@ local Defaults = {
Height = 42,
Layout = {"CENTER", "CENTER", 425.1, -275.1},
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down Expand Up @@ -460,6 +475,11 @@ local Defaults = {
AnchorParent = "UUF_Target",
Layout = {"TOPRIGHT", "BOTTOMRIGHT", 0, -26.1},
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down Expand Up @@ -636,6 +656,11 @@ local Defaults = {
AnchorParent = "UUF_Player",
Layout = {"BOTTOMLEFT", "TOPLEFT", 0, 36.1},
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down Expand Up @@ -813,6 +838,11 @@ local Defaults = {
AnchorParent = "UUF_Focus",
Layout = {"LEFT", "RIGHT", 1, 0},
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down Expand Up @@ -989,6 +1019,11 @@ local Defaults = {
AnchorParent = "UUF_Player",
Layout = {"TOPLEFT", "BOTTOMLEFT", 0, -26.1},
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down Expand Up @@ -1166,6 +1201,11 @@ local Defaults = {
Layout = {"CENTER", "CENTER", 550.1, -0.1, 26},
GrowthDirection = "DOWN",
FrameStrata = "LOW",
OutOfCombatFade = {
Enabled = false,
Opacity = 0.5,
FadeInWithTarget = false,
},
},
HealthBar = {
ColourByClass = true,
Expand Down
86 changes: 86 additions & 0 deletions Core/Globals.lua
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,92 @@ function UUFG:UpdateAllTags()
end
end

function UUF:UpdateOutOfCombatFade()
local inCombat = UnitAffectingCombat("player")
local hasTarget = UnitExists("target")
local fadeSettings = UUF.db.profile.General.OutOfCombatFade

-- List of units to update
local units = { "PLAYER", "TARGET", "TARGETTARGET", "FOCUS", "FOCUSTARGET", "PET" }

for _, unitKey in ipairs(units) do
local unitFrame = UUF[unitKey]
if unitFrame then
local unitName = unitKey:lower()
local unitDB = UUF.db.profile.Units[unitName]

if unitDB and unitDB.Frame then
local useGlobal = fadeSettings.UseGlobal
local fadeEnabled = false
local targetOpacity = 1.0
local fadeInWithTarget = false

if useGlobal then
fadeEnabled = true
targetOpacity = fadeSettings.GlobalOpacity or 0.5
fadeInWithTarget = fadeSettings.FadeInWithTarget or false
else
fadeEnabled = unitDB.Frame.OutOfCombatFade.Enabled
targetOpacity = unitDB.Frame.OutOfCombatFade.Opacity or 0.5
fadeInWithTarget = unitDB.Frame.OutOfCombatFade.FadeInWithTarget or false
end

-- Determine the target alpha:
-- - If in combat, always full opacity
-- - If out of combat and fade is enabled:
-- - If fadeInWithTarget is enabled and we have a target, full opacity
-- - Otherwise, use targetOpacity
local shouldFade = fadeEnabled and not inCombat
local shouldFadeInWithTarget = fadeInWithTarget and hasTarget

if shouldFade and not shouldFadeInWithTarget then
unitFrame:SetAlpha(targetOpacity)
else
unitFrame:SetAlpha(1.0)
end
end
end
end

-- Update boss frames
for i = 1, UUF.MAX_BOSS_FRAMES do
local bossFrame = UUF["BOSS" .. i]
if bossFrame then
local bossDB = UUF.db.profile.Units.boss
if bossDB and bossDB.Frame then
local useGlobal = fadeSettings.UseGlobal
local fadeEnabled = false
local targetOpacity = 1.0
local fadeInWithTarget = false

if useGlobal then
fadeEnabled = true
targetOpacity = fadeSettings.GlobalOpacity or 0.5
fadeInWithTarget = fadeSettings.FadeInWithTarget or false
else
fadeEnabled = bossDB.Frame.OutOfCombatFade.Enabled
targetOpacity = bossDB.Frame.OutOfCombatFade.Opacity or 0.5
fadeInWithTarget = bossDB.Frame.OutOfCombatFade.FadeInWithTarget or false
end

-- Determine the target alpha:
-- - If in combat, always full opacity
-- - If out of combat and fade is enabled:
-- - If fadeInWithTarget is enabled and we have a target, full opacity
-- - Otherwise, use targetOpacity
local shouldFade = fadeEnabled and not inCombat
local shouldFadeInWithTarget = fadeInWithTarget and hasTarget

if shouldFade and not shouldFadeInWithTarget then
bossFrame:SetAlpha(targetOpacity)
else
bossFrame:SetAlpha(1.0)
end
end
end
end
end

-- Thanks Details / Plater for this.
function UUF:CleanTruncateUTF8String(text)
local DetailsFramework = _G.DF
Expand Down