diff --git a/.pkgmeta b/.pkgmeta
index 74fad426..7656d8a4 100644
--- a/.pkgmeta
+++ b/.pkgmeta
@@ -15,6 +15,7 @@ externals:
Lib/LibDogTag-Stats-3.0: https://github.com/ascott18/LibDogTag-Stats-3.0.git
Lib/LibSpellRange-1.0: https://github.com/ascott18/LibSpellRange-1.0.git
+ Lib/LibCustomGlow-1.0: https://github.com/Stanzilla/LibCustomGlow.git
Lib/LibOO-1.0: https://github.com/ascott18/LibOO-1.0.git
Lib/LibRangeCheck-3.0: https://github.com/WeakAuras/LibRangeCheck-3.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d237c41..6c3069c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,5 @@
## v11.0.7
+* #1857 - Add LibCustomGlow animations.
* Fix: #2215 - Spell Charges condition not updating for countable spells without true charges.
* Fix: #2217 - Error in item cooldown conditions
* Fix: #2220 - GCD state not ending when GCD ends.
diff --git a/Components/EventHandlers/Animations/Animations.lua b/Components/EventHandlers/Animations/Animations.lua
index 627f8534..405ff6fa 100644
--- a/Components/EventHandlers/Animations/Animations.lua
+++ b/Components/EventHandlers/Animations/Animations.lua
@@ -46,6 +46,7 @@ Animations:RegisterEventDefaults{
SizeY = 30,
Thickness = 2,
Scale = 1,
+ Speed = 1,
Fade = true,
Infinite = false,
AnimColor = "7fff0000",
@@ -564,6 +565,138 @@ Animations:RegisterEventHandlerDataNonSpecific(70, "ICONBORDER", {
icon.animation_border:Hide()
end,
})
+
+local LibCustomGlow = LibStub("LibCustomGlow-1.0", true)
+if LibCustomGlow then
+ Animations:RegisterEventHandlerDataNonSpecific(71, "LCG_PIXEL", {
+ text = L["ANIM_LCG_PIXEL"],
+ desc = L["ANIM_LCG_PIXEL_DESC"],
+ ConfigFrames = {
+ "Duration",
+ "Infinite",
+ "Color",
+ "Size_anim",
+ "Thickness",
+ "Speed",
+ "AnchorTo",
+ },
+
+ Play = function(icon, eventSettings)
+ local Duration = 0
+ if eventSettings.Infinite then
+ Duration = huge
+ else
+ Duration = eventSettings.Duration
+ end
+
+ local c = TMW:StringToCachedRGBATable(eventSettings.AnimColor)
+ icon:Animations_Start{
+ eventSettings = eventSettings,
+ Start = TMW.time,
+ Duration = Duration,
+
+ Color = {c.r, c.g, c.b, c.a},
+ Thickness = eventSettings.Thickness,
+ Size = eventSettings.Size_anim,
+ Speed = eventSettings.Speed,
+ Key = tostring(eventSettings),
+
+ AnchorTo = eventSettings.AnchorTo,
+ }
+ end,
+ OnUpdate = function(icon, table)
+ if table.Duration - (TMW.time - table.Start) < 0 then
+ icon:Animations_Stop(table)
+ end
+ end,
+ OnStart = function(icon, table)
+ local target = GetAnchorOrWarn(icon, table.AnchorTo)
+ if not target.GetFrameLevel then target = icon end
+
+ LibCustomGlow.PixelGlow_Start(
+ target,
+ table.Color,
+ 8, -- number of lines. Default value is 8;
+ 0.25 * table.Speed, -- frequency, set to negative to inverse direction of rotation. Default value is 0.25;
+ nil, -- length of lines. Default value depends on region size and number of lines;
+ table.Thickness, -- thickness of lines. Default value is 2;
+ table.Size, table.Size, -- xOffset,yOffset - offset of glow relative to region border;
+ false, -- border - set to true to create border under lines;
+ table.Key -- key of glow, allows for multiple glows on one frame;
+ )
+ end,
+ OnStop = function(icon, table)
+ local target = GetAnchorOrWarn(icon, table.AnchorTo)
+ if not target.GetFrameLevel then target = icon end
+
+ LibCustomGlow.PixelGlow_Stop(target, table.Key)
+ end,
+ })
+
+ Animations:RegisterEventHandlerDataNonSpecific(72, "LCG_AUTOCAST", {
+ text = L["ANIM_LCG_AUTOCAST"],
+ desc = L["ANIM_LCG_AUTOCAST_DESC"],
+ ConfigFrames = {
+ "Duration",
+ "Infinite",
+ "Color",
+ "Size_anim",
+ "Thickness",
+ "Speed",
+ "AnchorTo",
+ },
+
+ Play = function(icon, eventSettings)
+ local Duration = 0
+ if eventSettings.Infinite then
+ Duration = huge
+ else
+ Duration = eventSettings.Duration
+ end
+
+ local c = TMW:StringToCachedRGBATable(eventSettings.AnimColor)
+ icon:Animations_Start{
+ eventSettings = eventSettings,
+ Start = TMW.time,
+ Duration = Duration,
+
+ Color = {c.r, c.g, c.b, c.a},
+ Thickness = eventSettings.Thickness,
+ Size = eventSettings.Size_anim,
+ Speed = eventSettings.Speed,
+ Key = tostring(eventSettings),
+
+ AnchorTo = eventSettings.AnchorTo,
+ }
+ end,
+ OnUpdate = function(icon, table)
+ if table.Duration - (TMW.time - table.Start) < 0 then
+ icon:Animations_Stop(table)
+ end
+ end,
+ OnStart = function(icon, table)
+ local target = GetAnchorOrWarn(icon, table.AnchorTo)
+ if not target.GetFrameLevel then target = icon end
+
+ LibCustomGlow.AutoCastGlow_Start(
+ target,
+ table.Color,
+ 4, -- number of particle groups. Each group contains 4 particles. Default value is 4;
+ 0.25 * table.Speed, -- frequency, set to negative to inverse direction of rotation. Default value is 0.125;
+ table.Thickness, -- scale - scale of particles;
+ table.Size, table.Size, -- xOffset,yOffset - offset of glow relative to region border;
+ table.Key -- key of glow, allows for multiple glows on one frame;
+ )
+ end,
+ OnStop = function(icon, table)
+ local target = GetAnchorOrWarn(icon, table.AnchorTo)
+ if not target.GetFrameLevel then target = icon end
+
+ LibCustomGlow.AutoCastGlow_Stop(target, table.Key)
+ end,
+ })
+end
+
Animations:RegisterEventHandlerDataNonSpecific(80, "ICONOVERLAYIMG", {
text = L["ANIM_ICONOVERLAYIMG"],
desc = L["ANIM_ICONOVERLAYIMG_DESC"],
@@ -769,11 +902,13 @@ TMW:RegisterCallback("TMW_ICON_ANIMATION_START", function(_, self, table)
if TMW.Locked then
-- Modify the table to play infinitely
table.Duration = math.huge
- elseif table.Duration then
- table.Duration = 5
- TMW:Print("Restricted animation duration to 5 seconds for testing")
end
end
+
+ if table.Duration == huge then
+ table.Duration = 5
+ TMW:Print("Restricted animation duration to 5 seconds for testing")
+ end
end)
diff --git a/Components/EventHandlers/Animations/Config.lua b/Components/EventHandlers/Animations/Config.lua
index 83f545b2..78913efb 100644
--- a/Components/EventHandlers/Animations/Config.lua
+++ b/Components/EventHandlers/Animations/Config.lua
@@ -64,6 +64,7 @@ end
TMW.IE:RegisterRapidSetting("Duration")
TMW.IE:RegisterRapidSetting("Magnitude")
TMW.IE:RegisterRapidSetting("Period")
+TMW.IE:RegisterRapidSetting("Speed")
TMW.IE:RegisterRapidSetting("Thickness")
TMW.IE:RegisterRapidSetting("Size_anim")
TMW.IE:RegisterRapidSetting("Scale")
diff --git a/Components/EventHandlers/Animations/Config.xml b/Components/EventHandlers/Animations/Config.xml
index b9c7d54f..de89b505 100644
--- a/Components/EventHandlers/Animations/Config.xml
+++ b/Components/EventHandlers/Animations/Config.xml
@@ -229,6 +229,25 @@
+
+
+
+ TMW:CInit(self)
+
+ self:SetTexts(TMW.L["UIPANEL_SPEED"])
+ self:SetSetting("Speed")
+
+ self:SetMode(self.MODE_ADJUSTING)
+ self:SetMinMaxValues(0.1, 10)
+ self:SetValueStep(0.01)
+ self:SetRange(1)
+ self:SetTextFormatter(TMW.C.Formatter.PERCENT100, TMW.C.Formatter.PASS)
+
+ self:UseLightColor()
+
+
+
+
diff --git a/Localization/TellMeWhen-enUS.lua b/Localization/TellMeWhen-enUS.lua
index 74a33f71..57e7d10e 100755
--- a/Localization/TellMeWhen-enUS.lua
+++ b/Localization/TellMeWhen-enUS.lua
@@ -1143,6 +1143,7 @@ L["UIPANEL_RELATIVEPOINT2_DESC"] = "Anchor the group to the %s of the anchor tar
L["ASCENDING"] = "Ascending"
L["DESCENDING"] = "Descending"
L["UIPANEL_SCALE"] = "Scale"
+L["UIPANEL_SPEED"] = "Speed"
L["UIPANEL_LEVEL"] = "Frame Level"
L["UIPANEL_LEVEL_DESC"] = "The level within the group's strata that it should be drawn on."
L["UIPANEL_STRATA"] = "Strata"
@@ -2433,6 +2434,12 @@ L["ANIM_ICONBORDER"] = "Icon: Border"
L["ANIM_ICONBORDER_DESC"] = "Overlays a colored border on the icon."
L["ANIM_ICONOVERLAYIMG"] = "Icon: Image Overlay"
L["ANIM_ICONOVERLAYIMG_DESC"] = "Overlays a custom image over the icon."
+
+L["ANIM_LCG_PIXEL"] = "Icon: Pixel Border"
+L["ANIM_LCG_PIXEL_DESC"] = "Overlays the LibCustomGlow animated pixel border."
+L["ANIM_LCG_AUTOCAST"] = "Icon: Autocast Border"
+L["ANIM_LCG_AUTOCAST_DESC"] = "Overlays an effect similar to the pet autocasting indicator animation."
+
L["ANIM_ICONCLEAR"] = "Icon: Stop Animations"
L["ANIM_ICONCLEAR_DESC"] = "Stops all animations that are playing on the current icon."
diff --git a/Options/CHANGELOG.lua b/Options/CHANGELOG.lua
index 2686efc4..38fc4f27 100644
--- a/Options/CHANGELOG.lua
+++ b/Options/CHANGELOG.lua
@@ -4,6 +4,7 @@ TMW.CHANGELOG_LASTVER="10.0.0"
TMW.CHANGELOG = [==[
## v11.0.7
+* #1857 - Add LibCustomGlow animations.
* Fix: #2215 - Spell Charges condition not updating for countable spells without true charges.
* Fix: #2217 - Error in item cooldown conditions
* Fix: #2220 - GCD state not ending when GCD ends.
diff --git a/TellMeWhen-Cata.toc b/TellMeWhen-Cata.toc
index cdf3d628..d5af674d 100644
--- a/TellMeWhen-Cata.toc
+++ b/TellMeWhen-Cata.toc
@@ -33,11 +33,11 @@
## Notes-ruRU: Визуальные, звуковые и текстовые оповещения о готовности заклинаний, способностей, наличии баффов\дебаффов и многого другого.
## Notes-esES: Proporciona notificaciones visuales, auditivas y textuales sobre tiempos de reutilización, ventajas y básicamente cualquier otra cosa.
-## OptionalDeps: Masque, Ace3, OmniCC, tullaCC, sct, sctd, MikScrollingBattleText, Parrot, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, ElvUI, DBM-Core, BigWigs
+## OptionalDeps: Masque, Ace3, OmniCC, tullaCC, sct, sctd, MikScrollingBattleText, Parrot, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, LibCustomGlow-1.0, ElvUI, DBM-Core, BigWigs
# The per character settings are the old settings, but we still need them to upgrade to the new ones. If they aren't defined, then they will be deleted immediately
## SavedVariablesPerCharacter: TellMeWhen_Settings
## SavedVariables: TellMeWhenDB
-## X-Embeds: LibStub, Ace3, LibSharedMedia-3.0, LibDataBroker-1.1, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0
+## X-Embeds: LibStub, Ace3, LibSharedMedia-3.0, LibDataBroker-1.1, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, LibCustomGlow-1.0
## X-Category: Combat
includes.xml
diff --git a/TellMeWhen-Classic.toc b/TellMeWhen-Classic.toc
index fd0e23a6..97a30a94 100644
--- a/TellMeWhen-Classic.toc
+++ b/TellMeWhen-Classic.toc
@@ -33,11 +33,11 @@
## Notes-ruRU: Визуальные, звуковые и текстовые оповещения о готовности заклинаний, способностей, наличии баффов\дебаффов и многого другого.
## Notes-esES: Proporciona notificaciones visuales, auditivas y textuales sobre tiempos de reutilización, ventajas y básicamente cualquier otra cosa.
-## OptionalDeps: Masque, Ace3, OmniCC, tullaCC, sct, sctd, MikScrollingBattleText, Parrot, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, ElvUI, DBM-Core, BigWigs
+## OptionalDeps: Masque, Ace3, OmniCC, tullaCC, sct, sctd, MikScrollingBattleText, Parrot, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, LibCustomGlow-1.0, ElvUI, DBM-Core, BigWigs
# The per character settings are the old settings, but we still need them to upgrade to the new ones. If they aren't defined, then they will be deleted immediately
## SavedVariablesPerCharacter: TellMeWhen_Settings
## SavedVariables: TellMeWhenDB
-## X-Embeds: LibStub, Ace3, LibSharedMedia-3.0, LibDataBroker-1.1, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0
+## X-Embeds: LibStub, Ace3, LibSharedMedia-3.0, LibDataBroker-1.1, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, LibCustomGlow-1.0
## X-Category: Combat
includes.xml
diff --git a/TellMeWhen.toc b/TellMeWhen.toc
index a7566c43..3498d0f5 100644
--- a/TellMeWhen.toc
+++ b/TellMeWhen.toc
@@ -33,11 +33,11 @@
## Notes-ruRU: Визуальные, звуковые и текстовые оповещения о готовности заклинаний, способностей, наличии баффов\дебаффов и многого другого.
## Notes-esES: Proporciona notificaciones visuales, auditivas y textuales sobre tiempos de reutilización, ventajas y básicamente cualquier otra cosa.
-## OptionalDeps: Masque, Ace3, OmniCC, tullaCC, sct, sctd, MikScrollingBattleText, Parrot, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, ElvUI, DBM-Core, BigWigs
+## OptionalDeps: Masque, Ace3, OmniCC, tullaCC, sct, sctd, MikScrollingBattleText, Parrot, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, LibCustomGlow-1.0, ElvUI, DBM-Core, BigWigs
# The per character settings are the old settings, but we still need them to upgrade to the new ones. If they aren't defined, then they will be deleted immediately
## SavedVariablesPerCharacter: TellMeWhen_Settings
## SavedVariables: TellMeWhenDB
-## X-Embeds: LibStub, Ace3, LibSharedMedia-3.0, LibDataBroker-1.1, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0
+## X-Embeds: LibStub, Ace3, LibSharedMedia-3.0, LibDataBroker-1.1, DRList-1.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibDogTag-Stats-3.0, LibSpellRange-1.0, LibOO-1.0, LibRangeCheck-3.0, LibBabble-CreatureType-3.0, LibBabble-Race-3.0, LibCustomGlow-1.0
## X-Category: Combat
includes.xml
diff --git a/includes.xml b/includes.xml
index 0252c9a9..536ba4dc 100644
--- a/includes.xml
+++ b/includes.xml
@@ -24,6 +24,7 @@
+