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
|
Nenue@87
|
150 function VeneerOrderHallMixin:Setup()
|
Nenue@87
|
151 print('|cFFFFFF00'..self:GetName()..':Setup()')
|
Nenue@88
|
152 self:SetParent(OrderHallCommandBar)
|
Nick@113
|
153 self:RegisterEvent("UNIT_AURA");
|
Nick@113
|
154 self:RegisterEvent("GARRISON_FOLLOWER_CATEGORIES_UPDATED")
|
Nick@113
|
155 self:RegisterEvent("GARRISON_FOLLOWER_ADDED")
|
Nick@113
|
156 self:RegisterEvent("GARRISON_FOLLOWER_REMOVED")
|
Nick@113
|
157
|
Nenue@88
|
158 self:SetShown(true)
|
Nenue@88
|
159 end
|
Nenue@88
|
160
|
Nenue@90
|
161 function VeneerOrderHallMixin:OnLoad()
|
Nick@108
|
162 Veneer:AddHandler(self, 'TOP', 1)
|
Nick@113
|
163 self:EnableMouse(false)
|
Nenue@90
|
164 end
|
Nenue@90
|
165
|
Nenue@88
|
166 function VeneerOrderHallMixin:OnEvent(event, ...)
|
Nenue@88
|
167
|
Nenue@88
|
168 print('|cFF00AAFF'..self:GetName()..'|r:'.. event, ...)
|
Nenue@88
|
169 self:Update()
|
Nenue@88
|
170 end
|
Nenue@88
|
171
|
Nenue@88
|
172 function VeneerOrderHallMixin:OnShow()
|
Nenue@90
|
173 if OrderHallCommandBar then
|
Nenue@90
|
174 print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', OrderHallCommandBar:IsShown(), self:IsShown())
|
Nenue@90
|
175 self:Update()
|
Nenue@90
|
176 end
|
Nenue@99
|
177 Veneer:DynamicReanchor()
|
Nenue@88
|
178 end
|
Nenue@88
|
179
|
Nenue@88
|
180 function VeneerOrderHallMixin:OnHide()
|
Nenue@90
|
181 if OrderHallCommandBar then
|
Nenue@90
|
182 print('|cFF00AAFF'..self:GetName()..'|r:OnHide()', OrderHallCommandBar:IsShown(), self:IsShown())
|
Nenue@90
|
183 end
|
Nenue@88
|
184 Veneer:Reanchor()
|
Nenue@87
|
185 end
|
Nenue@87
|
186
|
Nenue@87
|
187 function VeneerOrderHallMixin:Update()
|
Nenue@87
|
188 if not OrderHallCommandBar then
|
Nenue@87
|
189 print('|cFFFF4400'..self:GetName()..' updater called without target')
|
Nenue@87
|
190 return
|
Nenue@87
|
191 end
|
Nenue@87
|
192
|
Nenue@87
|
193 OrderHallCommandBar:ClearAllPoints()
|
Nick@108
|
194 OrderHallCommandBar:SetAllPoints(self)
|
Nick@112
|
195
|
Nenue@87
|
196 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
|
Nenue@87
|
197 OrderHallCommandBar.WorldMapButton:Hide()
|
Nenue@87
|
198 OrderHallCommandBar:EnableMouse(false)
|
Nick@113
|
199 self:SetSize(700, 22)
|
Nick@113
|
200
|
Nick@113
|
201 local troops = OrderHallCommandBar.TroopSummary
|
Nick@113
|
202 if troops then
|
Nick@113
|
203 for _, category in ipairs(troops) do
|
Nick@113
|
204 category.Count:SetFontObject(VeneerNumberFont)
|
Nick@113
|
205 category.Count:ClearAllPoints()
|
Nick@113
|
206 category.Count:SetPoint('BOTTOMRIGHT', category.Icon, 'BOTTOMRIGHT', -1, 1)
|
Nick@113
|
207 end
|
Nick@113
|
208 end
|
Nick@113
|
209
|
Nick@112
|
210
|
Nenue@87
|
211
|
Nenue@88
|
212 print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
|
Nenue@88
|
213 print(debugstack(6))
|
Nenue@98
|
214 Veneer:DynamicReanchor()
|
Nenue@87
|
215 end
|
Nenue@87
|
216
|
Nenue@80
|
217
|
Nenue@87
|
218
|
Nenue@87
|
219 do
|
Nenue@87
|
220 function WorldStateBlockMixin:ShowPanel()
|
Nenue@87
|
221 print('|cFF0088FF'..self:GetName()..':ShowPanel()')
|
Nenue@87
|
222 self:SetShown(true)
|
Nenue@93
|
223 self:SetAlpha(1)
|
Nenue@87
|
224 VeneerWorldState:Show()
|
Nenue@87
|
225 end
|
Nenue@87
|
226 function WorldStateBlockMixin:HidePanel()
|
Nenue@87
|
227 print('|cFF0088FF'..self:GetName()..':HidePanel()')
|
Nenue@87
|
228 self:SetShown(false)
|
Nenue@87
|
229 VeneerWorldState:Reanchor()
|
Nenue@87
|
230 end
|
Nenue@87
|
231
|
Nenue@87
|
232 function WorldStateBlockMixin:OnSizeChanged ()
|
Nenue@87
|
233 local h = self:GetHeight()
|
Nenue@87
|
234 if h > VeneerWorldState.maxHeight then
|
Nenue@87
|
235 VeneerWorldState.maxHeight = h
|
Nenue@87
|
236 VeneerWorldState:SetHeight(h)
|
Nenue@87
|
237 print('updating max height:', h)
|
Nenue@87
|
238 elseif h < VeneerWorldState.maxHeight then
|
Nenue@87
|
239 VeneerWorldState:Reanchor()
|
Nenue@87
|
240 end
|
Nenue@87
|
241 end
|
Nenue@87
|
242 function WorldStateBlockMixin:OnHide ()
|
Nenue@87
|
243 print('|cFF0088FF'..self:GetName()..':OnHide()')
|
Nenue@87
|
244 VeneerWorldState:Reanchor()
|
Nenue@87
|
245 end
|
Nenue@87
|
246 function WorldStateBlockMixin:OnShow ()
|
Nenue@87
|
247 self.timeLived = 0
|
Nenue@87
|
248 print('|cFF0088FF'..self:GetName()..':OnShow()')
|
Nenue@87
|
249 VeneerWorldState:Reanchor()
|
Nenue@87
|
250 end
|
Nenue@87
|
251 function WorldStateBlockMixin:Setup()
|
Nenue@87
|
252 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop')
|
Nenue@88
|
253 self:Update()
|
Nenue@87
|
254 end
|
Nenue@87
|
255 function WorldStateBlockMixin:Reset()
|
Nenue@87
|
256 print('|cFF0088FF'..self:GetName()..':Reset()')
|
Nenue@87
|
257 self.keepOpen = true
|
Nenue@87
|
258 self:Setup()
|
Nenue@87
|
259 end
|
Nenue@93
|
260 end
|
Nenue@93
|
261
|
Nick@113
|
262
|