Nenue@80
|
1 -- Veneer
|
Nenue@84
|
2 -- WorldState.lua
|
Nenue@80
|
3 -- Created: 10/7/2016 10:55 PM
|
Nenue@80
|
4 -- %file-revision%
|
Nick@113
|
5 -- An extensible panel group for HUD values
|
Nenue@80
|
6
|
Nenue@97
|
7 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
|
Nenue@87
|
8 local WorldStateBlockMixin = {}
|
Nenue@87
|
9 VeneerOrderHallMixin = {
|
Nenue@87
|
10 anchorPoint = 'TOP',
|
Nenue@90
|
11 anchorFrom = 'TOP',
|
Nick@113
|
12 anchorPriority = 1,
|
Nenue@90
|
13 anchorX = 0,
|
Nenue@90
|
14 anchorY = 0,
|
Nenue@90
|
15 addonTrigger = 'Blizzard_OrderHallUI',
|
Nenue@90
|
16 addonFrame = 'OrderHallCommandBar',
|
Nenue@87
|
17 }
|
Nenue@97
|
18
|
Nenue@81
|
19 VeneerWorldStateMixin = {
|
Nenue@82
|
20 maxHeight = 0,
|
Nenue@87
|
21 detectedFrames = {},
|
Nenue@87
|
22 anchorPoint = 'TOP',
|
Nick@113
|
23 modules = {}
|
Nenue@81
|
24 }
|
Nenue@80
|
25
|
Nenue@87
|
26 function VeneerWorldStateMixin:Reset()
|
Nenue@87
|
27 for i, frame in ipairs(self.modules) do
|
Nenue@87
|
28 if frame.Reset then
|
Nenue@87
|
29 frame:Reset()
|
Nenue@87
|
30 end
|
Nenue@87
|
31 end
|
Nenue@87
|
32 self:Update()
|
Nenue@87
|
33 end
|
Nenue@87
|
34
|
Nenue@80
|
35 function VeneerWorldStateMixin:Setup()
|
Nenue@80
|
36 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
|
Nenue@84
|
37 print('|cFFFFFF00'..self:GetName()..'|r:Setup()')
|
Nenue@81
|
38
|
Nenue@81
|
39 for i, frame in ipairs(self.modules) do
|
Nenue@84
|
40 print('--'.. frame:GetName()..' exists')
|
Nenue@81
|
41 if frame.Setup then
|
Nenue@84
|
42 print('--'.. frame:GetName()..':Setup()')
|
Nenue@81
|
43 frame:Setup()
|
Nenue@81
|
44 end
|
Nenue@82
|
45
|
Nenue@87
|
46
|
Nenue@87
|
47 for k,v in pairs(WorldStateBlockMixin) do
|
Nenue@87
|
48 if not frame[k] then
|
Nenue@87
|
49 frame[k] = v
|
Nenue@87
|
50 if k:match('^On') then
|
Nenue@87
|
51 frame:SetScript(k, v)
|
Nenue@87
|
52 end
|
Nenue@82
|
53 end
|
Nenue@87
|
54 end
|
Nenue@82
|
55
|
Nenue@81
|
56 end
|
Nenue@84
|
57 self:UnregisterEvent('PLAYER_LOGIN')
|
Nenue@80
|
58 end
|
Nenue@80
|
59
|
Nenue@82
|
60 function VeneerWorldStateMixin:SetOrderHallUIMods()
|
Nenue@87
|
61 print('|cFFFF4400remove me', debugstack())
|
Nenue@80
|
62 end
|
Nenue@84
|
63
|
Nenue@84
|
64
|
Nenue@84
|
65 function VeneerWorldStateMixin:OnLoad ()
|
Nenue@87
|
66 self.modules = {self:GetChildren()}
|
Nenue@84
|
67 print('|cFFFFFF00'..self:GetName()..'|r!')
|
Nenue@84
|
68 self:RegisterEvent('PLAYER_ENTERING_WORLD')
|
Nenue@84
|
69 self:RegisterEvent('PLAYER_REGEN_ENABLED')
|
Nenue@84
|
70 self:RegisterEvent('PLAYER_REGEN_DISABLED')
|
Nick@113
|
71 Veneer:AddHandler(self, self.anchorPoint, self.anchorPriority)
|
Nenue@87
|
72 SLASH_VENEERWORLDSTATE1 = "/vws"
|
Nenue@87
|
73 SLASH_VENEERWORLDSTATE2 = "/worldstate"
|
Nenue@87
|
74 SlashCmdList.VENEERWORLDSTATE = function()
|
Nenue@87
|
75 self:Reset()
|
Nenue@87
|
76 end
|
Nenue@84
|
77 end
|
Nenue@84
|
78
|
Nenue@80
|
79 function VeneerWorldStateMixin:OnEvent(event, arg)
|
Nenue@80
|
80 print(event, arg)
|
Nenue@90
|
81 if event == 'PLAYER_ENTERING_WORLD' then
|
Nenue@80
|
82 self:Update()
|
Nenue@81
|
83 elseif event == 'PLAYER_REGEN_ENABLED' then
|
Nick@108
|
84 self:Update(true)
|
Nenue@81
|
85 elseif event == 'PLAYER_REGEN_DISABLED' then
|
Nick@108
|
86 self:Update(true)
|
Nenue@80
|
87 end
|
Nenue@80
|
88 end
|
Nenue@80
|
89
|
Nenue@88
|
90 function VeneerWorldStateMixin:Update(isBatchUpdate)
|
Nenue@80
|
91 print('|cFFFFFF00All:Update()|r')
|
Nick@111
|
92 local canShow = false
|
Nenue@88
|
93 for index, frame in ipairs(self.modules) do
|
Nenue@82
|
94 if frame.Update then
|
Nenue@88
|
95 print(' '..index..' |cFFFF00FFUpdate:|r '.. frame:GetName())
|
Nenue@88
|
96 frame:Update(isBatchUpdate)
|
Nenue@88
|
97 print(' ', frame:IsVisible(), frame:IsShown())
|
Nick@111
|
98 if frame:IsShown() then
|
Nick@111
|
99 canShow = true
|
Nick@111
|
100 end
|
Nick@111
|
101
|
Nenue@82
|
102 end
|
Nenue@82
|
103 end
|
Nick@111
|
104 self:SetShown(canShow)
|
Nenue@82
|
105 end
|
Nenue@82
|
106
|
Nick@108
|
107 function VeneerWorldStateMixin:OnShow()
|
Nick@108
|
108 print('OnShow()', debugstack())
|
Nick@108
|
109 end
|
Nick@108
|
110
|
Nenue@87
|
111 function VeneerWorldStateMixin:Reanchor(isUpdate)
|
Nenue@88
|
112 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks')
|
Nenue@81
|
113 self.maxHeight = 0
|
Nenue@89
|
114 local lastFrame
|
Nenue@81
|
115 for i, frame in ipairs(self.modules) do
|
Nick@108
|
116 print(' '..frame:GetName()..':',frame:IsShown(), frame:GetHeight())
|
Nick@108
|
117 if frame:IsShown() then
|
Nenue@89
|
118 if lastFrame then
|
Nenue@89
|
119 frame:SetPoint('TOP', lastFrame, 'BOTTOM')
|
Nenue@89
|
120 else
|
Nenue@89
|
121 frame:SetPoint('TOP', self, 'TOP')
|
Nenue@89
|
122 end
|
Nenue@89
|
123
|
Nenue@89
|
124 self.maxHeight = self.maxHeight + frame:GetHeight()
|
Nenue@89
|
125 lastFrame = frame
|
Nenue@80
|
126 end
|
Nenue@80
|
127 end
|
Nick@108
|
128 if (self.maxHeight == 0) or InCombatLockdown() then
|
Nick@108
|
129 print (' hiding; combat =', InCombatLockdown())
|
Nick@108
|
130 self:SetShown(false)
|
Nenue@82
|
131 else
|
Nenue@87
|
132 print (' height update:', self.maxHeight)
|
Nenue@82
|
133 self:SetHeight(self.maxHeight)
|
Nick@108
|
134 self:SetShown(true)
|
Nenue@82
|
135 end
|
Nenue@82
|
136
|
Nenue@87
|
137 if not isUpdate then
|
Nenue@87
|
138 Veneer:InternalReanchor(self, print)
|
Nenue@87
|
139 end
|
Nenue@93
|
140
|
Nenue@93
|
141 WorldStateAlwaysUpFrame:ClearAllPoints()
|
Nenue@93
|
142 WorldStateAlwaysUpFrame:SetPoint('TOP', self, 'BOTTOM', 0, 0)
|
Nenue@80
|
143 end
|
Nenue@80
|
144
|
Nenue@80
|
145
|
Nenue@80
|
146
|
Nenue@84
|
147 function VeneerWorldStateMixin:OnMouseDown()
|
Nenue@80
|
148 end
|
Nenue@80
|
149
|
Nick@114
|
150 --- Order Hall mod
|
Nick@114
|
151 local requiresUpdate
|
Nick@114
|
152 local ocb
|
Nenue@87
|
153 function VeneerOrderHallMixin:Setup()
|
Nenue@87
|
154 print('|cFFFFFF00'..self:GetName()..':Setup()')
|
Nick@114
|
155 ocb = OrderHallCommandBar
|
Nick@114
|
156 hooksecurefunc(ocb, 'RefreshCategories', function()
|
Nick@114
|
157 requiresUpdate = true
|
Nick@114
|
158 end)
|
Nick@114
|
159 hooksecurefunc(ocb, 'RefreshCurrency',
|
Nick@114
|
160 function()
|
Nick@114
|
161 requiresUpdate = true
|
Nick@114
|
162 end)
|
Nick@114
|
163 hooksecurefunc(ocb, 'SetShown', function(isShown)
|
Nick@114
|
164 self:SetShown(isShown)
|
Nick@114
|
165 end)
|
Nick@114
|
166 hooksecurefunc(ocb, 'RefreshAll', function()
|
Nick@114
|
167 self:Update()
|
Nick@114
|
168 end)
|
Nick@113
|
169
|
Nick@114
|
170 ocb:ClearAllPoints()
|
Nick@114
|
171 ocb:SetAllPoints(self)
|
Nick@114
|
172
|
Nick@114
|
173
|
Nick@114
|
174 ocb.WorldMapButton:Hide()
|
Nick@114
|
175 ocb.AreaName:Hide()
|
Nick@114
|
176
|
Nick@114
|
177 ocb.Currency:SetFontObject(VeneerHeaderFont)
|
Nick@114
|
178 ocb.Currency:ClearAllPoints()
|
Nick@114
|
179 ocb.Currency:SetPoint('BOTTOMLEFT', ocb.ClassIcon, 'BOTTOMRIGHT', 15, 0)
|
Nick@114
|
180
|
Nick@114
|
181 ocb.CurrencyIcon:ClearAllPoints()
|
Nick@114
|
182 ocb.CurrencyIcon:SetPoint('TOP', ocb.ClassIcon, 'TOPRIGHT')
|
Nick@114
|
183
|
Nick@114
|
184 ocb.Background:SetColorTexture(0,0,0,0.5)
|
Nick@114
|
185
|
Nick@114
|
186 -- frame that calls up the resources tooltip
|
Nick@114
|
187 ocb.CurrencyHitTest:SetPoint('LEFT', ocb.CurrencyIcon, 'LEFT')
|
Nick@114
|
188 ocb.CurrencyHitTest:SetPoint('RIGHT', ocb.Currency, 'RIGHT')
|
Nick@114
|
189
|
Nick@114
|
190
|
Nick@114
|
191 self:SetSize(700, 23)
|
Nick@114
|
192 self:SetShown(ocb:IsShown())
|
Nick@114
|
193 end
|
Nick@114
|
194
|
Nick@114
|
195 function VeneerOrderHallMixin:OnUpdate()
|
Nick@114
|
196 if requiresUpdate then
|
Nick@114
|
197 self:Update()
|
Nick@114
|
198 end
|
Nick@114
|
199
|
Nenue@88
|
200 end
|
Nenue@88
|
201
|
Nenue@90
|
202 function VeneerOrderHallMixin:OnLoad()
|
Nick@108
|
203 Veneer:AddHandler(self, 'TOP', 1)
|
Nick@113
|
204 self:EnableMouse(false)
|
Nenue@90
|
205 end
|
Nenue@90
|
206
|
Nenue@88
|
207
|
Nenue@88
|
208 function VeneerOrderHallMixin:OnShow()
|
Nick@114
|
209 if ocb then
|
Nick@114
|
210 --self:Print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', ocb:IsShown(), self:IsShown())
|
Nenue@90
|
211 self:Update()
|
Nenue@90
|
212 end
|
Nenue@87
|
213 end
|
Nenue@87
|
214
|
Nenue@87
|
215 function VeneerOrderHallMixin:Update()
|
Nick@114
|
216 self:SetShown(ocb:IsShown())
|
Nick@114
|
217 local lastFrame
|
Nick@114
|
218 local categoriesWidth = 0
|
Nick@113
|
219 local troops = OrderHallCommandBar.TroopSummary
|
Nick@113
|
220 if troops then
|
Nick@113
|
221 for _, category in ipairs(troops) do
|
Nick@114
|
222 category.Count:SetFontObject(VeneerHeaderFont)
|
Nick@114
|
223 category.Count:SetTextColor(1,1,1,1)
|
Nick@113
|
224 category.Count:ClearAllPoints()
|
Nick@113
|
225 category.Count:SetPoint('BOTTOMRIGHT', category.Icon, 'BOTTOMRIGHT', -1, 1)
|
Nick@114
|
226
|
Nick@114
|
227 category:ClearAllPoints()
|
Nick@114
|
228 if lastFrame then
|
Nick@114
|
229 lastFrame:SetPoint('TOPRIGHT', category, 'TOPLEFT', 0, 0)
|
Nick@114
|
230 end
|
Nick@114
|
231 category:SetSize(category.TroopPortraitCover:GetSize())
|
Nick@114
|
232
|
Nick@114
|
233 lastFrame = category
|
Nick@114
|
234 categoriesWidth = categoriesWidth + category:GetWidth()
|
Nick@114
|
235 end
|
Nick@114
|
236
|
Nick@114
|
237 if lastFrame then
|
Nick@114
|
238 lastFrame:SetPoint('TOPRIGHT', ocb, 'TOPRIGHT', 0, 0)
|
Nick@113
|
239 end
|
Nick@114
|
240
|
Nick@113
|
241 end
|
Nick@114
|
242 self:SetWidth(ocb.ClassIcon:GetWidth() + 15 + ocb.Currency:GetWidth() + ocb.CurrencyIcon:GetWidth() + categoriesWidth)
|
Nick@114
|
243 requiresUpdate = nil
|
Nick@114
|
244 --print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
|
Nick@114
|
245 --print(debugstack(6))
|
Nenue@98
|
246 Veneer:DynamicReanchor()
|
Nenue@87
|
247 end
|
Nenue@87
|
248
|
Nenue@80
|
249
|
Nenue@87
|
250
|
Nenue@87
|
251 do
|
Nenue@87
|
252 function WorldStateBlockMixin:ShowPanel()
|
Nenue@87
|
253 print('|cFF0088FF'..self:GetName()..':ShowPanel()')
|
Nenue@87
|
254 self:SetShown(true)
|
Nenue@93
|
255 self:SetAlpha(1)
|
Nenue@87
|
256 VeneerWorldState:Show()
|
Nenue@87
|
257 end
|
Nenue@87
|
258 function WorldStateBlockMixin:HidePanel()
|
Nenue@87
|
259 print('|cFF0088FF'..self:GetName()..':HidePanel()')
|
Nenue@87
|
260 self:SetShown(false)
|
Nenue@87
|
261 VeneerWorldState:Reanchor()
|
Nenue@87
|
262 end
|
Nenue@87
|
263
|
Nenue@87
|
264 function WorldStateBlockMixin:OnSizeChanged ()
|
Nenue@87
|
265 local h = self:GetHeight()
|
Nenue@87
|
266 if h > VeneerWorldState.maxHeight then
|
Nenue@87
|
267 VeneerWorldState.maxHeight = h
|
Nenue@87
|
268 VeneerWorldState:SetHeight(h)
|
Nenue@87
|
269 print('updating max height:', h)
|
Nenue@87
|
270 elseif h < VeneerWorldState.maxHeight then
|
Nenue@87
|
271 VeneerWorldState:Reanchor()
|
Nenue@87
|
272 end
|
Nenue@87
|
273 end
|
Nenue@87
|
274 function WorldStateBlockMixin:OnHide ()
|
Nenue@87
|
275 print('|cFF0088FF'..self:GetName()..':OnHide()')
|
Nenue@87
|
276 VeneerWorldState:Reanchor()
|
Nenue@87
|
277 end
|
Nenue@87
|
278 function WorldStateBlockMixin:OnShow ()
|
Nenue@87
|
279 self.timeLived = 0
|
Nenue@87
|
280 print('|cFF0088FF'..self:GetName()..':OnShow()')
|
Nenue@87
|
281 VeneerWorldState:Reanchor()
|
Nenue@87
|
282 end
|
Nenue@87
|
283 function WorldStateBlockMixin:Setup()
|
Nenue@87
|
284 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop')
|
Nenue@88
|
285 self:Update()
|
Nenue@87
|
286 end
|
Nenue@87
|
287 function WorldStateBlockMixin:Reset()
|
Nenue@87
|
288 print('|cFF0088FF'..self:GetName()..':Reset()')
|
Nenue@87
|
289 self.keepOpen = true
|
Nenue@87
|
290 self:Setup()
|
Nenue@87
|
291 end
|
Nenue@93
|
292 end
|
Nenue@93
|
293
|
Nick@113
|
294
|