annotate Modules/WorldState.lua @ 88:b107b4df7eb6

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