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 |