annotate Modules/WorldState.lua @ 90:6e2cb847c3c6

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