diff --git a/SVUI_!Core/assets/textures/NPC-NAMETAG.blp b/SVUI_!Core/assets/textures/NPC-NAMETAG.blp new file mode 100644 index 0000000..b6c4077 Binary files /dev/null and b/SVUI_!Core/assets/textures/NPC-NAMETAG.blp differ diff --git a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua index de18eb2..52bfb1b 100644 --- a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua +++ b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua @@ -541,18 +541,43 @@ local function CheckForDeprecated(oldKey) end end +-- local function GenerateProfileKey(key) +-- local safeKey = key or PRIVATE_SV.SAFEDATA.CurrentProfile; +-- key = safeKey or "Default"; +-- if(key and key:find(playerName)) then +-- safeKey = safeKey or ("%s - %s"):format(playerName, "Default"); +-- if(not GLOBAL_SV.profileRealms[safeKey]) then +-- GLOBAL_SV.profileRealms[safeKey] = playerRealm; +-- elseif(GLOBAL_SV.profileRealms[safeKey] ~= playerRealm) then +-- if(not safeKey:find(playerRealm)) then +-- safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, "Default"); +-- end +-- GLOBAL_SV.profileRealms[safeKey] = playerRealm; +-- end +-- end + +-- PRIVATE_SV.SAFEDATA.CurrentProfile = safeKey +-- return safeKey +-- end + local function GenerateProfileKey(key) - local safeKey = key or PRIVATE_SV.SAFEDATA.CurrentProfile; - if(not safeKey) then safeKey = ("%s - %s"):format(playerName, "Default"); end + local safeKey = key; + if(not safeKey) then + safeKey = PRIVATE_SV.SAFEDATA.CurrentProfile or ("%s - %s"):format(playerName, "Default"); + end + key = key or "Default"; if(not GLOBAL_SV.profileRealms[safeKey]) then GLOBAL_SV.profileRealms[safeKey] = playerRealm; - elseif(GLOBAL_SV.profileRealms[safeKey] ~= playerRealm) then - if(not safeKey:find(playerRealm)) then - safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, "Default"); + elseif(safeKey:find(playerName) and GLOBAL_SV.profileRealms[safeKey] ~= playerRealm) then + if(key:find(playerName)) then + safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, "Default"); + else + safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, key); end GLOBAL_SV.profileRealms[safeKey] = playerRealm; end PRIVATE_SV.SAFEDATA.CurrentProfile = safeKey + return safeKey end diff --git a/SVUI_!Core/system/funstuff.lua b/SVUI_!Core/system/funstuff.lua index 0b1a830..9c45bfd 100644 --- a/SVUI_!Core/system/funstuff.lua +++ b/SVUI_!Core/system/funstuff.lua @@ -29,6 +29,8 @@ local format = string.format; local find = string.find; --MATH local math = _G.math; +local min = math.min; +local max = math.max; local random = math.random; --BLIZZARD API local CreateFrame = _G.CreateFrame; @@ -61,17 +63,28 @@ NPC ]]-- SV.NPC = _G["SVUI_NPCFrame"]; -local talkAnims = {60,64,65}; +local talkAnims = {60,64,65,67}; local function NPCTalking() local timer = 0; local sequence = random(1, #talkAnims); - SV.NPC.ModelLeft:SetAnimation(talkAnims[sequence],0) - SV.NPC.ModelLeft:SetScript("OnUpdate",function(self,e) + SV.NPC.Model:ClearModel() + SV.NPC.Model:SetUnit('target') + SV.NPC.Model:SetCamDistanceScale(1) + SV.NPC.Model:SetPortraitZoom(0.95) + SV.NPC.Model:SetPosition(0,0,0) + SV.NPC.Model:SetAnimation(talkAnims[sequence],0) + SV.NPC.Model:SetScript("OnUpdate",function(self,e) if(timer < 2000) then timer = (timer + (e*1000)) else timer = 0; + self:ClearModel() + self:SetUnit('player') + self:SetCamDistanceScale(1) + self:SetPortraitZoom(0.95) + self:SetPosition(0.15,0,0) + self:SetRotation(-1) self:SetAnimation(0) self:SetScript("OnUpdate", nil) end @@ -81,12 +94,26 @@ end local function PlayerTalking() local timer = 0; local sequence = random(1, #talkAnims); - SV.NPC.ModelRight:SetAnimation(talkAnims[sequence],0) - SV.NPC.ModelRight:SetScript("OnUpdate",function(self,e) + SV.NPC.Model:ClearModel() + SV.NPC.Model:SetUnit('player') + SV.NPC.Model:SetCamDistanceScale(1) + SV.NPC.Model:SetPortraitZoom(0.95) + SV.NPC.Model:SetPosition(0.15,0,0) + SV.NPC.Model:SetRotation(-1) + SV.NPC.Model:SetAnimation(talkAnims[sequence],0) + SV.NPC.Model:SetScript("OnUpdate",function(self,e) if(timer < 2000) then timer = (timer + (e*1000)) else timer = 0; + if(UnitExists("target")) then + self:ClearModel() + self:SetUnit('target') + self:SetCamDistanceScale(1) + self:SetPortraitZoom(0.95) + self:SetPosition(0,0,0) + self:SetRotation(0) + end self:SetAnimation(0) self:SetScript("OnUpdate", nil) end @@ -96,9 +123,14 @@ end function SV.NPC:NPCTalksFirst() if(InCombatLockdown() or (not SV.db.FunStuff.NPC) or (not UnitExists("target"))) then return end local timer = 0; - local sequence = random(1, #talkAnims); - self.ModelLeft:SetAnimation(talkAnims[sequence],0) - self.ModelLeft:SetScript("OnUpdate",function(self,e) + self.Model:ClearModel() + self.Model:SetUnit('target') + self.Model:SetCamDistanceScale(1) + self.Model:SetPortraitZoom(0.95) + self.Model:SetPosition(0,0,0) + self.Model:SetRotation(0) + self.Model:SetAnimation(67) + self.Model:SetScript("OnUpdate",function(self,e) if(timer < 2000) then timer = (timer + (e*1000)) else @@ -113,9 +145,14 @@ end function SV.NPC:PlayerTalksFirst() if(InCombatLockdown() or (not SV.db.FunStuff.NPC) or (not UnitExists("target"))) then return end local timer = 0; - local sequence = random(1, #talkAnims); - self.ModelRight:SetAnimation(talkAnims[sequence],0) - self.ModelRight:SetScript("OnUpdate",function(self,e) + self.Model:ClearModel() + self.Model:SetUnit('player') + self.Model:SetCamDistanceScale(1) + self.Model:SetPortraitZoom(0.95) + self.Model:SetPosition(0.15,0,0) + self.Model:SetRotation(-1) + self.Model:SetAnimation(67) + self.Model:SetScript("OnUpdate",function(self,e) if(timer < 2000) then timer = (timer + (e*1000)) else @@ -127,7 +164,13 @@ function SV.NPC:PlayerTalksFirst() end) end -function SV.NPC:Toggle(parentFrame) +local SetNPCText = function(self, text) + self:Hide() + SV.NPC.InfoTop.Text:SetText(text) + SV.NPC.InfoTop:Show() +end + +function SV.NPC:Toggle(parentFrame, textFrame) if(InCombatLockdown() or (not SV.db.FunStuff.NPC) or (not UnitExists("target"))) then return end local timer = 0; if(parentFrame) then @@ -136,32 +179,39 @@ function SV.NPC:Toggle(parentFrame) self:SetAllPoints(parentFrame) self:Show(); self:SetAlpha(1); - if(parentFrame:GetLeft() < 150) then - local a1,p,a2,x,y = parentFrame:GetPoint() - parentFrame:ClearAllPoints(); - parentFrame:SetPoint(a1,p,a2,x + 150,y) - end - self.ModelLeft:ClearModel() - self.ModelLeft:SetUnit('target') - self.ModelLeft:SetCamDistanceScale(1) - self.ModelLeft:SetPortraitZoom(0.95) - self.ModelLeft:SetPosition(0,0,0) - - self.ModelRight:ClearModel() - self.ModelRight:SetUnit('player') - self.ModelRight:SetCamDistanceScale(1) - self.ModelRight:SetPortraitZoom(0.95) - self.ModelRight:SetPosition(0.2,0,0) - self.ModelRight:SetRotation(-1) + self.Model:ClearModel() + self.Model:SetUnit('target') + self.Model:SetCamDistanceScale(1) + self.Model:SetPortraitZoom(0.95) + self.Model:SetPosition(0,0,0) + + if(textFrame and textFrame.GetText) then + local text = textFrame:GetText() + textFrame:Hide() + self.InfoTop.Text:SetText(text) + self.InfoTop:Show() + else + self.InfoTop:Hide() + end SV.NPC:NPCTalksFirst() else - self.ModelRight:SetScript("OnUpdate", nil) + self.Model:SetScript("OnUpdate", nil) self:SetAlpha(0); + self.InfoTop:Hide(); self:Hide(); end end + +function SV.NPC:Register(parentFrame, textFrame) + if(not SV.db.FunStuff.NPC) then return end + parentFrame:HookScript('OnShow', function() SV.NPC:Toggle(parentFrame, textFrame) end) + parentFrame:HookScript('OnHide', function() SV.NPC:Toggle() end) + if(textFrame and textFrame.SetText) then + hooksecurefunc(textFrame, "SetText", SetNPCText) + end +end --[[ ########################################################## AFK @@ -680,8 +730,30 @@ local function InitializeFunStuff() gamemenu:SetScript("OnShow", GameMenu_Activate) local npc = SV.NPC; - npc.ModelLeft:SetStyle("Frame", "Model", false, 5, 3, 3) - npc.ModelRight:SetStyle("Frame", "Model", false, 3, 3, 3) + npc.Model:SetStyle("Frame", "Model", false, 5, 3, 3) + npc.InfoTop = CreateFrame("Frame", nil, npc) + npc.InfoTop:SetPoint("BOTTOMLEFT", npc.Model, "BOTTOMRIGHT", 2, 22) + npc.InfoTop:SetSize(196, 98) + npc.InfoTop:SetBackdrop({ + bgFile = [[Interface\AddOns\SVUI_!Core\assets\textures\NPC-NAMETAG]], + tile = false, + tileSize = 0, + edgeFile = [[Interface\AddOns\SVUI_!Core\assets\textures\EMPTY]], + edgeSize = 1, + insets = + { + left = 0, + right = 0, + top = 0, + bottom = 0, + }, + }); + npc.InfoTop:SetBackdropColor(1, 1, 0, 1) + npc.InfoTop:SetFrameLevel(npc:GetFrameLevel() + 1) + + npc.InfoTop.Text = npc.InfoTop:CreateFontString(nil, "OVERLAY", "GameFontHighlight") + npc.InfoTop.Text:SetPoint("TOPLEFT", npc.InfoTop, "TOPLEFT", 0, -33) + npc.InfoTop.Text:SetPoint("BOTTOMRIGHT", npc.InfoTop, "BOTTOMRIGHT", 0, 0) end SV.Events:On("CORE_INITIALIZED", InitializeFunStuff); diff --git a/SVUI_!Core/xml/widgets.xml b/SVUI_!Core/xml/widgets.xml index a5b4042..d421e8e 100644 --- a/SVUI_!Core/xml/widgets.xml +++ b/SVUI_!Core/xml/widgets.xml @@ -849,16 +849,10 @@ <Frame name="SVUI_NPCFrame" hidden="true"> <Size x="384" y="512"/> <Frames> - <PlayerModel name="$parentModelLeft" parentKey="ModelLeft" frameStrata="HIGH"> - <Size x="150" y="256"/> - <Anchors> - <Anchor point="RIGHT" relativeTo="$parent" relativePoint="LEFT" x="-6" y="0" /> - </Anchors> - </PlayerModel> - <PlayerModel name="$parentModelRight" parentKey="ModelRight" frameStrata="HIGH"> - <Size x="150" y="256"/> + <PlayerModel name="$parentModel" parentKey="Model" frameStrata="HIGH"> + <Size x="100" y="100"/> <Anchors> - <Anchor point="LEFT" relativeTo="$parent" relativePoint="RIGHT" x="6" y="0" /> + <Anchor point="BOTTOM" relativeTo="$parent" relativePoint="TOPLEFT" x="40" y="-50" /> </Anchors> </PlayerModel> </Frames> diff --git a/SVUI_!Options/SVUI_!Options.lua b/SVUI_!Options/SVUI_!Options.lua index 1e8bc57..76903a2 100644 --- a/SVUI_!Options/SVUI_!Options.lua +++ b/SVUI_!Options/SVUI_!Options.lua @@ -216,6 +216,7 @@ local function RefreshProfileOptions() optionGroup.delete = { order = 11, type = "select", + width = "full", name = L["delete"], desc = L["delete_sub"], get = function() return " SELECT ONE" end, diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua deleted file mode 100644 index 2a64013..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua +++ /dev/null @@ -1,238 +0,0 @@ ---[[ $Id: CallbackHandler-1.0.lua 18 2014-10-16 02:52:20Z mikk $ ]] -local MAJOR, MINOR = "CallbackHandler-1.0", 6 -local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) - -if not CallbackHandler then return end -- No upgrade needed - -local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} - --- Lua APIs -local tconcat = table.concat -local assert, error, loadstring = assert, error, loadstring -local setmetatable, rawset, rawget = setmetatable, rawset, rawget -local next, select, pairs, type, tostring = next, select, pairs, type, tostring - --- Global vars/functions that we don't upvalue since they might get hooked, or upgraded --- List them here for Mikk's FindGlobals script --- GLOBALS: geterrorhandler - -local xpcall = xpcall - -local function errorhandler(err) - return geterrorhandler()(err) -end - -local function CreateDispatcher(argCount) - local code = [[ - local next, xpcall, eh = ... - - local method, ARGS - local function call() method(ARGS) end - - local function dispatch(handlers, ...) - local index - index, method = next(handlers) - if not method then return end - local OLD_ARGS = ARGS - ARGS = ... - repeat - xpcall(call, eh) - index, method = next(handlers, index) - until not method - ARGS = OLD_ARGS - end - - return dispatch - ]] - - local ARGS, OLD_ARGS = {}, {} - for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end - code = code:gsub("OLD_ARGS", tconcat(OLD_ARGS, ", ")):gsub("ARGS", tconcat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler) -end - -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) - --------------------------------------------------------------------------- --- CallbackHandler:New --- --- target - target object to embed public APIs in --- RegisterName - name of the callback registration API, default "RegisterCallback" --- UnregisterName - name of the callback unregistration API, default "UnregisterCallback" --- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API. - -function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName) - - RegisterName = RegisterName or "RegisterCallback" - UnregisterName = UnregisterName or "UnregisterCallback" - if UnregisterAllName==nil then -- false is used to indicate "don't want this method" - UnregisterAllName = "UnregisterAllCallbacks" - end - - -- we declare all objects and exported APIs inside this closure to quickly gain access - -- to e.g. function names, the "target" parameter, etc - - - -- Create the registry object - local events = setmetatable({}, meta) - local registry = { recurse=0, events=events } - - -- registry:Fire() - fires the given event/message into the registry - function registry:Fire(eventname, ...) - if not rawget(events, eventname) or not next(events[eventname]) then return end - local oldrecurse = registry.recurse - registry.recurse = oldrecurse + 1 - - Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...) - - registry.recurse = oldrecurse - - if registry.insertQueue and oldrecurse==0 then - -- Something in one of our callbacks wanted to register more callbacks; they got queued - for eventname,callbacks in pairs(registry.insertQueue) do - local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. - for self,func in pairs(callbacks) do - events[eventname][self] = func - -- fire OnUsed callback? - if first and registry.OnUsed then - registry.OnUsed(registry, target, eventname) - first = nil - end - end - end - registry.insertQueue = nil - end - end - - -- Registration of a callback, handles: - -- self["method"], leads to self["method"](self, ...) - -- self with function ref, leads to functionref(...) - -- "addonId" (instead of self) with function ref, leads to functionref(...) - -- all with an optional arg, which, if present, gets passed as first argument (after self if present) - target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]]) - if type(eventname) ~= "string" then - error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2) - end - - method = method or eventname - - local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten. - - if type(method) ~= "string" and type(method) ~= "function" then - error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2) - end - - local regfunc - - if type(method) == "string" then - -- self["method"] calling style - if type(self) ~= "table" then - error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2) - elseif self==target then - error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2) - elseif type(self[method]) ~= "function" then - error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2) - end - - if select("#",...)>=1 then -- this is not the same as testing for arg==nil! - local arg=select(1,...) - regfunc = function(...) self[method](self,arg,...) end - else - regfunc = function(...) self[method](self,...) end - end - else - -- function ref with self=object or self="addonId" or self=thread - if type(self)~="table" and type(self)~="string" and type(self)~="thread" then - error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2) - end - - if select("#",...)>=1 then -- this is not the same as testing for arg==nil! - local arg=select(1,...) - regfunc = function(...) method(arg,...) end - else - regfunc = method - end - end - - - if events[eventname][self] or registry.recurse<1 then - -- if registry.recurse<1 then - -- we're overwriting an existing entry, or not currently recursing. just set it. - events[eventname][self] = regfunc - -- fire OnUsed callback? - if registry.OnUsed and first then - registry.OnUsed(registry, target, eventname) - end - else - -- we're currently processing a callback in this registry, so delay the registration of this new entry! - -- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency - registry.insertQueue = registry.insertQueue or setmetatable({},meta) - registry.insertQueue[eventname][self] = regfunc - end - end - - -- Unregister a callback - target[UnregisterName] = function(self, eventname) - if not self or self==target then - error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2) - end - if type(eventname) ~= "string" then - error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2) - end - if rawget(events, eventname) and events[eventname][self] then - events[eventname][self] = nil - -- Fire OnUnused callback? - if registry.OnUnused and not next(events[eventname]) then - registry.OnUnused(registry, target, eventname) - end - end - if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then - registry.insertQueue[eventname][self] = nil - end - end - - -- OPTIONAL: Unregister all callbacks for given selfs/addonIds - if UnregisterAllName then - target[UnregisterAllName] = function(...) - if select("#",...)<1 then - error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2) - end - if select("#",...)==1 and ...==target then - error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2) - end - - - for i=1,select("#",...) do - local self = select(i,...) - if registry.insertQueue then - for eventname, callbacks in pairs(registry.insertQueue) do - if callbacks[self] then - callbacks[self] = nil - end - end - end - for eventname, callbacks in pairs(events) do - if callbacks[self] then - callbacks[self] = nil - -- Fire OnUnused callback? - if registry.OnUnused and not next(callbacks) then - registry.OnUnused(registry, target, eventname) - end - end - end - end - end - end - - return registry -end - - --- CallbackHandler purposefully does NOT do explicit embedding. Nor does it --- try to upgrade old implicit embeds since the system is selfcontained and --- relies on closures to work. - diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml b/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml deleted file mode 100644 index 876df83..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml +++ /dev/null @@ -1,4 +0,0 @@ -<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ -..\FrameXML\UI.xsd"> - <Script file="CallbackHandler-1.0.lua"/> -</Ui> \ No newline at end of file diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt b/SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt deleted file mode 100644 index 59094a0..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt +++ /dev/null @@ -1,17 +0,0 @@ -tag 0.27 -e9f4cff39c93f597bcf285af8990cc6c634ba3c1 -Hendrik Leppkes <h.leppkes@gmail.com> -2015-06-23 15:47:08 +0200 - -Tag as 0.27 - - --------------------- - -Hendrik Leppkes: - - The year is 2015 - - Update TOC for 6.2 - - Remove unused function - - Fix leaked global - - Update charge cooldown handling for 6.2 - - Remove obsolete overlay glow variables diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua index 9a62432..da6fd9f 100644 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua +++ b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua @@ -3,16 +3,16 @@ Copyright (c) 2010-2014, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com> All rights reserved. -Redistribution and use in source and binary forms, with or without +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the developer nor the names of its contributors - may be used to endorse or promote products derived from this software without + * Neither the name of the developer nor the names of its contributors + may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS @@ -29,7 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ]] local MAJOR_VERSION = "LibActionButton-1.0" -local MINOR_VERSION = 61 +local MINOR_VERSION = 57 if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) @@ -55,11 +55,9 @@ local str_match, format, tinsert, tremove = string.match, format, tinsert, tremo -- GLOBALS: GetItemIcon, GetItemCount, GetItemCooldown, IsEquippedItem, IsCurrentItem, IsUsableItem, IsConsumableItem, IsItemInRange -- GLOBALS: GetActionCharges, IsItemAction, GetSpellCharges -- GLOBALS: RANGE_INDICATOR, ATTACK_BUTTON_FLASH_TIME, TOOLTIP_UPDATE_TIME --- GLOBALS: DraenorZoneAbilityFrame, HasDraenorZoneAbility, GetLastDraenorSpellTexture local KeyBound = LibStub("LibKeyBound-1.0", true) local CBH = LibStub("CallbackHandler-1.0") -local LBG = LibStub("LibButtonGlow-1.0", true) lib.eventFrame = lib.eventFrame or CreateFrame("Frame") lib.eventFrame:UnregisterAllEvents() @@ -69,8 +67,8 @@ lib.activeButtons = lib.activeButtons or {} lib.actionButtons = lib.actionButtons or {} lib.nonActionButtons = lib.nonActionButtons or {} -lib.ChargeCooldowns = lib.ChargeCooldowns or {} -lib.NumChargeCooldowns = lib.NumChargeCooldowns or 0 +lib.unusedOverlayGlows = lib.unusedOverlayGlows or {} +lib.numOverlays = lib.numOverlays or 0 lib.ACTION_HIGHLIGHT_MARKS = lib.ACTION_HIGHLIGHT_MARKS or setmetatable({}, { __index = ACTION_HIGHLIGHT_MARKS }) @@ -112,32 +110,18 @@ local ButtonRegistry, ActiveButtons, ActionButtons, NonActionButtons = lib.butto local Update, UpdateButtonState, UpdateUsable, UpdateCount, UpdateCooldown, UpdateTooltip, UpdateNewAction local StartFlash, StopFlash, UpdateFlash, UpdateHotkeys, UpdateRangeTimer, UpdateOverlayGlow local UpdateFlyout, ShowGrid, HideGrid, UpdateGrid, SetupSecureSnippets, WrapOnClick -local ShowOverlayGlow, HideOverlayGlow -local EndChargeCooldown +local ShowOverlayGlow, HideOverlayGlow, GetOverlayGlow, OverlayGlowAnimOutFinished +local HookCooldown local InitializeEventHandler, OnEvent, ForAllButtons, OnUpdate - -local SPELL_POWER_HOLY_POWER = SPELL_POWER_HOLY_POWER; -local HAND_OF_LIGHT = GetSpellInfo(90174); -local DIVINE_CRUSADER = GetSpellInfo(144595) -local PLAYERCLASS = select(2, UnitClass('player')) -local HOLY_POWER_SPELLS = { - [85256] = GetSpellInfo(85256), --Templar's Verdict - [53385] = GetSpellInfo(53385), --Divine Storm - [53600] = GetSpellInfo(53600), --Shield of the Righteous - [157048] = GetSpellInfo(157048), -- Final Verdict - [152262] = GetSpellInfo(152262), --Seraphim -}; - local DefaultConfig = { outOfRangeColoring = "button", tooltip = "enabled", showGrid = false, colors = { range = { 0.8, 0.1, 0.1 }, - mana = { 0.5, 0.5, 1.0 }, - hp = { 0.5, 0.5, 1.0 } + mana = { 0.5, 0.5, 1.0 } }, hideElements = { macro = false, @@ -197,6 +181,9 @@ function lib:CreateButton(id, name, header, config) -- adjust count/stack size button.Count:SetFont(button.Count:GetFont(), 16, "OUTLINE") + -- hook Cooldown stuff for alpha fix in 6.0 + HookCooldown(button) + -- Store the button in the registry, needed for event and OnUpdate handling if not next(ButtonRegistry) then InitializeEventHandler() @@ -503,6 +490,10 @@ function Generic:AddToMasque(group) self.MasqueSkinned = true end +function Generic:UpdateAlpha() + UpdateCooldown(self) +end + ----------------------------------------------------------- --- frame scripts @@ -530,31 +521,6 @@ local function PickupAny(kind, target, detail, ...) end end -function Generic:OnUpdate(elapsed) - if not GetCVarBool('lockActionBars') then return; end - - self.lastupdate = (self.lastupdate or 0) + elapsed; - if (self.lastupdate < .2) then return end - self.lastupdate = 0 - - local isDragKeyDown - if GetModifiedClick("PICKUPACTION") == 'ALT' then - isDragKeyDown = IsAltKeyDown() - elseif GetModifiedClick("PICKUPACTION") == 'CTRL' then - isDragKeyDown = IsControlKeyDown() - elseif GetModifiedClick("PICKUPACTION") == 'SHIFT' then - isDragKeyDown = IsShiftKeyDown() - end - - if isDragKeyDown and (self.clickState == 'AnyDown' or self.clickState == nil) then - self.clickState = 'AnyUp' - self:RegisterForClicks(self.clickState) - elseif self.clickState == 'AnyUp' and not isDragKeyDown then - self.clickState = 'AnyDown' - self:RegisterForClicks(self.clickState) - end -end - function Generic:OnEnter() if self.config.tooltip ~= "disabled" and (self.config.tooltip ~= "nocombat" or not InCombatLockdown()) then UpdateTooltip(self) @@ -567,15 +533,10 @@ function Generic:OnEnter() lib.ACTION_HIGHLIGHT_MARKS[self._state_action] = false UpdateNewAction(self) end - - if self.config.clickOnDown then - self:SetScript('OnUpdate', Generic.OnUpdate) - end end function Generic:OnLeave() GameTooltip:Hide() - self:SetScript('OnUpdate', nil) end -- Insecure drag handler to allow clicking on the button with an action on the cursor @@ -1067,10 +1028,6 @@ function Update(self) end self.cooldown:Hide() self:SetChecked(false) - - if self.chargeCooldown then - EndChargeCooldown(self.chargeCooldown) - end end -- Add a green border if button is an equipped item @@ -1090,23 +1047,6 @@ function Update(self) -- Update icon and hotkey local texture = self:GetTexture() - - -- Draenor zone button handling - self.draenorZoneDisabled = false - self.icon:SetDesaturated(false) - if self._state_type == "action" then - local action_type, id = GetActionInfo(self._state_action) - if ((action_type == "spell" or action_type == "companion") and DraenorZoneAbilityFrame and DraenorZoneAbilityFrame.baseName and not HasDraenorZoneAbility()) then - local name = GetSpellInfo(DraenorZoneAbilityFrame.baseName) - local abilityName = GetSpellInfo(id) - if name == abilityName then - texture = GetLastDraenorSpellTexture() - self.draenorZoneDisabled = true - self.icon:SetDesaturated(true) - end - end - end - if texture then self.icon:SetTexture(texture) self.icon:Show() @@ -1171,23 +1111,6 @@ function UpdateButtonState(self) lib.callbacks:Fire("OnButtonState", self) end -local function IsHolyPowerAbility(actionId) - if not actionId or type(actionId) ~= 'number' then return false; end - local actionType, id = GetActionInfo(actionId); - if actionType == 'macro' then - local macroSpell = GetMacroSpell(id); - if macroSpell then - for spellId, spellName in pairs(HOLY_POWER_SPELLS) do - if macroSpell == spellName then - return true; - end - end - end - else - return HOLY_POWER_SPELLS[id]; - end - return false; -end function UpdateUsable(self) -- TODO: make the colors configurable -- TODO: allow disabling of the whole recoloring @@ -1195,10 +1118,7 @@ function UpdateUsable(self) self.icon:SetVertexColor(unpack(self.config.colors.range)) else local isUsable, notEnoughMana = self:IsUsable() - local action = self._state_action - if PLAYERCLASS == 'PALADIN' and IsHolyPowerAbility(action) and not(UnitPower('player', SPELL_POWER_HOLY_POWER) >= 3 or UnitBuff('player', HAND_OF_LIGHT) or UnitBuff('player', DIVINE_CRUSADER)) then - self.icon:SetVertexColor(unpack(self.config.colors.hp)) - elseif isUsable then + if isUsable then self.icon:SetVertexColor(1.0, 1.0, 1.0) --self.NormalTexture:SetVertexColor(1.0, 1.0, 1.0) elseif notEnoughMana then @@ -1226,7 +1146,7 @@ function UpdateCount(self) end else local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges() - if charges and maxCharges and maxCharges > 1 then + if charges and maxCharges and maxCharges > 0 then self.Count:SetText(charges) else self.Count:SetText("") @@ -1234,74 +1154,73 @@ function UpdateCount(self) end end -function EndChargeCooldown(self) - self:Hide() - self:SetParent(UIParent) - self.parent.chargeCooldown = nil - self.parent = nil - tinsert(lib.ChargeCooldowns, self) -end +local function SetCooldownHook(cooldown, ...) + local effectiveAlpha = cooldown:GetEffectiveAlpha() + local start, duration = ... + + if start ~= 0 or duration ~= 0 then + -- update swipe alpha + cooldown.__metaLAB.SetSwipeColor(cooldown, cooldown.__SwipeR, cooldown.__SwipeG, cooldown.__SwipeB, cooldown.__SwipeA * effectiveAlpha) -local function StartChargeCooldown(parent, chargeStart, chargeDuration) - if not parent.chargeCooldown then - local cooldown = tremove(lib.ChargeCooldowns) - if not cooldown then - lib.NumChargeCooldowns = lib.NumChargeCooldowns + 1 - cooldown = CreateFrame("Cooldown", "LAB10ChargeCooldown"..lib.NumChargeCooldowns, parent, "CooldownFrameTemplate"); - cooldown:SetScript("OnCooldownDone", EndChargeCooldown) - cooldown:SetHideCountdownNumbers(true) - cooldown:SetDrawEdge(true) + -- only draw bling and edge if alpha is over 50% + cooldown:SetDrawBling(effectiveAlpha > 0.5) + if effectiveAlpha < 0.5 then + cooldown:SetDrawEdge(false) + end + + -- ensure the swipe isn't drawn on fully faded bars + if effectiveAlpha <= 0.0 then cooldown:SetDrawSwipe(false) end - cooldown:SetParent(parent) - cooldown:SetAllPoints(parent) - cooldown:SetFrameStrata("TOOLTIP") - cooldown:Show() - parent.chargeCooldown = cooldown - cooldown.parent = parent end - parent.chargeCooldown:SetCooldown(chargeStart, chargeDuration) - if not chargeStart or chargeStart == 0 then - EndChargeCooldown(parent.chargeCooldown) + + return cooldown.__metaLAB.SetCooldown(cooldown, ...) +end + +local function SetSwipeColorHook(cooldown, r, g, b, a) + local effectiveAlpha = cooldown:GetEffectiveAlpha() + cooldown.__SwipeR, cooldown.__SwipeG, cooldown.__SwipeB, cooldown.__SwipeA = r, g, b, (a or 1) + return cooldown.__metaLAB.SetSwipeColor(cooldown, r, g, b, a * effectiveAlpha) +end + +function HookCooldown(button) + if not button.cooldown.__metaLAB then + button.cooldown.__metaLAB = getmetatable(button.cooldown).__index + button.cooldown.__SwipeR, button.cooldown.__SwipeG, button.cooldown.__SwipeB, button.cooldown.__SwipeA = 0, 0, 0, 0.8 + + button.cooldown.SetCooldown = SetCooldownHook + button.cooldown.SetSwipeColor = SetSwipeColorHook end end -local function OnCooldownDone(self) +function OnCooldownDone(self) self:SetScript("OnCooldownDone", nil) UpdateCooldown(self:GetParent()) end function UpdateCooldown(self) local locStart, locDuration = self:GetLossOfControlCooldown() - local start, duration, enable = self:GetCooldown() - local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges() + local start, duration, enable, charges, maxCharges = self:GetCooldown() if (locStart + locDuration) > (start + duration) then if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_LOSS_OF_CONTROL then self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge-LoC") - self.cooldown:SetSwipeColor(0.17, 0, 0) self.cooldown:SetHideCountdownNumbers(true) self.cooldown.currentCooldownType = COOLDOWN_TYPE_LOSS_OF_CONTROL + self.cooldown:SetSwipeColor(0.17, 0, 0, 0.8) end - CooldownFrame_SetTimer(self.cooldown, locStart, locDuration, 1, true) + CooldownFrame_SetTimer(self.cooldown, locStart, locDuration, 1, nil, nil, true) else if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_NORMAL then self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge") - self.cooldown:SetSwipeColor(0, 0, 0) self.cooldown:SetHideCountdownNumbers(false) self.cooldown.currentCooldownType = COOLDOWN_TYPE_NORMAL + self.cooldown:SetSwipeColor(0, 0, 0, 0.8) end if locStart > 0 then self.cooldown:SetScript("OnCooldownDone", OnCooldownDone) end - - if charges and maxCharges and maxCharges > 0 and charges < maxCharges then - StartChargeCooldown(self, chargeStart, chargeDuration) - elseif self.chargeCooldown then - EndChargeCooldown(self.chargeCooldown) - end - - CooldownFrame_SetTimer(self.cooldown, start, duration, enable) + CooldownFrame_SetTimer(self.cooldown, start, duration, enable, charges, maxCharges) end end @@ -1355,18 +1274,64 @@ function UpdateHotkeys(self) end end +local function OverlayGlow_OnHide(self) + if self.animOut:IsPlaying() then + self.animOut:Stop() + OverlayGlowAnimOutFinished(self.animOut) + end +end + +function GetOverlayGlow() + local overlay = tremove(lib.unusedOverlayGlows); + if not overlay then + lib.numOverlays = lib.numOverlays + 1 + overlay = CreateFrame("Frame", "LAB10ActionButtonOverlay"..lib.numOverlays, UIParent, "ActionBarButtonSpellActivationAlert") + overlay.animOut:SetScript("OnFinished", OverlayGlowAnimOutFinished) + overlay:SetScript("OnHide", OverlayGlow_OnHide) + end + return overlay +end + function ShowOverlayGlow(self) - if LBG then - LBG.ShowOverlayGlow(self) + if self.overlay then + if self.overlay.animOut:IsPlaying() then + self.overlay.animOut:Stop() + self.overlay.animIn:Play() + end + else + self.overlay = GetOverlayGlow() + local frameWidth, frameHeight = self:GetSize() + self.overlay:SetParent(self) + self.overlay:ClearAllPoints() + --Make the height/width available before the next frame: + self.overlay:SetSize(frameWidth * 1.4, frameHeight * 1.4) + self.overlay:SetPoint("TOPLEFT", self, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2) + self.overlay:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2) + self.overlay.animIn:Play() end end function HideOverlayGlow(self) - if LBG then - LBG.HideOverlayGlow(self) + if self.overlay then + if self.overlay.animIn:IsPlaying() then + self.overlay.animIn:Stop() + end + if self:IsVisible() then + self.overlay.animOut:Play() + else + OverlayGlowAnimOutFinished(self.overlay.animOut) + end end end +function OverlayGlowAnimOutFinished(animGroup) + local overlay = animGroup:GetParent() + local actionButton = overlay:GetParent() + overlay:Hide() + tinsert(lib.unusedOverlayGlows, overlay) + actionButton.overlay = nil +end + function UpdateOverlayGlow(self) local spellId = self:GetSpellId() if spellId and IsSpellOverlayed(spellId) then @@ -1437,10 +1402,6 @@ function UpdateFlyout(self) SetClampedTextureRotation(self.FlyoutArrow, 0) end - if self.FlyoutUpdateFunc then - self.FlyoutUpdateFunc(nil, self) - end - -- return here, otherwise flyout is hidden return end @@ -1452,6 +1413,15 @@ function UpdateRangeTimer() rangeTimer = -1 end +local function GetSpellIdByName(spellName) + if not spellName then return end + local spellLink = GetSpellLink(spellName) + if spellLink then + return tonumber(spellLink:match("spell:(%d+)")) + end + return nil +end + ----------------------------------------------------------- --- WoW API mapping --- Generic Button diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc deleted file mode 100644 index 9ef0961..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc +++ /dev/null @@ -1,18 +0,0 @@ -## Interface: 60200 -## Title: Lib: ActionButton-1.0 -## Notes: Creates and manages secure Action Buttons -## Author: Nevcairiel -## X-eMail: h.leppkes@gmail.com -## X-Category: Library -## X-License: BSD -## OptionalDeps: LibKeyBound-1.0, LibButtonGlow-1.0 -## X-Curse-Packaged-Version: 0.27 -## X-Curse-Project-Name: LibActionButton-1.0 -## X-Curse-Project-ID: libactionbutton-1-0 -## X-Curse-Repository-ID: wow/libactionbutton-1-0/mainline - -LibStub\LibStub.lua -CallbackHandler-1.0\CallbackHandler-1.0.lua -LibButtonGlow-1.0\LibButtonGlow-1.0.lua - -LibActionButton-1.0.lua diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml deleted file mode 100644 index 2ae6662..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml +++ /dev/null @@ -1,5 +0,0 @@ -<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ -..\FrameXML\UI.xsd"> - <Script file="LibButtonGlow-1.0\LibButtonGlow-1.0.lua"/> - <Script file="LibActionButton-1.0.lua"/> -</Ui> \ No newline at end of file diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua deleted file mode 100644 index b587030..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua +++ /dev/null @@ -1,242 +0,0 @@ ---[[ -Copyright (c) 2015, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com> - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the developer nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -]] -local MAJOR_VERSION = "LibButtonGlow-1.0" -local MINOR_VERSION = 4 - -if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end -local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION) -if not lib then return end - -local Masque = LibStub("Masque", true) - -lib.unusedOverlays = lib.unusedOverlays or {} -lib.numOverlays = lib.numOverlays or 0 - -local tinsert, tremove, tostring = table.insert, table.remove, tostring - -local function OverlayGlowAnimOutFinished(animGroup) - local overlay = animGroup:GetParent() - local frame = overlay:GetParent() - overlay:Hide() - tinsert(lib.unusedOverlays, overlay) - frame.__LBGoverlay = nil -end - -local function OverlayGlow_OnHide(self) - if self.animOut:IsPlaying() then - self.animOut:Stop() - OverlayGlowAnimOutFinished(self.animOut) - end -end - -local function CreateScaleAnim(group, target, order, duration, x, y, delay) - local scale = group:CreateAnimation("Scale") - scale:SetTarget(target:GetName()) - scale:SetOrder(order) - scale:SetDuration(duration) - scale:SetScale(x, y) - - if delay then - scale:SetStartDelay(delay) - end -end - -local function CreateAlphaAnim(group, target, order, duration, change, delay) - local alpha = group:CreateAnimation("Alpha") - alpha:SetTarget(target:GetName()) - alpha:SetOrder(order) - alpha:SetDuration(duration) - alpha:SetChange(change) - - if delay then - alpha:SetStartDelay(delay) - end -end - -local function AnimIn_OnPlay(group) - local frame = group:GetParent() - local frameWidth, frameHeight = frame:GetSize() - frame.spark:SetSize(frameWidth, frameHeight) - frame.spark:SetAlpha(0.3) - frame.innerGlow:SetSize(frameWidth / 2, frameHeight / 2) - frame.innerGlow:SetAlpha(1.0) - frame.innerGlowOver:SetAlpha(1.0) - frame.outerGlow:SetSize(frameWidth * 2, frameHeight * 2) - frame.outerGlow:SetAlpha(1.0) - frame.outerGlowOver:SetAlpha(1.0) - frame.ants:SetSize(frameWidth * 0.85, frameHeight * 0.85) - frame.ants:SetAlpha(0) - frame:Show() -end - -local function AnimIn_OnFinished(group) - local frame = group:GetParent() - local frameWidth, frameHeight = frame:GetSize() - frame.spark:SetAlpha(0) - frame.innerGlow:SetAlpha(0) - frame.innerGlow:SetSize(frameWidth, frameHeight) - frame.innerGlowOver:SetAlpha(0.0) - frame.outerGlow:SetSize(frameWidth, frameHeight) - frame.outerGlowOver:SetAlpha(0.0) - frame.outerGlowOver:SetSize(frameWidth, frameHeight) - frame.ants:SetAlpha(1.0) -end - -local function CreateOverlayGlow() - lib.numOverlays = lib.numOverlays + 1 - - -- create frame and textures - local name = "ButtonGlowOverlay" .. tostring(lib.numOverlays) - local overlay = CreateFrame("Frame", name, UIParent) - - -- spark - overlay.spark = overlay:CreateTexture(name .. "Spark", "BACKGROUND") - overlay.spark:SetPoint("CENTER") - overlay.spark:SetAlpha(0) - overlay.spark:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) - overlay.spark:SetTexCoord(0.00781250, 0.61718750, 0.00390625, 0.26953125) - - -- inner glow - overlay.innerGlow = overlay:CreateTexture(name .. "InnerGlow", "ARTWORK") - overlay.innerGlow:SetPoint("CENTER") - overlay.innerGlow:SetAlpha(0) - overlay.innerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) - overlay.innerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375) - - -- inner glow over - overlay.innerGlowOver = overlay:CreateTexture(name .. "InnerGlowOver", "ARTWORK") - overlay.innerGlowOver:SetPoint("TOPLEFT", overlay.innerGlow, "TOPLEFT") - overlay.innerGlowOver:SetPoint("BOTTOMRIGHT", overlay.innerGlow, "BOTTOMRIGHT") - overlay.innerGlowOver:SetAlpha(0) - overlay.innerGlowOver:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) - overlay.innerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625) - - -- outer glow - overlay.outerGlow = overlay:CreateTexture(name .. "OuterGlow", "ARTWORK") - overlay.outerGlow:SetPoint("CENTER") - overlay.outerGlow:SetAlpha(0) - overlay.outerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) - overlay.outerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375) - - -- outer glow over - overlay.outerGlowOver = overlay:CreateTexture(name .. "OuterGlowOver", "ARTWORK") - overlay.outerGlowOver:SetPoint("TOPLEFT", overlay.outerGlow, "TOPLEFT") - overlay.outerGlowOver:SetPoint("BOTTOMRIGHT", overlay.outerGlow, "BOTTOMRIGHT") - overlay.outerGlowOver:SetAlpha(0) - overlay.outerGlowOver:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) - overlay.outerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625) - - -- ants - overlay.ants = overlay:CreateTexture(name .. "Ants", "OVERLAY") - overlay.ants:SetPoint("CENTER") - overlay.ants:SetAlpha(0) - overlay.ants:SetTexture([[Interface\SpellActivationOverlay\IconAlertAnts]]) - - -- setup antimations - overlay.animIn = overlay:CreateAnimationGroup() - CreateScaleAnim(overlay.animIn, overlay.spark, 1, 0.2, 1.5, 1.5) - CreateAlphaAnim(overlay.animIn, overlay.spark, 1, 0.2, 1) - CreateScaleAnim(overlay.animIn, overlay.innerGlow, 1, 0.3, 2, 2) - CreateScaleAnim(overlay.animIn, overlay.innerGlowOver, 1, 0.3, 2, 2) - CreateAlphaAnim(overlay.animIn, overlay.innerGlowOver, 1, 0.3, -1) - CreateScaleAnim(overlay.animIn, overlay.outerGlow, 1, 0.3, 0.5, 0.5) - CreateScaleAnim(overlay.animIn, overlay.outerGlowOver, 1, 0.3, 0.5, 0.5) - CreateAlphaAnim(overlay.animIn, overlay.outerGlowOver, 1, 0.3, -1) - CreateScaleAnim(overlay.animIn, overlay.spark, 1, 0.2, 2/3, 2/3, 0.2) - CreateAlphaAnim(overlay.animIn, overlay.spark, 1, 0.2, -1, 0.2) - CreateAlphaAnim(overlay.animIn, overlay.innerGlow, 1, 0.2, -1, 0.3) - CreateAlphaAnim(overlay.animIn, overlay.ants, 1, 0.2, 1, 0.3) - overlay.animIn:SetScript("OnPlay", AnimIn_OnPlay) - overlay.animIn:SetScript("OnFinished", AnimIn_OnFinished) - - overlay.animOut = overlay:CreateAnimationGroup() - CreateAlphaAnim(overlay.animOut, overlay.outerGlowOver, 1, 0.2, 1) - CreateAlphaAnim(overlay.animOut, overlay.ants, 1, 0.2, -1) - CreateAlphaAnim(overlay.animOut, overlay.outerGlowOver, 2, 0.2, -1) - CreateAlphaAnim(overlay.animOut, overlay.outerGlow, 2, 0.2, -1) - overlay.animOut:SetScript("OnFinished", OverlayGlowAnimOutFinished) - - -- scripts - overlay:SetScript("OnUpdate", ActionButton_OverlayGlowOnUpdate) - overlay:SetScript("OnHide", OverlayGlow_OnHide) - - overlay.__LBGVersion = MINOR_VERSION - - return overlay -end - -local function GetOverlayGlow() - local overlay = tremove(lib.unusedOverlays) - if not overlay then - overlay = CreateOverlayGlow() - end - return overlay -end - -function lib.ShowOverlayGlow(frame) - if frame.__LBGoverlay then - if frame.__LBGoverlay.animOut:IsPlaying() then - frame.__LBGoverlay.animOut:Stop() - frame.__LBGoverlay.animIn:Play() - end - else - local overlay = GetOverlayGlow() - local frameWidth, frameHeight = frame:GetSize() - overlay:SetParent(frame) - overlay:ClearAllPoints() - --Make the height/width available before the next frame: - overlay:SetSize(frameWidth * 1.4, frameHeight * 1.4) - overlay:SetPoint("TOPLEFT", frame, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2) - overlay:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2) - overlay.animIn:Play() - frame.__LBGoverlay = overlay - - if Masque and Masque.UpdateSpellAlert and (not frame.overlay or not issecurevariable(frame, "overlay")) then - local old_overlay = frame.overlay - frame.overlay = overlay - Masque:UpdateSpellAlert(frame) - - frame.overlay = old_overlay - end - end -end - -function lib.HideOverlayGlow(frame) - if frame.__LBGoverlay then - if frame.__LBGoverlay.animIn:IsPlaying() then - frame.__LBGoverlay.animIn:Stop() - end - if frame:IsVisible() then - frame.__LBGoverlay.animOut:Play() - else - OverlayGlowAnimOutFinished(frame.__LBGoverlay.animOut) - end - end -end diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc deleted file mode 100644 index c92563f..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc +++ /dev/null @@ -1,18 +0,0 @@ -## Interface: 60200 -## Title: Lib: ButtonGlow-1.0 -## Notes: Replacement for ActionButton_Show/HideOverlayGlow APIs -## Author: Nevcairiel -## X-eMail: h.leppkes@gmail.com -## X-Category: Library -## X-License: BSD -## X-Website: http://www.wowace.com/addons/libbuttonglow-1-0/ -## Version: 1.2.3 -## OptionalDeps: Masque -## X-Curse-Packaged-Version: 1.2.2 -## X-Curse-Project-Name: LibButtonGlow-1.0 -## X-Curse-Project-ID: libbuttonglow-1-0 -## X-Curse-Repository-ID: wow/libbuttonglow-1-0/mainline - -LibStub\LibStub.lua - -LibButtonGlow-1.0.lua diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua deleted file mode 100644 index 0a41ac0..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua +++ /dev/null @@ -1,30 +0,0 @@ --- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info --- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke -local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS! -local LibStub = _G[LIBSTUB_MAJOR] - -if not LibStub or LibStub.minor < LIBSTUB_MINOR then - LibStub = LibStub or {libs = {}, minors = {} } - _G[LIBSTUB_MAJOR] = LibStub - LibStub.minor = LIBSTUB_MINOR - - function LibStub:NewLibrary(major, minor) - assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)") - minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.") - - local oldminor = self.minors[major] - if oldminor and oldminor >= minor then return nil end - self.minors[major], self.libs[major] = minor, self.libs[major] or {} - return self.libs[major], oldminor - end - - function LibStub:GetLibrary(major, silent) - if not self.libs[major] and not silent then - error(("Cannot find a library instance of %q."):format(tostring(major)), 2) - end - return self.libs[major], self.minors[major] - end - - function LibStub:IterateLibraries() return pairs(self.libs) end - setmetatable(LibStub, { __call = LibStub.GetLibrary }) -end diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc deleted file mode 100644 index 17cf732..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc +++ /dev/null @@ -1,13 +0,0 @@ -## Interface: 20400 -## Title: Lib: LibStub -## Notes: Universal Library Stub -## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel -## X-Website: http://jira.wowace.com/browse/LS -## X-Category: Library -## X-License: Public Domain -## X-Curse-Packaged-Version: 1.0 -## X-Curse-Project-Name: LibStub -## X-Curse-Project-ID: libstub -## X-Curse-Repository-ID: wow/libstub/mainline - -LibStub.lua diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua deleted file mode 100644 index 0a41ac0..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua +++ /dev/null @@ -1,30 +0,0 @@ --- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info --- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke -local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS! -local LibStub = _G[LIBSTUB_MAJOR] - -if not LibStub or LibStub.minor < LIBSTUB_MINOR then - LibStub = LibStub or {libs = {}, minors = {} } - _G[LIBSTUB_MAJOR] = LibStub - LibStub.minor = LIBSTUB_MINOR - - function LibStub:NewLibrary(major, minor) - assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)") - minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.") - - local oldminor = self.minors[major] - if oldminor and oldminor >= minor then return nil end - self.minors[major], self.libs[major] = minor, self.libs[major] or {} - return self.libs[major], oldminor - end - - function LibStub:GetLibrary(major, silent) - if not self.libs[major] and not silent then - error(("Cannot find a library instance of %q."):format(tostring(major)), 2) - end - return self.libs[major], self.minors[major] - end - - function LibStub:IterateLibraries() return pairs(self.libs) end - setmetatable(LibStub, { __call = LibStub.GetLibrary }) -end diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc deleted file mode 100644 index 17cf732..0000000 --- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc +++ /dev/null @@ -1,13 +0,0 @@ -## Interface: 20400 -## Title: Lib: LibStub -## Notes: Universal Library Stub -## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel -## X-Website: http://jira.wowace.com/browse/LS -## X-Category: Library -## X-License: Public Domain -## X-Curse-Packaged-Version: 1.0 -## X-Curse-Project-Name: LibStub -## X-Curse-Project-ID: libstub -## X-Curse-Repository-ID: wow/libstub/mainline - -LibStub.lua diff --git a/SVUI_Skins/components/blizzard/garrison.lua b/SVUI_Skins/components/blizzard/garrison.lua index 9fa45d1..b619599 100644 --- a/SVUI_Skins/components/blizzard/garrison.lua +++ b/SVUI_Skins/components/blizzard/garrison.lua @@ -559,9 +559,10 @@ local function LoadGarrisonStyle() SV.API:Set("EditBox", GarrisonCapacitiveDisplayFrame.Count) SV.API:Set("PageButton", GarrisonCapacitiveDisplayFrame.IncrementButton) end - + GarrisonCapacitiveDisplayFrame.CapacitiveDisplay.FollowerActive:ClearAllPoints() + GarrisonCapacitiveDisplayFrame.CapacitiveDisplay.FollowerActive:SetPoint("TOP", GarrisonCapacitiveDisplayFrame, "TOP", 0, -32) hooksecurefunc("GarrisonCapacitiveDisplayFrame_Update", _hook_GarrisonCapacitiveDisplayFrame_Update) - GarrisonCapacitiveDisplayFrame:HookScript('OnShow', function() SV.NPC:Toggle(GarrisonCapacitiveDisplayFrame) end) + SV.NPC:Register(GarrisonCapacitiveDisplayFrame, GarrisonCapacitiveDisplayFrameTitleText) GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:HookScript('OnClick', function() SV.NPC:PlayerTalksFirst() end) --[[ ############################################################################## diff --git a/SVUI_Skins/components/blizzard/misc.lua b/SVUI_Skins/components/blizzard/misc.lua index 86ed582..4efda21 100644 --- a/SVUI_Skins/components/blizzard/misc.lua +++ b/SVUI_Skins/components/blizzard/misc.lua @@ -254,7 +254,7 @@ local function MiscStyles() NPCFriendshipStatusBar.icon:ClearAllPoints() NPCFriendshipStatusBar.icon:SetPoint("RIGHT", NPCFriendshipStatusBar, "LEFT", 0, -2) - GossipFrame:SetScript('OnShow', function() SV.NPC:Toggle(GossipFrame) end) + SV.NPC:Register(GossipFrame, GossipFrameNpcNameText) hooksecurefunc("GossipTitleButton_OnClick", function() SV.NPC:PlayerTalksFirst() end) end @@ -552,7 +552,7 @@ local function MiscStyles() SV.API:Set("!_PageButton", MerchantNextPageButton) SV.API:Set("!_PageButton", MerchantPrevPageButton) - MerchantFrame:HookScript('OnShow', function() SV.NPC:Toggle(MerchantFrame) end) + SV.NPC:Register(MerchantFrame, MerchantNameText) end if(SV.db.Skins.blizzard.petition) then diff --git a/SVUI_Skins/components/blizzard/quest.lua b/SVUI_Skins/components/blizzard/quest.lua index 5e67886..22d648a 100644 --- a/SVUI_Skins/components/blizzard/quest.lua +++ b/SVUI_Skins/components/blizzard/quest.lua @@ -227,7 +227,7 @@ local function QuestFrameStyle() hooksecurefunc("QuestFrame_ShowQuestPortrait", Hook_QuestNPCModel) hooksecurefunc("QuestFrame_SetTitleTextColor", Hook_QuestFrame_SetTitleTextColor) - QuestFrame:HookScript('OnShow', function() SV.NPC:Toggle(QuestFrame) end) + SV.NPC:Register(QuestFrame, QuestFrameNpcNameText) end local function QuestChoiceFrameStyle()