| 
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 |