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 |