annotate Modules/WorldState.lua @ 111:1196c2bad31c

- obtain World Quest AP via WorldPlan - artifact button text adjustments - removed from UISpecialFrames to fix hiding on map open
author Nick@Zahhak
date Tue, 21 Mar 2017 16:33:51 -0400
parents a41f6b74709a
children 7c77fde36287
rev   line source
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