Nenue@80
|
1 -- Veneer
|
Nenue@84
|
2 -- WorldState.lua
|
Nenue@80
|
3 -- Created: 10/7/2016 10:55 PM
|
Nenue@80
|
4 -- %file-revision%
|
Nenue@80
|
5 --
|
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',
|
Nenue@90
|
12 anchorX = 0,
|
Nenue@90
|
13 anchorY = 0,
|
Nenue@90
|
14 addonTrigger = 'Blizzard_OrderHallUI',
|
Nenue@90
|
15 addonFrame = 'OrderHallCommandBar',
|
Nenue@87
|
16 }
|
Nenue@97
|
17
|
Nenue@93
|
18 VeneerWorldStateHeadsUpMixin = {
|
Nenue@93
|
19 }
|
Nenue@93
|
20
|
Nenue@87
|
21 VeneerWorldStateCurrencyMixin = {
|
Nenue@87
|
22 }
|
Nenue@84
|
23 VeneerWorldStateProgressMixin = {
|
Nenue@96
|
24 keepOpen = true,
|
Nenue@84
|
25 }
|
Nenue@81
|
26 VeneerWorldStateMixin = {
|
Nenue@82
|
27 maxHeight = 0,
|
Nenue@87
|
28 detectedFrames = {},
|
Nenue@87
|
29 anchorPoint = 'TOP',
|
Nenue@81
|
30 }
|
Nenue@80
|
31
|
Nenue@87
|
32 function VeneerWorldStateMixin:Reset()
|
Nenue@87
|
33 for i, frame in ipairs(self.modules) do
|
Nenue@87
|
34 if frame.Reset then
|
Nenue@87
|
35 frame:Reset()
|
Nenue@87
|
36 end
|
Nenue@87
|
37 end
|
Nenue@87
|
38 self:Update()
|
Nenue@87
|
39 end
|
Nenue@87
|
40
|
Nenue@80
|
41 function VeneerWorldStateMixin:Setup()
|
Nenue@80
|
42 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
|
Nenue@84
|
43 print('|cFFFFFF00'..self:GetName()..'|r:Setup()')
|
Nenue@81
|
44
|
Nenue@81
|
45 self.modules = self.modules or {self:GetChildren()}
|
Nenue@81
|
46 for i, frame in ipairs(self.modules) do
|
Nenue@84
|
47 print('--'.. frame:GetName()..' exists')
|
Nenue@81
|
48 if frame.Setup then
|
Nenue@84
|
49 print('--'.. frame:GetName()..':Setup()')
|
Nenue@81
|
50 frame:Setup()
|
Nenue@81
|
51 end
|
Nenue@82
|
52
|
Nenue@87
|
53
|
Nenue@87
|
54 for k,v in pairs(WorldStateBlockMixin) do
|
Nenue@87
|
55 if not frame[k] then
|
Nenue@87
|
56 frame[k] = v
|
Nenue@87
|
57 if k:match('^On') then
|
Nenue@87
|
58 frame:SetScript(k, v)
|
Nenue@87
|
59 end
|
Nenue@82
|
60 end
|
Nenue@87
|
61 end
|
Nenue@82
|
62
|
Nenue@81
|
63 end
|
Nenue@84
|
64 self:UnregisterEvent('PLAYER_LOGIN')
|
Nenue@80
|
65 end
|
Nenue@80
|
66
|
Nenue@82
|
67 function VeneerWorldStateMixin:SetOrderHallUIMods()
|
Nenue@87
|
68 print('|cFFFF4400remove me', debugstack())
|
Nenue@80
|
69 end
|
Nenue@84
|
70
|
Nenue@84
|
71
|
Nenue@84
|
72 function VeneerWorldStateMixin:OnLoad ()
|
Nenue@87
|
73 self.modules = {self:GetChildren()}
|
Nenue@84
|
74 print('|cFFFFFF00'..self:GetName()..'|r!')
|
Nenue@84
|
75 self:RegisterEvent('PLAYER_ENTERING_WORLD')
|
Nenue@84
|
76 self:RegisterEvent('PLAYER_REGEN_ENABLED')
|
Nenue@84
|
77 self:RegisterEvent('PLAYER_REGEN_DISABLED')
|
Nick@108
|
78 Veneer:AddHandler(self, self.anchorPoint, 2)
|
Nenue@87
|
79 SLASH_VENEERWORLDSTATE1 = "/vws"
|
Nenue@87
|
80 SLASH_VENEERWORLDSTATE2 = "/worldstate"
|
Nenue@87
|
81 SlashCmdList.VENEERWORLDSTATE = function()
|
Nenue@87
|
82 self:Reset()
|
Nenue@87
|
83 end
|
Nenue@84
|
84 end
|
Nenue@84
|
85
|
Nenue@80
|
86 function VeneerWorldStateMixin:OnEvent(event, arg)
|
Nenue@80
|
87 print(event, arg)
|
Nenue@90
|
88 if event == 'PLAYER_ENTERING_WORLD' then
|
Nenue@80
|
89 self:Update()
|
Nenue@81
|
90 elseif event == 'PLAYER_REGEN_ENABLED' then
|
Nick@108
|
91 self:Update(true)
|
Nenue@81
|
92 elseif event == 'PLAYER_REGEN_DISABLED' then
|
Nick@108
|
93 self:Update(true)
|
Nenue@80
|
94 end
|
Nenue@80
|
95 end
|
Nenue@80
|
96
|
Nenue@88
|
97 function VeneerWorldStateMixin:Update(isBatchUpdate)
|
Nenue@80
|
98 print('|cFFFFFF00All:Update()|r')
|
Nick@111
|
99 local canShow = false
|
Nenue@88
|
100 for index, frame in ipairs(self.modules) do
|
Nenue@82
|
101 if frame.Update then
|
Nenue@88
|
102 print(' '..index..' |cFFFF00FFUpdate:|r '.. frame:GetName())
|
Nenue@88
|
103 frame:Update(isBatchUpdate)
|
Nenue@88
|
104 print(' ', frame:IsVisible(), frame:IsShown())
|
Nick@111
|
105 if frame:IsShown() then
|
Nick@111
|
106 canShow = true
|
Nick@111
|
107 end
|
Nick@111
|
108
|
Nenue@82
|
109 end
|
Nenue@82
|
110 end
|
Nick@111
|
111 self:SetShown(canShow)
|
Nenue@82
|
112 end
|
Nenue@82
|
113
|
Nick@108
|
114 function VeneerWorldStateMixin:OnShow()
|
Nick@108
|
115 print('OnShow()', debugstack())
|
Nick@108
|
116 end
|
Nick@108
|
117
|
Nenue@87
|
118 function VeneerWorldStateMixin:Reanchor(isUpdate)
|
Nenue@88
|
119 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks')
|
Nenue@81
|
120 self.maxHeight = 0
|
Nenue@89
|
121 local lastFrame
|
Nenue@81
|
122 for i, frame in ipairs(self.modules) do
|
Nick@108
|
123 print(' '..frame:GetName()..':',frame:IsShown(), frame:GetHeight())
|
Nick@108
|
124 if frame:IsShown() then
|
Nenue@89
|
125 if lastFrame then
|
Nenue@89
|
126 frame:SetPoint('TOP', lastFrame, 'BOTTOM')
|
Nenue@89
|
127 else
|
Nenue@89
|
128 frame:SetPoint('TOP', self, 'TOP')
|
Nenue@89
|
129 end
|
Nenue@89
|
130
|
Nenue@89
|
131 self.maxHeight = self.maxHeight + frame:GetHeight()
|
Nenue@89
|
132 lastFrame = frame
|
Nenue@80
|
133 end
|
Nenue@80
|
134 end
|
Nick@108
|
135 if (self.maxHeight == 0) or InCombatLockdown() then
|
Nick@108
|
136 print (' hiding; combat =', InCombatLockdown())
|
Nick@108
|
137 self:SetShown(false)
|
Nenue@82
|
138 else
|
Nenue@87
|
139 print (' height update:', self.maxHeight)
|
Nenue@82
|
140 self:SetHeight(self.maxHeight)
|
Nick@108
|
141 self:SetShown(true)
|
Nenue@82
|
142 end
|
Nenue@82
|
143
|
Nenue@87
|
144 if not isUpdate then
|
Nenue@87
|
145 Veneer:InternalReanchor(self, print)
|
Nenue@87
|
146 end
|
Nenue@93
|
147
|
Nenue@93
|
148 WorldStateAlwaysUpFrame:ClearAllPoints()
|
Nenue@93
|
149 WorldStateAlwaysUpFrame:SetPoint('TOP', self, 'BOTTOM', 0, 0)
|
Nenue@80
|
150 end
|
Nenue@80
|
151
|
Nenue@80
|
152
|
Nenue@80
|
153
|
Nenue@84
|
154 function VeneerWorldStateMixin:OnMouseDown()
|
Nenue@80
|
155 end
|
Nenue@80
|
156
|
Nenue@87
|
157 function VeneerOrderHallMixin:Setup()
|
Nenue@87
|
158 print('|cFFFFFF00'..self:GetName()..':Setup()')
|
Nenue@88
|
159 self:SetParent(OrderHallCommandBar)
|
Nenue@88
|
160 self:RegisterEvent("ZONE_CHANGED");
|
Nenue@88
|
161 self:RegisterEvent("ZONE_CHANGED_INDOORS");
|
Nenue@88
|
162 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
Nenue@88
|
163 self:SetShown(true)
|
Nenue@88
|
164 end
|
Nenue@88
|
165
|
Nenue@90
|
166 function VeneerOrderHallMixin:OnLoad()
|
Nick@108
|
167 Veneer:AddHandler(self, 'TOP', 1)
|
Nenue@90
|
168 end
|
Nenue@90
|
169
|
Nenue@88
|
170 function VeneerOrderHallMixin:OnEvent(event, ...)
|
Nenue@88
|
171
|
Nenue@88
|
172 print('|cFF00AAFF'..self:GetName()..'|r:'.. event, ...)
|
Nenue@88
|
173 self:Update()
|
Nenue@88
|
174 end
|
Nenue@88
|
175
|
Nenue@88
|
176 function VeneerOrderHallMixin:OnShow()
|
Nenue@90
|
177 if OrderHallCommandBar then
|
Nenue@90
|
178 print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', OrderHallCommandBar:IsShown(), self:IsShown())
|
Nenue@90
|
179 self:Update()
|
Nenue@90
|
180 end
|
Nenue@99
|
181 Veneer:DynamicReanchor()
|
Nenue@88
|
182 end
|
Nenue@88
|
183
|
Nenue@88
|
184 function VeneerOrderHallMixin:OnHide()
|
Nenue@90
|
185 if OrderHallCommandBar then
|
Nenue@90
|
186 print('|cFF00AAFF'..self:GetName()..'|r:OnHide()', OrderHallCommandBar:IsShown(), self:IsShown())
|
Nenue@90
|
187 end
|
Nenue@88
|
188 Veneer:Reanchor()
|
Nenue@87
|
189 end
|
Nenue@87
|
190
|
Nenue@87
|
191 function VeneerOrderHallMixin:Update()
|
Nenue@87
|
192
|
Nenue@87
|
193 if not OrderHallCommandBar then
|
Nenue@87
|
194 print('|cFFFF4400'..self:GetName()..' updater called without target')
|
Nenue@87
|
195 return
|
Nenue@87
|
196 end
|
Nenue@87
|
197
|
Nenue@87
|
198 OrderHallCommandBar:ClearAllPoints()
|
Nick@108
|
199 OrderHallCommandBar:SetAllPoints(self)
|
Nenue@87
|
200 OrderHallCommandBar:SetWidth(600)
|
Nenue@87
|
201 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
|
Nenue@87
|
202 OrderHallCommandBar.WorldMapButton:Hide()
|
Nenue@87
|
203 OrderHallCommandBar:EnableMouse(false)
|
Nenue@88
|
204 self:SetSize(OrderHallCommandBar:GetSize())
|
Nenue@87
|
205
|
Nenue@88
|
206 print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
|
Nenue@88
|
207 print(debugstack(6))
|
Nenue@98
|
208 Veneer:DynamicReanchor()
|
Nenue@87
|
209 end
|
Nenue@87
|
210
|
Nenue@80
|
211 function VeneerWorldStateCurrencyMixin:OnLoad ()
|
Nenue@84
|
212 self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
Nenue@84
|
213 self:RegisterEvent("ZONE_CHANGED");
|
Nenue@84
|
214 self:RegisterEvent("ZONE_CHANGED_INDOORS");
|
Nenue@84
|
215 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
Nenue@80
|
216 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
|
Nenue@80
|
217 self:RegisterEvent('CHAT_MSG_CURRENCY')
|
Nenue@80
|
218 end
|
Nenue@80
|
219
|
Nenue@80
|
220 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
|
Nenue@80
|
221 self:Update()
|
Nenue@80
|
222 end
|
Nenue@93
|
223 local zoneCurrency = {
|
Nenue@93
|
224 ['Suramar'] = 1155,
|
Nenue@93
|
225 ["Sashj'tar Ruins"] = 1155,
|
Nenue@93
|
226 ["Faronaar Ruins"] = 1155
|
Nenue@93
|
227 }
|
Nenue@93
|
228 local zoneBountyInfo = {
|
Nenue@93
|
229 ['Suramar'] = 1859,
|
Nenue@93
|
230 ["Sashj'tar Ruins"] = 1859,
|
Nenue@93
|
231 ["Faronaar Ruins"] = 1859,
|
Nenue@80
|
232
|
Nenue@93
|
233 ['Azsuna'] = 1900,
|
Nenue@93
|
234 }
|
Nenue@93
|
235 local globalBountyInfo = {
|
Nenue@93
|
236 }
|
Nenue@88
|
237 function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate)
|
Nenue@93
|
238 local zoneText = GetRealZoneText()
|
Nick@111
|
239 local canShow = false
|
Nenue@93
|
240 if zoneText then
|
Nenue@93
|
241 local currency = zoneCurrency[zoneText]
|
Nenue@93
|
242 if currency then
|
Nenue@93
|
243 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(zoneCurrency[zoneText])
|
Nenue@93
|
244 self.Icon:SetTexture(texture)
|
Nenue@93
|
245 self.Label:SetFormattedText("%d / %d", earned, totalMax)
|
Nenue@93
|
246 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
|
Nick@111
|
247 canShow = true
|
Nenue@93
|
248 end
|
Nenue@80
|
249 else
|
Nenue@80
|
250 end
|
Nick@111
|
251 self:SetShown(canShow)
|
Nick@111
|
252 VeneerWorldState:Reanchor(true)
|
Nenue@81
|
253 end
|
Nenue@81
|
254
|
Nenue@82
|
255 function VeneerWorldStateProgressMixin:OnUpdate(sinceLast)
|
Nenue@87
|
256 self.timeLived = (self.timeLived or 0) + sinceLast
|
Nenue@84
|
257 if self.keepOpen then
|
Nenue@84
|
258 return
|
Nenue@84
|
259 end
|
Nenue@93
|
260 if self.timeLived >= 3 and not self.TimedFadeOut:IsPlaying() then
|
Nenue@93
|
261 self.TimedFadeOut:Play()
|
Nenue@82
|
262 end
|
Nenue@82
|
263 end
|
Nenue@82
|
264
|
Nenue@81
|
265 function VeneerWorldStateProgressMixin:OnLoad()
|
Nenue@82
|
266 self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
|
Nenue@81
|
267
|
Nenue@82
|
268 self:RegisterEvent("PLAYER_XP_UPDATE");
|
Nenue@82
|
269 self:RegisterEvent("UPDATE_EXHAUSTION");
|
Nenue@82
|
270 self:RegisterEvent("PLAYER_LEVEL_UP");
|
Nenue@82
|
271 self:RegisterEvent("PLAYER_UPDATE_RESTING");
|
Nenue@82
|
272
|
Nenue@82
|
273 self:RegisterEvent("ARTIFACT_UPDATE");
|
Nenue@82
|
274 self:RegisterEvent("ARTIFACT_XP_UPDATE");
|
Nenue@82
|
275 self:RegisterEvent("ARTIFACT_CLOSE");
|
Nenue@82
|
276 self:RegisterEvent("ARTIFACT_MAX_RANKS_UPDATE");
|
Nenue@82
|
277
|
Nenue@82
|
278 self.progressPercent = 0
|
Nenue@82
|
279 self.progressAmount = 0
|
Nenue@82
|
280 self.progressMax = 1
|
Nenue@82
|
281 self.progressOverflow = 0
|
Nenue@84
|
282
|
Nenue@81
|
283 end
|
Nenue@81
|
284
|
Nenue@81
|
285 function VeneerWorldStateProgressMixin:Setup()
|
Nenue@81
|
286 self:UpdateXPGain()
|
Nenue@82
|
287 if self.canGainXP then
|
Nenue@81
|
288 self.mode = 'xp'
|
Nenue@81
|
289 else
|
Nenue@81
|
290 self.mode = 'artifact'
|
Nenue@81
|
291 end
|
Nenue@81
|
292 print('setup mode:', self.mode)
|
Nenue@81
|
293 end
|
Nenue@81
|
294
|
Nenue@82
|
295 function VeneerWorldStateProgressMixin:OnEvent(event, ...)
|
Nenue@82
|
296 local lastMode = self.mode
|
Nenue@82
|
297 if event == 'PLAYER_LEVEL_UP' or event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
|
Nenue@81
|
298 self:UpdateXPGain()
|
Nenue@81
|
299 elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
|
Nenue@81
|
300 self.mode = 'artifact'
|
Nenue@82
|
301
|
Nenue@82
|
302 elseif event == 'PLAYER_EQUIPMENT_CHANGED' then
|
Nenue@82
|
303 local slot, hasEquip = ...
|
Nenue@82
|
304 if slot == 16 then
|
Nenue@82
|
305 self.mode = 'artifact'
|
Nenue@82
|
306 lastMode = nil
|
Nenue@82
|
307 end
|
Nenue@82
|
308 elseif event == 'PLAYER_XP_UPDATE' or event == 'PLAYER_LEVEL_UP' then
|
Nenue@82
|
309 print('forcing to XP mode')
|
Nenue@81
|
310 self.mode = 'xp'
|
Nenue@81
|
311 end
|
Nenue@82
|
312 self.modeChanged = (lastMode ~= self.mode)
|
Nenue@82
|
313 if self.modeChanged and self:IsVisible() then
|
Nenue@82
|
314 print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()', event, ...)
|
Nenue@84
|
315 self:AnimateMode()
|
Nenue@82
|
316 else
|
Nenue@82
|
317 print('|cFFFFFF00'..self:GetName()..':Update()', event, ...)
|
Nenue@82
|
318 self:Update()
|
Nenue@82
|
319 end
|
Nenue@81
|
320 end
|
Nenue@81
|
321 function VeneerWorldStateProgressMixin:UpdateXPGain()
|
Nenue@82
|
322 self.canGainXP = (UnitLevel('player') < GetMaxPlayerLevel()) and (not IsXPUserDisabled())
|
Nenue@82
|
323 if not self.canGainXP then
|
Nenue@81
|
324 self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
|
Nenue@81
|
325 end
|
Nenue@81
|
326 end
|
Nenue@81
|
327
|
Nenue@81
|
328 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
|
Nenue@81
|
329 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
|
Nenue@87
|
330
|
Nenue@87
|
331
|
Nenue@89
|
332 local progressHandlers = {
|
Nenue@89
|
333 xp = function(self)
|
Nenue@89
|
334 local hasNewInfo, showChange = false, false
|
Nenue@81
|
335 local xp = UnitXP('player')
|
Nenue@81
|
336 local xpMax = UnitXPMax('player')
|
Nenue@81
|
337 local bonusXP = GetXPExhaustion()
|
Nenue@81
|
338 if xp then
|
Nenue@81
|
339 self.progressPercent = xp / xpMax
|
Nenue@81
|
340 end
|
Nenue@84
|
341 self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax
|
Nenue@82
|
342 if bonusXP then
|
Nenue@89
|
343 self.progressOverflow = min(1,(bonusXP / xpMax))
|
Nenue@89
|
344 self.OverflowBar:SetColorTexture(0.5, 0.5,0.5, 0.25)
|
Nenue@89
|
345 self.OverflowBar:SetPoint('LEFT', self.ProgressBar, 'LEFT')
|
Nenue@82
|
346 else
|
Nenue@89
|
347 self.progressOverflow = nil
|
Nenue@82
|
348 end
|
Nenue@89
|
349 self.ProgressBar:SetColorTexture(0, 0.5,1,1)
|
Nenue@89
|
350 self.OverflowAnchor = self.ProgressBar
|
Nenue@89
|
351 self.hasNewInfo = (self.progressAmount ~= xp)
|
Nenue@89
|
352 showChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax)
|
Nenue@89
|
353
|
Nenue@82
|
354 self.progressAmount = xp
|
Nenue@82
|
355 self.progressMax = xpMax
|
Nenue@89
|
356 return hasNewInfo, showChange
|
Nenue@89
|
357 end,
|
Nenue@89
|
358 artifact = function(self)
|
Nenue@89
|
359 local hasNewInfo, showChange = false, false
|
Nenue@81
|
360 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
|
Nenue@82
|
361 if itemID then
|
Nenue@82
|
362 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
|
Nenue@88
|
363 print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost)
|
Nenue@82
|
364 hasNewInfo = (self.progressAmount ~= totalXP)
|
Nenue@89
|
365 showChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost))
|
Nenue@82
|
366
|
Nenue@82
|
367 if totalXP > nextRankCost then
|
Nenue@82
|
368 self.progressPercent = 1
|
Nenue@85
|
369 else
|
Nenue@82
|
370 self.progressPercent = totalXP / nextRankCost
|
Nenue@82
|
371 end
|
Nenue@82
|
372
|
Nenue@82
|
373 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
|
Nenue@82
|
374
|
Nenue@82
|
375 self.ProgressBar:SetColorTexture(1,0.5,0,1)
|
Nenue@82
|
376 self.OverflowBar:Hide()
|
Nenue@82
|
377
|
Nenue@89
|
378 if totalXP > nextRankCost then
|
Nenue@89
|
379 self.progressText = self.progressText .. ' Level Up!'
|
Nenue@89
|
380 self.progressOverflow = (totalXP - nextRankCost) / nextRankCost
|
Nenue@89
|
381 self.OverflowBar:SetPoint('LEFT', self.ProgressBG, 'LEFT')
|
Nenue@89
|
382 self.OverflowAnchor = self.OverflawBar
|
Nenue@89
|
383 else
|
Nenue@89
|
384 self.progressOverflow = nil
|
Nenue@89
|
385 self.OverflowAnchor = self.ProgressBar
|
Nenue@89
|
386 end
|
Nenue@89
|
387
|
Nenue@82
|
388 self.progressAmount = totalXP
|
Nenue@82
|
389 self.progressMax = nextRankCost
|
Nenue@82
|
390 else
|
Nenue@89
|
391 self.progressOverflow = nil
|
Nenue@82
|
392 self.progressAmount = 0
|
Nenue@82
|
393 self.progressMax = 1
|
Nenue@82
|
394 self.progressText = ''
|
Nenue@82
|
395 end
|
Nenue@89
|
396 return hasNewInfo, showChange
|
Nenue@89
|
397 end
|
Nenue@89
|
398 }
|
Nenue@89
|
399
|
Nenue@89
|
400 function VeneerWorldStateProgressMixin:Update(isBatchUpdate)
|
Nenue@89
|
401
|
Nenue@89
|
402 local progressChange = false
|
Nenue@93
|
403 print(' current mode:', self.mode, 'vis:', self:IsVisible())
|
Nenue@89
|
404 if (not self.mode) or (not progressHandlers[self.mode]) then
|
Nenue@89
|
405 self:HidePanel()
|
Nenue@89
|
406 return
|
Nenue@82
|
407 end
|
Nenue@82
|
408
|
Nenue@89
|
409 local hasNewInfo, showProgress = progressHandlers[self.mode](self)
|
Nenue@89
|
410 self:SetSize(600,16)
|
Nenue@89
|
411 if hasNewInfo then
|
Nenue@89
|
412 self.timeOut = nil
|
Nenue@89
|
413 self.timeLived = 0
|
Nenue@89
|
414 end
|
Nenue@82
|
415
|
Nenue@93
|
416
|
Nenue@89
|
417 if not self:IsVisible() then
|
Nenue@89
|
418 self.TransitionFadeIn:Play()
|
Nenue@89
|
419 else
|
Nenue@89
|
420 self:ShowPanel()
|
Nenue@89
|
421 end
|
Nenue@89
|
422
|
Nenue@89
|
423 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown())
|
Nenue@89
|
424 print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth())
|
Nenue@89
|
425 if self.progressPercent > 0 then
|
Nenue@89
|
426 self.ProgressBar:Show()
|
Nenue@89
|
427 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0)
|
Nenue@89
|
428 self.Label:SetText(self.progressText)
|
Nenue@89
|
429
|
Nenue@89
|
430 self.ProgressSpark:ClearAllPoints()
|
Nenue@89
|
431 if self.progressOverflow then
|
Nenue@89
|
432 print(' Overflow:', self.progressOverflow)
|
Nenue@89
|
433 self.OverflowBar:Show()
|
Nenue@89
|
434 self.OverflowBar:SetWidth(self.progressOverflow * self:GetWidth(), 0)
|
Nenue@89
|
435 else
|
Nenue@89
|
436 self.OverflowBar:Hide()
|
Nenue@81
|
437 end
|
Nenue@89
|
438 self.ProgressSpark:SetPoint('CENTER', self.OverflowAnchor, 'RIGHT', 0, 0)
|
Nenue@81
|
439
|
Nenue@89
|
440 else
|
Nenue@89
|
441 self.ProgressBar:Hide()
|
Nenue@89
|
442 end
|
Nenue@81
|
443
|
Nenue@89
|
444 if self.progressOverflow and (self.progressOverflow >= self.progressPercent) then
|
Nenue@89
|
445 self.OverflowBar:SetDrawLayer('ARTWORK', 1)
|
Nenue@89
|
446 self.ProgressBar:SetDrawLayer('ARTWORK', 2)
|
Nenue@89
|
447 else
|
Nenue@89
|
448 self.OverflowBar:SetDrawLayer('ARTWORK', 2)
|
Nenue@89
|
449 self.ProgressBar:SetDrawLayer('ARTWORK', 1)
|
Nenue@89
|
450 end
|
Nenue@81
|
451
|
Nenue@82
|
452 if progressChange then
|
Nenue@89
|
453 self:AnimateProgress(progressChange)
|
Nenue@81
|
454 end
|
Nenue@81
|
455
|
Nenue@82
|
456 self.modeChanged = nil
|
Nenue@84
|
457 end
|
Nenue@84
|
458
|
Nenue@89
|
459
|
Nenue@89
|
460 function VeneerWorldStateProgressMixin:AnimateProgress(progressChange)
|
Nenue@89
|
461
|
Nenue@89
|
462
|
Nenue@89
|
463 local changeAnchor = (self.progressOverflow and self.OverflowBar) or self.ProgressBar
|
Nenue@89
|
464 local progressWidth = self:GetWidth() * min(progressChange, changeAnchor:GetWidth())
|
Nenue@89
|
465
|
Nenue@89
|
466 self.ProgressAdded:Show()
|
Nenue@89
|
467 self.ProgressAdded:ClearAllPoints()
|
Nenue@89
|
468 self.ProgressAdded:SetPoint('TOPRIGHT', changeAnchor, 'TOPRIGHT', 0, 0)
|
Nenue@89
|
469 self.ProgressAdded:SetPoint('BOTTOMLEFT', changeAnchor, 'BOTTOMRIGHT', - (progressWidth), 0)
|
Nenue@89
|
470
|
Nenue@89
|
471 print(' Render change:', progressWidth, changeAnchor)
|
Nenue@89
|
472 self.ProgressFlash.translation:SetOffset(progressWidth, 0)
|
Nenue@89
|
473 self.ProgressFlash:Play()
|
Nenue@89
|
474 end
|
Nenue@89
|
475
|
Nenue@84
|
476 function VeneerWorldStateProgressMixin:OnMouseDown(button)
|
Nenue@84
|
477 if button == 'RightButton' then
|
Nenue@84
|
478 if self.keepOpen then
|
Nenue@84
|
479 self.keepOpen = nil
|
Nenue@87
|
480 self.timeLived = 1000
|
Nenue@84
|
481 else
|
Nenue@84
|
482 self.keepOpen = true
|
Nenue@93
|
483
|
Nenue@93
|
484 self.modeChanged = true
|
Nenue@84
|
485 end
|
Nenue@84
|
486 print('keepOpen =', self.keepOpen)
|
Nenue@93
|
487 self:Update()
|
Nenue@84
|
488 else
|
Nenue@89
|
489
|
Nenue@84
|
490 if self.mode == 'xp' then
|
Nenue@84
|
491 self.mode = 'artifact'
|
Nenue@84
|
492 else
|
Nenue@85
|
493 if not self.canGainXP then
|
Nenue@85
|
494 return
|
Nenue@85
|
495 end
|
Nenue@84
|
496 self.mode = 'xp'
|
Nenue@84
|
497 end
|
Nenue@89
|
498 print('|cFFFF4400Change mode:', self.mode)
|
Nenue@89
|
499
|
Nenue@89
|
500
|
Nenue@84
|
501 self:AnimateMode()
|
Nenue@84
|
502 end
|
Nenue@84
|
503
|
Nenue@84
|
504 end
|
Nenue@84
|
505
|
Nenue@84
|
506 function VeneerWorldStateProgressMixin:AnimateMode()
|
Nenue@84
|
507
|
Nenue@84
|
508 self.TransitionFadeIn:Stop()
|
Nenue@84
|
509 print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()')
|
Nenue@84
|
510 self.modeChanged = true
|
Nenue@84
|
511 self.TransitionFadeOut:Play()
|
Nenue@87
|
512 end
|
Nenue@87
|
513
|
Nenue@87
|
514 do
|
Nenue@87
|
515 function WorldStateBlockMixin:ShowPanel()
|
Nenue@87
|
516 print('|cFF0088FF'..self:GetName()..':ShowPanel()')
|
Nenue@87
|
517 self:SetShown(true)
|
Nenue@93
|
518 self:SetAlpha(1)
|
Nenue@87
|
519 VeneerWorldState:Show()
|
Nenue@87
|
520 end
|
Nenue@87
|
521 function WorldStateBlockMixin:HidePanel()
|
Nenue@87
|
522 print('|cFF0088FF'..self:GetName()..':HidePanel()')
|
Nenue@87
|
523 self:SetShown(false)
|
Nenue@87
|
524 VeneerWorldState:Reanchor()
|
Nenue@87
|
525 end
|
Nenue@87
|
526
|
Nenue@87
|
527 function WorldStateBlockMixin:OnSizeChanged ()
|
Nenue@87
|
528 local h = self:GetHeight()
|
Nenue@87
|
529 if h > VeneerWorldState.maxHeight then
|
Nenue@87
|
530 VeneerWorldState.maxHeight = h
|
Nenue@87
|
531 VeneerWorldState:SetHeight(h)
|
Nenue@87
|
532 print('updating max height:', h)
|
Nenue@87
|
533 elseif h < VeneerWorldState.maxHeight then
|
Nenue@87
|
534 VeneerWorldState:Reanchor()
|
Nenue@87
|
535 end
|
Nenue@87
|
536 end
|
Nenue@87
|
537 function WorldStateBlockMixin:OnHide ()
|
Nenue@87
|
538 print('|cFF0088FF'..self:GetName()..':OnHide()')
|
Nenue@87
|
539 VeneerWorldState:Reanchor()
|
Nenue@87
|
540 end
|
Nenue@87
|
541 function WorldStateBlockMixin:OnShow ()
|
Nenue@87
|
542 self.timeLived = 0
|
Nenue@87
|
543 print('|cFF0088FF'..self:GetName()..':OnShow()')
|
Nenue@87
|
544 VeneerWorldState:Reanchor()
|
Nenue@87
|
545 end
|
Nenue@87
|
546 function WorldStateBlockMixin:Setup()
|
Nenue@87
|
547 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop')
|
Nenue@88
|
548 self:Update()
|
Nenue@87
|
549 end
|
Nenue@87
|
550 function WorldStateBlockMixin:Reset()
|
Nenue@87
|
551 print('|cFF0088FF'..self:GetName()..':Reset()')
|
Nenue@87
|
552 self.keepOpen = true
|
Nenue@87
|
553 self:Setup()
|
Nenue@87
|
554 end
|
Nenue@93
|
555 end
|
Nenue@93
|
556
|