annotate ObjectiveTracker/ObjectiveWidgets.lua @ 37:e84d645c8ab8

- revised the tracker update function to build its complete data list up front and use the values as points of comparison for determining possible out of place blocks, which will be iterated over afterward to remove what wasn't re-used - also entailed revising the exact role of global event handlers and function hooks, limiting their directions of communication so one doesn't end up calling the other multiple or inifinity times - schema handling polish
author Nenue
date Mon, 18 Apr 2016 07:56:23 -0400
parents 66b927b46776
children
rev   line source
Nenue@13 1 local B = select(2,...).frame
Nenue@24 2 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@13 3 local print = B.print('WidgetFactory')
Nenue@24 4 local _G, UIParent = _G, UIParent
Nenue@13 5 local GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown = GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown
Nenue@13 6 local CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll = CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll
Nenue@24 7 local tremove, tContains, pairs, ipairs, setmetatable, floor = tremove, tContains, pairs, ipairs, setmetatable, floor
Nenue@24 8 local SetItemButtonTexture, SetItemButtonCount = SetItemButtonTexture, SetItemButtonCount
Nenue@24 9 local ToggleWorldMap, GetTrackedAchievements, GetTasksTable = ToggleWorldMap, GetTrackedAchievements, GetTasksTable
Nenue@24 10 -- GLOBALS: Veneer_QuestObjectiveItem_UpdateCooldown, Veneer_QuestObjectiveItem_OnUpdate
Nenue@14 11 --- frame refs
Nenue@14 12 local Wrapper = _G.VeneerObjectiveWrapper
Nenue@14 13 local Scroller = Wrapper.scrollArea
Nenue@14 14 local CloseButton = Wrapper.CloseButton
Nenue@14 15 local QuestMapButton = Wrapper.QuestMapButton
Nenue@14 16 local Scroll = _G.VeneerObjectiveScroll
Nenue@24 17 local usedButtons = T.Quest.itemButtons
Nenue@24 18 local freeButtons = T.Quest.freeButtons
Nenue@14 19
Nenue@24 20 T.buttons = {
Nenue@14 21 CloseButton = {
Nenue@14 22 closedSwatch = {
Nenue@14 23 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 24 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 25 0, 0.5, 0.5, 1,
Nenue@14 26 0.5, 1, 0.5, 1,
Nenue@14 27 },
Nenue@14 28 openSwatch = {
Nenue@14 29 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 30 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 31 0.5, 1, 0.5, 1,
Nenue@14 32 0, 0.5, 0.5, 1,
Nenue@14 33 },
Nenue@14 34 parent = 'VeneerObjectiveWrapper'
Nenue@14 35 },
Nenue@14 36 QuestMapButton = {
Nenue@14 37 closedSwatch = {
Nenue@14 38 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 39 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 40 0, 1, 0.5, 1,
Nenue@14 41 0, 1, 0, 0.5,
Nenue@14 42 },
Nenue@14 43 openSwatch = {
Nenue@14 44 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 45 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 46 0, 1, 0, 0.5,
Nenue@14 47 0, 1, 0.5, 1,
Nenue@14 48 }
Nenue@14 49 }
Nenue@14 50 }
Nenue@14 51
Nenue@14 52 local Scroller_OnShow = function()
Nenue@14 53 Wrapper.watchMoneyReasons = 0;
Nenue@24 54 --T:Update()
Nenue@24 55 --T:OnInitialize()
Nenue@14 56 for i, region in ipairs(Wrapper.headerComplex) do
Nenue@14 57 region:Show()
Nenue@14 58 end
Nenue@14 59 end
Nenue@14 60
Nenue@14 61 local Scroller_OnHide = function()
Nenue@14 62 local self = Wrapper
Nenue@14 63 Wrapper:UnregisterAllEvents()
Nenue@14 64 Wrapper:SetScript('OnEvent', nil)
Nenue@14 65 for i, region in ipairs(Wrapper.headerComplex) do
Nenue@14 66 region:Hide()
Nenue@14 67 end
Nenue@14 68 end
Nenue@14 69
Nenue@14 70 local Scroller_OnMouseWheel = function(self, delta)
Nenue@14 71 local r = Scroll:GetHeight() - Scroller:GetHeight()
Nenue@14 72 local s = B.Conf.ObjectiveScroll - delta * floor(r/5+.5)
Nenue@14 73 local from = self:GetVerticalScroll()
Nenue@21 74 print('|cFF00FF00OnMouseWheel', 'scroll =', s)
Nenue@14 75 if s >= r then
Nenue@14 76 s = r
Nenue@14 77 elseif s < 1 then
Nenue@14 78 s = 0
Nenue@14 79 end
Nenue@14 80 self:SetVerticalScroll(s)
Nenue@14 81 B.Conf.ObjectiveScroll = s
Nenue@14 82 print('|cFF00FF00OnMouseWheel', 'from = ', from, 'scroll =', s, ' range =', r, 'current =', self:GetVerticalScroll())
Nenue@14 83
Nenue@24 84 T.UpdateActionButtons('SCROLLING')
Nenue@14 85 end
Nenue@14 86
Nenue@14 87 local UpdatePanelButton = function (self, state)
Nenue@24 88 state = state or true
Nenue@24 89 local swatch = (state == true) and self.openSwatch or self.closedSwatch
Nenue@24 90 print((state ~= true) and 'closedSwatch' or 'openSwatch')
Nenue@14 91 self:SetNormalTexture(swatch[1])
Nenue@14 92 self:SetPushedTexture(swatch[2])
Nenue@14 93 if #swatch >= 6 then
Nenue@14 94 self:GetNormalTexture():SetTexCoord(swatch[3], swatch[4], swatch[5], swatch[6])
Nenue@14 95 end
Nenue@14 96 if #swatch == 10 then
Nenue@14 97 self:GetPushedTexture():SetTexCoord(swatch[7], swatch[8], swatch[9], swatch[10])
Nenue@14 98 end
Nenue@14 99
Nenue@14 100 end
Nenue@14 101
Nenue@14 102 local OnClick = {}
Nenue@14 103 OnClick.CloseButton = function(self)
Nenue@24 104 T:SetEnabled()
Nenue@24 105 UpdatePanelButton(self, T.Conf.enabled)
Nenue@14 106 end
Nenue@14 107
Nenue@14 108 OnClick.QuestMapButton = function()
Nenue@14 109 ToggleWorldMap()
Nenue@14 110 end
Nenue@14 111
Nenue@22 112
Nenue@24 113 T.InitializeWidgets = function()
Nenue@24 114 local panelButtons = T.buttons
Nenue@14 115 --- tracker scroll
Nenue@14 116 Scroller:SetScript('OnMouseWheel', Scroller_OnMouseWheel)
Nenue@14 117 Scroller:SetScript('OnShow', Scroller_OnShow)
Nenue@14 118 Scroller:SetScript('OnHide', Scroller_OnHide)
Nenue@14 119 for name, swatch in pairs(panelButtons) do
Nenue@14 120 local source = swatch and swatch or panelButtons.CloseButton
Nenue@14 121 local button = Wrapper[name]
Nenue@14 122 button.parent = swatch.parent
Nenue@14 123 button.openSwatch = source.openSwatch
Nenue@14 124 button.closedSwatch = source.closedSwatch
Nenue@14 125 if OnClick[name] then
Nenue@14 126 button:SetScript('OnClick', OnClick[name])
Nenue@14 127 end
Nenue@24 128 UpdatePanelButton(button, T.Conf.enabled)
Nenue@14 129 end
Nenue@14 130 end
Nenue@14 131
Nenue@13 132 ----------------------------------------------------------------------------------------
Nenue@24 133 --- modified version of the itemButton initializer used by Barjack's 'QuestKing 2' addon,
Nenue@24 134 --- url: http://mods.curse.com/addons/wow/questking
Nenue@13 135 ----------------------------------------------------------------------------------------
Nenue@24 136 T.SetItemButton = function(block, info)
Nenue@13 137 local itemInfo = info.specialItem
Nenue@13 138 if not itemInfo then
Nenue@13 139 return
Nenue@13 140 end
Nenue@13 141
Nenue@13 142 local itemButton
Nenue@13 143 if not info.itemButton then
Nenue@13 144 if #freeButtons >= 1 then
Nenue@13 145 print(' |cFF00FFFFfound a free button')
Nenue@13 146 itemButton = freeButtons[#freeButtons]
Nenue@13 147 freeButtons[#freeButtons] = nil
Nenue@13 148 if itemButton.block then
Nenue@13 149 itemButton.block.itemButton = nil
Nenue@13 150 itemButton.block = nil
Nenue@13 151 end
Nenue@13 152 else
Nenue@24 153 local buttonIndex = T.Quest.numButtons + #freeButtons + 1
Nenue@13 154 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
Nenue@13 155 itemButton.buttonIndex = buttonIndex
Nenue@13 156 itemButton:SetSize(36, 36)
Nenue@13 157 itemButton:GetNormalTexture():SetSize(36 * (5/3), 36 * (5/3))
Nenue@13 158 print(' |cFFFF4400starting new button', itemButton:GetName())
Nenue@13 159 end
Nenue@24 160 T.Quest.numButtons = T.Quest.numButtons + 1
Nenue@13 161 else
Nenue@13 162 itemButton = info.itemButton
Nenue@13 163 print(' |cFF00FF00found assigned button', itemButton:GetName())
Nenue@13 164
Nenue@13 165 end
Nenue@13 166 -- set values
Nenue@13 167
Nenue@13 168 info.itemButton = itemButton
Nenue@13 169 usedButtons[info.questID] = itemButton
Nenue@13 170 print(' |cFF8800FFassigning|r', itemButton:GetName(), 'to quest|cFF00FF00', info.questID, '|rat|cFFFFFF00', block:GetName(),'|r')
Nenue@13 171
Nenue@13 172 for k,v in pairs(usedButtons) do
Nenue@13 173 print('|cFFFF44DD'..k..'|r', v:GetName())
Nenue@13 174 end
Nenue@13 175
Nenue@13 176 itemButton:SetAttribute("type", "item")
Nenue@13 177 itemButton:SetAttribute("item", itemInfo.link)
Nenue@13 178
Nenue@13 179 itemButton.questID = info.questID
Nenue@13 180 itemButton.questLogIndex = info.questLogIndex
Nenue@13 181 itemButton.charges = itemInfo.charges
Nenue@13 182 itemButton.rangeTimer = -1
Nenue@13 183 itemButton.block = block
Nenue@13 184
Nenue@13 185 SetItemButtonTexture(itemButton, itemInfo.icon)
Nenue@13 186 SetItemButtonCount(itemButton, itemInfo.charges)
Nenue@13 187 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
Nenue@13 188
Nenue@13 189 return itemButton
Nenue@13 190 end
Nenue@13 191 --- Clear an itemButton from the given block
Nenue@24 192 T.FreeItemButtons = function(block)
Nenue@13 193
Nenue@13 194 if block.itemButton then
Nenue@13 195 local itemButton = block.itemButton
Nenue@13 196 if itemButton.questID ~= block.info.questID then
Nenue@13 197 block.itemButton = nil
Nenue@24 198 itemButton.block = T.Quest.InfoBlock[itemButton.questID]
Nenue@13 199 else
Nenue@13 200 itemButton.block = nil
Nenue@13 201 itemButton:Hide()
Nenue@13 202
Nenue@13 203 usedButtons[itemButton.questID] = nil
Nenue@13 204 freeButtons[#freeButtons + 1] = itemButton
Nenue@24 205 T.Quest.numButtons = T.Quest.numButtons - 1
Nenue@13 206 print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
Nenue@13 207 end
Nenue@13 208 end
Nenue@13 209 end
Nenue@13 210
Nenue@13 211 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
Nenue@13 212 -- Handle range indicator
Nenue@13 213 local rangeTimer = self.rangeTimer
Nenue@13 214 if (rangeTimer) then
Nenue@13 215 rangeTimer = rangeTimer - elapsed
Nenue@13 216 if (rangeTimer <= 0) then
Nenue@13 217 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
Nenue@13 218 if ((not charges) or (charges ~= self.charges)) then
Nenue@24 219 T:Update()
Nenue@13 220 return
Nenue@13 221 end
Nenue@13 222
Nenue@13 223 local count = self.HotKey
Nenue@13 224 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
Nenue@13 225 if (valid == 0) then
Nenue@13 226 count:Show()
Nenue@13 227 count:SetVertexColor(1.0, 0.1, 0.1)
Nenue@13 228 elseif (valid == 1) then
Nenue@13 229 count:Show()
Nenue@13 230 count:SetVertexColor(0.6, 0.6, 0.6)
Nenue@13 231 else
Nenue@13 232 count:Hide()
Nenue@13 233 end
Nenue@13 234 rangeTimer = TOOLTIP_UPDATE_TIME
Nenue@13 235 end
Nenue@13 236
Nenue@13 237 self.rangeTimer = rangeTimer
Nenue@13 238 end
Nenue@13 239 end
Nenue@13 240
Nenue@13 241 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
Nenue@13 242 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
Nenue@13 243 if (start) then
Nenue@13 244 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
Nenue@13 245 if (duration > 0 and enable == 0) then
Nenue@13 246 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
Nenue@13 247 else
Nenue@13 248 SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
Nenue@13 249 end
Nenue@13 250 end
Nenue@13 251 end
Nenue@13 252
Nenue@13 253 -----------------------------------------
Nenue@13 254 -- Criteria frames
Nenue@13 255
Nenue@13 256 --[[
Nenue@13 257 text = description,
Nenue@13 258 type = type,
Nenue@13 259 finished = completed,
Nenue@13 260 quantity = quantity,
Nenue@13 261 requiredQuantity = requiredQuantity,
Nenue@13 262 characterName = characterName,
Nenue@13 263 flags = flags,
Nenue@13 264 assetID = assetID,
Nenue@13 265 quantityString = quantityString,
Nenue@13 266 criteriaID = criteriaID,
Nenue@13 267 ]]
Nenue@13 268 local newWidgetID = 0
Nenue@24 269 T.WidgetRegistry = {}
Nenue@24 270 local wr = T.WidgetRegistry
Nenue@13 271
Nenue@13 272 --- Get a usable widget for the given achievement criteria set.
Nenue@13 273 -- Returns a frame object with dimensioning parameters needed to size the receiving tracker block
Nenue@24 274 T.SetWidget = function(line, data, objectiveType, objectiveKey)
Nenue@13 275 local print = B.print('ObjectiveWidgets')
Nenue@14 276 local widgetType = objectiveType
Nenue@13 277 local widget
Nenue@14 278 if wr[widgetType] and wr[widgetType].used[objectiveKey] then
Nenue@14 279 widget = wr[widgetType].used[objectiveKey]
Nenue@14 280 print('|cFF00FF00Updating ('..objectiveKey..')', widget)
Nenue@13 281 elseif not wr[widgetType] or #wr[widgetType].free == 0 then
Nenue@13 282 widget = CreateFrame('Frame', 'VeneerObjective' .. widgetType .. (wr[widgetType] and (wr[widgetType].lastn+1) or (1)), VeneerObjectiveScroll, 'VeneerObjectiveCriteria' .. widgetType)
Nenue@13 283
Nenue@13 284 print('|cFFFF0088Creating `'..widget:GetName()..'` id', wr[widgetType].lastn)
Nenue@13 285 else
Nenue@13 286 widget = tremove(wr[widgetType].free)
Nenue@13 287 print('|cFFFFFF00Acquiring released widget', widget:GetName())
Nenue@13 288 end
Nenue@13 289
Nenue@14 290
Nenue@14 291 wr[widgetType].used[objectiveKey] = widget
Nenue@14 292 widget.line = line
Nenue@21 293 widget.objective = data
Nenue@14 294 widget.key = objectiveKey
Nenue@24 295 T.InitializeWidget(widget)
Nenue@13 296 return widget
Nenue@13 297 end
Nenue@13 298
Nenue@13 299 --- WidgetTemplate 'OnLoad'
Nenue@24 300 T.RegisterWidget = function(frame)
Nenue@13 301 local print = B.print('ObjectiveWidgets')
Nenue@13 302 local widgetType = frame.widgetType
Nenue@13 303 if not wr[frame.widgetType] then
Nenue@13 304 print('|cFFFF4400[[WidgetTemplate]]|r', widgetType)
Nenue@13 305 wr[widgetType] = { lastn = 1, free = {}, used = {}, usedIndex = {}, freeIndex = {} }
Nenue@13 306 else
Nenue@13 307 print('|cFF0088FF+ [[WidgetTemplate]]r', widgetType, wr[widgetType].lastn)
Nenue@13 308 wr[widgetType].lastn = wr[widgetType].lastn + 1
Nenue@13 309 end
Nenue@13 310 end
Nenue@13 311
Nenue@13 312 --- WidgetTemplate 'OnShow'
Nenue@24 313 T.InitializeWidget = setmetatable({}, {
Nenue@13 314 __call = function(t, frame)
Nenue@13 315 -- todo: config pull
Nenue@13 316
Nenue@24 317 frame:SetWidth(T.Conf.Wrapper.Width - T.Conf.Style.Format.status.Indent * 2)
Nenue@24 318 frame:SetScript('OnEvent', T.UpdateWidget[frame.widgetType])
Nenue@13 319 frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE')
Nenue@13 320 frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED')
Nenue@13 321 frame:RegisterEvent('CRITERIA_UPDATE')
Nenue@13 322 frame:RegisterEvent('CRITERIA_COMPLETE')
Nenue@13 323 frame:RegisterEvent('CRITERIA_EARNED')
Nenue@14 324 t[frame.widgetType](frame)
Nenue@24 325 T.UpdateWidget[frame.widgetType](frame)
Nenue@13 326 end,
Nenue@13 327 })
Nenue@13 328
Nenue@13 329 --- WidgetTemplate 'OnEvent'
Nenue@24 330 T.UpdateWidget = setmetatable({}, {
Nenue@13 331 __call = function(t, frame)
Nenue@13 332 if not frame.widgetType then
Nenue@13 333 error('Invalid widget template, needs .widgetType')
Nenue@13 334 return
Nenue@13 335 end
Nenue@13 336
Nenue@13 337 return t[frame.widgetType](frame)
Nenue@13 338 end
Nenue@13 339 })
Nenue@13 340
Nenue@13 341 --- WidgetTemplate 'OnHide'
Nenue@24 342 T.ReleaseWidget = function(frame)
Nenue@16 343 --[[
Nenue@13 344 local print = B.print('ObjectiveWidgets')
Nenue@13 345 local reg = wr[frame.widgetType]
Nenue@14 346 if reg and reg.used[frame.key] then
Nenue@14 347 reg.used[frame.key] = nil
Nenue@14 348 frame.line = nil
Nenue@13 349 frame.info = nil
Nenue@13 350 frame:UnregisterAllEvents()
Nenue@13 351 tinsert(reg.free, frame)
Nenue@13 352 print('|cFFBBBBBBreleased from service', frame:GetName())
Nenue@13 353 end
Nenue@16 354 ]]
Nenue@13 355 end
Nenue@13 356
Nenue@13 357 --- RemoveTrackedAchievement post-hook
Nenue@24 358 T.CleanWidgets = function()
Nenue@13 359 local print = B.print('ObjectiveWidgets')
Nenue@13 360 local tracked = {GetTrackedAchievements() }
Nenue@14 361 local tasks = GetTasksTable()
Nenue@24 362 for type, reg in pairs(T.WidgetRegistry) do
Nenue@13 363 print('collecting', type)
Nenue@14 364 for key, frame in pairs(reg.used) do
Nenue@21 365 if frame.objective.cheevID then
Nenue@21 366 local id = frame.objective.cheevID
Nenue@13 367
Nenue@14 368 if id and not tContains(tracked, id) then
Nenue@13 369
Nenue@14 370 print(' untracked achievement', id, 'associated with', key, frame:GetName())
Nenue@14 371 frame:Hide()
Nenue@14 372 end
Nenue@21 373 elseif frame.objective.questID then
Nenue@14 374 -- do something for quest task
Nenue@13 375 end
Nenue@13 376 end
Nenue@13 377 end
Nenue@13 378 end
Nenue@13 379
Nenue@13 380
Nenue@14 381
Nenue@24 382 T.defaults.WidgetStyle = {
Nenue@21 383
Nenue@13 384 }
Nenue@21 385
Nenue@21 386 local progressHeight = 16
Nenue@22 387 local progressBorder = 1
Nenue@21 388 local progressIndent = 3
Nenue@21 389 local progressFont = _G.VeneerCriteriaFontNormal
Nenue@21 390
Nenue@21 391
Nenue@24 392 T.InitializeWidget.ProgressBar = function(self)
Nenue@24 393 local c = T.Conf.Wrapper
Nenue@21 394 self.height = progressHeight + c.TextSpacing
Nenue@21 395 self.width = c.Width - c.TextSpacing
Nenue@21 396 self.indent = progressIndent
Nenue@21 397
Nenue@21 398 self:SetHeight(progressHeight)
Nenue@21 399 self.bg:SetHeight(progressHeight)
Nenue@21 400 self.bg:SetWidth(self.width)
Nenue@13 401 self.fg:ClearAllPoints()
Nenue@22 402 self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', progressBorder, progressBorder)
Nenue@22 403 self.fg:SetHeight(progressHeight - progressBorder * 2)
Nenue@21 404 self.status:SetFontObject(progressFont)
Nenue@21 405 self.status:SetText(self.objective.quantityString)
Nenue@13 406 end
Nenue@13 407
Nenue@24 408 T.UpdateWidget.ProgressBar = function (self)
Nenue@21 409 local quantity, requiredQuantity = self.objective.value, self.objective.maxValue
Nenue@14 410 print('update vals:')
Nenue@14 411 for k,v in pairs(self.line) do
Nenue@14 412 print(k, v)
Nenue@14 413 end
Nenue@13 414
Nenue@14 415 if self.line.format then
Nenue@21 416 self.status:SetFormattedText(self.line.format, quantity, requiredQuantity)
Nenue@14 417 end
Nenue@14 418
Nenue@21 419 local progress = (quantity / requiredQuantity)
Nenue@21 420 if progress >= 1 then
Nenue@21 421 self.fg:Show()
Nenue@22 422 self.fg:SetWidth(self.width - progressBorder * 2)
Nenue@21 423 elseif progress > 0 then
Nenue@21 424 self.fg:Show()
Nenue@21 425 print('color:', 1-progress*2 , progress*2 - 1,0,1)
Nenue@22 426 print('width:', (self.width -progressBorder * 2) * progress)
Nenue@21 427 self.fg:SetTexture(1-progress*2 , progress*2,0,1)
Nenue@22 428 self.fg:SetWidth((self.width -progressBorder * 2) * progress)
Nenue@21 429 else
Nenue@15 430 self.fg:Hide()
Nenue@13 431 end
Nenue@13 432 end
Nenue@13 433
Nenue@13 434
Nenue@24 435 T.InitializeWidget.Hidden = function (self)
Nenue@13 436 self.height = 0
Nenue@13 437 end
Nenue@24 438 T.UpdateWidget.Hidden = function (self)
Nenue@13 439 self.height= 0
Nenue@13 440 end