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 @@ +