Skip to content

Commit ff93b12

Browse files
committed
rudimentary color/blend for overlay
1 parent 4a8f88c commit ff93b12

File tree

2 files changed

+106
-5
lines changed

2 files changed

+106
-5
lines changed

CompactUnitFrame_Update.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,18 @@ ns.HandleCompactUnitFrame_Update = function(frame)
4848
absorbOverlay:SetPoint("TOPRIGHT", healthBar, "TOPRIGHT", 0, 0)
4949
absorbOverlay:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", 0, 0)
5050

51-
local absorbOverlayWidth = (showAbsorb / maxHealth) * healthBarWidth
51+
local absorbOverlayWidth = math.min((showAbsorb / maxHealth) * healthBarWidth, healthBarWidth)
5252
absorbOverlay:SetWidth(absorbOverlayWidth)
5353
absorbOverlay:SetTexCoord(0, absorbOverlayWidth / absorbOverlay.tileSize, 0,
5454
healthBarHeight / absorbOverlay.tileSize)
5555
absorbOverlay:SetAlpha(db.overshieldOverlayAlpha)
56+
57+
-- Apply custom color and blend mode to absorbOverlay
58+
local color = db.absorbOverlayColor
59+
absorbOverlay:SetDesaturated(true)
60+
absorbOverlay:SetVertexColor(color.r, color.g, color.b, color.a)
61+
absorbOverlay:SetBlendMode(db.absorbOverlayBlendMode)
62+
5663
absorbOverlay:Show()
5764
else
5865
absorbOverlay:Hide()

Options.lua

Lines changed: 98 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
local ADDON_NAME = ...
22

33
OvershieldsReforged.defaults = {
4-
overshieldTickAlpha = 0.6, -- edge‑of‑bar tick glow alpha
5-
overshieldOverlayAlpha = 0.6, -- full‑bar overlay alpha
6-
showTickWhenNotFullHealth = true, -- show tick when unit is not at full health
4+
overshieldTickAlpha = 0.6, -- edge‑of‑bar tick glow alpha
5+
overshieldOverlayAlpha = 0.6, -- full‑bar overlay alpha
6+
showTickWhenNotFullHealth = true, -- show tick when unit is not at full health
7+
absorbOverlayColor = { r = 0, g = 0, b = 1, a = 1 }, -- default color
8+
absorbOverlayBlendMode = "BLEND", -- default blend mode
79
}
810

911
local function RegisterCanvas(frame)
@@ -63,6 +65,87 @@ function OvershieldsReforged:CreateCheckbox(option, label, parent)
6365
return cb
6466
end
6567

68+
local function ShowColorPicker(option, label, parent)
69+
local btn = CreateFrame("Button", nil, parent, "UIPanelButtonTemplate")
70+
btn:SetText(label)
71+
btn:SetWidth(200)
72+
73+
local function UpdateColor(r, g, b, a)
74+
OvershieldsReforged.db[option] = { r = r, g = g, b = b, a = a }
75+
btn:SetText(string.format("%s: %.2f, %.2f, %.2f", label, r, g, b))
76+
end
77+
78+
btn:SetScript("OnClick", function()
79+
local color = OvershieldsReforged.db[option]
80+
local options = {
81+
swatchFunc = function()
82+
local r, g, b = ColorPickerFrame:GetColorRGB()
83+
local a = ColorPickerFrame:GetColorAlpha()
84+
UpdateColor(r, g, b, a)
85+
end,
86+
opacityFunc = function()
87+
local r, g, b = ColorPickerFrame:GetColorRGB()
88+
local a = ColorPickerFrame:GetColorAlpha()
89+
UpdateColor(r, g, b, a)
90+
end,
91+
cancelFunc = function(previousValues)
92+
UpdateColor(previousValues.r, previousValues.g, previousValues.b, previousValues.a)
93+
end,
94+
hasOpacity = true,
95+
opacity = color.a,
96+
r = color.r,
97+
g = color.g,
98+
b = color.b,
99+
}
100+
ColorPickerFrame:SetupColorPickerAndShow(options)
101+
end)
102+
103+
-- Initialize button text
104+
local color = OvershieldsReforged.db[option]
105+
btn:SetText(string.format("%s: %.2f, %.2f, %.2f", label, color.r, color.g, color.b))
106+
107+
-- Reset callback
108+
EventRegistry:RegisterCallback(ADDON_NAME .. ".OnReset", function()
109+
local default = OvershieldsReforged.defaults[option]
110+
UpdateColor(default.r, default.g, default.b, default.a)
111+
end, btn)
112+
113+
return btn
114+
end
115+
116+
function OvershieldsReforged:CreateDropdown(option, label, parent, values)
117+
local dropdown = CreateFrame("Frame", nil, parent, "UIDropDownMenuTemplate")
118+
local text = parent:CreateFontString(nil, "ARTWORK", "GameFontNormal")
119+
text:SetText(label)
120+
text:SetPoint("LEFT", dropdown, "RIGHT", -10, 0)
121+
122+
UIDropDownMenu_SetWidth(dropdown, 150)
123+
UIDropDownMenu_Initialize(dropdown, function(self, level)
124+
for _, value in ipairs(values) do
125+
local info = UIDropDownMenu_CreateInfo()
126+
info.text = value
127+
info.value = value
128+
info.func = function()
129+
OvershieldsReforged.db[option] = value
130+
UIDropDownMenu_SetText(dropdown, value)
131+
end
132+
info.checked = (OvershieldsReforged.db[option] == value)
133+
UIDropDownMenu_AddButton(info, level)
134+
end
135+
end)
136+
137+
UIDropDownMenu_SetText(dropdown, OvershieldsReforged.db[option])
138+
139+
-- Reset callback
140+
EventRegistry:RegisterCallback(ADDON_NAME .. ".OnReset", function()
141+
local default = OvershieldsReforged.defaults[option]
142+
OvershieldsReforged.db[option] = default
143+
UIDropDownMenu_SetText(dropdown, default)
144+
end, dropdown)
145+
146+
return dropdown
147+
end
148+
66149
function OvershieldsReforged:InitializeOptions()
67150
self.panel_main = CreateFrame("Frame")
68151
self.panel_main.name = "OvershieldsReforged"
@@ -84,9 +167,20 @@ function OvershieldsReforged:InitializeOptions()
84167
self.panel_main)
85168
showTickCheckbox:SetPoint("TOPLEFT", overlay, "BOTTOMLEFT", 0, -30)
86169

170+
-- Absorb overlay color picker
171+
local colorPicker = ShowColorPicker("absorbOverlayColor", "Absorb Overlay Color", self.panel_main)
172+
colorPicker:SetPoint("TOPLEFT", showTickCheckbox, "BOTTOMLEFT", 0, -30)
173+
174+
-- Absorb overlay blend mode dropdown
175+
local blendModeDropdown = self:CreateDropdown("absorbOverlayBlendMode", "Absorb Overlay Blend Mode", self.panel_main,
176+
{
177+
"DISABLE", "BLEND", "ALPHAKEY", "ADD", "MOD"
178+
})
179+
blendModeDropdown:SetPoint("TOPLEFT", colorPicker, "BOTTOMLEFT", 0, -30)
180+
87181
-- Reset button
88182
local btn = CreateFrame("Button", nil, self.panel_main, "UIPanelButtonTemplate")
89-
btn:SetPoint("TOPLEFT", showTickCheckbox, "BOTTOMLEFT", 0, -40)
183+
btn:SetPoint("TOPLEFT", blendModeDropdown, "BOTTOMLEFT", 0, -40)
90184
btn:SetText(RESET)
91185
btn:SetWidth(100)
92186
btn:SetScript("OnClick", function()

0 commit comments

Comments
 (0)