# HG changeset patch
# User Nick@Zahhak
# Date 1490523918 14400
# Node ID 2105b6e5095f8dc1ad44d6edee397cb156c602aa
# Parent 7c77fde3628749bd4edbfa3802d0b64b120d9710
- Added Blood of Sargeras to currency list
- Fixed panel ordering issues when a module is loaded on the fly.
diff -r 7c77fde36287 -r 2105b6e5095f Modules/Currency.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/Currency.lua Sun Mar 26 06:25:18 2017 -0400
@@ -0,0 +1,196 @@
+--
+-- Created by IntelliJ IDEA.
+-- User: Nick
+-- Date: 3/25/2017
+-- Time: 7:07 PM
+-- To change this template use File | Settings | File Templates.
+--
+
+local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
+
+local zoneEvents = {
+ "ZONE_CHANGED_NEW_AREA", "ZONE_CHANGED_INDOORS", "ZONE_CHANGED"
+}
+local currencyEvents = {
+ 'CURRENCY_DISPLAY_UPDATE', 'CHAT_MSG_CURRENCY'
+}
+local itemEvents = {
+ 'CHAT_MSG_LOOT', 'BAG_UPDATE'
+}
+
+local blocks = {
+ ["Ancient Mana"] = {
+ currencyID = 1155,
+ zones = {
+ ['Suramar'] = true,
+ ["Sashj'tar Ruins"] = true,
+ ["Faronaar Ruins"] = true
+ }
+ },
+ ["Blood of Sargeras"] = {
+ itemID = 124124,
+ }
+}
+local items = {}
+
+
+VeneerWorldStateCurrencyMixin = { Blocks = {} }
+VeneerWorldStateCurrencyBlockMixin = {}
+local module = VeneerWorldStateCurrencyMixin
+local block = VeneerWorldStateCurrencyBlockMixin
+
+
+
+local function RegisterEvents (frame, events)
+ for _, event in ipairs(events) do
+ print('|cFFFF0088'..(frame.name or frame:GetName())..'|r', 'listening to', event)
+ frame:RegisterEvent(event)
+ end
+end
+
+function module:OnLoad ()
+ self:RegisterEvent("PLAYER_ENTERING_WORLD");
+ self:RegisterEvent('PLAYER_REGEN_ENABLED')
+ self:RegisterEvent('PLAYER_REGEN_DISABLED')
+
+ for name, info in pairs(blocks) do
+ local frame = CreateFrame('Frame', nil, self, 'VeneerCurrencyTemplate')
+ frame.name = name
+ for k,v in pairs(info) do
+ print(name, k, '=', v)
+ frame[k] = v
+ end
+
+ local debug = function(...)
+ print('|cFF0088FF<'..frame.name..'>|r', ...)
+ end
+
+ if info.itemID then
+ local itemID = info.itemID
+ items[itemID] = {
+ count = 0,
+ frame = frame
+ }
+ frame.Update = function(block)
+ debug('Update [Item]')
+ if items[itemID].count >= 1 then
+ block.Icon:SetTexture(GetItemIcon(itemID))
+ block.Label:SetFormattedText("%d", items[itemID].count)
+ return true
+ end
+ end
+ RegisterEvents(self, itemEvents)
+ elseif info.currencyID then
+ local currencyID = info.currencyID
+ frame.Update = function (block)
+ debug('Update [Currency]')
+ local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(currencyID)
+ block.Icon:SetTexture(texture)
+ block.Label:SetFormattedText("%d / %d", earned, totalMax)
+ block:SetWidth(block.Icon:GetWidth() + block.Label:GetStringWidth() + 6)
+ return true
+ end
+
+ RegisterEvents(frame, currencyEvents)
+ end
+ if info.zones then
+ RegisterEvents(frame, zoneEvents)
+ local zones = info.zones
+ local of = frame.Update
+ frame.Update = function(block)
+ debug('Update [Zone]')
+ local zone = self.zoneText
+ local canShow = (zone and block.zones[zone]) and true or false
+ if of then
+ canShow = canShow and of(frame)
+ end
+ return canShow
+ end
+ end
+ end
+end
+
+function module:OnEvent (event, arg)
+ print(self:GetName(), 'OnEvent', event, arg)
+ self:Update()
+end
+local toUpdate = {}
+local wipe = table.wipe
+function module:Update(isBatchUpdate)
+ print(self:GetName(), 'Update()')
+ if InCombatLockdown() then
+ self:SetShown(false)
+ return
+ end
+
+
+ for itemID in pairs(items) do
+ items[itemID].count = 0
+ end
+ self.zoneText = GetRealZoneText()
+ local canShow = false
+
+ for i = 0, NUM_BAG_SLOTS do
+ local numSlots = GetContainerNumSlots(i)
+ for j = 1, numSlots do
+ local itemID = GetContainerItemID(i, j)
+ local texture, count = GetContainerItemInfo(i,j)
+ if items[itemID] then
+ items[itemID].count = items[itemID].count + (count or 1)
+ items[itemID].texture = texture
+ print('tracked currency tally', items[itemID].count, '|T'..texture..':16:16|t')
+ items[itemID].frame.Icon:SetTexture(texture)
+ end
+ end
+ end
+
+ for itemID, info in pairs(items) do
+ end
+
+ local lastBlock
+ local totalWidth = 0
+ for _, block in ipairs(self.Blocks) do
+ local blockIsShown = block:Update() or false
+ block:SetShown(blockIsShown)
+ canShow = canShow or blockIsShown
+
+
+ if block:IsShown() then
+ block:ClearAllPoints()
+ if lastBlock then
+ block:SetPoint('TOPLEFT', lastBlock, 'TOPRIGHT')
+ else
+ block:SetPoint('TOPLEFT', self, 'TOPLEFT')
+ end
+ lastBlock = block
+
+ block:SetHeight(24)
+ block:SetWidth(block.Icon:GetWidth() + block.Label:GetWidth()+4)
+ totalWidth = totalWidth + block:GetWidth()
+ end
+ print(block:IsShown(), '|cFF0088FF'..block.name..'|r', block:GetSize())
+
+ end
+
+ self:SetWidth(totalWidth)
+
+ self.needsUpdate = nil
+ print(self:IsShown(), '|cFF00FF88'..self:GetName()..'|r', self:GetSize())
+ self:SetShown(canShow)
+ VeneerWorldState:Reanchor(true)
+end
+
+function module:OnUpdate()
+ if self.needsUpdate then
+ self:Update()
+ end
+end
+
+function block:OnEvent(event, ...)
+ print('|cFF0088FF<'..self.name..'>|r', 'OnEvent', event, ...)
+ self:Update()
+end
+
+function block:Setup()
+
+end
diff -r 7c77fde36287 -r 2105b6e5095f Modules/Currency.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/Currency.xml Sun Mar 26 06:25:18 2017 -0400
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 7c77fde36287 -r 2105b6e5095f Modules/WorldState.lua
--- a/Modules/WorldState.lua Thu Mar 23 05:29:03 2017 -0400
+++ b/Modules/WorldState.lua Sun Mar 26 06:25:18 2017 -0400
@@ -2,31 +2,25 @@
-- WorldState.lua
-- Created: 10/7/2016 10:55 PM
-- %file-revision%
---
+-- An extensible panel group for HUD values
local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
local WorldStateBlockMixin = {}
VeneerOrderHallMixin = {
anchorPoint = 'TOP',
anchorFrom = 'TOP',
+ anchorPriority = 1,
anchorX = 0,
anchorY = 0,
addonTrigger = 'Blizzard_OrderHallUI',
addonFrame = 'OrderHallCommandBar',
}
-VeneerWorldStateHeadsUpMixin = {
-}
-
-VeneerWorldStateCurrencyMixin = {
-}
-VeneerWorldStateProgressMixin = {
- keepOpen = true,
-}
VeneerWorldStateMixin = {
maxHeight = 0,
detectedFrames = {},
anchorPoint = 'TOP',
+ modules = {}
}
function VeneerWorldStateMixin:Reset()
@@ -42,7 +36,6 @@
--DEFAULT_CHAT_FRAME:AddMessage('Loaded')
print('|cFFFFFF00'..self:GetName()..'|r:Setup()')
- self.modules = self.modules or {self:GetChildren()}
for i, frame in ipairs(self.modules) do
print('--'.. frame:GetName()..' exists')
if frame.Setup then
@@ -75,7 +68,7 @@
self:RegisterEvent('PLAYER_ENTERING_WORLD')
self:RegisterEvent('PLAYER_REGEN_ENABLED')
self:RegisterEvent('PLAYER_REGEN_DISABLED')
- Veneer:AddHandler(self, self.anchorPoint, 2)
+ Veneer:AddHandler(self, self.anchorPoint, self.anchorPriority)
SLASH_VENEERWORLDSTATE1 = "/vws"
SLASH_VENEERWORLDSTATE2 = "/worldstate"
SlashCmdList.VENEERWORLDSTATE = function()
@@ -157,14 +150,17 @@
function VeneerOrderHallMixin:Setup()
print('|cFFFFFF00'..self:GetName()..':Setup()')
self:SetParent(OrderHallCommandBar)
- self:RegisterEvent("ZONE_CHANGED");
- self:RegisterEvent("ZONE_CHANGED_INDOORS");
- self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
+ self:RegisterEvent("UNIT_AURA");
+ self:RegisterEvent("GARRISON_FOLLOWER_CATEGORIES_UPDATED")
+ self:RegisterEvent("GARRISON_FOLLOWER_ADDED")
+ self:RegisterEvent("GARRISON_FOLLOWER_REMOVED")
+
self:SetShown(true)
end
function VeneerOrderHallMixin:OnLoad()
Veneer:AddHandler(self, 'TOP', 1)
+ self:EnableMouse(false)
end
function VeneerOrderHallMixin:OnEvent(event, ...)
@@ -189,7 +185,6 @@
end
function VeneerOrderHallMixin:Update()
-
if not OrderHallCommandBar then
print('|cFFFF4400'..self:GetName()..' updater called without target')
return
@@ -201,7 +196,17 @@
OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
OrderHallCommandBar.WorldMapButton:Hide()
OrderHallCommandBar:EnableMouse(false)
- self:SetSize(700, 24)
+ self:SetSize(700, 22)
+
+ local troops = OrderHallCommandBar.TroopSummary
+ if troops then
+ for _, category in ipairs(troops) do
+ category.Count:SetFontObject(VeneerNumberFont)
+ category.Count:ClearAllPoints()
+ category.Count:SetPoint('BOTTOMRIGHT', category.Icon, 'BOTTOMRIGHT', -1, 1)
+ end
+ end
+
print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
@@ -209,308 +214,7 @@
Veneer:DynamicReanchor()
end
-function VeneerWorldStateCurrencyMixin:OnLoad ()
- self:RegisterEvent("PLAYER_ENTERING_WORLD");
- self:RegisterEvent("ZONE_CHANGED");
- self:RegisterEvent("ZONE_CHANGED_INDOORS");
- self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
- self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
- self:RegisterEvent('CHAT_MSG_CURRENCY')
-end
-function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
- self:Update()
-end
-local zoneCurrency = {
- ['Suramar'] = 1155,
- ["Sashj'tar Ruins"] = 1155,
- ["Faronaar Ruins"] = 1155
-}
-local zoneBountyInfo = {
- ['Suramar'] = 1859,
- ["Sashj'tar Ruins"] = 1859,
- ["Faronaar Ruins"] = 1859,
-
- ['Azsuna'] = 1900,
-}
-local globalBountyInfo = {
-}
-function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate)
- local zoneText = GetRealZoneText()
- local canShow = false
- if zoneText then
- local currency = zoneCurrency[zoneText]
- if currency then
- local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(zoneCurrency[zoneText])
- self.Icon:SetTexture(texture)
- self.Label:SetFormattedText("%d / %d", earned, totalMax)
- self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
- canShow = true
- end
- else
- end
- self:SetShown(canShow)
- VeneerWorldState:Reanchor(true)
-end
-
-function VeneerWorldStateProgressMixin:OnUpdate(sinceLast)
- self.timeLived = (self.timeLived or 0) + sinceLast
- if self.keepOpen then
- return
- end
- if self.timeLived >= 3 and not self.TimedFadeOut:IsPlaying() then
- self.TimedFadeOut:Play()
- end
-end
-
-function VeneerWorldStateProgressMixin:OnLoad()
- self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
-
- self:RegisterEvent("PLAYER_XP_UPDATE");
- self:RegisterEvent("UPDATE_EXHAUSTION");
- self:RegisterEvent("PLAYER_LEVEL_UP");
- self:RegisterEvent("PLAYER_UPDATE_RESTING");
-
- self:RegisterEvent("ARTIFACT_UPDATE");
- self:RegisterEvent("ARTIFACT_XP_UPDATE");
- self:RegisterEvent("ARTIFACT_CLOSE");
- self:RegisterEvent("ARTIFACT_MAX_RANKS_UPDATE");
-
- self.progressPercent = 0
- self.progressAmount = 0
- self.progressMax = 1
- self.progressOverflow = 0
-
-end
-
-function VeneerWorldStateProgressMixin:Setup()
- self:UpdateXPGain()
- if self.canGainXP then
- self.mode = 'xp'
- else
- self.mode = 'artifact'
- end
- print('setup mode:', self.mode)
-end
-
-function VeneerWorldStateProgressMixin:OnEvent(event, ...)
- local lastMode = self.mode
- if event == 'PLAYER_LEVEL_UP' or event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
- self:UpdateXPGain()
- elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
- self.mode = 'artifact'
-
- elseif event == 'PLAYER_EQUIPMENT_CHANGED' then
- local slot, hasEquip = ...
- if slot == 16 then
- self.mode = 'artifact'
- lastMode = nil
- end
- elseif event == 'PLAYER_XP_UPDATE' or event == 'PLAYER_LEVEL_UP' then
- print('forcing to XP mode')
- self.mode = 'xp'
- end
- self.modeChanged = (lastMode ~= self.mode)
- if self.modeChanged and self:IsVisible() then
- print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()', event, ...)
- self:AnimateMode()
- else
- print('|cFFFFFF00'..self:GetName()..':Update()', event, ...)
- self:Update()
- end
-end
-function VeneerWorldStateProgressMixin:UpdateXPGain()
- self.canGainXP = (UnitLevel('player') < GetMaxPlayerLevel()) and (not IsXPUserDisabled())
- if not self.canGainXP then
- self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
- end
-end
-
-local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
-local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
-
-
-local progressHandlers = {
- xp = function(self)
- local hasNewInfo, showChange = false, false
- local xp = UnitXP('player')
- local xpMax = UnitXPMax('player')
- local bonusXP = GetXPExhaustion()
- if xp then
- self.progressPercent = xp / xpMax
- end
- self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax
- if bonusXP then
- self.progressOverflow = min(1,(bonusXP / xpMax))
- self.OverflowBar:SetColorTexture(0.5, 0.5,0.5, 0.25)
- self.OverflowBar:SetPoint('LEFT', self.ProgressBar, 'LEFT')
- else
- self.progressOverflow = nil
- end
- self.ProgressBar:SetColorTexture(0, 0.5,1,1)
- self.OverflowAnchor = self.ProgressBar
- self.hasNewInfo = (self.progressAmount ~= xp)
- showChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax)
-
- self.progressAmount = xp
- self.progressMax = xpMax
- return hasNewInfo, showChange
- end,
- artifact = function(self)
- local hasNewInfo, showChange = false, false
- local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
- if itemID then
- local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
- print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost)
- hasNewInfo = (self.progressAmount ~= totalXP)
- showChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost))
-
- if totalXP > nextRankCost then
- self.progressPercent = 1
- else
- self.progressPercent = totalXP / nextRankCost
- end
-
- self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
-
- self.ProgressBar:SetColorTexture(1,0.5,0,1)
- self.OverflowBar:Hide()
-
- if totalXP > nextRankCost then
- self.progressText = self.progressText .. ' Level Up!'
- self.progressOverflow = (totalXP - nextRankCost) / nextRankCost
- self.OverflowBar:SetPoint('LEFT', self.ProgressBG, 'LEFT')
- self.OverflowAnchor = self.OverflawBar
- else
- self.progressOverflow = nil
- self.OverflowAnchor = self.ProgressBar
- end
-
- self.progressAmount = totalXP
- self.progressMax = nextRankCost
- else
- self.progressOverflow = nil
- self.progressAmount = 0
- self.progressMax = 1
- self.progressText = ''
- end
- return hasNewInfo, showChange
- end
-}
-
-function VeneerWorldStateProgressMixin:Update(isBatchUpdate)
-
- local progressChange = false
- print(' current mode:', self.mode, 'vis:', self:IsVisible())
- if (not self.mode) or (not progressHandlers[self.mode]) then
- self:HidePanel()
- return
- end
-
- local hasNewInfo, showProgress = progressHandlers[self.mode](self)
- self:SetSize(600,16)
- if hasNewInfo then
- self.timeOut = nil
- self.timeLived = 0
- end
-
-
- if not self:IsVisible() then
- self.TransitionFadeIn:Play()
- else
- self:ShowPanel()
- end
-
- print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown())
- print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth())
- if self.progressPercent > 0 then
- self.ProgressBar:Show()
- self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0)
- self.Label:SetText(self.progressText)
-
- self.ProgressSpark:ClearAllPoints()
- if self.progressOverflow then
- print(' Overflow:', self.progressOverflow)
- self.OverflowBar:Show()
- self.OverflowBar:SetWidth(self.progressOverflow * self:GetWidth(), 0)
- else
- self.OverflowBar:Hide()
- end
- self.ProgressSpark:SetPoint('CENTER', self.OverflowAnchor, 'RIGHT', 0, 0)
-
- else
- self.ProgressBar:Hide()
- end
-
- if self.progressOverflow and (self.progressOverflow >= self.progressPercent) then
- self.OverflowBar:SetDrawLayer('ARTWORK', 1)
- self.ProgressBar:SetDrawLayer('ARTWORK', 2)
- else
- self.OverflowBar:SetDrawLayer('ARTWORK', 2)
- self.ProgressBar:SetDrawLayer('ARTWORK', 1)
- end
-
- if progressChange then
- self:AnimateProgress(progressChange)
- end
-
- self.modeChanged = nil
-end
-
-
-function VeneerWorldStateProgressMixin:AnimateProgress(progressChange)
-
-
- local changeAnchor = (self.progressOverflow and self.OverflowBar) or self.ProgressBar
- local progressWidth = self:GetWidth() * min(progressChange, changeAnchor:GetWidth())
-
- self.ProgressAdded:Show()
- self.ProgressAdded:ClearAllPoints()
- self.ProgressAdded:SetPoint('TOPRIGHT', changeAnchor, 'TOPRIGHT', 0, 0)
- self.ProgressAdded:SetPoint('BOTTOMLEFT', changeAnchor, 'BOTTOMRIGHT', - (progressWidth), 0)
-
- print(' Render change:', progressWidth, changeAnchor)
- self.ProgressFlash.translation:SetOffset(progressWidth, 0)
- self.ProgressFlash:Play()
-end
-
-function VeneerWorldStateProgressMixin:OnMouseDown(button)
- if button == 'RightButton' then
- if self.keepOpen then
- self.keepOpen = nil
- self.timeLived = 1000
- else
- self.keepOpen = true
-
- self.modeChanged = true
- end
- print('keepOpen =', self.keepOpen)
- self:Update()
- else
-
- if self.mode == 'xp' then
- self.mode = 'artifact'
- else
- if not self.canGainXP then
- return
- end
- self.mode = 'xp'
- end
- print('|cFFFF4400Change mode:', self.mode)
-
-
- self:AnimateMode()
- end
-
-end
-
-function VeneerWorldStateProgressMixin:AnimateMode()
-
- self.TransitionFadeIn:Stop()
- print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()')
- self.modeChanged = true
- self.TransitionFadeOut:Play()
-end
do
function WorldStateBlockMixin:ShowPanel()
@@ -555,3 +259,4 @@
end
end
+
diff -r 7c77fde36287 -r 2105b6e5095f Modules/WorldState.xml
--- a/Modules/WorldState.xml Thu Mar 23 05:29:03 2017 -0400
+++ b/Modules/WorldState.xml Sun Mar 26 06:25:18 2017 -0400
@@ -9,29 +9,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 7c77fde36287 -r 2105b6e5095f Veneer.lua
--- a/Veneer.lua Thu Mar 23 05:29:03 2017 -0400
+++ b/Veneer.lua Sun Mar 26 06:25:18 2017 -0400
@@ -10,6 +10,7 @@
local type, strrep, ipairs, tinsert, tostring, select = type, string.rep, ipairs, tinsert, tostring, select
local pairs, tremove = pairs, tremove
local print = DEVIAN_WORKSPACE and function(...) _G.print('Veneer', ...) end or nop
+local eprint = DEVIAN_WORKSPACE and function(...) _G.print('VeneerEvent', ...) end or nop
local wipe = table.wipe
SLASH_VENEER1 = "/veneer"
@@ -103,6 +104,7 @@
local select, IsAddOnLoaded, IsLoggedIn = select, IsAddOnLoaded, IsLoggedIn
function Veneer:OnEvent(event, ...)
+ local print = eprint
print('|cFFFF0088OnEvent()|r',event, ...)
if (event == 'PLAYER_LOGIN') or (event == 'ADDON_LOADED') then
print(IsLoggedIn(), self.initialized)
@@ -205,57 +207,6 @@
function Veneer:GetClusterFromArgs (...)
- local primaryAnchor
- local insertPosition
- local insertPriority
-
-
- local clusterTable = self.FrameClusters
- for i = 1, select('#', ...) do
- local arg = select(i, ...)
- local argType = type(arg)
- if argType == 'string' then
- if not primaryAnchor then
- primaryAnchor = arg
- end
- clusterTable[arg] = clusterTable[arg] or {}
- clusterTable = clusterTable[arg]
- print(strrep(' ', i)..'anchor cluster', i, arg)
- elseif argType == 'boolean' then
- if arg == true then
- print('force top position')
- insertPosition = 1
- insertPriority = nil
- end
- elseif argType == 'number' then
- insertPriority = arg
- end
- end
-
- if insertPriority then
- for i = 1, #clusterTable do
- if clusterTable[i].anchorPriority and (clusterTable[i].anchorPriority > insertPriority) then
- print('prioritized insert position:', insertPriority, insertPosition)
- break
- else
- print('passing lower priority frame:', clusterTable[i]:GetName())
- end
- insertPosition = i
- end
- end
-
-
- if not primaryAnchor then
- primaryAnchor = 'CENTER'
- clusterTable[primaryAnchor] = clusterTable[primaryAnchor] or {}
- clusterTable = clusterTable[primaryAnchor]
- print('using default anchor')
- end
-
- if not insertPosition then
- insertPosition = #clusterTable + 1
- print('using default position')
- end
return primaryAnchor, clusterTable, insertPosition
end
@@ -272,14 +223,71 @@
end
if not handler.anchorFrame then
- local anchorGroup, clusterTable, clusterIndex, clusterPriority = self:GetClusterFromArgs(...)
- if clusterIndex == 1 then
- for i, frame in ipairs(clusterTable) do
- frame.clusterIndex = i + 1
+
+ local primaryAnchor
+ local clusterIndex
+ local clusterPriority = handler.anchorPriority
+ local clusterDepth = 0
+
+ local clusterTable = self.FrameClusters
+ for i = 1, select('#', ...) do
+ local arg = select(i, ...)
+ local argType = type(arg)
+ if argType == 'string' then
+
+ if not primaryAnchor then
+ primaryAnchor = arg
+ end
+ clusterDepth = clusterDepth + 1
+ clusterTable[arg] = clusterTable[arg] or {}
+ clusterTable = clusterTable[arg]
+ print('clusterGroup =', clusterDepth ..'.'.. arg)
+ elseif argType == 'boolean' then
+ if arg == true then
+ print('anchorFirst =', arg)
+ clusterPriority = nil
+ end
+ elseif argType == 'number' then
+ if arg ~= clusterPriority then
+ print('anchorPriority =', arg)
+ clusterPriority = arg
+ end
+
end
end
+
+ if clusterPriority then
+ for i = 1, #clusterTable do
+ clusterIndex = i
+ if clusterTable[i].anchorPriority and (clusterTable[i].anchorPriority > clusterPriority) then
+ print('|cFF00BB00insert position:', clusterPriority, clusterIndex)
+ break
+ else
+ print('passing lower priority frame:', clusterTable[i]:GetName())
+ end
+ end
+ else
+ print('|cFF00BB00inserting at front')
+ clusterIndex = 1
+ end
+
+
+ if not primaryAnchor then
+ primaryAnchor = 'CENTER'
+ clusterTable[primaryAnchor] = clusterTable[primaryAnchor] or {}
+ clusterTable = clusterTable[primaryAnchor]
+ end
+
+ if not clusterPriority then
+ clusterIndex = #clusterTable + 1
+ end
+ if not clusterIndex then
+ clusterIndex = #clusterTable + 1
+ end
+
+
tinsert(clusterTable, clusterIndex, handler)
- print(' cluster', anchorGroup, 'table', clusterTable, 'position', clusterIndex)
+ print(' cluster', primaryAnchor, 'table', clusterTable, 'priority', clusterPriority, 'position', clusterIndex)
handler.anchorCluster = clusterTable
handler.anchorIndex = clusterIndex
@@ -334,10 +342,10 @@
end
--- Evaluates frames visibility and chains them accordingly
-
-function Veneer:DynamicReanchor(parent)
+-- Recursives updates frame group anchors
+function Veneer:EvaluateAnchors(parent)
parent = parent or self
+ local print = eprint
print('|cFF88FF00DynamicReanchor()')
for anchorPoint, cluster in pairs(parent.FrameClusters) do
if anchorPoint ~= LE_FREE_FRAMES_GROUP then
@@ -372,8 +380,11 @@
end
end
+Veneer.DynamicReanchor = Veneer.EvaluateAnchors
+
-- Evaluates the current visibility state and re-anchors adjacent blocks accordingly
function Veneer:InternalReanchor(handler, printFunc)
+ local print = eprint
print('|cFF00FFFFVeneer:InternalReanchor('..handler:GetName()..')')
if handler.anchorFrame then
handler:SetPoint(handler.anchorPoint, handler.anchorFrame, handler.anchorFrom, handler.anchorX, handler.anchorY)
@@ -423,6 +434,7 @@
end
function Veneer:SlideBlock(frame, ...)
+ local print = eprint
local aX, aY = frame:GetLeft(), frame:GetTop()
frame:SetPoint('TOPLEFT', frame, 'BOTTOMLEFT', aX, aY)
@@ -440,6 +452,7 @@
function Veneer:ExecuteOnClusters(layer, method)
+ local print = eprint
self.parserDepth = self.parserDepth + 1
if not layer then
if self.parserDepth > 1 then
@@ -480,6 +493,7 @@
-- Takes frame handle and assigns a block to it
function Veneer:Acquire (frame, template)
+ local print = eprint
if not frame then
print('|cFFFF4400Unable to acquire frame...|r')
return
diff -r 7c77fde36287 -r 2105b6e5095f Veneer.toc
--- a/Veneer.toc Thu Mar 23 05:29:03 2017 -0400
+++ b/Veneer.toc Sun Mar 26 06:25:18 2017 -0400
@@ -14,6 +14,7 @@
##Options.lua
Modules\WorldState.xml
+Modules\Currency.xml
Modules\TalkingHead.xml
Modules\BuffFrame.xml
Modules\PaperDoll.xml