From de280d176527bf1ee3e1fd83b0adb0adbf4a40ea Mon Sep 17 00:00:00 2001 From: Darthpred Date: Mon, 1 Aug 2016 13:28:15 +0300 Subject: [PATCH] Shadows. This closes #215 --- CHANGELOG.txt | 7 +- ElvUI_SLE/defaults/private.lua | 27 ++++++ ElvUI_SLE/defaults/profile.lua | 6 ++ ElvUI_SLE/locales/english.lua | 4 + ElvUI_SLE/locales/russian.lua | 4 + ElvUI_SLE/modules/enhancedshdows.lua | 137 +++++++++++++++++++++++++++++ ElvUI_SLE/modules/load_modules.xml | 1 + ElvUI_SLE/modules/vehicle.lua | 5 +- ElvUI_SLE/options/enhancedshadows_c.lua | 144 +++++++++++++++++++++++++++++++ ElvUI_SLE/options/load_options.xml | 1 + 10 files changed, 331 insertions(+), 5 deletions(-) create mode 100644 ElvUI_SLE/modules/enhancedshdows.lua create mode 100644 ElvUI_SLE/options/enhancedshadows_c.lua diff --git a/CHANGELOG.txt b/CHANGELOG.txt index ed2cf89..ac5b903 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,9 +1,10 @@ v3.09 Additions: - Added button size and button spacing on enhanced vehicle bar. It also can now be moved around (mover is in S&L Misc config group) -- Added an options to show characters item level as equipped/average format. Also this giant number is way less giant. -- Added an options for Armory to show character stats that Blizzard decided we don't need. Movement speed anyone? Script based on DejaCharacterStats addon by Dejablue -- Added an option to change location panel width based on location name length +- New options to show characters item level as equipped/average format. Also this giant number is way less giant. +- New options for Armory to show character stats that Blizzard decided we don't need. Movement speed anyone? Script based on DejaCharacterStats addon by Dejablue +- New option to change location panel width based on location name length +- New options to create a shadow for a number of ElvUI unitframes and actionbars Fixes: - Fixed instance indicator not updating when difficulty is changed inside the instance - Fixed Affinitii's addons profile not actually applying (got exactly zero reports on that one, shows how much people actually wanted the thing) diff --git a/ElvUI_SLE/defaults/private.lua b/ElvUI_SLE/defaults/private.lua index a432443..5687c3e 100644 --- a/ElvUI_SLE/defaults/private.lua +++ b/ElvUI_SLE/defaults/private.lua @@ -85,6 +85,33 @@ V["sle"] = { ["module"] = { ["screensaver"] = false, ["blizzmove"] = true, + ["shadows"] = { + ["vehicle"] = false, + ["player"] = false, + ["target"] = false, + ["targettarget"] = false, + ["focus"] = false, + ["focustarget"] = false, + ["pet"] = false, + ["pettarget"] = false, + ["boss"] = false, + ["arena"] = false, + ["actionbars"] = { + ["bar1"] = false, + ["bar2"] = false, + ["bar3"] = false, + ["bar4"] = false, + ["bar5"] = false, + ["bar6"] = false, + ["bar7"] = false, + ["bar8"] = false, + ["bar9"] = false, + ["bar10"] = false, + ["stancebar"] = false, + ["microbar"] = false, + ["petbar"] = false, + }, + }, }, ["unitframe"] = { diff --git a/ElvUI_SLE/defaults/profile.lua b/ElvUI_SLE/defaults/profile.lua index 2fd1326..ce61ce2 100644 --- a/ElvUI_SLE/defaults/profile.lua +++ b/ElvUI_SLE/defaults/profile.lua @@ -597,6 +597,12 @@ P["sle"] = { ["tipThrottle"] = 15, ["panelTemplate"] = "Transparent", }, + --Shadows + ['shadows'] = { + ['shadowcolor'] = { ['r'] = 0, ['g'] = 0, ['b'] = 0 }, + ['classcolor'] = false, + ['size'] = 3, + }, --Skins ["skins"] = { ["objectiveTracker"] = { diff --git a/ElvUI_SLE/locales/english.lua b/ElvUI_SLE/locales/english.lua index 9d63b03..6f5429a 100644 --- a/ElvUI_SLE/locales/english.lua +++ b/ElvUI_SLE/locales/english.lua @@ -402,6 +402,10 @@ L["Are you sure you want to remove |cff1784d1%s|r from currency datatexts?"] = t L["Hide panel background"] = true L["Don't show this panel, only datatexts assinged to it"] = true +--Enhnced Shadows +L["Enhanced Shadows"] = true +L["Use shadows on..."] = true + --Equip Manager L["Equipment Manager"] = true L["EM_DESC"] = "This module provides different options to automatically change your equipment sets on spec change or entering certain locations. All options are character based." diff --git a/ElvUI_SLE/locales/russian.lua b/ElvUI_SLE/locales/russian.lua index 15a503f..fabb02f 100644 --- a/ElvUI_SLE/locales/russian.lua +++ b/ElvUI_SLE/locales/russian.lua @@ -399,6 +399,10 @@ L["Account Time Played"] = "Время в игре на аккаунте" L["Hide panel background"] = "Скрыть фон" L["Don't show this panel, only datatexts assinged to it"] = "Не показывать фон панели, а только назначенные инфо-тексты." +--Enhnced Shadows +L["Enhanced Shadows"] = "Улучшенные тени" +L["Use shadows on..."] = "Использовать тени на..." + --Equip Manager L["Equipment Manager"] = "Менеджер экипировки" L["EM_DESC"] = "Этот модуль предоставляет различные опции для автоматической смены комплектов экипировки при переключении набора талантов или попадании в определенную локацию." diff --git a/ElvUI_SLE/modules/enhancedshdows.lua b/ElvUI_SLE/modules/enhancedshdows.lua new file mode 100644 index 0000000..c17e7b0 --- /dev/null +++ b/ElvUI_SLE/modules/enhancedshdows.lua @@ -0,0 +1,137 @@ +local SLE, T, E, L, V, P, G = unpack(select(2, ...)) +local ES = SLE:NewModule('EnhancedShadows', 'AceEvent-3.0') +local AB, UF = SLE:GetElvModules("ActionBars", "UnitFrames") +local ClassColor = RAID_CLASS_COLORS[E.myclass] +local Border, LastSize +local Abars = SLE._Compatibility["ElvUI_ExtraActionBars"] and 10 or 6 +--GLOBALS: hooksecurefunc +local _G = _G +local UnitAffectingCombat = UnitAffectingCombat + +ES.shadows = {} + +local UFrames = { + {"player", "Player"}, + {"target", "Target"}, + {"targettarget", "TargetTarget"}, + {"focus", "Focus"}, + {"focustarget", "FocusTarget"}, + {"pet", "Pet"}, + {"pettarget", "PetTarget"}, +} + +local UGroups = { + {"boss", "Boss", 5} + {"arena", "Arena", 5} +} + +function ES:UpdateShadows() + if UnitAffectingCombat('player') then ES:RegisterEvent('PLAYER_REGEN_ENABLED', ES.UpdateShadows) return end + + for frame, _ in T.pairs(ES.shadows) do + ES:UpdateShadow(frame) + end +end + +function ES:RegisterShadow(shadow) + if shadow.isRegistered then return end + ES.shadows[shadow] = true + shadow.isRegistered = true +end + +function ES:UpdateFrame(frame, db) + if not frame or not frame.EnhShadow then return end + local size = E.db.sle.shadows.size + if frame.USE_MINI_POWERBAR then + frame.EnhShadow:SetOutside(frame.Health, size, size) + else + frame.EnhShadow:SetOutside(frame, size, size) + end +end + +function ES:CreateShadows() + for i = 1, #UFrames do + local unit, name = T.unpack(UFrames[i]) + if E.private.sle.module.shadows[unit] then + local frame = _G["ElvUF_"..name] + frame:CreateShadow() + frame.EnhShadow = frame.shadow + frame.shadow = nil + ES:RegisterShadow(frame.EnhShadow) + hooksecurefunc(UF, "Update_"..name.."Frame", ES.UpdateFrame) + end + end + for i = 1, #UGroups do + local unit, name, num = T.unpack(UGroups[i]) + if E.private.sle.module.shadows[unit] then + for j = 1, num do + local frame = _G["ElvUF_"..name..j] + frame:CreateShadow() + frame.EnhShadow = frame.shadow + frame.shadow = nil + ES:RegisterShadow(frame.EnhShadow) + hooksecurefunc(UF, "Update_"..name.."Frames", ES.UpdateFrame) + end + end + end + for i=1, Abars do + if E.private.sle.module.shadows.actionbars["bar"..i] then + local frame = _G["ElvUI_Bar"..i] + frame:CreateShadow() + frame.EnhShadow = frame.shadow + frame.shadow = nil + ES:RegisterShadow(frame.EnhShadow) + end + end + if E.private.sle.module.shadows.actionbars.stancebar then + local frame = _G["ElvUI_StanceBar"] + frame:CreateShadow() + frame.EnhShadow = frame.shadow + frame.shadow = nil + ES:RegisterShadow(frame.EnhShadow) + end + if E.private.sle.module.shadows.actionbars.microbar then + local frame = _G["ElvUI_MicroBar"] + frame:CreateShadow() + frame.EnhShadow = frame.shadow + frame.shadow = nil + ES:RegisterShadow(frame.EnhShadow) + end + if E.private.sle.module.shadows.actionbars.petbar then + local frame = _G["ElvUI_BarPet"] + frame:CreateShadow() + frame.EnhShadow = frame.shadow + frame.shadow = nil + ES:RegisterShadow(frame.EnhShadow) + end +end + +function ES:UpdateShadow(shadow) + local ShadowColor = E.db.sle.shadows.shadowcolor + local r, g, b = ShadowColor['r'], ShadowColor['g'], ShadowColor['b'] + if E.db.sle.shadows.classcolor then r, g, b = ClassColor['r'], ClassColor['g'], ClassColor['b'] end + + local size = E.db.sle.shadows.size + if size ~= LastSize then + shadow:SetOutside(shadow:GetParent(), size, size) + shadow:SetBackdrop({ + edgeFile = Border, edgeSize = E:Scale(size > 3 and size or 3), + insets = {left = E:Scale(5), right = E:Scale(5), top = E:Scale(5), bottom = E:Scale(5)}, + }) + LastSize = size + end + shadow:SetBackdropColor(r, g, b, 0) + shadow:SetBackdropBorderColor(r, g, b, 0.9) +end + +function ES:Initialize() + if not SLE.initialized then return end + Border = E.LSM:Fetch('border', 'ElvUI GlowBorder') + ES:CreateShadows() + ES:UpdateShadows() + function ES:ForUpdateAll() + ES:UpdateShadows() + end +end + +SLE:RegisterModule(ES:GetName()) \ No newline at end of file diff --git a/ElvUI_SLE/modules/load_modules.xml b/ElvUI_SLE/modules/load_modules.xml index f4af73d..e551a50 100644 --- a/ElvUI_SLE/modules/load_modules.xml +++ b/ElvUI_SLE/modules/load_modules.xml @@ -12,6 +12,7 @@