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