Mercurial > wow > turok
view Turok/Modules/Timer/Status.lua @ 6:a9b8b0866ece
clear out log jam
author | Nenue |
---|---|
date | Sun, 21 Feb 2016 08:32:53 -0500 |
parents | |
children | 9400a0ff8540 |
line wrap: on
line source
local _G, T = _G, Turok local mod = T.modules.TimerControl local P = mod.prototype local GetInventoryItemID, GetItemInfo, GetInventoryItemTexture = GetInventoryItemID, GetItemInfo, GetInventoryItemTexture local GetSpellDescription, GetSpellInfo, GetSpellCharges = GetSpellDescription, GetSpellInfo, GetSpellCharges local GetTalentRowSelectionInfo = GetTalentRowSelectionInfo local tinsert, type, tonumber, pairs, ipairs, unpack = tinsert, type, tonumber, pairs, ipairs, unpack local UnitGUID = UnitGUID local GetTalentInfo, GetTalentInfoByID, GetItemSpell, PaperDoll_IsEquippedSlot = GetTalentInfo, GetTalentInfoByID, GetItemSpell, PaperDoll_IsEquippedSlot local print = function(...) print('Timer', ...) end print('Peep!', ...) --@debug@ local DEBUG = true --@end-debug@ local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool local print = function(...) if not DEBUG then return end if _G.Devian and _G.DevianDB.workspace ~= 1 then _G.print('Timer', ...) end end ------------------------------------------ --- Parameter Prototypes local Timer_GetPrintHandler = function(self) return self.trace and function(...) print(...) _G.print('TimerFocus', ...) end or print end local Timer_UpdateIndex = function(self, key, value) local print = Timer_GetPrintHandler(self) -- sfk[value] = frame index key-value handle -- mfkv = key-value frame index -- mfkv[sfk[value]] = *frame if self.frames[key] then local sfk = self.frames[key] -- for each unique value for oldValue, index in pairs(sfk) do local mfkv = mod.frames[key][oldValue] -- for each offset after index for i = index+1, #mfkv do mfkv[i-1] = mfkv[i] -- slide it down end sfk[oldValue] = nil print(cText(' *= self.frames')..'['..cKey(key)..']['..cNum(value)..'] =', cNum(self.frames[key][value])) print(cText(' *= mod.frames')..'['..cKey(key)..']['..cNum(value)..']['..cNum(index)..'] =', cNum(self:GetName())) end else self.frames[key] = {} end if value then local mfkv = mod.frames[key][value] local sfk = self.frames[key] mfkv[#mfkv+1] = self sfk[value] = #mfkv print(' *= self.frames['..cKey(key)..']['..cNum(value)..'] = ', sfk[value]) end end --- spellID do local spellID = P.status.spellID spellID.Init = function(self, spellID) local print = Timer_GetPrintHandler(self) if type(spellID) == 'table' then spellID = spellID[T.specPage] end -- May have changed if invoked through a slot assignment if spellID ~= self.spellID then self.spellID = spellID self.charges, self.maxCharges, self.chargeStart, self.chargeDuration = GetSpellCharges(spellID) self.spellDescription = GetSpellDescription(spellID) self.spellName, self.spellRank, self.spellIcon, self.castingTime, self.minRange, self.maxRange = GetSpellInfo(spellID) --@debug@ print(' ', cWord('spellID ='), cKey(self.spellID), cNum(self.spellName), cText(self.spellDescription and '<desc>' or '<empty>'))--@end-debug@ Timer_UpdateIndex(self, 'spellID', spellID) end end end --- spellName do local spellName = P.status.spellName spellName.Init = function(self, spellName) local print = Timer_GetPrintHandler(self) -- attempt to get spell info local exists, _, _, _, _, _, spellID = GetSpellInfo(spellName) if exists then local charges, maxCharges, start, duration = GetSpellCharges(spellID or spellName) Timer_UpdateIndex(self, 'spellName', nil) print(' ', cKey("spellID"), '=', spellID) P.status.spellID.Init(self, spellID) else print(' ', cPink("spellID"), '=', 'not sure') Timer_UpdateIndex(self, 'spellID', nil) Timer_UpdateIndex(self, 'spellName', spellName) end end end --- talentID do local talentID = P.status.talentID local GetTalentInfoByID = GetTalentInfoByID talentID.type = 'status' talentID.Init = function(self, talentID) local print = Timer_GetPrintHandler(self) self.talentID, self.spellName, self.spellIcon, self.talentSelected = GetTalentInfoByID(talentID, T.specGroup) if self.talentSelected then print(' ', cKey("spellName"), '=', cWord(self.spellName)) P.status.spellName.Init(self, self.spellName) else self.disable = true self.debug_info ('Talent not selected.') end print(' ', cKey('talentID ('..cNum(self.talentID)..', '..cNum(T.specGroup)..'):'), self.spellName, self.talentSelected ) Timer_UpdateIndex(self, 'talentID', talentID) end end --- talentRow - use whatever is in that row as data do local talentRow = P.status.talentRow talentRow.Init = function(self, row) local print = Timer_GetPrintHandler(self) self.talentRow = row local noSelect, talentID = GetTalentRowSelectionInfo(row) if noSelect then self.disable = true self.debug_info("No talent selected in target row.") else P.status.talentID.Init(self, talentID) end print(' ', cKey('talentRow ('.. cNum(row).. ') ='), talentID or 'none') Timer_UpdateIndex(self, 'talentRow', row) end end --- talentOffset do local talentOffset = P.status.talentOffset talentOffset.Init = function(self, coords) local print = Timer_GetPrintHandler(self) local tier, column = unpack(coords) local selected, usable, _ self.talentID, self.spellName, self.spellIcon, selected, usable = GetTalentInfo(tier, column, T.specGroup) print(' ', cKey('talentOffset'), '=', cNum(tier), cNum(column), self.spellName, selected, usable) if not (selected and usable) then self.disable = true self.debug_info ((not usable) and 'Unavailable at current level.' or 'Talent not selected.') end Timer_UpdateIndex(self, 'talentID', self.talentID) end end --- specPage do local specPage = P.status.specPage specPage.type = 'status' specPage.Init = function(self, specPage) local print = Timer_GetPrintHandler(self) local match if tonumber(specPage) then match = specPage == T.specPage elseif type(specPage) == 'table' then for _, pageID in ipairs(specPage) do if T.specPage == pageID then specPage = pageID match = true break end end else self.disable = true self.debug_info ('Bad value for', '('..cWord(self.timerName)..').'..cKey('specPage')) Timer_UpdateIndex(self,'specPage', nil) end if match then print(' ', cKey('specPage'), '=', '['..cNum(specPage)..']') Timer_UpdateIndex(self,'specPage', specPage) else print(' ', cKey('specPage'), '~=', '['..cNum(specPage)..']') self.disable = true self.debug_info('Not active spec.') end end end --- itemID do local itemID = P.status.itemID itemID.type = 'status' itemID.Init = function(self, item) local print = Timer_GetPrintHandler(self) if not self.dvars.inventoryID then self.itemID = item or self.dvars.itemID self.itemType = self.dvars.itemType else self.itemID = item end --@debug@ --name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID) or GetItemInfo("itemName") or GetItemInfo("itemLink") if not self.itemID then self.disable = true self.debug_info ('bad itemID value') end self.spellName = GetItemSpell(self.itemID) if not self.spellName then self.disable = true self.debug_info('no spell detected') else if not (self.frames.spellName and self.frames.spellName[self.spellName]) then if not self.frames.spellName then self.frames.spellName = {} end Timer_UpdateIndex(self, 'spellName', self.spellName) end end print(' ', cKey('itemID'), cNum(self.itemID), self.isEquipped)--@end-debug@ end end do local inventoryID = P.status.inventoryID inventoryID.type = 'status' inventoryID.Init = function(self, slot) local print = Timer_GetPrintHandler(self) self.inventoryID = slot self.itemID = GetInventoryItemID(self.dvars.unit, slot) local name = GetItemInfo(self.itemID) if not PaperDoll_IsEquippedSlot(slot) then self.disable = true self.debug_info('slot un-equipped') return end P.status.itemID.Init(self, self.itemID) self.spellIcon = GetInventoryItemTexture(self.dvars.unit, slot) print(' ', cKey('inventoryID'), '=', '{'..cNum(self.inventoryID).. ' -> '.. cNum(self.itemID or 'no-equip').. '}') end end --- unit local unit = P.status.unit unit.type = 'status' unit.Init = function(self, unit) local print = Timer_GetPrintHandler(self) self.unitGUID = UnitGUID(unit) self.unit = unit print(' ', cWord('unitGUID'), '=', cText(self.unitGUID)) tinsert(mod.frames.unit[unit], self) self.frames.unit = #mod.frames.unit[unit] end