comparison WowObjects.lua @ 39:ce4ddefb68c2

Fail early when a wow object cannot be created. Default to empty slots rather than empty wow objects.
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 18:16:03 +0000
parents d12a5a7d2be5
children 1a29be548897
comparison
equal deleted inserted replaced
38:d12a5a7d2be5 39:ce4ddefb68c2
108 108
109 local WowItem_methods = setmetatable({}, {__index=WowObject_methods}) 109 local WowItem_methods = setmetatable({}, {__index=WowObject_methods})
110 local WowItem_mt = {__index=WowItem_methods} 110 local WowItem_mt = {__index=WowItem_methods}
111 111
112 local function WowItem(itemID) 112 local function WowItem(itemID)
113 local texture = select(10, GetItemInfo(itemID)) -- :FIXME: this may fail too early in the session (like when loading saved data)
114 if not texture then
115 return nil
116 end
117
113 local self = WowObject("item", itemID) 118 local self = WowObject("item", itemID)
114 119
115 self.itemID = itemID 120 self.itemID = itemID
116 self.texture = select(10, GetItemInfo(itemID)) -- :FIXME: this may fail too early in the session (like when loading saved data) 121 self.texture = texture
117 122
118 setmetatable(self, WowItem_mt) 123 setmetatable(self, WowItem_mt)
119 124
120 return self 125 return self
121 end 126 end
136 141
137 local WowSpell_methods = setmetatable({}, {__index=WowObject_methods}) 142 local WowSpell_methods = setmetatable({}, {__index=WowObject_methods})
138 local WowSpell_mt = {__index=WowSpell_methods} 143 local WowSpell_mt = {__index=WowSpell_methods}
139 144
140 local function WowSpell(spellID) 145 local function WowSpell(spellID)
146 local texture = GetSpellTexture(spellID)
147 if not texture then
148 return nil
149 end
150
141 local self = WowObject("spell", spellID) 151 local self = WowObject("spell", spellID)
142 152
143 self.spellID = spellID 153 self.spellID = spellID
144 self.texture = GetSpellTexture(spellID) 154 self.texture = texture
145 155
146 setmetatable(self, WowSpell_mt) 156 setmetatable(self, WowSpell_mt)
147 157
148 return self 158 return self
149 end 159 end
171 181
172 local WowMacro_methods = setmetatable({}, {__index=WowObject_methods}) 182 local WowMacro_methods = setmetatable({}, {__index=WowObject_methods})
173 local WowMacro_mt = {__index=WowMacro_methods} 183 local WowMacro_mt = {__index=WowMacro_methods}
174 184
175 local function WowMacro(name) 185 local function WowMacro(name)
186 local texture = select(2, GetMacroInfo(name))
187 if not texture then
188 return nil
189 end
190
176 local self = WowObject("macro", name) 191 local self = WowObject("macro", name)
177 192
178 self.name = name 193 self.name = name
179 self.texture = select(2, GetMacroInfo(name)) 194 self.texture = texture
180 195
181 setmetatable(self, WowMacro_mt) 196 setmetatable(self, WowMacro_mt)
182 197
183 return self 198 return self
184 end 199 end
202 217
203 local WowCompanion_methods = setmetatable({}, {__index=WowObject_methods}) 218 local WowCompanion_methods = setmetatable({}, {__index=WowObject_methods})
204 local WowCompanion_mt = {__index=WowCompanion_methods} 219 local WowCompanion_mt = {__index=WowCompanion_methods}
205 220
206 local function WowCompanion(spellID) 221 local function WowCompanion(spellID)
222 local texture = select(3, GetSpellInfo(spellID))
223 if not texture then
224 return nil
225 end
226
207 local self = WowObject("companion", spellID) 227 local self = WowObject("companion", spellID)
208 CyborgMMO_DPrint("creating companion binding:", type, spellID) 228 CyborgMMO_DPrint("creating companion binding:", type, spellID)
209 229
210 self.spellID = spellID 230 self.spellID = spellID
211 self.texture = select(3, GetSpellInfo(spellID)) 231 self.texture = texture
212 232
213 setmetatable(self, WowCompanion_mt) 233 setmetatable(self, WowCompanion_mt)
214 234
215 return self 235 return self
216 end 236 end
253 273
254 local WowEquipmentSet_methods = setmetatable({}, {__index=WowObject_methods}) 274 local WowEquipmentSet_methods = setmetatable({}, {__index=WowObject_methods})
255 local WowEquipmentSet_mt = {__index=WowEquipmentSet_methods} 275 local WowEquipmentSet_mt = {__index=WowEquipmentSet_methods}
256 276
257 local function WowEquipmentSet(name) 277 local function WowEquipmentSet(name)
278 local texture = GetEquipmentSetInfoByName(name)
279 if not texture then
280 return nil
281 end
282
258 local self = WowObject("equipmentset", name) 283 local self = WowObject("equipmentset", name)
259 284
260 self.name = name 285 self.name = name
261 local texture = GetEquipmentSetInfoByName(name)
262 self.texture = "Interface\\Icons\\"..texture 286 self.texture = "Interface\\Icons\\"..texture
263 287
264 setmetatable(self, WowEquipmentSet_mt) 288 setmetatable(self, WowEquipmentSet_mt)
265 289
266 return self 290 return self
286 310
287 local WowBattlePet_methods = setmetatable({}, {__index=WowObject_methods}) 311 local WowBattlePet_methods = setmetatable({}, {__index=WowObject_methods})
288 local WowBattlePet_mt = {__index=WowBattlePet_methods} 312 local WowBattlePet_mt = {__index=WowBattlePet_methods}
289 313
290 local function WowBattlePet(petID) 314 local function WowBattlePet(petID)
315 local texture = select(9, C_PetJournal.GetPetInfoByPetID(petID)) -- :FIXME: this may fail too early in the session (like when loading saved data)
316 if not texture then
317 return nil
318 end
319
291 local self = WowObject("battlepet", petID) 320 local self = WowObject("battlepet", petID)
292 CyborgMMO_DPrint("creating battle pet binding:", petID) 321 CyborgMMO_DPrint("creating battle pet binding:", petID)
293 322
294 self.petID = petID 323 self.petID = petID
295 self.texture = select(9, C_PetJournal.GetPetInfoByPetID(petID)) -- :FIXME: this may fail too early in the session (like when loading saved data) 324 self.texture = texture
296 325
297 setmetatable(self, WowBattlePet_mt) 326 setmetatable(self, WowBattlePet_mt)
298 327
299 return self 328 return self
300 end 329 end
371 } 400 }
372 401
373 ------------------------------------------------------------------------------ 402 ------------------------------------------------------------------------------
374 403
375 function CyborgMMO_CreateWowObject(type, ...) 404 function CyborgMMO_CreateWowObject(type, ...)
376 local object 405 local object,unsupported
377 406
378 if type == "item" then 407 if type == "item" then
379 -- :KLUDGE: if the item is not in the cache, return an empty WowObject 408 object = WowItem(...)
380 local id = ...
381 if not GetItemInfo(id) then
382 object = WowObject()
383 else
384 object = WowItem(...)
385 end
386 elseif type == "macro" then 409 elseif type == "macro" then
387 object = WowMacro(...) 410 object = WowMacro(...)
388 elseif type == "spell" then 411 elseif type == "spell" then
389 object = WowSpell(...) 412 object = WowSpell(...)
390 elseif type == "companion" then 413 elseif type == "companion" then
394 elseif type == "battlepet" then 417 elseif type == "battlepet" then
395 object = WowBattlePet(...) 418 object = WowBattlePet(...)
396 elseif type == "callback" then 419 elseif type == "callback" then
397 object = WowCallback(...) 420 object = WowCallback(...)
398 else 421 else
399 object = WowObject(type, ...) 422 CyborgMMO_DPrint("unsupported wow object:", type, ...)
423 unsupported = true
424 end
425 if not object and not unsupported then
426 CyborgMMO_DPrint("creating "..tostring(type).." object failed:", type, ...)
400 end 427 end
401 428
402 return object 429 return object
403 end 430 end
404 431