Mercurial > wow > buffalo2
diff Modules/WorldState.lua @ 113:2105b6e5095f
- Added Blood of Sargeras to currency list
- Fixed panel ordering issues when a module is loaded on the fly.
author | Nick@Zahhak |
---|---|
date | Sun, 26 Mar 2017 06:25:18 -0400 |
parents | 7c77fde36287 |
children | 6748c98a6c6c |
line wrap: on
line diff
--- a/Modules/WorldState.lua Thu Mar 23 05:29:03 2017 -0400 +++ b/Modules/WorldState.lua Sun Mar 26 06:25:18 2017 -0400 @@ -2,31 +2,25 @@ -- WorldState.lua -- Created: 10/7/2016 10:55 PM -- %file-revision% --- +-- An extensible panel group for HUD values local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop local WorldStateBlockMixin = {} VeneerOrderHallMixin = { anchorPoint = 'TOP', anchorFrom = 'TOP', + anchorPriority = 1, anchorX = 0, anchorY = 0, addonTrigger = 'Blizzard_OrderHallUI', addonFrame = 'OrderHallCommandBar', } -VeneerWorldStateHeadsUpMixin = { -} - -VeneerWorldStateCurrencyMixin = { -} -VeneerWorldStateProgressMixin = { - keepOpen = true, -} VeneerWorldStateMixin = { maxHeight = 0, detectedFrames = {}, anchorPoint = 'TOP', + modules = {} } function VeneerWorldStateMixin:Reset() @@ -42,7 +36,6 @@ --DEFAULT_CHAT_FRAME:AddMessage('Loaded') print('|cFFFFFF00'..self:GetName()..'|r:Setup()') - self.modules = self.modules or {self:GetChildren()} for i, frame in ipairs(self.modules) do print('--'.. frame:GetName()..' exists') if frame.Setup then @@ -75,7 +68,7 @@ self:RegisterEvent('PLAYER_ENTERING_WORLD') self:RegisterEvent('PLAYER_REGEN_ENABLED') self:RegisterEvent('PLAYER_REGEN_DISABLED') - Veneer:AddHandler(self, self.anchorPoint, 2) + Veneer:AddHandler(self, self.anchorPoint, self.anchorPriority) SLASH_VENEERWORLDSTATE1 = "/vws" SLASH_VENEERWORLDSTATE2 = "/worldstate" SlashCmdList.VENEERWORLDSTATE = function() @@ -157,14 +150,17 @@ function VeneerOrderHallMixin:Setup() print('|cFFFFFF00'..self:GetName()..':Setup()') self:SetParent(OrderHallCommandBar) - self:RegisterEvent("ZONE_CHANGED"); - self:RegisterEvent("ZONE_CHANGED_INDOORS"); - self:RegisterEvent("ZONE_CHANGED_NEW_AREA"); + self:RegisterEvent("UNIT_AURA"); + self:RegisterEvent("GARRISON_FOLLOWER_CATEGORIES_UPDATED") + self:RegisterEvent("GARRISON_FOLLOWER_ADDED") + self:RegisterEvent("GARRISON_FOLLOWER_REMOVED") + self:SetShown(true) end function VeneerOrderHallMixin:OnLoad() Veneer:AddHandler(self, 'TOP', 1) + self:EnableMouse(false) end function VeneerOrderHallMixin:OnEvent(event, ...) @@ -189,7 +185,6 @@ end function VeneerOrderHallMixin:Update() - if not OrderHallCommandBar then print('|cFFFF4400'..self:GetName()..' updater called without target') return @@ -201,7 +196,17 @@ OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5) OrderHallCommandBar.WorldMapButton:Hide() OrderHallCommandBar:EnableMouse(false) - self:SetSize(700, 24) + self:SetSize(700, 22) + + local troops = OrderHallCommandBar.TroopSummary + if troops then + for _, category in ipairs(troops) do + category.Count:SetFontObject(VeneerNumberFont) + category.Count:ClearAllPoints() + category.Count:SetPoint('BOTTOMRIGHT', category.Icon, 'BOTTOMRIGHT', -1, 1) + end + end + print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown()) @@ -209,308 +214,7 @@ Veneer:DynamicReanchor() end -function VeneerWorldStateCurrencyMixin:OnLoad () - self:RegisterEvent("PLAYER_ENTERING_WORLD"); - self:RegisterEvent("ZONE_CHANGED"); - self:RegisterEvent("ZONE_CHANGED_INDOORS"); - self:RegisterEvent("ZONE_CHANGED_NEW_AREA"); - self:RegisterEvent('CURRENCY_DISPLAY_UPDATE') - self:RegisterEvent('CHAT_MSG_CURRENCY') -end -function VeneerWorldStateCurrencyMixin:OnEvent (event, arg) - self:Update() -end -local zoneCurrency = { - ['Suramar'] = 1155, - ["Sashj'tar Ruins"] = 1155, - ["Faronaar Ruins"] = 1155 -} -local zoneBountyInfo = { - ['Suramar'] = 1859, - ["Sashj'tar Ruins"] = 1859, - ["Faronaar Ruins"] = 1859, - - ['Azsuna'] = 1900, -} -local globalBountyInfo = { -} -function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate) - local zoneText = GetRealZoneText() - local canShow = false - if zoneText then - local currency = zoneCurrency[zoneText] - if currency then - local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(zoneCurrency[zoneText]) - self.Icon:SetTexture(texture) - self.Label:SetFormattedText("%d / %d", earned, totalMax) - self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6) - canShow = true - end - else - end - self:SetShown(canShow) - VeneerWorldState:Reanchor(true) -end - -function VeneerWorldStateProgressMixin:OnUpdate(sinceLast) - self.timeLived = (self.timeLived or 0) + sinceLast - if self.keepOpen then - return - end - if self.timeLived >= 3 and not self.TimedFadeOut:IsPlaying() then - self.TimedFadeOut:Play() - end -end - -function VeneerWorldStateProgressMixin:OnLoad() - self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED') - - self:RegisterEvent("PLAYER_XP_UPDATE"); - self:RegisterEvent("UPDATE_EXHAUSTION"); - self:RegisterEvent("PLAYER_LEVEL_UP"); - self:RegisterEvent("PLAYER_UPDATE_RESTING"); - - self:RegisterEvent("ARTIFACT_UPDATE"); - self:RegisterEvent("ARTIFACT_XP_UPDATE"); - self:RegisterEvent("ARTIFACT_CLOSE"); - self:RegisterEvent("ARTIFACT_MAX_RANKS_UPDATE"); - - self.progressPercent = 0 - self.progressAmount = 0 - self.progressMax = 1 - self.progressOverflow = 0 - -end - -function VeneerWorldStateProgressMixin:Setup() - self:UpdateXPGain() - if self.canGainXP then - self.mode = 'xp' - else - self.mode = 'artifact' - end - print('setup mode:', self.mode) -end - -function VeneerWorldStateProgressMixin:OnEvent(event, ...) - local lastMode = self.mode - if event == 'PLAYER_LEVEL_UP' or event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then - self:UpdateXPGain() - elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then - self.mode = 'artifact' - - elseif event == 'PLAYER_EQUIPMENT_CHANGED' then - local slot, hasEquip = ... - if slot == 16 then - self.mode = 'artifact' - lastMode = nil - end - elseif event == 'PLAYER_XP_UPDATE' or event == 'PLAYER_LEVEL_UP' then - print('forcing to XP mode') - self.mode = 'xp' - end - self.modeChanged = (lastMode ~= self.mode) - if self.modeChanged and self:IsVisible() then - print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()', event, ...) - self:AnimateMode() - else - print('|cFFFFFF00'..self:GetName()..':Update()', event, ...) - self:Update() - end -end -function VeneerWorldStateProgressMixin:UpdateXPGain() - self.canGainXP = (UnitLevel('player') < GetMaxPlayerLevel()) and (not IsXPUserDisabled()) - if not self.canGainXP then - self.ProgressBar:SetColorTexture(0.75,0.75,0.75) - end -end - -local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo -local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank - - -local progressHandlers = { - xp = function(self) - local hasNewInfo, showChange = false, false - local xp = UnitXP('player') - local xpMax = UnitXPMax('player') - local bonusXP = GetXPExhaustion() - if xp then - self.progressPercent = xp / xpMax - end - self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax - if bonusXP then - self.progressOverflow = min(1,(bonusXP / xpMax)) - self.OverflowBar:SetColorTexture(0.5, 0.5,0.5, 0.25) - self.OverflowBar:SetPoint('LEFT', self.ProgressBar, 'LEFT') - else - self.progressOverflow = nil - end - self.ProgressBar:SetColorTexture(0, 0.5,1,1) - self.OverflowAnchor = self.ProgressBar - self.hasNewInfo = (self.progressAmount ~= xp) - showChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax) - - self.progressAmount = xp - self.progressMax = xpMax - return hasNewInfo, showChange - end, - artifact = function(self) - local hasNewInfo, showChange = false, false - local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo() - if itemID then - local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0 - print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost) - hasNewInfo = (self.progressAmount ~= totalXP) - showChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost)) - - if totalXP > nextRankCost then - self.progressPercent = 1 - else - self.progressPercent = totalXP / nextRankCost - end - - self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost - - self.ProgressBar:SetColorTexture(1,0.5,0,1) - self.OverflowBar:Hide() - - if totalXP > nextRankCost then - self.progressText = self.progressText .. ' Level Up!' - self.progressOverflow = (totalXP - nextRankCost) / nextRankCost - self.OverflowBar:SetPoint('LEFT', self.ProgressBG, 'LEFT') - self.OverflowAnchor = self.OverflawBar - else - self.progressOverflow = nil - self.OverflowAnchor = self.ProgressBar - end - - self.progressAmount = totalXP - self.progressMax = nextRankCost - else - self.progressOverflow = nil - self.progressAmount = 0 - self.progressMax = 1 - self.progressText = '' - end - return hasNewInfo, showChange - end -} - -function VeneerWorldStateProgressMixin:Update(isBatchUpdate) - - local progressChange = false - print(' current mode:', self.mode, 'vis:', self:IsVisible()) - if (not self.mode) or (not progressHandlers[self.mode]) then - self:HidePanel() - return - end - - local hasNewInfo, showProgress = progressHandlers[self.mode](self) - self:SetSize(600,16) - if hasNewInfo then - self.timeOut = nil - self.timeLived = 0 - end - - - if not self:IsVisible() then - self.TransitionFadeIn:Play() - else - self:ShowPanel() - end - - print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown()) - print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth()) - if self.progressPercent > 0 then - self.ProgressBar:Show() - self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0) - self.Label:SetText(self.progressText) - - self.ProgressSpark:ClearAllPoints() - if self.progressOverflow then - print(' Overflow:', self.progressOverflow) - self.OverflowBar:Show() - self.OverflowBar:SetWidth(self.progressOverflow * self:GetWidth(), 0) - else - self.OverflowBar:Hide() - end - self.ProgressSpark:SetPoint('CENTER', self.OverflowAnchor, 'RIGHT', 0, 0) - - else - self.ProgressBar:Hide() - end - - if self.progressOverflow and (self.progressOverflow >= self.progressPercent) then - self.OverflowBar:SetDrawLayer('ARTWORK', 1) - self.ProgressBar:SetDrawLayer('ARTWORK', 2) - else - self.OverflowBar:SetDrawLayer('ARTWORK', 2) - self.ProgressBar:SetDrawLayer('ARTWORK', 1) - end - - if progressChange then - self:AnimateProgress(progressChange) - end - - self.modeChanged = nil -end - - -function VeneerWorldStateProgressMixin:AnimateProgress(progressChange) - - - local changeAnchor = (self.progressOverflow and self.OverflowBar) or self.ProgressBar - local progressWidth = self:GetWidth() * min(progressChange, changeAnchor:GetWidth()) - - self.ProgressAdded:Show() - self.ProgressAdded:ClearAllPoints() - self.ProgressAdded:SetPoint('TOPRIGHT', changeAnchor, 'TOPRIGHT', 0, 0) - self.ProgressAdded:SetPoint('BOTTOMLEFT', changeAnchor, 'BOTTOMRIGHT', - (progressWidth), 0) - - print(' Render change:', progressWidth, changeAnchor) - self.ProgressFlash.translation:SetOffset(progressWidth, 0) - self.ProgressFlash:Play() -end - -function VeneerWorldStateProgressMixin:OnMouseDown(button) - if button == 'RightButton' then - if self.keepOpen then - self.keepOpen = nil - self.timeLived = 1000 - else - self.keepOpen = true - - self.modeChanged = true - end - print('keepOpen =', self.keepOpen) - self:Update() - else - - if self.mode == 'xp' then - self.mode = 'artifact' - else - if not self.canGainXP then - return - end - self.mode = 'xp' - end - print('|cFFFF4400Change mode:', self.mode) - - - self:AnimateMode() - end - -end - -function VeneerWorldStateProgressMixin:AnimateMode() - - self.TransitionFadeIn:Stop() - print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()') - self.modeChanged = true - self.TransitionFadeOut:Play() -end do function WorldStateBlockMixin:ShowPanel() @@ -555,3 +259,4 @@ end end +