annotate Turok/Modules/Timer/Timer.Init.lua @ 9:9400a0ff8540

Ugh Timer: - container update directionality - talent update iterates over a non-volatile table to carry out updates - index management steps organized - talentRow status implemented, returns the spell associated with the talent chosen from that row CombatLog: - sort out font controls and unbork arguments
author Nenue
date Sun, 21 Feb 2016 13:08:30 -0500
parents a9b8b0866ece
children
rev   line source
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