annotate Modules/OrderHall.lua @ 81:65ec88b30eb8

- OrderHall plugin converted to a general world state cluster. Includes: - Suramar ancient mana - Artifact power/XP progress - OrderHall bar shrinker
author Nenue
date Mon, 17 Oct 2016 04:57:32 -0400
parents bb6b532c5d2f
children be813a9d99c0
rev   line source
Nenue@80 1 -- Veneer
Nenue@80 2 -- OrderHall.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@81 8 VeneerWorldStateProgressMixin = {}
Nenue@81 9 VeneerWorldStateMixin = {
Nenue@81 10 detectedFrames = {}
Nenue@81 11 }
Nenue@80 12 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
Nenue@80 13
Nenue@80 14 function VeneerWorldStateMixin:Setup()
Nenue@80 15 self:Refresh()
Nenue@80 16 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
Nenue@81 17 print('All:Setup()')
Nenue@81 18
Nenue@81 19 self.modules = self.modules or {self:GetChildren()}
Nenue@81 20 for i, frame in ipairs(self.modules) do
Nenue@81 21 if frame.Setup then
Nenue@81 22 frame:Setup()
Nenue@81 23 end
Nenue@81 24 end
Nenue@80 25 end
Nenue@80 26
Nenue@80 27 function VeneerWorldStateMixin:Refresh()
Nenue@81 28 if OrderHallCommandBar then
Nenue@81 29 if not self.detectedFrames[OrderHallCommandBar] then
Nenue@81 30 self.detectedFrames[OrderHallCommandBar] = true
Nenue@81 31 hooksecurefunc(OrderHallCommandBar,'Show', function()
Nenue@81 32 self:Refresh()
Nenue@81 33 end)
Nenue@81 34 end
Nenue@81 35
Nenue@81 36
Nenue@81 37 OrderHallCommandBar:ClearAllPoints()
Nenue@81 38 OrderHallCommandBar:SetPoint('TOP')
Nenue@81 39 OrderHallCommandBar:SetWidth(600)
Nenue@81 40 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
Nenue@81 41 OrderHallCommandBar.WorldMapButton:Hide()
Nenue@81 42 OrderHallCommandBar:EnableMouse(false)
Nenue@81 43 end
Nenue@81 44
Nenue@80 45 end
Nenue@80 46 local initialized
Nenue@80 47 function VeneerWorldStateMixin:OnEvent(event, arg)
Nenue@80 48 print(event, arg)
Nenue@81 49
Nenue@81 50 if event == 'PLAYER_LOGIN' and not initialized then
Nenue@81 51 if IsLoggedIn() then
Nenue@81 52 initialized = true
Nenue@80 53 self:Setup()
Nenue@81 54 self:UnregisterEvent('PLAYER_LOGIN')
Nenue@81 55 end
Nenue@80 56 end
Nenue@80 57
Nenue@80 58 if event == 'PLAYER_ENTERING_WORLD' then
Nenue@80 59 self:Update()
Nenue@81 60 elseif event == 'PLAYER_REGEN_ENABLED' then
Nenue@81 61 self:Show()
Nenue@81 62 elseif event == 'PLAYER_REGEN_DISABLED' then
Nenue@81 63 self:Hide()
Nenue@80 64 end
Nenue@80 65 end
Nenue@80 66
Nenue@80 67 function VeneerWorldStateMixin:Update()
Nenue@81 68 self.modules = self.modules or {self:GetChildren()}
Nenue@80 69 print('|cFFFFFF00All:Update()|r')
Nenue@81 70 self.maxHeight = 0
Nenue@81 71 for i, frame in ipairs(self.modules) do
Nenue@80 72 if frame.Update then
Nenue@80 73 print(frame:GetName())
Nenue@80 74 frame:Update()
Nenue@81 75 if frame:IsVisible() then
Nenue@81 76 self.maxHeight = max(self.maxHeight, frame.maxHeight)
Nenue@81 77 end
Nenue@80 78 end
Nenue@80 79 end
Nenue@81 80 self:SetHeight(self.maxHeight)
Nenue@80 81 end
Nenue@80 82
Nenue@80 83
Nenue@80 84
Nenue@80 85 function VeneerWorldStateMixin:OnLoad ()
Nenue@81 86 self:RegisterEvent('PLAYER_LOGIN')
Nenue@80 87 self:RegisterEvent('ADDON_LOADED')
Nenue@80 88 self:RegisterEvent('ARTIFACT_UPDATE')
Nenue@80 89 self:RegisterEvent('ARTIFACT_XP_UPDATE')
Nenue@80 90 self:RegisterEvent('PLAYER_ENTERING_WORLD')
Nenue@81 91 self:RegisterEvent('PLAYER_REGEN_ENABLED')
Nenue@81 92 self:RegisterEvent('PLAYER_REGEN_DISABLED')
Nenue@80 93 end
Nenue@80 94
Nenue@80 95 function VeneerWorldStateCurrencyMixin:OnLoad ()
Nenue@80 96
Nenue@80 97 self:RegisterEvent('ZONE_CHANGED')
Nenue@80 98 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
Nenue@80 99 self:RegisterEvent('CHAT_MSG_CURRENCY')
Nenue@80 100
Nenue@80 101 end
Nenue@80 102
Nenue@80 103 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
Nenue@80 104 self:Update()
Nenue@80 105 end
Nenue@80 106
Nenue@80 107
Nenue@80 108 function VeneerWorldStateCurrencyMixin:Update()
Nenue@81 109
Nenue@80 110 print('currency refresh: zone =', mapID)
Nenue@81 111 if GetZoneText() == 'Suramar' then
Nenue@80 112 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155)
Nenue@80 113
Nenue@80 114 self.Icon:SetTexture(texture)
Nenue@80 115 self.Label:SetFormattedText("%d / %d", earned, totalMax)
Nenue@80 116 self:Show()
Nenue@80 117 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
Nenue@80 118 else
Nenue@80 119 self:Hide()
Nenue@80 120 end
Nenue@81 121
Nenue@81 122 self.maxHeight = self:GetHeight()
Nenue@81 123 end
Nenue@81 124
Nenue@81 125 function VeneerWorldStateProgressMixin:OnLoad()
Nenue@81 126 self:RegisterEvent('PLAYER_XP_UPDATE')
Nenue@81 127 self:RegisterEvent('PLAYER_LEVEL_UP')
Nenue@81 128 self:RegisterEvent('PLAYER_UPDATE_RESTING')
Nenue@81 129 self:RegisterEvent('ENABLE_XP_GAIN')
Nenue@81 130 self:RegisterEvent('DISABLE_XP_GAIN')
Nenue@81 131 self:RegisterEvent('PLAYER_LOGIN')
Nenue@81 132 self:RegisterEvent('ARTIFACT_UPDATE')
Nenue@81 133 self:RegisterEvent('ARTIFACT_XP_UPDATE')
Nenue@81 134
Nenue@81 135 end
Nenue@81 136
Nenue@81 137 function VeneerWorldStateProgressMixin:Setup()
Nenue@81 138 self:UpdateXPGain()
Nenue@81 139 if UnitLevel('player') < GetMaxPlayerLevel() then
Nenue@81 140 self.mode = 'xp'
Nenue@81 141 else
Nenue@81 142 self.mode = 'artifact'
Nenue@81 143 end
Nenue@81 144 print('setup mode:', self.mode)
Nenue@81 145 self:Update()
Nenue@81 146 end
Nenue@81 147
Nenue@81 148 function VeneerWorldStateProgressMixin:OnEvent(event)
Nenue@81 149 if event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
Nenue@81 150 self:UpdateXPGain()
Nenue@81 151 elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
Nenue@81 152 self.mode = 'artifact'
Nenue@81 153 elseif event == 'PLAYER_XP_UPDATE' or 'PLAYER_LEVEL_UP' then
Nenue@81 154 self.mode = 'xp'
Nenue@81 155 end
Nenue@81 156
Nenue@81 157
Nenue@81 158 self:Update()
Nenue@81 159
Nenue@81 160 end
Nenue@81 161 function VeneerWorldStateProgressMixin:UpdateXPGain()
Nenue@81 162 if IsXPUserDisabled() then
Nenue@81 163 self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
Nenue@81 164 self.mode = nil
Nenue@81 165 else
Nenue@81 166 self.ProgressBar:SetColorTexture(1,1,1)
Nenue@81 167 end
Nenue@81 168 end
Nenue@81 169
Nenue@81 170 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
Nenue@81 171 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
Nenue@81 172 function VeneerWorldStateProgressMixin:Update()
Nenue@81 173
Nenue@81 174 if not self.mode then
Nenue@81 175 if UnitLevel('player') < GetMaxPlayerLevel() then
Nenue@81 176 self.mode = 'xp'
Nenue@81 177 else
Nenue@81 178 self.mode = 'artifact'
Nenue@81 179 end
Nenue@81 180 end
Nenue@81 181
Nenue@81 182
Nenue@81 183 self.progressPercent = 0
Nenue@81 184 self.progressAmount = 0
Nenue@81 185 self.progressMax = 1
Nenue@81 186 self.progressOverflow = 0
Nenue@81 187 if self.mode == 'xp' then
Nenue@81 188 local xp = UnitXP('player')
Nenue@81 189 local xpMax = UnitXPMax('player')
Nenue@81 190 local bonusXP = GetXPExhaustion()
Nenue@81 191 if xp then
Nenue@81 192 self.progressPercent = xp / xpMax
Nenue@81 193 end
Nenue@81 194 elseif self.mode == 'artifact' then
Nenue@81 195
Nenue@81 196 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
Nenue@81 197 if not itemID then
Nenue@81 198 self:Hide()
Nenue@81 199 return
Nenue@81 200 end
Nenue@81 201
Nenue@81 202 local pointsAvailable = 0
Nenue@81 203
Nenue@81 204 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
Nenue@81 205
Nenue@81 206 self.progressAmount = totalXP
Nenue@81 207 self.progressMax = nextRankCost
Nenue@81 208 if totalXP > nextRankCost then
Nenue@81 209 self.progressPercent = 1
Nenue@81 210 self.progressOverflow = totalXP - nextRankCost
Nenue@81 211 else
Nenue@81 212 self.progressPercent = totalXP / nextRankCost
Nenue@81 213 end
Nenue@81 214
Nenue@81 215 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
Nenue@81 216 else
Nenue@81 217 self:Hide()
Nenue@81 218 return
Nenue@81 219 end
Nenue@81 220
Nenue@81 221 print(self.progressPercent, floor(self.ProgressBG:GetWidth()* self.progressPercent))
Nenue@81 222
Nenue@81 223 if self.progressPercent > 0 then
Nenue@81 224 self.ProgressBar:Show()
Nenue@81 225 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self.ProgressBG:GetWidth()* self.progressPercent , 0)
Nenue@81 226
Nenue@81 227 self.Label:SetText(self.progressText)
Nenue@81 228 else
Nenue@81 229 self.ProgressBar:Hide()
Nenue@81 230 end
Nenue@81 231
Nenue@81 232
Nenue@81 233
Nenue@81 234 self.maxHeight = self:GetHeight()
Nenue@80 235 end