11local ADDON_NAME = ...
22
33OvershieldsReforged .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
911local function RegisterCanvas (frame )
@@ -63,6 +65,87 @@ function OvershieldsReforged:CreateCheckbox(option, label, parent)
6365 return cb
6466end
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+
66149function 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