Nenue@80
|
1 -- Veneer
|
Nenue@80
|
2 -- OrderHall.lua
|
Nenue@80
|
3 -- Created: 10/7/2016 10:55 PM
|
Nenue@80
|
4 -- %file-revision%
|
Nenue@80
|
5 --
|
Nenue@80
|
6
|
Nenue@80
|
7 VeneerWorldStateCurrencyMixin = {}
|
Nenue@81
|
8 VeneerWorldStateProgressMixin = {}
|
Nenue@81
|
9 VeneerWorldStateMixin = {
|
Nenue@82
|
10 maxHeight = 0,
|
Nenue@81
|
11 detectedFrames = {}
|
Nenue@81
|
12 }
|
Nenue@80
|
13 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
|
Nenue@80
|
14
|
Nenue@80
|
15 function VeneerWorldStateMixin:Setup()
|
Nenue@80
|
16 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
|
Nenue@81
|
17 print('All:Setup()')
|
Nenue@81
|
18
|
Nenue@81
|
19 self.modules = self.modules or {self:GetChildren()}
|
Nenue@81
|
20 for i, frame in ipairs(self.modules) do
|
Nenue@81
|
21 if frame.Setup then
|
Nenue@81
|
22 frame:Setup()
|
Nenue@81
|
23 end
|
Nenue@82
|
24
|
Nenue@82
|
25 frame:SetScript('OnSizeChanged', function()
|
Nenue@82
|
26 local h = frame:GetHeight()
|
Nenue@82
|
27 if h > self.maxHeight then
|
Nenue@82
|
28 self.maxHeight = h
|
Nenue@82
|
29 self:SetHeight(h)
|
Nenue@82
|
30 print('updating max height:', h)
|
Nenue@82
|
31 elseif h < self.maxHeight then
|
Nenue@82
|
32 self:UpdateSize()
|
Nenue@82
|
33 end
|
Nenue@82
|
34 end)
|
Nenue@82
|
35 frame:SetScript('OnHide', function()
|
Nenue@82
|
36 print('|cFF0088FF'..frame:GetName()..':OnHide()')
|
Nenue@82
|
37 self:UpdateSize()
|
Nenue@82
|
38 end)
|
Nenue@82
|
39 frame:SetScript('OnShow', function()
|
Nenue@82
|
40 frame.timeLived = 0
|
Nenue@82
|
41 print('|cFF0088FF'..frame:GetName()..':OnShow()')
|
Nenue@82
|
42 self:UpdateSize()
|
Nenue@82
|
43 end)
|
Nenue@82
|
44
|
Nenue@82
|
45 function frame.ShowPanel(frame)
|
Nenue@82
|
46 frame:SetShown(true)
|
Nenue@82
|
47 self:Show()
|
Nenue@82
|
48 end
|
Nenue@83
|
49 function frame.HidePanel(frame)
|
Nenue@83
|
50 frame:SetShown(false)
|
Nenue@83
|
51 self:UpdateSize()
|
Nenue@83
|
52 end
|
Nenue@81
|
53 end
|
Nenue@82
|
54 self:SetOrderHallUIMods()
|
Nenue@80
|
55 end
|
Nenue@80
|
56
|
Nenue@82
|
57 function VeneerWorldStateMixin:SetOrderHallUIMods()
|
Nenue@81
|
58 if OrderHallCommandBar then
|
Nenue@81
|
59 if not self.detectedFrames[OrderHallCommandBar] then
|
Nenue@81
|
60 self.detectedFrames[OrderHallCommandBar] = true
|
Nenue@81
|
61 hooksecurefunc(OrderHallCommandBar,'Show', function()
|
Nenue@82
|
62 self:SetOrderHallUIMods()
|
Nenue@82
|
63 end)
|
Nenue@82
|
64 hooksecurefunc(OrderHallCommandBar,'Hide', function()
|
Nenue@82
|
65 self:SetOrderHallUIMods()
|
Nenue@81
|
66 end)
|
Nenue@81
|
67 end
|
Nenue@81
|
68
|
Nenue@81
|
69
|
Nenue@81
|
70 OrderHallCommandBar:ClearAllPoints()
|
Nenue@81
|
71 OrderHallCommandBar:SetPoint('TOP')
|
Nenue@81
|
72 OrderHallCommandBar:SetWidth(600)
|
Nenue@81
|
73 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
|
Nenue@81
|
74 OrderHallCommandBar.WorldMapButton:Hide()
|
Nenue@81
|
75 OrderHallCommandBar:EnableMouse(false)
|
Nenue@82
|
76
|
Nenue@82
|
77 if OrderHallCommandBar:IsVisible() then
|
Nenue@82
|
78 self:SetPoint('TOP', OrderHallCommandBar, 'BOTTOM')
|
Nenue@82
|
79 print('anchoring to CommandBar')
|
Nenue@82
|
80 else
|
Nenue@82
|
81 self:SetPoint('TOP', UIParent, 'TOP')
|
Nenue@82
|
82 print('anchoring to UIParent')
|
Nenue@82
|
83 end
|
Nenue@82
|
84 else
|
Nenue@82
|
85 self:SetPoint('TOP', UIParent, 'TOP')
|
Nenue@82
|
86 print('anchoring to UIParent')
|
Nenue@81
|
87 end
|
Nenue@80
|
88 end
|
Nenue@80
|
89 local initialized
|
Nenue@80
|
90 function VeneerWorldStateMixin:OnEvent(event, arg)
|
Nenue@80
|
91 print(event, arg)
|
Nenue@81
|
92
|
Nenue@81
|
93 if event == 'PLAYER_LOGIN' and not initialized then
|
Nenue@81
|
94 if IsLoggedIn() then
|
Nenue@81
|
95 initialized = true
|
Nenue@80
|
96 self:Setup()
|
Nenue@81
|
97 self:UnregisterEvent('PLAYER_LOGIN')
|
Nenue@81
|
98 end
|
Nenue@82
|
99 elseif event == 'ADDON_LOADED' then
|
Nenue@82
|
100 if initialized and IsAddOnLoaded('Blizzard_OrderHallUI') then
|
Nenue@82
|
101 self:SetOrderHallUIMods()
|
Nenue@82
|
102 end
|
Nenue@82
|
103 elseif event == 'PLAYER_ENTERING_WORLD' then
|
Nenue@80
|
104 self:Update()
|
Nenue@81
|
105 elseif event == 'PLAYER_REGEN_ENABLED' then
|
Nenue@83
|
106 self:SetShown(true)
|
Nenue@81
|
107 elseif event == 'PLAYER_REGEN_DISABLED' then
|
Nenue@83
|
108 self:SetShown(false)
|
Nenue@80
|
109 end
|
Nenue@80
|
110 end
|
Nenue@80
|
111
|
Nenue@80
|
112 function VeneerWorldStateMixin:Update()
|
Nenue@82
|
113 self.modules = {self:GetChildren()}
|
Nenue@80
|
114 print('|cFFFFFF00All:Update()|r')
|
Nenue@82
|
115 print(self:GetChildren())
|
Nenue@82
|
116 for i, frame in ipairs(self.modules) do
|
Nenue@82
|
117 if frame.Update then
|
Nenue@82
|
118 print(' |cFFFF00FF'.. frame:GetName() .. ':Update()')
|
Nenue@82
|
119 frame:Update()
|
Nenue@82
|
120 end
|
Nenue@82
|
121 end
|
Nenue@82
|
122 self:SetOrderHallUIMods()
|
Nenue@82
|
123 end
|
Nenue@82
|
124
|
Nenue@82
|
125 function VeneerWorldStateMixin:UpdateSize()
|
Nenue@82
|
126 print('|cFFFFFF00All:UpdateSize()|r')
|
Nenue@82
|
127 print(self:GetChildren())
|
Nenue@82
|
128 self.modules = {self:GetChildren()}
|
Nenue@81
|
129 self.maxHeight = 0
|
Nenue@81
|
130 for i, frame in ipairs(self.modules) do
|
Nenue@82
|
131 print(' '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight())
|
Nenue@82
|
132 if frame:IsShown() then
|
Nenue@82
|
133 self.maxHeight = max(self.maxHeight, frame:GetHeight())
|
Nenue@80
|
134 end
|
Nenue@80
|
135 end
|
Nenue@82
|
136 if self.maxHeight == 0 then
|
Nenue@82
|
137 print ('height zero')
|
Nenue@82
|
138 self:Hide()
|
Nenue@82
|
139 else
|
Nenue@82
|
140 self:Show()
|
Nenue@82
|
141 print ('height update:', self.maxHeight)
|
Nenue@82
|
142 self:SetHeight(self.maxHeight)
|
Nenue@82
|
143 end
|
Nenue@82
|
144
|
Nenue@80
|
145 end
|
Nenue@80
|
146
|
Nenue@80
|
147
|
Nenue@80
|
148
|
Nenue@80
|
149 function VeneerWorldStateMixin:OnLoad ()
|
Nenue@81
|
150 self:RegisterEvent('PLAYER_LOGIN')
|
Nenue@80
|
151 self:RegisterEvent('ADDON_LOADED')
|
Nenue@80
|
152 self:RegisterEvent('ARTIFACT_UPDATE')
|
Nenue@80
|
153 self:RegisterEvent('ARTIFACT_XP_UPDATE')
|
Nenue@80
|
154 self:RegisterEvent('PLAYER_ENTERING_WORLD')
|
Nenue@81
|
155 self:RegisterEvent('PLAYER_REGEN_ENABLED')
|
Nenue@81
|
156 self:RegisterEvent('PLAYER_REGEN_DISABLED')
|
Nenue@80
|
157 end
|
Nenue@80
|
158
|
Nenue@80
|
159 function VeneerWorldStateCurrencyMixin:OnLoad ()
|
Nenue@80
|
160
|
Nenue@80
|
161 self:RegisterEvent('ZONE_CHANGED')
|
Nenue@80
|
162 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
|
Nenue@80
|
163 self:RegisterEvent('CHAT_MSG_CURRENCY')
|
Nenue@80
|
164
|
Nenue@80
|
165 end
|
Nenue@80
|
166
|
Nenue@80
|
167 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
|
Nenue@80
|
168 self:Update()
|
Nenue@80
|
169 end
|
Nenue@80
|
170
|
Nenue@80
|
171
|
Nenue@80
|
172 function VeneerWorldStateCurrencyMixin:Update()
|
Nenue@81
|
173
|
Nenue@82
|
174 print(' Zone:', GetZoneText())
|
Nenue@81
|
175 if GetZoneText() == 'Suramar' then
|
Nenue@80
|
176 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155)
|
Nenue@80
|
177
|
Nenue@80
|
178 self.Icon:SetTexture(texture)
|
Nenue@80
|
179 self.Label:SetFormattedText("%d / %d", earned, totalMax)
|
Nenue@80
|
180 self:Show()
|
Nenue@80
|
181 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
|
Nenue@82
|
182 self:SetSize(200,16)
|
Nenue@80
|
183 else
|
Nenue@80
|
184 self:Hide()
|
Nenue@80
|
185 end
|
Nenue@81
|
186
|
Nenue@82
|
187
|
Nenue@81
|
188 end
|
Nenue@81
|
189
|
Nenue@82
|
190 function VeneerWorldStateProgressMixin:OnUpdate(sinceLast)
|
Nenue@82
|
191 self.timeLived = (self.timeLived or 0) + sinceLast
|
Nenue@82
|
192 if self.timeLived >= 3 and not self.TransitionFadeOut:IsPlaying() then
|
Nenue@82
|
193 if not self.timeOut then
|
Nenue@82
|
194 self.timeOut = true
|
Nenue@82
|
195 self.TransitionFadeOut:Play()
|
Nenue@82
|
196 end
|
Nenue@82
|
197 end
|
Nenue@82
|
198 end
|
Nenue@82
|
199
|
Nenue@82
|
200
|
Nenue@81
|
201 function VeneerWorldStateProgressMixin:OnLoad()
|
Nenue@82
|
202 self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
|
Nenue@81
|
203
|
Nenue@82
|
204 self:RegisterEvent("PLAYER_XP_UPDATE");
|
Nenue@82
|
205 self:RegisterEvent("UPDATE_EXHAUSTION");
|
Nenue@82
|
206 self:RegisterEvent("PLAYER_LEVEL_UP");
|
Nenue@82
|
207 self:RegisterEvent("PLAYER_UPDATE_RESTING");
|
Nenue@82
|
208
|
Nenue@82
|
209 self:RegisterEvent("ARTIFACT_UPDATE");
|
Nenue@82
|
210 self:RegisterEvent("ARTIFACT_XP_UPDATE");
|
Nenue@82
|
211 self:RegisterEvent("ARTIFACT_CLOSE");
|
Nenue@82
|
212 self:RegisterEvent("ARTIFACT_MAX_RANKS_UPDATE");
|
Nenue@82
|
213
|
Nenue@82
|
214 self.progressPercent = 0
|
Nenue@82
|
215 self.progressAmount = 0
|
Nenue@82
|
216 self.progressMax = 1
|
Nenue@82
|
217 self.progressOverflow = 0
|
Nenue@81
|
218 end
|
Nenue@81
|
219
|
Nenue@81
|
220 function VeneerWorldStateProgressMixin:Setup()
|
Nenue@81
|
221 self:UpdateXPGain()
|
Nenue@82
|
222
|
Nenue@82
|
223 if self.canGainXP then
|
Nenue@81
|
224 self.mode = 'xp'
|
Nenue@81
|
225 else
|
Nenue@81
|
226 self.mode = 'artifact'
|
Nenue@81
|
227 end
|
Nenue@81
|
228 print('setup mode:', self.mode)
|
Nenue@81
|
229 end
|
Nenue@81
|
230
|
Nenue@82
|
231 function VeneerWorldStateProgressMixin:OnEvent(event, ...)
|
Nenue@82
|
232 local lastMode = self.mode
|
Nenue@82
|
233 if event == 'PLAYER_LEVEL_UP' or event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
|
Nenue@81
|
234 self:UpdateXPGain()
|
Nenue@81
|
235 elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
|
Nenue@81
|
236 self.mode = 'artifact'
|
Nenue@82
|
237
|
Nenue@82
|
238 elseif event == 'PLAYER_EQUIPMENT_CHANGED' then
|
Nenue@82
|
239 local slot, hasEquip = ...
|
Nenue@82
|
240 if slot == 16 then
|
Nenue@82
|
241 self.mode = 'artifact'
|
Nenue@82
|
242 lastMode = nil
|
Nenue@82
|
243 end
|
Nenue@82
|
244 elseif event == 'PLAYER_XP_UPDATE' or event == 'PLAYER_LEVEL_UP' then
|
Nenue@82
|
245 print('forcing to XP mode')
|
Nenue@81
|
246 self.mode = 'xp'
|
Nenue@81
|
247 end
|
Nenue@82
|
248 self.modeChanged = (lastMode ~= self.mode)
|
Nenue@82
|
249 if self.modeChanged and self:IsVisible() then
|
Nenue@82
|
250 print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()', event, ...)
|
Nenue@82
|
251 self.TransitionFadeIn:Stop()
|
Nenue@82
|
252 self.TransitionFadeOut:Play()
|
Nenue@82
|
253 else
|
Nenue@82
|
254 print('|cFFFFFF00'..self:GetName()..':Update()', event, ...)
|
Nenue@82
|
255 self:Update()
|
Nenue@82
|
256 end
|
Nenue@81
|
257 end
|
Nenue@81
|
258 function VeneerWorldStateProgressMixin:UpdateXPGain()
|
Nenue@82
|
259 self.canGainXP = (UnitLevel('player') < GetMaxPlayerLevel()) and (not IsXPUserDisabled())
|
Nenue@82
|
260 if not self.canGainXP then
|
Nenue@81
|
261 self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
|
Nenue@81
|
262 end
|
Nenue@81
|
263 end
|
Nenue@81
|
264
|
Nenue@81
|
265 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
|
Nenue@81
|
266 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
|
Nenue@81
|
267 function VeneerWorldStateProgressMixin:Update()
|
Nenue@82
|
268 local hasNewInfo = false
|
Nenue@82
|
269 local progressChange = false
|
Nenue@82
|
270 print(' current mode:', self.mode)
|
Nenue@81
|
271
|
Nenue@81
|
272
|
Nenue@81
|
273 if self.mode == 'xp' then
|
Nenue@81
|
274 local xp = UnitXP('player')
|
Nenue@81
|
275 local xpMax = UnitXPMax('player')
|
Nenue@81
|
276 local bonusXP = GetXPExhaustion()
|
Nenue@81
|
277 if xp then
|
Nenue@81
|
278 self.progressPercent = xp / xpMax
|
Nenue@81
|
279 end
|
Nenue@82
|
280
|
Nenue@82
|
281 self.progressText = 'Level ' .. UnitLevel('player') .. ': ' .. xp .. '/' .. xpMax
|
Nenue@82
|
282
|
Nenue@82
|
283 if bonusXP then
|
Nenue@82
|
284 self.ProgressBar:SetColorTexture(0, 0.5,1)
|
Nenue@82
|
285 self.OverflowBar:Show()
|
Nenue@82
|
286 self.OverflowBar:ClearAllPoints()
|
Nenue@82
|
287 self.OverflowBar:SetPoint('BOTTOMLEFT', self.ProgressBar, 'BOTTOMRIGHT', 0, 0)
|
Nenue@82
|
288 print(bonusXP, (xpMax - xp))
|
Nenue@82
|
289 if bonusXP < (xpMax - xp) then
|
Nenue@82
|
290
|
Nenue@82
|
291 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', (bonusXP / xpMax) * self:GetWidth(), 0)
|
Nenue@82
|
292 else
|
Nenue@82
|
293 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', 0, 0)
|
Nenue@82
|
294 end
|
Nenue@82
|
295 else
|
Nenue@82
|
296 self.OverflowBar:Hide()
|
Nenue@82
|
297 self.ProgressBar:SetColorTexture(0.5,0,1)
|
Nenue@82
|
298 end
|
Nenue@82
|
299 hasNewInfo = (self.progressAmount ~= xp)
|
Nenue@82
|
300
|
Nenue@83
|
301 progressChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax)
|
Nenue@82
|
302
|
Nenue@82
|
303
|
Nenue@82
|
304 self.progressAmount = xp
|
Nenue@82
|
305 self.progressMax = xpMax
|
Nenue@81
|
306 elseif self.mode == 'artifact' then
|
Nenue@81
|
307
|
Nenue@81
|
308 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
|
Nenue@82
|
309 print(' C_AUI:', itemID, altItemID, name, icon, totalXP, pointsSpent)
|
Nenue@82
|
310
|
Nenue@82
|
311 if itemID then
|
Nenue@82
|
312 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
|
Nenue@82
|
313 hasNewInfo = (self.progressAmount ~= totalXP)
|
Nenue@83
|
314 progressChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost))
|
Nenue@82
|
315
|
Nenue@82
|
316 if totalXP > nextRankCost then
|
Nenue@82
|
317 self.progressPercent = 1
|
Nenue@82
|
318 self.progressOverflow = totalXP - nextRankCost
|
Nenue@82
|
319 else
|
Nenue@82
|
320 self.progressPercent = totalXP / nextRankCost
|
Nenue@82
|
321 end
|
Nenue@82
|
322
|
Nenue@82
|
323 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
|
Nenue@82
|
324
|
Nenue@82
|
325 self.ProgressBar:SetColorTexture(1,0.5,0,1)
|
Nenue@82
|
326 self.OverflowBar:Hide()
|
Nenue@82
|
327
|
Nenue@82
|
328
|
Nenue@82
|
329 self.progressAmount = totalXP
|
Nenue@82
|
330 self.progressMax = nextRankCost
|
Nenue@82
|
331 else
|
Nenue@82
|
332 self.progressAmount = 0
|
Nenue@82
|
333 self.progressMax = 1
|
Nenue@82
|
334 self.progressText = ''
|
Nenue@82
|
335 end
|
Nenue@82
|
336 end
|
Nenue@82
|
337
|
Nenue@82
|
338 if self.mode then
|
Nenue@82
|
339 self:SetSize(600,16)
|
Nenue@82
|
340 if hasNewInfo then
|
Nenue@82
|
341 self.timeOut = nil
|
Nenue@82
|
342 self.timeLived = 0
|
Nenue@82
|
343 if self.TransitionFadeOut:IsPlaying() then
|
Nenue@82
|
344 self.TransitionFadeOut:Stop()
|
Nenue@82
|
345 self:SetAlpha(1)
|
Nenue@82
|
346 end
|
Nenue@82
|
347 if not self:IsVisible() then
|
Nenue@82
|
348 self.TransitionFadeIn:Play()
|
Nenue@82
|
349 else
|
Nenue@82
|
350 self:ShowPanel()
|
Nenue@82
|
351 end
|
Nenue@82
|
352
|
Nenue@81
|
353 end
|
Nenue@81
|
354
|
Nenue@82
|
355 print(self.ProgressBG:GetWidth())
|
Nenue@82
|
356 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'NewInfo:', hasNewInfo, 'IsShown:', self:IsShown())
|
Nenue@81
|
357
|
Nenue@81
|
358
|
Nenue@82
|
359 if progressChange then
|
Nenue@82
|
360 print(' Render change:', progressChange)
|
Nenue@82
|
361 self.ProgressAdded:Show()
|
Nenue@82
|
362 self.ProgressAdded:SetPoint('BOTTOMLEFT', self.ProgressBar, 'BOTTOMRIGHT', - (self:GetWidth() * progressChange), 0)
|
Nenue@82
|
363 self.ProgressAdded:SetPoint('TOPRIGHT', self.ProgressBar, 'TOPRIGHT', 0, 0)
|
Nenue@82
|
364 self.ProgressFlash:Play()
|
Nenue@81
|
365 end
|
Nenue@81
|
366
|
Nenue@82
|
367
|
Nenue@82
|
368 if self.progressPercent > 0 then
|
Nenue@82
|
369 self.ProgressBar:Show()
|
Nenue@82
|
370 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0)
|
Nenue@82
|
371
|
Nenue@82
|
372 self.Label:SetText(self.progressText)
|
Nenue@82
|
373 else
|
Nenue@82
|
374 self.ProgressBar:Hide()
|
Nenue@82
|
375 end
|
Nenue@81
|
376 else
|
Nenue@83
|
377 self:HidePanel()
|
Nenue@81
|
378 end
|
Nenue@81
|
379
|
Nenue@82
|
380 self.modeChanged = nil
|
Nenue@80
|
381 end |