annotate Modules/WorldState.lua @ 85:1196b8175674

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