Mercurial > wow > turok
view Turok/Modules/Timer/Container.lua @ 9:9400a0ff8540
Ugh
Timer:
- container update directionality
- talent update iterates over a non-volatile table to carry out updates
- index management steps organized
- talentRow status implemented, returns the spell associated with the talent chosen from that row
CombatLog:
- sort out font controls and unbork arguments
author | Nenue |
---|---|
date | Sun, 21 Feb 2016 13:08:30 -0500 |
parents | a9b8b0866ece |
children |
line wrap: on
line source
--- ${PACKAGE_NAME} -- @file-author@ -- @project-revision@ @project-hash@ -- @file-revision@ @file-hash@ -- Created: 1/16/2016 12:20 AM local _G, CreateFrame = _G, CreateFrame local T, tinsert, UIParent = _G.Turok, table.insert, _G.UIParent local mod = T.modules.TimerControl local db, CollectorTray local pairs, ipairs, gsub, sub, setmetatable = pairs, ipairs, string.gsub, string.sub, setmetatable local INVTYPE_FINGER, INVSLOT_FINGER1, INVSLOT_FINGER2, INVTYPE_TRINKET, INVSLOT_TRINKET1, INVSLOT_TRINKET2 = INVTYPE_FINGER, INVSLOT_FINGER1, INVSLOT_FINGER2, INVTYPE_TRINKET, INVSLOT_TRINKET1, INVSLOT_TRINKET2 --@debug@ local DEBUG = true --@end-debug@ local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool local print = function(...) if not DEBUG then return end if _G.Devian and _G.DevianDB.workspace ~= 1 then _G.print('TimerContainer', ...) end end --- defaults local Containers = {} --- manages collections of timer displays local TimerContainer_Init = function(frame, cvars) frame.num_timers = 0 frame.anchor = cvars.anchor frame.parent = cvars.parent frame.anchorTo = cvars.anchorTo frame.x = cvars.x frame.y = cvars.y frame.name = cvars.name frame.padding = cvars.padding frame.spacing = cvars.spacing frame.width = cvars.width frame.height = cvars.height frame.timers = {} frame.childAnchor = cvars.childAnchor frame.childAnchorTo = cvars.childAnchorTo frame:ClearAllPoints() frame:SetPoint(cvars.anchor, cvars.parent, cvars.anchorTo, cvars.x, cvars.y) frame:SetSize(cvars.width, cvars.height) -- initial values frame.NameText:SetText(frame.name) end local TimerContainer_Add = function(frame, timer) if timer.containerHandle then print('stop now') return end timer.containerHandle = 1 print('adding', timer.timerName, 'to', frame.name) local handle = frame.num_timers + 1 -- if the timer is ordered, start from the top and shift each item upward until they are no longer -- above the print('resulting handle:', handle) print(#frame.timers) frame.num_timers = frame.num_timers + 1 tinsert(frame.timers, timer) timer.containerHandle = #frame.timers --frame.timers[handle] = timer end local TimerContainer_Unlock = function(frame) end local TimerContainer_Update = function(frame) local frameCount, hiddenCount = 0, 0 local w = frame.padding local translation_points = {} local dx, dy = 0, 0 -- net change in container dimensions for k, spirit in pairs(frame.timers) do hiddenCount = hiddenCount + 1 if spirit:IsVisible() and not(spirit.trash or spirit.cvars.absolute) then frameCount = frameCount + 1 spirit.index = frameCount print(' -', cNum(hiddenCount), cNum(frameCount), cKey(spirit:GetName())) --tinsert(frame.timers, spirit) spirit:ClearAllPoints() local tx = w local ty = 0 if spirit.cvars.relative then tx = tx + spirit.cvars.x ty = ty + spirit.cvars.y else w = w + spirit:GetWidth() + frame.spacing end translation_points[k] = { x = spirit.cvars.x, y = spirit.cvars.y, dx = tx - spirit.cvars.x, dy = ty - spirit.cvars.y } end --- track the size of in/outbound frames if not spirit.collected then if spirit.trash then dx = dx - spirit.width elseif spirit.add then dx = dx + spirit.width end spirit.collected = true end end print(cText(' dx:'), cNum(dx)) frame.width = frame.width + dx frame:SetWidth(frame.width) local ddX = dx / frameCount for id, a in pairs(translation_points) do local spirit = frame.timers[id] spirit.slide.t1:SetOffset(a.dx, a.dy) spirit.slide:SetScript('OnFinished', function() spirit.cvars.x = a.x + a.dx spirit.cvars.y = a.y + a.dy spirit:SetPoint(frame.childAnchor, frame, frame.childAnchorTo, spirit.cvars.x, spirit.cvars.y) end) spirit.slide:Play() end end --- Updates the appropriate containers' object positions function mod.Report(self) if not self.container then self.container = 'default' print('reporting to default container') else print('reporting to container', self.container) end if not Containers[self.container] then print('need to create') Containers[self.container] = CreateFrame('Frame', 'TkCollectorFrame'..self.container, UIParent, 'TkContainerTemplate') TimerContainer_Init(Containers[self.container], mod.db.containers[self.container] or mod.db.containers) end if not self.containerHandle then TimerContainer_Add(Containers[self.container], self) else print(self.timerName, 'has a container assigned') end TimerContainer_Update(Containers[self.container]) end