Nenue@6
|
1 --- ${PACKAGE_NAME}
|
Nenue@6
|
2 -- @file-author@
|
Nenue@6
|
3 -- @project-revision@ @project-hash@
|
Nenue@6
|
4 -- @file-revision@ @file-hash@
|
Nenue@6
|
5 -- Created: 1/16/2016 12:20 AM
|
Nenue@6
|
6 local _G, CreateFrame = _G, CreateFrame
|
Nenue@6
|
7 local T, tinsert, UIParent = _G.Turok, table.insert, _G.UIParent
|
Nenue@6
|
8 local mod = T.modules.TimerControl
|
Nenue@6
|
9 local db, CollectorTray
|
Nenue@6
|
10
|
Nenue@6
|
11 local pairs, ipairs, gsub, sub, setmetatable = pairs, ipairs, string.gsub, string.sub, setmetatable
|
Nenue@6
|
12 local INVTYPE_FINGER, INVSLOT_FINGER1, INVSLOT_FINGER2, INVTYPE_TRINKET, INVSLOT_TRINKET1, INVSLOT_TRINKET2 =
|
Nenue@6
|
13 INVTYPE_FINGER, INVSLOT_FINGER1, INVSLOT_FINGER2, INVTYPE_TRINKET, INVSLOT_TRINKET1, INVSLOT_TRINKET2
|
Nenue@6
|
14 --@debug@
|
Nenue@6
|
15 local DEBUG = true
|
Nenue@6
|
16 --@end-debug@
|
Nenue@6
|
17 local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool
|
Nenue@6
|
18 local print = function(...)
|
Nenue@6
|
19 if not DEBUG then return end
|
Nenue@6
|
20 if _G.Devian and _G.DevianDB.workspace ~= 1 then
|
Nenue@6
|
21 _G.print('TimerContainer', ...)
|
Nenue@6
|
22 end
|
Nenue@6
|
23 end
|
Nenue@6
|
24
|
Nenue@6
|
25 --- defaults
|
Nenue@6
|
26 local Containers = {}
|
Nenue@6
|
27
|
Nenue@6
|
28 --- manages collections of timer displays
|
Nenue@6
|
29 local TimerContainer_Init = function(frame, cvars)
|
Nenue@6
|
30
|
Nenue@6
|
31 frame.num_timers = 0
|
Nenue@6
|
32 frame.anchor = cvars.anchor
|
Nenue@6
|
33 frame.parent = cvars.parent
|
Nenue@6
|
34 frame.anchorTo = cvars.anchorTo
|
Nenue@6
|
35 frame.x = cvars.x
|
Nenue@6
|
36 frame.y = cvars.y
|
Nenue@6
|
37 frame.name = cvars.name
|
Nenue@6
|
38 frame.padding = cvars.padding
|
Nenue@6
|
39 frame.spacing = cvars.spacing
|
Nenue@6
|
40 frame.width = cvars.width
|
Nenue@6
|
41 frame.height = cvars.height
|
Nenue@6
|
42 frame.timers = {}
|
Nenue@6
|
43 frame.childAnchor = cvars.childAnchor
|
Nenue@6
|
44 frame.childAnchorTo = cvars.childAnchorTo
|
Nenue@6
|
45
|
Nenue@6
|
46 frame:ClearAllPoints()
|
Nenue@6
|
47 frame:SetPoint(cvars.anchor, cvars.parent, cvars.anchorTo, cvars.x, cvars.y)
|
Nenue@6
|
48 frame:SetSize(cvars.width, cvars.height) -- initial values
|
Nenue@6
|
49 frame.NameText:SetText(frame.name)
|
Nenue@6
|
50 end
|
Nenue@6
|
51
|
Nenue@6
|
52 local TimerContainer_Add = function(frame, timer)
|
Nenue@6
|
53 if timer.containerHandle then
|
Nenue@6
|
54 print('stop now')
|
Nenue@6
|
55 return
|
Nenue@6
|
56 end
|
Nenue@6
|
57 timer.containerHandle = 1
|
Nenue@6
|
58
|
Nenue@6
|
59 print('adding', timer.timerName, 'to', frame.name)
|
Nenue@6
|
60 local handle = frame.num_timers + 1
|
Nenue@6
|
61 -- if the timer is ordered, start from the top and shift each item upward until they are no longer
|
Nenue@6
|
62 -- above the
|
Nenue@6
|
63 print('resulting handle:', handle)
|
Nenue@6
|
64 print(#frame.timers)
|
Nenue@6
|
65
|
Nenue@6
|
66 frame.num_timers = frame.num_timers + 1
|
Nenue@6
|
67
|
Nenue@6
|
68 tinsert(frame.timers, timer)
|
Nenue@6
|
69 timer.containerHandle = #frame.timers
|
Nenue@6
|
70 --frame.timers[handle] = timer
|
Nenue@6
|
71 end
|
Nenue@6
|
72
|
Nenue@6
|
73 local TimerContainer_Unlock = function(frame)
|
Nenue@6
|
74
|
Nenue@6
|
75 end
|
Nenue@6
|
76
|
Nenue@6
|
77 local TimerContainer_Update = function(frame)
|
Nenue@6
|
78 local frameCount, hiddenCount = 0, 0
|
Nenue@6
|
79 local w = frame.padding
|
Nenue@6
|
80 local translation_points = {}
|
Nenue@6
|
81 local dx, dy = 0, 0 -- net change in container dimensions
|
Nenue@6
|
82 for k, spirit in pairs(frame.timers) do
|
Nenue@6
|
83 hiddenCount = hiddenCount + 1
|
Nenue@6
|
84 if spirit:IsVisible() and not(spirit.trash or spirit.cvars.absolute) then
|
Nenue@6
|
85 frameCount = frameCount + 1
|
Nenue@6
|
86 spirit.index = frameCount
|
Nenue@6
|
87 print(' -', cNum(hiddenCount), cNum(frameCount), cKey(spirit:GetName()))
|
Nenue@6
|
88 --tinsert(frame.timers, spirit)
|
Nenue@6
|
89 spirit:ClearAllPoints()
|
Nenue@6
|
90 local tx = w
|
Nenue@6
|
91 local ty = 0
|
Nenue@6
|
92 if spirit.cvars.relative then
|
Nenue@6
|
93 tx = tx + spirit.cvars.x
|
Nenue@6
|
94 ty = ty + spirit.cvars.y
|
Nenue@6
|
95 else
|
Nenue@6
|
96 w = w + spirit:GetWidth() + frame.spacing
|
Nenue@6
|
97 end
|
Nenue@6
|
98 translation_points[k] = {
|
Nenue@6
|
99 x = spirit.cvars.x, y = spirit.cvars.y,
|
Nenue@6
|
100 dx = tx - spirit.cvars.x, dy = ty - spirit.cvars.y
|
Nenue@6
|
101 }
|
Nenue@6
|
102 end
|
Nenue@6
|
103
|
Nenue@6
|
104 --- track the size of in/outbound frames
|
Nenue@6
|
105 if not spirit.collected then
|
Nenue@6
|
106 if spirit.trash then
|
Nenue@6
|
107 dx = dx - spirit.width
|
Nenue@6
|
108 elseif spirit.add then
|
Nenue@6
|
109 dx = dx + spirit.width
|
Nenue@6
|
110 end
|
Nenue@6
|
111 spirit.collected = true
|
Nenue@6
|
112 end
|
Nenue@6
|
113 end
|
Nenue@6
|
114 print(cText(' dx:'), cNum(dx))
|
Nenue@6
|
115
|
Nenue@6
|
116
|
Nenue@6
|
117 frame.width = frame.width + dx
|
Nenue@6
|
118 frame:SetWidth(frame.width)
|
Nenue@6
|
119 local ddX = dx / frameCount
|
Nenue@6
|
120
|
Nenue@6
|
121 for id, a in pairs(translation_points) do
|
Nenue@6
|
122 local spirit = frame.timers[id]
|
Nenue@6
|
123
|
Nenue@6
|
124
|
Nenue@6
|
125 spirit.slide.t1:SetOffset(a.dx, a.dy)
|
Nenue@6
|
126 spirit.slide:SetScript('OnFinished', function()
|
Nenue@6
|
127 spirit.cvars.x = a.x + a.dx
|
Nenue@6
|
128 spirit.cvars.y = a.y + a.dy
|
Nenue@6
|
129 spirit:SetPoint(frame.childAnchor, frame, frame.childAnchorTo, spirit.cvars.x, spirit.cvars.y)
|
Nenue@6
|
130 end)
|
Nenue@6
|
131 spirit.slide:Play()
|
Nenue@6
|
132 end
|
Nenue@6
|
133 end
|
Nenue@6
|
134
|
Nenue@6
|
135 --- Updates the appropriate containers' object positions
|
Nenue@6
|
136 function mod.Report(self)
|
Nenue@6
|
137 if not self.container then
|
Nenue@6
|
138 self.container = 'default'
|
Nenue@6
|
139 print('reporting to default container')
|
Nenue@6
|
140 else
|
Nenue@6
|
141 print('reporting to container', self.container)
|
Nenue@6
|
142 end
|
Nenue@6
|
143
|
Nenue@6
|
144 if not Containers[self.container] then
|
Nenue@6
|
145 print('need to create')
|
Nenue@6
|
146 Containers[self.container] = CreateFrame('Frame', 'TkCollectorFrame'..self.container, UIParent, 'TkContainerTemplate')
|
Nenue@6
|
147 TimerContainer_Init(Containers[self.container], mod.db.containers[self.container] or mod.db.containers)
|
Nenue@6
|
148 end
|
Nenue@6
|
149
|
Nenue@6
|
150 if not self.containerHandle then
|
Nenue@6
|
151 TimerContainer_Add(Containers[self.container], self)
|
Nenue@6
|
152 else
|
Nenue@6
|
153 print(self.timerName, 'has a container assigned')
|
Nenue@6
|
154 end
|
Nenue@6
|
155 TimerContainer_Update(Containers[self.container])
|
Nenue@6
|
156 end |