Mercurial > wow > skeletonkey
view SkeletonKey/DynamicTypes.lua @ 16:cdd387d39137
filename refactor
author | Nenue |
---|---|
date | Fri, 29 Jul 2016 21:18:15 -0400 |
parents | SkeletonKey/Cache.lua@32d64e42ec9b |
children | 500f9b2bd9ac |
line wrap: on
line source
-- KrakTool -- DynamicTypes.lua -- Created: 7/28/2016 3:28 PM -- %file-revision% -- Logic related to dynamic handlers local kb, print = LibStub('LibKraken').register(KeyBinder, 'PlayerInfo') local PET_SPECIAL_SUBTEXT = 'Special Ability' local BINDING_TYPE_SPECIALIZATION = 3 local BINDING_TYPE_CHARACTER = 2 local BINDING_TYPE_GLOBAL = 1 local professionMappings = { [5] = 3, [7] = 4, [9] = 5, [10] = 6 } kb.TalentCache = {} kb.ProfessionCache = {} kb.PetCache = {} kb.specInfo = {} kb.UpdateSpecInfo = function() kb.specInfo.id = GetSpecialization() kb.specInfo.globalID, kb.specInfo.name, kb.specInfo.desc, kb.specInfo.texture = GetSpecializationInfo(kb.specInfo.id) kb.loadedProfiles[BINDING_TYPE_CHARACTER][kb.specInfo.id] = kb.InitProfile(kb.loadedProfiles[BINDING_TYPE_CHARACTER][kb.specInfo.id], { specID = kb.specInfo.id}) kb.configHeaders[BINDING_TYPE_SPECIALIZATION] = kb.configTitle[BINDING_TYPE_SPECIALIZATION]:format(kb.specInfo.name) kb.loadedProfiles[BINDING_TYPE_SPECIALIZATION] = kb.loadedProfiles[BINDING_TYPE_CHARACTER][kb.specInfo.id] kb.currentProfile = kb.loadedProfiles[kb.db.bindMode] print('|cFF00FF00bindMode:|r', kb.db.bindMode) kb.profileOrder = {kb.loadedProfiles[BINDING_TYPE_GLOBAL], kb.loadedProfiles[BINDING_TYPE_CHARACTER], kb.loadedProfiles[BINDING_TYPE_SPECIALIZATION]} print('|cFF00FF00current spec:|r', kb.specInfo.id, 'of', GetNumSpecializations()) end kb.UpdateTalentInfo = function() if kb.talentsPushed then return end table.wipe(kb.TalentCache) for row =1, MAX_TALENT_TIERS do for col = 1, NUM_TALENT_COLUMNS do local talentID, talentName, icon, selected, available, spellID = GetTalentInfo(row, col, 1) local talentInfo = kb.TalentCache[spellID] or {} talentInfo.row = 1 talentInfo.col = col talentInfo.name = talentName talentInfo.talentID = talentID talentInfo.selected = selected talentInfo.available = available talentInfo.spellID = spellID kb.TalentCache[spellID] = talentInfo kb.TalentCache[talentName] = talentInfo print('Talent ', row, col, spellID, talentName) end end kb.talentsPushed = true end kb.UpdateProfessionInfo = function() table.wipe(kb.ProfessionCache) local profs = {GetProfessions() } local primaryNum = 0 for i, index in ipairs(profs) do local profName, texture, rank, maxRank, numSpells, spellOffset = GetProfessionInfo(index) print(i, index, profName, numSpells, spellOffset) if not professionMappings[index] then primaryNum = primaryNum + 1 end local profNum = professionMappings[index] or primaryNum kb.ProfessionCache[profNum] = kb.ProfessionCache[i] or {} for j = 1, numSpells do local spellName, _, icon, _, _, _, spellID = GetSpellInfo(spellOffset+j, BOOKTYPE_PROFESSION) local profInfo = { spellName = spellName, spellID = spellID, icon = icon, profOffset = i, profIndex = index, spellOffset = (spellOffset+j), spellNum = j } KeyBinderKey:SetAttribute("*type-profession_"..i .. '_' ..j, "spell") KeyBinderKey:SetAttribute("*spell-profession_"..i .. '_' ..j, spellName) kb.ProfessionCache[i .. '_' .. j] = profInfo kb.ProfessionCache[spellName] = profInfo kb.ProfessionCache[spellID] = profInfo print(' |cFF0088FF['..i..']|r|cFFFF44BB['..spellOffset+i..']|r', spellName, "profession_"..i .. '_' ..j) end end end kb.UpdatePetInfo = function() kb.PetCache.spell = kb.PetCache.spell or {} kb.PetCache.spellslot = kb.PetCache.spellslot or {} kb.PetCache.action = kb.PetCache.action or {} kb.PetCache.special = kb.PetCache.action or {} local hasPetSpells, petType = HasPetSpells() if PetHasSpellbook() then print('PET SPELLBOOK') local i = 1 local specialNum = 0 repeat local spellType, spellID = GetSpellBookItemInfo(i, BOOKTYPE_PET) local spellName, subText = GetSpellBookItemName(i, BOOKTYPE_PET) local isPassive = IsPassiveSpell(i, BOOKTYPE_PET) if not isPassive then if spellName then kb.PetCache.spellslot[spellName] = {i, spellName, subText} print('|cFF00FF88spellslot['..spellName..']|r', '=>', i, subText) if subText == PET_SPECIAL_SUBTEXT then specialNum = specialNum + 1 kb.PetCache.special[spellName] = {i, specialNum, spellID, subText } print('|cFF00FFFFspecial['..spellName..']|r', '=>', i, specialNum, spellID, subText) end if spellID then kb.PetCache.spell[i] = {spellID, spellName, subText} print('|cFF0088FFspell['..i..']|r', '=>', spellID, spellName, subText) end end end i = i + 1 until spellType == nil else print('NO PET SPELLBOOK') table.wipe(kb.PetCache.spell) table.wipe(kb.PetCache.spellslot) end if PetHasActionBar() then print('PET ACTION BAR') for i = 1, 10 do local name, subtext, texture, isToken, isActive = GetPetActionInfo(i) if name then kb.PetCache.action[i] = {name, subtext, texture, isToken, isActive } end print('|cFFFFFF00action['..i..']|r', name, subtext, texture) end else print('NO PET ACTION BAR') table.wipe(kb.PetCache.action) end kb.UpdateCacheButtons(kb.petFrames) end kb.SystemBinds = {} kb.UpdateSystemBinds = function() table.wipe(kb.SystemBinds) local n = GetNumBindings() for i=1, n do local command, key1, key2 = GetBinding(i) if key1 then kb.SystemBinds[key1] = command end if key2 then kb.SystemBinds[key2] = command end end end do local garbage = {} kb.UpdateCacheButtons = function(pending) for i, button in ipairs(pending) do if button.isDynamic then print('flushing button', button:GetID()) kb.UpdateSlot(button, true) end end end end kb.RemoveCacheButton = function(pending, button) local found for index, frame in ipairs(pending) do if button == frame then found = index break end end if found then print('|cFFFF4400pruning', button:GetName(), 'from update queue') tremove(pending, found) end end