Nenue@6: --- ${PACKAGE_NAME} Nenue@6: -- @file-author@ Nenue@6: -- @project-revision@ @project-hash@ Nenue@6: -- @file-revision@ @file-hash@ Nenue@6: -- Created: 12/28/2015 7:40 AM Nenue@6: -- Nenue@6: local _, Tk = ... Nenue@6: local T = Tk.Addon Nenue@6: local mod = T:NewModule("TimerControl", "AceTimer-3.0") Nenue@6: local pairs, ipairs, rawset, getmetatable, setmetatable, type, tostring, tinsert = pairs, ipairs, rawset, getmetatable, setmetatable, type, tostring, tinsert Nenue@6: local cWord, cNum, cText, cKey = cWord, cNum, cText, cKey Nenue@9: local print = function(...) Nenue@9: if not DEBUG then return end Nenue@9: if _G.Devian and _G.DevianDB.workspace ~= 1 then Nenue@9: _G.print('Timer', ...) Nenue@9: end Nenue@9: end Nenue@6: local index_mt = { Nenue@6: __newindex = function(t,k,v) Nenue@6: rawset(t,k,v) Nenue@6: if type(v) == 'table' then Nenue@6: print('new table', cKey(k)) Nenue@6: setmetatable(v, getmetatable(t)) Nenue@6: else Nenue@6: print('new index', cText(k)) Nenue@6: end Nenue@6: end Nenue@6: } Nenue@6: mod.index = {} Nenue@6: mod.index.name = setmetatable({}, index_mt) Nenue@6: mod.index.global = setmetatable({}, index_mt) Nenue@6: mod.index.preset = {} Nenue@6: -- dummies Nenue@6: mod.prototype = { Nenue@6: status = { Nenue@6: spellID = {}, Nenue@6: spellName = {}, Nenue@6: talentID = {}, Nenue@6: talentRow = {}, Nenue@6: talentOffset = {}, Nenue@6: itemID = {}, Nenue@6: inventoryID = {}, Nenue@6: specPage = {}, Nenue@6: specID = {}, Nenue@6: unit = {}, Nenue@6: }, Nenue@6: trigger = { Nenue@6: aura = {}, Nenue@6: cooldown = {}, Nenue@6: complex = {}, Nenue@6: }, Nenue@6: display = { Nenue@6: icon = {}, Nenue@6: progressbar = {}, Nenue@6: }, Nenue@6: } Nenue@6: Nenue@6: Turok.defaults.spirit = { Nenue@6: global = { Nenue@6: alpha = 1, Nenue@6: alpha_ooc = 0.5, Nenue@6: Nenue@6: sound_active = '[[Interface\Addons\Turok\Media\sound\link.ogg]]', Nenue@6: sound_passive = [[Interface\Addons\Turok\Media\sound\Heart.ogg]], Nenue@6: sound_hidden = [[Interface\Addons\Turok\Media\sound\Electro_-S_Bainbr-7955_hifi.mp3]], Nenue@6: Nenue@6: strata = 'LOW', Nenue@6: anchor = 'CENTER', Nenue@6: parent = 'UIParent', Nenue@6: anchorTo = 'CENTER', Nenue@6: width = 100, Nenue@6: height = 100, Nenue@6: x = 0, Nenue@6: y = 100, Nenue@6: alpha = 1, Nenue@6: alpha_ooc = 0.3, Nenue@6: inverse = false, Nenue@6: persist = false, Nenue@6: desaturated = false, Nenue@6: Nenue@6: icon = {}, Nenue@6: Nenue@6: passive = { Nenue@6: icon = {} Nenue@6: }, Nenue@6: active = { Nenue@6: inco = {} Nenue@6: }, Nenue@6: }, Nenue@6: Nenue@6: font = [[Interface\Addons\Turok\Media\font\ArchivoNarrow-Regular.ttf]], Nenue@6: lefttext = { Nenue@6: size = 14, Nenue@6: inset = -2, Nenue@6: point = 'LEFT', Nenue@6: outline = 'OUTLINE', Nenue@6: format = '%n %pd', Nenue@6: text_color = {1, 1, 1, 1}, Nenue@6: }, Nenue@6: containers = { Nenue@6: }, Nenue@6: timers = {}, Nenue@6: } Nenue@6: Nenue@6: local tdb = Turok.defaults.spirit.timers Nenue@6: Nenue@6: mod.GetInherited = function(dvars, merge, inherited) Nenue@6: if not inherited then Nenue@6: inherited = {} Nenue@6: end Nenue@6: inherited[merge] = merge Nenue@6: T.Config_Merge(dvars, merge) Nenue@6: Nenue@6: if merge.inherits then Nenue@6: local t = mod.index.name[merge.inherits] Nenue@6: if t and not inherited[t] then Nenue@6: mod.GetInherited(dvars, t, inherited) Nenue@6: end Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: local GetClassInfo, GetNumClasses, GetNumSpecializationsForClassID, GetSpecializationInfoForClassID = GetClassInfo, GetNumClasses, GetNumSpecializationsForClassID, GetSpecializationInfoForClassID Nenue@6: mod.GetIndex = function() Nenue@6: print(cWord('**** Index Init')) Nenue@6: Nenue@6: local index = mod.index Nenue@6: local globalIndex = index.global Nenue@6: local nameIndex = index.name Nenue@6: local tdb = TurokData.spirit.timers Nenue@6: local classID = {} Nenue@6: local className = {} Nenue@6: local classSpecID = {} Nenue@6: local specIDClass = {} Nenue@6: Nenue@6: for id=1, GetNumClasses() do Nenue@6: local _, name = GetClassInfo(id) Nenue@6: classID[name] = id Nenue@6: className[id] = name Nenue@6: index[name] = setmetatable({}, index_mt) Nenue@6: Nenue@6: classSpecID[id] = {} Nenue@6: for h=1, GetNumSpecializationsForClassID(id) do Nenue@6: local specID, specName = GetSpecializationInfoForClassID(id, h) Nenue@6: classSpecID[id][h] = specID Nenue@6: specIDClass[specID] = id Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: if not tdb then Nenue@6: print('Missing config table.') Nenue@6: return Nenue@6: end Nenue@6: --- Setup virtuals Nenue@6: for setID, entry in ipairs(tdb) do Nenue@6: if entry.virtual then Nenue@6: print('loading virtual set:', entry.name) Nenue@6: globalIndex[setID] = entry Nenue@6: nameIndex[entry.name or ('noname'.. setID)] = entry Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: --- Starting readin' Nenue@6: for setID, entry in ipairs(tdb) do Nenue@6: if not entry.virtual then Nenue@6: Nenue@6: print('* .index.global['.. setID..'] =', entry.name) Nenue@6: local dvars = T.Config_Push({}, entry, nil, cKey('['..setID..']')..'.'..cWord('dvars')) Nenue@6: dvars.name = entry.name Nenue@6: globalIndex[setID] = dvars Nenue@6: Nenue@6: local name = dvars.name or ('noname'..setID) Nenue@6: nameIndex[name] = entry Nenue@6: print('* .timersByName['..name..'] =', setID, entry.setID) Nenue@6: Nenue@6: --- Combine with any inherited templates Nenue@6: if dvars.inherits and nameIndex[dvars.inherits] then Nenue@6: print('* Adding heritable data from', cText(dvars.inherits)) Nenue@6: mod.GetInherited(dvars, nameIndex[dvars.inherits], {[dvars] = dvars}) Nenue@6: --T.Config_Merge(dvars, nameIndex[dvars.inherits], dvars, cKey('['..setID..']')..'.'..cWord('dvars')) Nenue@6: end Nenue@6: -- class index Nenue@6: if not (dvars.playerClass or dvars.specID) then Nenue@6: for id, class in pairs(className) do Nenue@6: index[class][setID] = dvars Nenue@6: end Nenue@6: print('* indexed globally') Nenue@6: else Nenue@6: if dvars.playerClass then Nenue@6: if type(dvars.playerClass) ~= 'table' then Nenue@6: dvars.playerClass = {dvars.playerClass } Nenue@6: end Nenue@6: for i, playerClass in ipairs(dvars.playerClass) do Nenue@6: index[playerClass][setID] = dvars Nenue@6: print('* applying playerClass entry '..cNum(i)..': '..cWord(playerClass)) Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: if dvars.specID then Nenue@6: if type(dvars.specID) ~= 'table' then Nenue@6: dvars.specID = {dvars.specID } Nenue@6: end Nenue@6: for i, specID in ipairs(dvars.specID) do Nenue@6: print('* applying globalSpecID entry '..cNum(i)..': '..cNum(specID)..' -> '..cWord(className[specIDClass[dvars.specID]])) Nenue@6: index[className[specIDClass[specID]]][setID] = dvars Nenue@6: end Nenue@6: end Nenue@6: end Nenue@6: end Nenue@6: end Nenue@6: end