annotate WowObjects.lua @ 47:1a29be548897

Removed all .tga extensions in texture names. They are not needed, and they won't need to be changed if we switch to blp files.
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Mon, 29 Apr 2013 17:45:04 +0000
parents ce4ddefb68c2
children 7cbd32de1fdd
rev   line source
madcatzinc@13 1 --~ Warcraft Plugin for Cyborg MMO7
madcatzinc@0 2 --~ Filename: WowObjects.lua
madcatzinc@0 3 --~ Description: Warcraft in game object models
madcatzinc@0 4 --~ Copyright (C) 2012 Mad Catz Inc.
madcatzinc@0 5 --~ Author: Christopher Hooks
madcatzinc@0 6
madcatzinc@0 7 --~ This program is free software; you can redistribute it and/or
madcatzinc@0 8 --~ modify it under the terms of the GNU General Public License
madcatzinc@0 9 --~ as published by the Free Software Foundation; either version 2
madcatzinc@0 10 --~ of the License, or (at your option) any later version.
madcatzinc@0 11
madcatzinc@0 12 --~ This program is distributed in the hope that it will be useful,
madcatzinc@0 13 --~ but WITHOUT ANY WARRANTY; without even the implied warranty of
madcatzinc@0 14 --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
madcatzinc@0 15 --~ GNU General Public License for more details.
madcatzinc@0 16
madcatzinc@0 17 --~ You should have received a copy of the GNU General Public License
madcatzinc@0 18 --~ along with this program; if not, write to the Free Software
madcatzinc@0 19 --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
madcatzinc@0 20
madcatzinc@25 21 ------------------------------------------------------------------------------
madcatzinc@0 22
madcatzinc@25 23 local WowObject_methods = {}
madcatzinc@25 24 local WowObject_mt = {__index=WowObject_methods}
madcatzinc@25 25
madcatzinc@25 26 local function WowObject(type, detail, subdetail)
madcatzinc@25 27 local self = {}
madcatzinc@25 28
madcatzinc@34 29 self.type = type
madcatzinc@34 30 self.detail = detail
madcatzinc@34 31 self.subdetail = subdetail
madcatzinc@25 32
madcatzinc@25 33 setmetatable(self, WowObject_mt)
madcatzinc@25 34
madcatzinc@25 35 return self
madcatzinc@25 36 end
madcatzinc@25 37
madcatzinc@34 38 function WowObject_methods:SaveData()
madcatzinc@34 39 return {
madcatzinc@34 40 type = self.type,
madcatzinc@34 41 detail = self.detail,
madcatzinc@34 42 subdetail = self.subdetail,
madcatzinc@34 43 }
madcatzinc@34 44 end
madcatzinc@34 45
madcatzinc@25 46 function WowObject_methods:DoAction()
madcatzinc@25 47 CyborgMMO_DPrint("Nothing To Do")
madcatzinc@25 48 end
madcatzinc@25 49
madcatzinc@25 50 function WowObject_methods:Pickup()
madcatzinc@25 51 CyborgMMO_DPrint("Pick up Item")
madcatzinc@25 52 end
madcatzinc@25 53
madcatzinc@25 54 function WowObject_methods:SetBinding(key)
madcatzinc@25 55 end
madcatzinc@25 56
madcatzinc@25 57 ------------------------------------------------------------------------------
madcatzinc@25 58
madcatzinc@25 59 local WowCallback_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 60 local WowCallback_mt = {__index=WowCallback_methods}
madcatzinc@25 61
madcatzinc@25 62 local function WowCallback(callbackName)
madcatzinc@25 63 local self = WowObject("callback", callbackName, "")
madcatzinc@25 64
madcatzinc@34 65 self.callbackName = callbackName
madcatzinc@47 66 self.texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..callbackName.."Unselected"
madcatzinc@25 67
madcatzinc@25 68 setmetatable(self, WowCallback_mt)
madcatzinc@25 69
madcatzinc@25 70 return self
madcatzinc@25 71 end
madcatzinc@25 72
madcatzinc@25 73 function WowCallback_methods:SetTextures(buttonFrame)
madcatzinc@47 74 buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.callbackName.."Unselected")
madcatzinc@47 75 buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.callbackName.."Down")
madcatzinc@47 76 buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.callbackName.."Over")
madcatzinc@25 77 end
madcatzinc@25 78
madcatzinc@25 79 function WowCallback_methods:DoAction()
madcatzinc@34 80 local action = CyborgMMO_CallbackFactory:GetCallback(self.callbackName)
madcatzinc@25 81 action()
madcatzinc@25 82 end
madcatzinc@25 83
madcatzinc@25 84 function WowCallback_methods:PickupCallback()
madcatzinc@25 85 local slot = nil
madcatzinc@25 86 local observers = CyborgMMO_RatPageModel:GetAllObservers()
madcatzinc@25 87 for i=1,#observers do
madcatzinc@25 88 if MouseIsOver(observers[i]) then
madcatzinc@25 89 slot = observers[i]
madcatzinc@25 90 break
madcatzinc@0 91 end
madcatzinc@25 92 end
madcatzinc@25 93 slot:SetNormalTexture(slot.UnCheckedTexture)
madcatzinc@25 94 end
madcatzinc@0 95
madcatzinc@25 96 function WowCallback_methods:Pickup()
madcatzinc@34 97 PlaySound("igAbilityIconDrop")
madcatzinc@25 98 ClearCursor()
madcatzinc@25 99 self:PickupCallback()
madcatzinc@25 100 end
madcatzinc@0 101
madcatzinc@25 102 function WowCallback_methods:SetBinding(key)
madcatzinc@25 103 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function(...) return self:DoAction(...) end)
madcatzinc@25 104 SetOverrideBindingClick(CyborgMMO_CallbackFactory.Frame, true, key, name, "LeftButton")
madcatzinc@25 105 end
madcatzinc@0 106
madcatzinc@25 107 ------------------------------------------------------------------------------
madcatzinc@0 108
madcatzinc@25 109 local WowItem_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 110 local WowItem_mt = {__index=WowItem_methods}
madcatzinc@0 111
madcatzinc@34 112 local function WowItem(itemID)
madcatzinc@39 113 local texture = select(10, GetItemInfo(itemID)) -- :FIXME: this may fail too early in the session (like when loading saved data)
madcatzinc@39 114 if not texture then
madcatzinc@39 115 return nil
madcatzinc@39 116 end
madcatzinc@39 117
madcatzinc@34 118 local self = WowObject("item", itemID)
madcatzinc@0 119
madcatzinc@34 120 self.itemID = itemID
madcatzinc@39 121 self.texture = texture
madcatzinc@0 122
madcatzinc@25 123 setmetatable(self, WowItem_mt)
madcatzinc@0 124
madcatzinc@25 125 return self
madcatzinc@25 126 end
madcatzinc@0 127
madcatzinc@25 128 function WowItem_methods:Pickup()
madcatzinc@34 129 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 130 ClearCursor()
madcatzinc@34 131 -- SetCursor(self.texture)
madcatzinc@34 132 return PickupItem(self.itemID)
madcatzinc@25 133 end
madcatzinc@25 134
madcatzinc@25 135 function WowItem_methods:SetBinding(key)
madcatzinc@34 136 local name = GetItemInfo(self.itemID)
madcatzinc@34 137 SetOverrideBindingItem(CyborgMMO_CallbackFactory.Frame, true, key, name)
madcatzinc@25 138 end
madcatzinc@25 139
madcatzinc@25 140 ------------------------------------------------------------------------------
madcatzinc@25 141
madcatzinc@25 142 local WowSpell_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 143 local WowSpell_mt = {__index=WowSpell_methods}
madcatzinc@25 144
madcatzinc@34 145 local function WowSpell(spellID)
madcatzinc@39 146 local texture = GetSpellTexture(spellID)
madcatzinc@39 147 if not texture then
madcatzinc@39 148 return nil
madcatzinc@39 149 end
madcatzinc@39 150
madcatzinc@34 151 local self = WowObject("spell", spellID)
madcatzinc@25 152
madcatzinc@34 153 self.spellID = spellID
madcatzinc@39 154 self.texture = texture
madcatzinc@25 155
madcatzinc@25 156 setmetatable(self, WowSpell_mt)
madcatzinc@25 157
madcatzinc@25 158 return self
madcatzinc@25 159 end
madcatzinc@25 160
madcatzinc@25 161 function WowSpell_methods:DoAction()
madcatzinc@25 162 CyborgMMO_DPrint("Cast Spell")
madcatzinc@25 163 end
madcatzinc@25 164
madcatzinc@25 165 function WowSpell_methods:Pickup()
madcatzinc@34 166 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 167 ClearCursor()
madcatzinc@34 168 -- SetCursor(self.texture)
madcatzinc@34 169 -- return PickupSpellBookItem(self.SpellbookID, self.Spellbook)
madcatzinc@34 170 return PickupSpell(self.spellID)
madcatzinc@25 171 end
madcatzinc@25 172
madcatzinc@25 173 function WowSpell_methods:SetBinding(key)
madcatzinc@34 174 -- CyborgMMO_DPrint("Binding to key "..key)
madcatzinc@34 175 local name = GetSpellInfo(self.spellID)
madcatzinc@34 176 CyborgMMO_DPrint("binding spell:", self.spellID, name)
madcatzinc@34 177 SetOverrideBindingSpell(CyborgMMO_CallbackFactory.Frame, true, key, name)
madcatzinc@25 178 end
madcatzinc@25 179
madcatzinc@25 180 ------------------------------------------------------------------------------
madcatzinc@25 181
madcatzinc@25 182 local WowMacro_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 183 local WowMacro_mt = {__index=WowMacro_methods}
madcatzinc@25 184
madcatzinc@34 185 local function WowMacro(name)
madcatzinc@39 186 local texture = select(2, GetMacroInfo(name))
madcatzinc@39 187 if not texture then
madcatzinc@39 188 return nil
madcatzinc@39 189 end
madcatzinc@39 190
madcatzinc@34 191 local self = WowObject("macro", name)
madcatzinc@25 192
madcatzinc@34 193 self.name = name
madcatzinc@39 194 self.texture = texture
madcatzinc@25 195
madcatzinc@25 196 setmetatable(self, WowMacro_mt)
madcatzinc@25 197
madcatzinc@25 198 return self
madcatzinc@25 199 end
madcatzinc@25 200
madcatzinc@25 201 function WowMacro_methods:DoAction()
madcatzinc@25 202 CyborgMMO_DPrint("Use Item")
madcatzinc@25 203 end
madcatzinc@25 204
madcatzinc@25 205 function WowMacro_methods:Pickup()
madcatzinc@34 206 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 207 ClearCursor()
madcatzinc@34 208 -- SetCursor(self.texture)
madcatzinc@34 209 return PickupMacro(self.name)
madcatzinc@25 210 end
madcatzinc@25 211
madcatzinc@25 212 function WowMacro_methods:SetBinding(key)
madcatzinc@34 213 SetOverrideBindingMacro(CyborgMMO_CallbackFactory.Frame, true, key, self.name)
madcatzinc@25 214 end
madcatzinc@25 215
madcatzinc@25 216 ------------------------------------------------------------------------------
madcatzinc@25 217
madcatzinc@25 218 local WowCompanion_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 219 local WowCompanion_mt = {__index=WowCompanion_methods}
madcatzinc@25 220
madcatzinc@34 221 local function WowCompanion(spellID)
madcatzinc@39 222 local texture = select(3, GetSpellInfo(spellID))
madcatzinc@39 223 if not texture then
madcatzinc@39 224 return nil
madcatzinc@39 225 end
madcatzinc@39 226
madcatzinc@34 227 local self = WowObject("companion", spellID)
madcatzinc@34 228 CyborgMMO_DPrint("creating companion binding:", type, spellID)
madcatzinc@25 229
madcatzinc@34 230 self.spellID = spellID
madcatzinc@39 231 self.texture = texture
madcatzinc@25 232
madcatzinc@25 233 setmetatable(self, WowCompanion_mt)
madcatzinc@25 234
madcatzinc@25 235 return self
madcatzinc@25 236 end
madcatzinc@25 237
madcatzinc@34 238 local function IdentifyCompanion(spellID)
madcatzinc@34 239 for _,subtype in ipairs{'MOUNT', 'CRITTER'} do
madcatzinc@34 240 for index=1,GetNumCompanions(subtype) do
madcatzinc@34 241 local spellID2,_,active = select(3, GetCompanionInfo(subtype, index))
madcatzinc@34 242 if spellID2 == spellID then
madcatzinc@34 243 return subtype,index,active
madcatzinc@34 244 end
madcatzinc@34 245 end
madcatzinc@34 246 end
madcatzinc@34 247 end
madcatzinc@34 248
madcatzinc@25 249 function WowCompanion_methods:DoAction()
madcatzinc@34 250 local subtype,index,active = IdentifyCompanion(self.spellID)
madcatzinc@34 251 -- if subtype == "MOUNT" and IsMounted() then
madcatzinc@34 252 if subtype == "MOUNT" and active then
madcatzinc@25 253 Dismount()
madcatzinc@34 254 elseif subtype and index then
madcatzinc@34 255 CallCompanion(subtype, index)
madcatzinc@25 256 end
madcatzinc@25 257 end
madcatzinc@25 258
madcatzinc@25 259 function WowCompanion_methods:Pickup()
madcatzinc@34 260 -- PlaySound("igAbilityIconDrop")
madcatzinc@34 261 local subtype,index = IdentifyCompanion(self.spellID)
madcatzinc@34 262 if subtype and index then
madcatzinc@34 263 return PickupCompanion(subtype, index)
madcatzinc@34 264 end
madcatzinc@25 265 end
madcatzinc@25 266
madcatzinc@25 267 function WowCompanion_methods:SetBinding(key)
madcatzinc@25 268 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@25 269 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@25 270 end
madcatzinc@25 271
madcatzinc@25 272 ------------------------------------------------------------------------------
madcatzinc@25 273
madcatzinc@25 274 local WowEquipmentSet_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 275 local WowEquipmentSet_mt = {__index=WowEquipmentSet_methods}
madcatzinc@25 276
madcatzinc@34 277 local function WowEquipmentSet(name)
madcatzinc@39 278 local texture = GetEquipmentSetInfoByName(name)
madcatzinc@39 279 if not texture then
madcatzinc@39 280 return nil
madcatzinc@39 281 end
madcatzinc@39 282
madcatzinc@34 283 local self = WowObject("equipmentset", name)
madcatzinc@25 284
madcatzinc@34 285 self.name = name
madcatzinc@34 286 self.texture = "Interface\\Icons\\"..texture
madcatzinc@25 287
madcatzinc@25 288 setmetatable(self, WowEquipmentSet_mt)
madcatzinc@25 289
madcatzinc@25 290 return self
madcatzinc@25 291 end
madcatzinc@25 292
madcatzinc@25 293 function WowEquipmentSet_methods:DoAction()
madcatzinc@34 294 UseEquipmentSet(self.name)
madcatzinc@25 295 end
madcatzinc@25 296
madcatzinc@25 297 function WowEquipmentSet_methods:Pickup()
madcatzinc@34 298 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 299 ClearCursor()
madcatzinc@34 300 -- SetCursor(self.texture)
madcatzinc@25 301 return PickupEquipmentSetByName(self.Name)
madcatzinc@25 302 end
madcatzinc@25 303
madcatzinc@25 304 function WowEquipmentSet_methods:SetBinding(key)
madcatzinc@34 305 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@34 306 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@34 307 end
madcatzinc@34 308
madcatzinc@34 309 ------------------------------------------------------------------------------
madcatzinc@34 310
madcatzinc@34 311 local WowBattlePet_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@34 312 local WowBattlePet_mt = {__index=WowBattlePet_methods}
madcatzinc@34 313
madcatzinc@34 314 local function WowBattlePet(petID)
madcatzinc@39 315 local texture = select(9, C_PetJournal.GetPetInfoByPetID(petID)) -- :FIXME: this may fail too early in the session (like when loading saved data)
madcatzinc@39 316 if not texture then
madcatzinc@39 317 return nil
madcatzinc@39 318 end
madcatzinc@39 319
madcatzinc@34 320 local self = WowObject("battlepet", petID)
madcatzinc@34 321 CyborgMMO_DPrint("creating battle pet binding:", petID)
madcatzinc@34 322
madcatzinc@34 323 self.petID = petID
madcatzinc@39 324 self.texture = texture
madcatzinc@34 325
madcatzinc@34 326 setmetatable(self, WowBattlePet_mt)
madcatzinc@34 327
madcatzinc@34 328 return self
madcatzinc@34 329 end
madcatzinc@34 330
madcatzinc@34 331 --[[
madcatzinc@34 332 local function IdentifyPet(petID)
madcatzinc@34 333 local creatureID = select(11, C_PetJournal.GetPetInfoByPetID(petID))
madcatzinc@34 334 for index=1,GetNumCompanions('CRITTER') do
madcatzinc@34 335 local creatureID2,_,spellID = GetCompanionInfo('CRITTER', index)
madcatzinc@34 336 if creatureID2 == creatureID then
madcatzinc@34 337 return spellID
madcatzinc@34 338 end
madcatzinc@34 339 end
madcatzinc@34 340 end
madcatzinc@34 341 --]]
madcatzinc@34 342
madcatzinc@34 343 function WowBattlePet_methods:DoAction()
madcatzinc@34 344 -- PlaySound("igMainMenuOptionCheckBoxOn")
madcatzinc@34 345 C_PetJournal.SummonPetByGUID(self.petID)
madcatzinc@34 346 end
madcatzinc@34 347
madcatzinc@34 348 function WowBattlePet_methods:Pickup()
madcatzinc@34 349 -- PlaySound("igAbilityIconDrop")
madcatzinc@34 350 return C_PetJournal.PickupPet(self.petID)
madcatzinc@34 351 end
madcatzinc@34 352
madcatzinc@34 353 function WowBattlePet_methods:SetBinding(key)
madcatzinc@34 354 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@25 355 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@25 356 end
madcatzinc@25 357
madcatzinc@25 358 ------------------------------------------------------------------------------
madcatzinc@25 359
madcatzinc@25 360 -- this class is used by pre-defined icons in the corner of the Rat page
madcatzinc@4 361 CyborgMMO_CallbackIcons = {
madcatzinc@0 362 new = function(self)
madcatzinc@13 363 self.point,
madcatzinc@13 364 self.relativeTo,
madcatzinc@13 365 self.relativePoint,
madcatzinc@13 366 self.xOfs,
madcatzinc@13 367 self.yOfs = self:GetPoint()
madcatzinc@13 368 -- self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
madcatzinc@13 369 self.strata = self:GetFrameStrata()
madcatzinc@25 370 self.wowObject = WowCallback(string.gsub(self:GetName(), self:GetParent():GetName(), "",1))
madcatzinc@25 371 self.wowObject:SetTextures(self)
madcatzinc@0 372 self:RegisterForDrag("LeftButton","RightButton")
madcatzinc@13 373 self:SetResizable(false)
madcatzinc@13 374
madcatzinc@0 375 self.OnClick = function()
madcatzinc@25 376 self.wowObject:DoAction()
madcatzinc@0 377 end
madcatzinc@13 378
madcatzinc@0 379 self.DragStart = function()
madcatzinc@13 380 self:SetMovable(true)
madcatzinc@13 381 self:StartMoving()
madcatzinc@13 382 self.isMoving = true
madcatzinc@0 383 self:SetFrameStrata("TOOLTIP")
madcatzinc@0 384 end
madcatzinc@13 385
madcatzinc@0 386 self.DragStop = function()
madcatzinc@13 387 self:SetFrameStrata(self.strata)
madcatzinc@13 388 self.isMoving = false
madcatzinc@13 389 self:SetMovable(false)
madcatzinc@13 390 self:StopMovingOrSizing()
madcatzinc@0 391
madcatzinc@13 392 self:ClearAllPoints()
madcatzinc@13 393 self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
madcatzinc@13 394 local x,y = GetCursorPosition()
madcatzinc@18 395 CyborgMMO_RatPageController:CallbackDropped(self)
madcatzinc@0 396 end
madcatzinc@13 397
madcatzinc@13 398 return self
madcatzinc@13 399 end,
madcatzinc@0 400 }
madcatzinc@0 401
madcatzinc@25 402 ------------------------------------------------------------------------------
madcatzinc@13 403
madcatzinc@25 404 function CyborgMMO_CreateWowObject(type, ...)
madcatzinc@39 405 local object,unsupported
madcatzinc@13 406
madcatzinc@25 407 if type == "item" then
madcatzinc@39 408 object = WowItem(...)
madcatzinc@25 409 elseif type == "macro" then
madcatzinc@25 410 object = WowMacro(...)
madcatzinc@25 411 elseif type == "spell" then
madcatzinc@33 412 object = WowSpell(...)
madcatzinc@25 413 elseif type == "companion" then
madcatzinc@25 414 object = WowCompanion(...)
madcatzinc@25 415 elseif type == "equipmentset" then
madcatzinc@34 416 object = WowEquipmentSet(...)
madcatzinc@34 417 elseif type == "battlepet" then
madcatzinc@34 418 object = WowBattlePet(...)
madcatzinc@25 419 elseif type == "callback" then
madcatzinc@25 420 object = WowCallback(...)
madcatzinc@25 421 else
madcatzinc@39 422 CyborgMMO_DPrint("unsupported wow object:", type, ...)
madcatzinc@39 423 unsupported = true
madcatzinc@39 424 end
madcatzinc@39 425 if not object and not unsupported then
madcatzinc@39 426 CyborgMMO_DPrint("creating "..tostring(type).." object failed:", type, ...)
madcatzinc@25 427 end
madcatzinc@13 428
madcatzinc@25 429 return object
madcatzinc@25 430 end
madcatzinc@0 431
madcatzinc@25 432 function CyborgMMO_ClearBinding(key)
madcatzinc@25 433 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, nil)
madcatzinc@25 434 end
madcatzinc@13 435