annotate Modules/WorldState.lua @ 114:6748c98a6c6c

- Reworked OrderHallHandler triggers - OrderHallHandler minimializes hud info - WorldState currency headers have a unified font
author Nick@Zahhak
date Mon, 27 Mar 2017 00:39:29 -0400
parents 2105b6e5095f
children 8c94bee4fdfc
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%
Nick@113 5 -- An extensible panel group for HUD values
Nenue@80 6
Nenue@97 7 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
Nenue@87 8 local WorldStateBlockMixin = {}
Nenue@87 9 VeneerOrderHallMixin = {
Nenue@87 10 anchorPoint = 'TOP',
Nenue@90 11 anchorFrom = 'TOP',
Nick@113 12 anchorPriority = 1,
Nenue@90 13 anchorX = 0,
Nenue@90 14 anchorY = 0,
Nenue@90 15 addonTrigger = 'Blizzard_OrderHallUI',
Nenue@90 16 addonFrame = 'OrderHallCommandBar',
Nenue@87 17 }
Nenue@97 18
Nenue@81 19 VeneerWorldStateMixin = {
Nenue@82 20 maxHeight = 0,
Nenue@87 21 detectedFrames = {},
Nenue@87 22 anchorPoint = 'TOP',
Nick@113 23 modules = {}
Nenue@81 24 }
Nenue@80 25
Nenue@87 26 function VeneerWorldStateMixin:Reset()
Nenue@87 27 for i, frame in ipairs(self.modules) do
Nenue@87 28 if frame.Reset then
Nenue@87 29 frame:Reset()
Nenue@87 30 end
Nenue@87 31 end
Nenue@87 32 self:Update()
Nenue@87 33 end
Nenue@87 34
Nenue@80 35 function VeneerWorldStateMixin:Setup()
Nenue@80 36 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
Nenue@84 37 print('|cFFFFFF00'..self:GetName()..'|r:Setup()')
Nenue@81 38
Nenue@81 39 for i, frame in ipairs(self.modules) do
Nenue@84 40 print('--'.. frame:GetName()..' exists')
Nenue@81 41 if frame.Setup then
Nenue@84 42 print('--'.. frame:GetName()..':Setup()')
Nenue@81 43 frame:Setup()
Nenue@81 44 end
Nenue@82 45
Nenue@87 46
Nenue@87 47 for k,v in pairs(WorldStateBlockMixin) do
Nenue@87 48 if not frame[k] then
Nenue@87 49 frame[k] = v
Nenue@87 50 if k:match('^On') then
Nenue@87 51 frame:SetScript(k, v)
Nenue@87 52 end
Nenue@82 53 end
Nenue@87 54 end
Nenue@82 55
Nenue@81 56 end
Nenue@84 57 self:UnregisterEvent('PLAYER_LOGIN')
Nenue@80 58 end
Nenue@80 59
Nenue@82 60 function VeneerWorldStateMixin:SetOrderHallUIMods()
Nenue@87 61 print('|cFFFF4400remove me', debugstack())
Nenue@80 62 end
Nenue@84 63
Nenue@84 64
Nenue@84 65 function VeneerWorldStateMixin:OnLoad ()
Nenue@87 66 self.modules = {self:GetChildren()}
Nenue@84 67 print('|cFFFFFF00'..self:GetName()..'|r!')
Nenue@84 68 self:RegisterEvent('PLAYER_ENTERING_WORLD')
Nenue@84 69 self:RegisterEvent('PLAYER_REGEN_ENABLED')
Nenue@84 70 self:RegisterEvent('PLAYER_REGEN_DISABLED')
Nick@113 71 Veneer:AddHandler(self, self.anchorPoint, self.anchorPriority)
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@90 81 if event == 'PLAYER_ENTERING_WORLD' then
Nenue@80 82 self:Update()
Nenue@81 83 elseif event == 'PLAYER_REGEN_ENABLED' then
Nick@108 84 self:Update(true)
Nenue@81 85 elseif event == 'PLAYER_REGEN_DISABLED' then
Nick@108 86 self:Update(true)
Nenue@80 87 end
Nenue@80 88 end
Nenue@80 89
Nenue@88 90 function VeneerWorldStateMixin:Update(isBatchUpdate)
Nenue@80 91 print('|cFFFFFF00All:Update()|r')
Nick@111 92 local canShow = false
Nenue@88 93 for index, frame in ipairs(self.modules) do
Nenue@82 94 if frame.Update then
Nenue@88 95 print(' '..index..' |cFFFF00FFUpdate:|r '.. frame:GetName())
Nenue@88 96 frame:Update(isBatchUpdate)
Nenue@88 97 print(' ', frame:IsVisible(), frame:IsShown())
Nick@111 98 if frame:IsShown() then
Nick@111 99 canShow = true
Nick@111 100 end
Nick@111 101
Nenue@82 102 end
Nenue@82 103 end
Nick@111 104 self:SetShown(canShow)
Nenue@82 105 end
Nenue@82 106
Nick@108 107 function VeneerWorldStateMixin:OnShow()
Nick@108 108 print('OnShow()', debugstack())
Nick@108 109 end
Nick@108 110
Nenue@87 111 function VeneerWorldStateMixin:Reanchor(isUpdate)
Nenue@88 112 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks')
Nenue@81 113 self.maxHeight = 0
Nenue@89 114 local lastFrame
Nenue@81 115 for i, frame in ipairs(self.modules) do
Nick@108 116 print(' '..frame:GetName()..':',frame:IsShown(), frame:GetHeight())
Nick@108 117 if frame:IsShown() then
Nenue@89 118 if lastFrame then
Nenue@89 119 frame:SetPoint('TOP', lastFrame, 'BOTTOM')
Nenue@89 120 else
Nenue@89 121 frame:SetPoint('TOP', self, 'TOP')
Nenue@89 122 end
Nenue@89 123
Nenue@89 124 self.maxHeight = self.maxHeight + frame:GetHeight()
Nenue@89 125 lastFrame = frame
Nenue@80 126 end
Nenue@80 127 end
Nick@108 128 if (self.maxHeight == 0) or InCombatLockdown() then
Nick@108 129 print (' hiding; combat =', InCombatLockdown())
Nick@108 130 self:SetShown(false)
Nenue@82 131 else
Nenue@87 132 print (' height update:', self.maxHeight)
Nenue@82 133 self:SetHeight(self.maxHeight)
Nick@108 134 self:SetShown(true)
Nenue@82 135 end
Nenue@82 136
Nenue@87 137 if not isUpdate then
Nenue@87 138 Veneer:InternalReanchor(self, print)
Nenue@87 139 end
Nenue@93 140
Nenue@93 141 WorldStateAlwaysUpFrame:ClearAllPoints()
Nenue@93 142 WorldStateAlwaysUpFrame:SetPoint('TOP', self, 'BOTTOM', 0, 0)
Nenue@80 143 end
Nenue@80 144
Nenue@80 145
Nenue@80 146
Nenue@84 147 function VeneerWorldStateMixin:OnMouseDown()
Nenue@80 148 end
Nenue@80 149
Nick@114 150 --- Order Hall mod
Nick@114 151 local requiresUpdate
Nick@114 152 local ocb
Nenue@87 153 function VeneerOrderHallMixin:Setup()
Nenue@87 154 print('|cFFFFFF00'..self:GetName()..':Setup()')
Nick@114 155 ocb = OrderHallCommandBar
Nick@114 156 hooksecurefunc(ocb, 'RefreshCategories', function()
Nick@114 157 requiresUpdate = true
Nick@114 158 end)
Nick@114 159 hooksecurefunc(ocb, 'RefreshCurrency',
Nick@114 160 function()
Nick@114 161 requiresUpdate = true
Nick@114 162 end)
Nick@114 163 hooksecurefunc(ocb, 'SetShown', function(isShown)
Nick@114 164 self:SetShown(isShown)
Nick@114 165 end)
Nick@114 166 hooksecurefunc(ocb, 'RefreshAll', function()
Nick@114 167 self:Update()
Nick@114 168 end)
Nick@113 169
Nick@114 170 ocb:ClearAllPoints()
Nick@114 171 ocb:SetAllPoints(self)
Nick@114 172
Nick@114 173
Nick@114 174 ocb.WorldMapButton:Hide()
Nick@114 175 ocb.AreaName:Hide()
Nick@114 176
Nick@114 177 ocb.Currency:SetFontObject(VeneerHeaderFont)
Nick@114 178 ocb.Currency:ClearAllPoints()
Nick@114 179 ocb.Currency:SetPoint('BOTTOMLEFT', ocb.ClassIcon, 'BOTTOMRIGHT', 15, 0)
Nick@114 180
Nick@114 181 ocb.CurrencyIcon:ClearAllPoints()
Nick@114 182 ocb.CurrencyIcon:SetPoint('TOP', ocb.ClassIcon, 'TOPRIGHT')
Nick@114 183
Nick@114 184 ocb.Background:SetColorTexture(0,0,0,0.5)
Nick@114 185
Nick@114 186 -- frame that calls up the resources tooltip
Nick@114 187 ocb.CurrencyHitTest:SetPoint('LEFT', ocb.CurrencyIcon, 'LEFT')
Nick@114 188 ocb.CurrencyHitTest:SetPoint('RIGHT', ocb.Currency, 'RIGHT')
Nick@114 189
Nick@114 190
Nick@114 191 self:SetSize(700, 23)
Nick@114 192 self:SetShown(ocb:IsShown())
Nick@114 193 end
Nick@114 194
Nick@114 195 function VeneerOrderHallMixin:OnUpdate()
Nick@114 196 if requiresUpdate then
Nick@114 197 self:Update()
Nick@114 198 end
Nick@114 199
Nenue@88 200 end
Nenue@88 201
Nenue@90 202 function VeneerOrderHallMixin:OnLoad()
Nick@108 203 Veneer:AddHandler(self, 'TOP', 1)
Nick@113 204 self:EnableMouse(false)
Nenue@90 205 end
Nenue@90 206
Nenue@88 207
Nenue@88 208 function VeneerOrderHallMixin:OnShow()
Nick@114 209 if ocb then
Nick@114 210 --self:Print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', ocb:IsShown(), self:IsShown())
Nenue@90 211 self:Update()
Nenue@90 212 end
Nenue@87 213 end
Nenue@87 214
Nenue@87 215 function VeneerOrderHallMixin:Update()
Nick@114 216 self:SetShown(ocb:IsShown())
Nick@114 217 local lastFrame
Nick@114 218 local categoriesWidth = 0
Nick@113 219 local troops = OrderHallCommandBar.TroopSummary
Nick@113 220 if troops then
Nick@113 221 for _, category in ipairs(troops) do
Nick@114 222 category.Count:SetFontObject(VeneerHeaderFont)
Nick@114 223 category.Count:SetTextColor(1,1,1,1)
Nick@113 224 category.Count:ClearAllPoints()
Nick@113 225 category.Count:SetPoint('BOTTOMRIGHT', category.Icon, 'BOTTOMRIGHT', -1, 1)
Nick@114 226
Nick@114 227 category:ClearAllPoints()
Nick@114 228 if lastFrame then
Nick@114 229 lastFrame:SetPoint('TOPRIGHT', category, 'TOPLEFT', 0, 0)
Nick@114 230 end
Nick@114 231 category:SetSize(category.TroopPortraitCover:GetSize())
Nick@114 232
Nick@114 233 lastFrame = category
Nick@114 234 categoriesWidth = categoriesWidth + category:GetWidth()
Nick@114 235 end
Nick@114 236
Nick@114 237 if lastFrame then
Nick@114 238 lastFrame:SetPoint('TOPRIGHT', ocb, 'TOPRIGHT', 0, 0)
Nick@113 239 end
Nick@114 240
Nick@113 241 end
Nick@114 242 self:SetWidth(ocb.ClassIcon:GetWidth() + 15 + ocb.Currency:GetWidth() + ocb.CurrencyIcon:GetWidth() + categoriesWidth)
Nick@114 243 requiresUpdate = nil
Nick@114 244 --print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
Nick@114 245 --print(debugstack(6))
Nenue@98 246 Veneer:DynamicReanchor()
Nenue@87 247 end
Nenue@87 248
Nenue@80 249
Nenue@87 250
Nenue@87 251 do
Nenue@87 252 function WorldStateBlockMixin:ShowPanel()
Nenue@87 253 print('|cFF0088FF'..self:GetName()..':ShowPanel()')
Nenue@87 254 self:SetShown(true)
Nenue@93 255 self:SetAlpha(1)
Nenue@87 256 VeneerWorldState:Show()
Nenue@87 257 end
Nenue@87 258 function WorldStateBlockMixin:HidePanel()
Nenue@87 259 print('|cFF0088FF'..self:GetName()..':HidePanel()')
Nenue@87 260 self:SetShown(false)
Nenue@87 261 VeneerWorldState:Reanchor()
Nenue@87 262 end
Nenue@87 263
Nenue@87 264 function WorldStateBlockMixin:OnSizeChanged ()
Nenue@87 265 local h = self:GetHeight()
Nenue@87 266 if h > VeneerWorldState.maxHeight then
Nenue@87 267 VeneerWorldState.maxHeight = h
Nenue@87 268 VeneerWorldState:SetHeight(h)
Nenue@87 269 print('updating max height:', h)
Nenue@87 270 elseif h < VeneerWorldState.maxHeight then
Nenue@87 271 VeneerWorldState:Reanchor()
Nenue@87 272 end
Nenue@87 273 end
Nenue@87 274 function WorldStateBlockMixin:OnHide ()
Nenue@87 275 print('|cFF0088FF'..self:GetName()..':OnHide()')
Nenue@87 276 VeneerWorldState:Reanchor()
Nenue@87 277 end
Nenue@87 278 function WorldStateBlockMixin:OnShow ()
Nenue@87 279 self.timeLived = 0
Nenue@87 280 print('|cFF0088FF'..self:GetName()..':OnShow()')
Nenue@87 281 VeneerWorldState:Reanchor()
Nenue@87 282 end
Nenue@87 283 function WorldStateBlockMixin:Setup()
Nenue@87 284 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop')
Nenue@88 285 self:Update()
Nenue@87 286 end
Nenue@87 287 function WorldStateBlockMixin:Reset()
Nenue@87 288 print('|cFF0088FF'..self:GetName()..':Reset()')
Nenue@87 289 self.keepOpen = true
Nenue@87 290 self:Setup()
Nenue@87 291 end
Nenue@93 292 end
Nenue@93 293
Nick@113 294