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