| Nenue@6 | 1 --- ${PACKAGE_NAME} | 
| Nenue@6 | 2 -- @file-author@ | 
| Nenue@6 | 3 -- @project-revision@ @project-hash@ | 
| Nenue@6 | 4 -- @file-revision@ @file-hash@ | 
| Nenue@6 | 5 -- Created: 12/28/2015 7:40 AM | 
| Nenue@6 | 6 -- | 
| Nenue@6 | 7 local _, Tk = ... | 
| Nenue@6 | 8 local T = Tk.Addon | 
| Nenue@6 | 9 local mod = T:NewModule("TimerControl", "AceTimer-3.0") | 
| Nenue@6 | 10 local pairs, ipairs, rawset, getmetatable, setmetatable, type, tostring, tinsert = pairs, ipairs, rawset, getmetatable, setmetatable, type, tostring, tinsert | 
| Nenue@6 | 11 local cWord, cNum, cText, cKey = cWord, cNum, cText, cKey | 
| Nenue@9 | 12 local print = function(...) | 
| Nenue@9 | 13   if not DEBUG then return end | 
| Nenue@9 | 14   if _G.Devian and _G.DevianDB.workspace ~= 1 then | 
| Nenue@9 | 15     _G.print('Timer', ...) | 
| Nenue@9 | 16   end | 
| Nenue@9 | 17 end | 
| Nenue@6 | 18 local index_mt = { | 
| Nenue@6 | 19     __newindex = function(t,k,v) | 
| Nenue@6 | 20       rawset(t,k,v) | 
| Nenue@6 | 21       if type(v) == 'table' then | 
| Nenue@6 | 22         print('new table', cKey(k)) | 
| Nenue@6 | 23         setmetatable(v, getmetatable(t)) | 
| Nenue@6 | 24       else | 
| Nenue@6 | 25         print('new index', cText(k)) | 
| Nenue@6 | 26       end | 
| Nenue@6 | 27     end | 
| Nenue@6 | 28   } | 
| Nenue@6 | 29 mod.index = {} | 
| Nenue@6 | 30 mod.index.name = setmetatable({}, index_mt) | 
| Nenue@6 | 31 mod.index.global = setmetatable({}, index_mt) | 
| Nenue@6 | 32 mod.index.preset = {} | 
| Nenue@6 | 33 -- dummies | 
| Nenue@6 | 34 mod.prototype = { | 
| Nenue@6 | 35   status = { | 
| Nenue@6 | 36     spellID = {}, | 
| Nenue@6 | 37     spellName = {}, | 
| Nenue@6 | 38     talentID = {}, | 
| Nenue@6 | 39     talentRow = {}, | 
| Nenue@6 | 40     talentOffset = {}, | 
| Nenue@6 | 41     itemID = {}, | 
| Nenue@6 | 42     inventoryID = {}, | 
| Nenue@6 | 43     specPage = {}, | 
| Nenue@6 | 44     specID = {}, | 
| Nenue@6 | 45     unit = {}, | 
| Nenue@6 | 46   }, | 
| Nenue@6 | 47   trigger = { | 
| Nenue@6 | 48     aura = {}, | 
| Nenue@6 | 49     cooldown = {}, | 
| Nenue@6 | 50     complex = {}, | 
| Nenue@6 | 51   }, | 
| Nenue@6 | 52   display = { | 
| Nenue@6 | 53     icon = {}, | 
| Nenue@6 | 54     progressbar = {}, | 
| Nenue@6 | 55   }, | 
| Nenue@6 | 56 } | 
| Nenue@6 | 57 | 
| Nenue@6 | 58 Turok.defaults.spirit = { | 
| Nenue@6 | 59   global = { | 
| Nenue@6 | 60     alpha = 1, | 
| Nenue@6 | 61     alpha_ooc = 0.5, | 
| Nenue@6 | 62 | 
| Nenue@6 | 63     sound_active = '[[Interface\Addons\Turok\Media\sound\link.ogg]]', | 
| Nenue@6 | 64     sound_passive = [[Interface\Addons\Turok\Media\sound\Heart.ogg]], | 
| Nenue@6 | 65     sound_hidden = [[Interface\Addons\Turok\Media\sound\Electro_-S_Bainbr-7955_hifi.mp3]], | 
| Nenue@6 | 66 | 
| Nenue@6 | 67     strata = 'LOW', | 
| Nenue@6 | 68     anchor = 'CENTER', | 
| Nenue@6 | 69     parent = 'UIParent', | 
| Nenue@6 | 70     anchorTo = 'CENTER', | 
| Nenue@6 | 71     width = 100, | 
| Nenue@6 | 72     height = 100, | 
| Nenue@6 | 73     x = 0, | 
| Nenue@6 | 74     y = 100, | 
| Nenue@6 | 75     alpha = 1, | 
| Nenue@6 | 76     alpha_ooc = 0.3, | 
| Nenue@6 | 77     inverse = false, | 
| Nenue@6 | 78     persist = false, | 
| Nenue@6 | 79     desaturated = false, | 
| Nenue@6 | 80 | 
| Nenue@6 | 81     icon = {}, | 
| Nenue@6 | 82 | 
| Nenue@6 | 83     passive = { | 
| Nenue@6 | 84       icon = {} | 
| Nenue@6 | 85     }, | 
| Nenue@6 | 86     active = { | 
| Nenue@6 | 87       inco = {} | 
| Nenue@6 | 88     }, | 
| Nenue@6 | 89   }, | 
| Nenue@6 | 90 | 
| Nenue@6 | 91   font = [[Interface\Addons\Turok\Media\font\ArchivoNarrow-Regular.ttf]], | 
| Nenue@6 | 92   lefttext = { | 
| Nenue@6 | 93     size = 14, | 
| Nenue@6 | 94     inset = -2, | 
| Nenue@6 | 95     point = 'LEFT', | 
| Nenue@6 | 96     outline = 'OUTLINE', | 
| Nenue@6 | 97     format = '%n %pd', | 
| Nenue@6 | 98     text_color = {1, 1, 1, 1}, | 
| Nenue@6 | 99   }, | 
| Nenue@6 | 100   containers = { | 
| Nenue@6 | 101   }, | 
| Nenue@6 | 102   timers = {}, | 
| Nenue@6 | 103 } | 
| Nenue@6 | 104 | 
| Nenue@6 | 105 local tdb = Turok.defaults.spirit.timers | 
| Nenue@6 | 106 | 
| Nenue@6 | 107 mod.GetInherited = function(dvars, merge, inherited) | 
| Nenue@6 | 108   if not inherited then | 
| Nenue@6 | 109     inherited = {} | 
| Nenue@6 | 110   end | 
| Nenue@6 | 111   inherited[merge] = merge | 
| Nenue@6 | 112   T.Config_Merge(dvars, merge) | 
| Nenue@6 | 113 | 
| Nenue@6 | 114   if merge.inherits then | 
| Nenue@6 | 115     local t = mod.index.name[merge.inherits] | 
| Nenue@6 | 116     if t and not inherited[t] then | 
| Nenue@6 | 117       mod.GetInherited(dvars, t, inherited) | 
| Nenue@6 | 118     end | 
| Nenue@6 | 119   end | 
| Nenue@6 | 120 end | 
| Nenue@6 | 121 | 
| Nenue@6 | 122 local GetClassInfo, GetNumClasses, GetNumSpecializationsForClassID, GetSpecializationInfoForClassID = GetClassInfo, GetNumClasses, GetNumSpecializationsForClassID, GetSpecializationInfoForClassID | 
| Nenue@6 | 123 mod.GetIndex = function() | 
| Nenue@6 | 124   print(cWord('**** Index Init')) | 
| Nenue@6 | 125 | 
| Nenue@6 | 126   local index = mod.index | 
| Nenue@6 | 127   local globalIndex = index.global | 
| Nenue@6 | 128   local nameIndex = index.name | 
| Nenue@6 | 129   local tdb = TurokData.spirit.timers | 
| Nenue@6 | 130   local classID = {} | 
| Nenue@6 | 131   local className = {} | 
| Nenue@6 | 132   local classSpecID = {} | 
| Nenue@6 | 133   local specIDClass = {} | 
| Nenue@6 | 134 | 
| Nenue@6 | 135   for id=1, GetNumClasses() do | 
| Nenue@6 | 136     local _, name = GetClassInfo(id) | 
| Nenue@6 | 137     classID[name] = id | 
| Nenue@6 | 138     className[id] = name | 
| Nenue@6 | 139     index[name] = setmetatable({}, index_mt) | 
| Nenue@6 | 140 | 
| Nenue@6 | 141     classSpecID[id] = {} | 
| Nenue@6 | 142     for h=1, GetNumSpecializationsForClassID(id) do | 
| Nenue@6 | 143       local specID, specName = GetSpecializationInfoForClassID(id, h) | 
| Nenue@6 | 144       classSpecID[id][h] = specID | 
| Nenue@6 | 145       specIDClass[specID] = id | 
| Nenue@6 | 146     end | 
| Nenue@6 | 147   end | 
| Nenue@6 | 148 | 
| Nenue@6 | 149   if not tdb then | 
| Nenue@6 | 150     print('Missing config table.') | 
| Nenue@6 | 151     return | 
| Nenue@6 | 152   end | 
| Nenue@6 | 153   --- Setup virtuals | 
| Nenue@6 | 154   for setID, entry in ipairs(tdb) do | 
| Nenue@6 | 155     if entry.virtual then | 
| Nenue@6 | 156       print('loading virtual set:', entry.name) | 
| Nenue@6 | 157       globalIndex[setID] = entry | 
| Nenue@6 | 158       nameIndex[entry.name or ('noname'.. setID)] = entry | 
| Nenue@6 | 159     end | 
| Nenue@6 | 160   end | 
| Nenue@6 | 161 | 
| Nenue@6 | 162   --- Starting readin' | 
| Nenue@6 | 163   for setID, entry in ipairs(tdb) do | 
| Nenue@6 | 164     if not entry.virtual then | 
| Nenue@6 | 165 | 
| Nenue@6 | 166       print('* .index.global['.. setID..'] =', entry.name) | 
| Nenue@6 | 167       local dvars = T.Config_Push({}, entry, nil, cKey('['..setID..']')..'.'..cWord('dvars')) | 
| Nenue@6 | 168       dvars.name = entry.name | 
| Nenue@6 | 169       globalIndex[setID] = dvars | 
| Nenue@6 | 170 | 
| Nenue@6 | 171       local name = dvars.name or ('noname'..setID) | 
| Nenue@6 | 172       nameIndex[name] = entry | 
| Nenue@6 | 173       print('* .timersByName['..name..'] =', setID, entry.setID) | 
| Nenue@6 | 174 | 
| Nenue@6 | 175       --- Combine with any inherited templates | 
| Nenue@6 | 176       if dvars.inherits and nameIndex[dvars.inherits] then | 
| Nenue@6 | 177         print('* Adding heritable data from', cText(dvars.inherits)) | 
| Nenue@6 | 178         mod.GetInherited(dvars, nameIndex[dvars.inherits], {[dvars] = dvars}) | 
| Nenue@6 | 179         --T.Config_Merge(dvars, nameIndex[dvars.inherits], dvars, cKey('['..setID..']')..'.'..cWord('dvars')) | 
| Nenue@6 | 180       end | 
| Nenue@6 | 181       -- class index | 
| Nenue@6 | 182       if not (dvars.playerClass or dvars.specID) then | 
| Nenue@6 | 183         for id, class in pairs(className) do | 
| Nenue@6 | 184           index[class][setID] = dvars | 
| Nenue@6 | 185         end | 
| Nenue@6 | 186         print('* indexed globally') | 
| Nenue@6 | 187       else | 
| Nenue@6 | 188         if dvars.playerClass then | 
| Nenue@6 | 189           if type(dvars.playerClass) ~= 'table' then | 
| Nenue@6 | 190             dvars.playerClass = {dvars.playerClass } | 
| Nenue@6 | 191           end | 
| Nenue@6 | 192           for i, playerClass in ipairs(dvars.playerClass) do | 
| Nenue@6 | 193             index[playerClass][setID] = dvars | 
| Nenue@6 | 194             print('* applying playerClass entry '..cNum(i)..': '..cWord(playerClass)) | 
| Nenue@6 | 195           end | 
| Nenue@6 | 196         end | 
| Nenue@6 | 197 | 
| Nenue@6 | 198         if dvars.specID then | 
| Nenue@6 | 199           if type(dvars.specID) ~= 'table' then | 
| Nenue@6 | 200             dvars.specID = {dvars.specID } | 
| Nenue@6 | 201           end | 
| Nenue@6 | 202           for i, specID in ipairs(dvars.specID) do | 
| Nenue@6 | 203             print('* applying globalSpecID entry '..cNum(i)..': '..cNum(specID)..' -> '..cWord(className[specIDClass[dvars.specID]])) | 
| Nenue@6 | 204             index[className[specIDClass[specID]]][setID] = dvars | 
| Nenue@6 | 205           end | 
| Nenue@6 | 206         end | 
| Nenue@6 | 207       end | 
| Nenue@6 | 208     end | 
| Nenue@6 | 209   end | 
| Nenue@6 | 210 end |