annotate WowObjects.lua @ 38:d12a5a7d2be5

Use a local variable when possible.
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 18:15:57 +0000
parents 6ce173840e68
children ce4ddefb68c2
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@38 66 self.texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..callbackName.."Unselected.tga"
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@34 74 buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.callbackName.."Unselected.tga")
madcatzinc@34 75 buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.callbackName.."Down.tga")
madcatzinc@34 76 buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.callbackName.."Over.tga")
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@34 113 local self = WowObject("item", itemID)
madcatzinc@0 114
madcatzinc@34 115 self.itemID = itemID
madcatzinc@34 116 self.texture = select(10, GetItemInfo(itemID)) -- :FIXME: this may fail too early in the session (like when loading saved data)
madcatzinc@0 117
madcatzinc@25 118 setmetatable(self, WowItem_mt)
madcatzinc@0 119
madcatzinc@25 120 return self
madcatzinc@25 121 end
madcatzinc@0 122
madcatzinc@25 123 function WowItem_methods:Pickup()
madcatzinc@34 124 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 125 ClearCursor()
madcatzinc@34 126 -- SetCursor(self.texture)
madcatzinc@34 127 return PickupItem(self.itemID)
madcatzinc@25 128 end
madcatzinc@25 129
madcatzinc@25 130 function WowItem_methods:SetBinding(key)
madcatzinc@34 131 local name = GetItemInfo(self.itemID)
madcatzinc@34 132 SetOverrideBindingItem(CyborgMMO_CallbackFactory.Frame, true, key, name)
madcatzinc@25 133 end
madcatzinc@25 134
madcatzinc@25 135 ------------------------------------------------------------------------------
madcatzinc@25 136
madcatzinc@25 137 local WowSpell_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 138 local WowSpell_mt = {__index=WowSpell_methods}
madcatzinc@25 139
madcatzinc@34 140 local function WowSpell(spellID)
madcatzinc@34 141 local self = WowObject("spell", spellID)
madcatzinc@25 142
madcatzinc@34 143 self.spellID = spellID
madcatzinc@34 144 self.texture = GetSpellTexture(spellID)
madcatzinc@25 145
madcatzinc@25 146 setmetatable(self, WowSpell_mt)
madcatzinc@25 147
madcatzinc@25 148 return self
madcatzinc@25 149 end
madcatzinc@25 150
madcatzinc@25 151 function WowSpell_methods:DoAction()
madcatzinc@25 152 CyborgMMO_DPrint("Cast Spell")
madcatzinc@25 153 end
madcatzinc@25 154
madcatzinc@25 155 function WowSpell_methods:Pickup()
madcatzinc@34 156 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 157 ClearCursor()
madcatzinc@34 158 -- SetCursor(self.texture)
madcatzinc@34 159 -- return PickupSpellBookItem(self.SpellbookID, self.Spellbook)
madcatzinc@34 160 return PickupSpell(self.spellID)
madcatzinc@25 161 end
madcatzinc@25 162
madcatzinc@25 163 function WowSpell_methods:SetBinding(key)
madcatzinc@34 164 -- CyborgMMO_DPrint("Binding to key "..key)
madcatzinc@34 165 local name = GetSpellInfo(self.spellID)
madcatzinc@34 166 CyborgMMO_DPrint("binding spell:", self.spellID, name)
madcatzinc@34 167 SetOverrideBindingSpell(CyborgMMO_CallbackFactory.Frame, true, key, name)
madcatzinc@25 168 end
madcatzinc@25 169
madcatzinc@25 170 ------------------------------------------------------------------------------
madcatzinc@25 171
madcatzinc@25 172 local WowMacro_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 173 local WowMacro_mt = {__index=WowMacro_methods}
madcatzinc@25 174
madcatzinc@34 175 local function WowMacro(name)
madcatzinc@34 176 local self = WowObject("macro", name)
madcatzinc@25 177
madcatzinc@34 178 self.name = name
madcatzinc@34 179 self.texture = select(2, GetMacroInfo(name))
madcatzinc@25 180
madcatzinc@25 181 setmetatable(self, WowMacro_mt)
madcatzinc@25 182
madcatzinc@25 183 return self
madcatzinc@25 184 end
madcatzinc@25 185
madcatzinc@25 186 function WowMacro_methods:DoAction()
madcatzinc@25 187 CyborgMMO_DPrint("Use Item")
madcatzinc@25 188 end
madcatzinc@25 189
madcatzinc@25 190 function WowMacro_methods:Pickup()
madcatzinc@34 191 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 192 ClearCursor()
madcatzinc@34 193 -- SetCursor(self.texture)
madcatzinc@34 194 return PickupMacro(self.name)
madcatzinc@25 195 end
madcatzinc@25 196
madcatzinc@25 197 function WowMacro_methods:SetBinding(key)
madcatzinc@34 198 SetOverrideBindingMacro(CyborgMMO_CallbackFactory.Frame, true, key, self.name)
madcatzinc@25 199 end
madcatzinc@25 200
madcatzinc@25 201 ------------------------------------------------------------------------------
madcatzinc@25 202
madcatzinc@25 203 local WowCompanion_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 204 local WowCompanion_mt = {__index=WowCompanion_methods}
madcatzinc@25 205
madcatzinc@34 206 local function WowCompanion(spellID)
madcatzinc@34 207 local self = WowObject("companion", spellID)
madcatzinc@34 208 CyborgMMO_DPrint("creating companion binding:", type, spellID)
madcatzinc@25 209
madcatzinc@34 210 self.spellID = spellID
madcatzinc@34 211 self.texture = select(3, GetSpellInfo(spellID))
madcatzinc@25 212
madcatzinc@25 213 setmetatable(self, WowCompanion_mt)
madcatzinc@25 214
madcatzinc@25 215 return self
madcatzinc@25 216 end
madcatzinc@25 217
madcatzinc@34 218 local function IdentifyCompanion(spellID)
madcatzinc@34 219 for _,subtype in ipairs{'MOUNT', 'CRITTER'} do
madcatzinc@34 220 for index=1,GetNumCompanions(subtype) do
madcatzinc@34 221 local spellID2,_,active = select(3, GetCompanionInfo(subtype, index))
madcatzinc@34 222 if spellID2 == spellID then
madcatzinc@34 223 return subtype,index,active
madcatzinc@34 224 end
madcatzinc@34 225 end
madcatzinc@34 226 end
madcatzinc@34 227 end
madcatzinc@34 228
madcatzinc@25 229 function WowCompanion_methods:DoAction()
madcatzinc@34 230 local subtype,index,active = IdentifyCompanion(self.spellID)
madcatzinc@34 231 -- if subtype == "MOUNT" and IsMounted() then
madcatzinc@34 232 if subtype == "MOUNT" and active then
madcatzinc@25 233 Dismount()
madcatzinc@34 234 elseif subtype and index then
madcatzinc@34 235 CallCompanion(subtype, index)
madcatzinc@25 236 end
madcatzinc@25 237 end
madcatzinc@25 238
madcatzinc@25 239 function WowCompanion_methods:Pickup()
madcatzinc@34 240 -- PlaySound("igAbilityIconDrop")
madcatzinc@34 241 local subtype,index = IdentifyCompanion(self.spellID)
madcatzinc@34 242 if subtype and index then
madcatzinc@34 243 return PickupCompanion(subtype, index)
madcatzinc@34 244 end
madcatzinc@25 245 end
madcatzinc@25 246
madcatzinc@25 247 function WowCompanion_methods:SetBinding(key)
madcatzinc@25 248 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@25 249 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@25 250 end
madcatzinc@25 251
madcatzinc@25 252 ------------------------------------------------------------------------------
madcatzinc@25 253
madcatzinc@25 254 local WowEquipmentSet_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 255 local WowEquipmentSet_mt = {__index=WowEquipmentSet_methods}
madcatzinc@25 256
madcatzinc@34 257 local function WowEquipmentSet(name)
madcatzinc@34 258 local self = WowObject("equipmentset", name)
madcatzinc@25 259
madcatzinc@34 260 self.name = name
madcatzinc@34 261 local texture = GetEquipmentSetInfoByName(name)
madcatzinc@34 262 self.texture = "Interface\\Icons\\"..texture
madcatzinc@25 263
madcatzinc@25 264 setmetatable(self, WowEquipmentSet_mt)
madcatzinc@25 265
madcatzinc@25 266 return self
madcatzinc@25 267 end
madcatzinc@25 268
madcatzinc@25 269 function WowEquipmentSet_methods:DoAction()
madcatzinc@34 270 UseEquipmentSet(self.name)
madcatzinc@25 271 end
madcatzinc@25 272
madcatzinc@25 273 function WowEquipmentSet_methods:Pickup()
madcatzinc@34 274 -- PlaySound("igAbilityIconDrop")
madcatzinc@25 275 ClearCursor()
madcatzinc@34 276 -- SetCursor(self.texture)
madcatzinc@25 277 return PickupEquipmentSetByName(self.Name)
madcatzinc@25 278 end
madcatzinc@25 279
madcatzinc@25 280 function WowEquipmentSet_methods:SetBinding(key)
madcatzinc@34 281 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@34 282 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@34 283 end
madcatzinc@34 284
madcatzinc@34 285 ------------------------------------------------------------------------------
madcatzinc@34 286
madcatzinc@34 287 local WowBattlePet_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@34 288 local WowBattlePet_mt = {__index=WowBattlePet_methods}
madcatzinc@34 289
madcatzinc@34 290 local function WowBattlePet(petID)
madcatzinc@34 291 local self = WowObject("battlepet", petID)
madcatzinc@34 292 CyborgMMO_DPrint("creating battle pet binding:", petID)
madcatzinc@34 293
madcatzinc@34 294 self.petID = petID
madcatzinc@34 295 self.texture = select(9, C_PetJournal.GetPetInfoByPetID(petID)) -- :FIXME: this may fail too early in the session (like when loading saved data)
madcatzinc@34 296
madcatzinc@34 297 setmetatable(self, WowBattlePet_mt)
madcatzinc@34 298
madcatzinc@34 299 return self
madcatzinc@34 300 end
madcatzinc@34 301
madcatzinc@34 302 --[[
madcatzinc@34 303 local function IdentifyPet(petID)
madcatzinc@34 304 local creatureID = select(11, C_PetJournal.GetPetInfoByPetID(petID))
madcatzinc@34 305 for index=1,GetNumCompanions('CRITTER') do
madcatzinc@34 306 local creatureID2,_,spellID = GetCompanionInfo('CRITTER', index)
madcatzinc@34 307 if creatureID2 == creatureID then
madcatzinc@34 308 return spellID
madcatzinc@34 309 end
madcatzinc@34 310 end
madcatzinc@34 311 end
madcatzinc@34 312 --]]
madcatzinc@34 313
madcatzinc@34 314 function WowBattlePet_methods:DoAction()
madcatzinc@34 315 -- PlaySound("igMainMenuOptionCheckBoxOn")
madcatzinc@34 316 C_PetJournal.SummonPetByGUID(self.petID)
madcatzinc@34 317 end
madcatzinc@34 318
madcatzinc@34 319 function WowBattlePet_methods:Pickup()
madcatzinc@34 320 -- PlaySound("igAbilityIconDrop")
madcatzinc@34 321 return C_PetJournal.PickupPet(self.petID)
madcatzinc@34 322 end
madcatzinc@34 323
madcatzinc@34 324 function WowBattlePet_methods:SetBinding(key)
madcatzinc@34 325 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@25 326 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@25 327 end
madcatzinc@25 328
madcatzinc@25 329 ------------------------------------------------------------------------------
madcatzinc@25 330
madcatzinc@25 331 -- this class is used by pre-defined icons in the corner of the Rat page
madcatzinc@4 332 CyborgMMO_CallbackIcons = {
madcatzinc@0 333 new = function(self)
madcatzinc@13 334 self.point,
madcatzinc@13 335 self.relativeTo,
madcatzinc@13 336 self.relativePoint,
madcatzinc@13 337 self.xOfs,
madcatzinc@13 338 self.yOfs = self:GetPoint()
madcatzinc@13 339 -- self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
madcatzinc@13 340 self.strata = self:GetFrameStrata()
madcatzinc@25 341 self.wowObject = WowCallback(string.gsub(self:GetName(), self:GetParent():GetName(), "",1))
madcatzinc@25 342 self.wowObject:SetTextures(self)
madcatzinc@0 343 self:RegisterForDrag("LeftButton","RightButton")
madcatzinc@13 344 self:SetResizable(false)
madcatzinc@13 345
madcatzinc@0 346 self.OnClick = function()
madcatzinc@25 347 self.wowObject:DoAction()
madcatzinc@0 348 end
madcatzinc@13 349
madcatzinc@0 350 self.DragStart = function()
madcatzinc@13 351 self:SetMovable(true)
madcatzinc@13 352 self:StartMoving()
madcatzinc@13 353 self.isMoving = true
madcatzinc@0 354 self:SetFrameStrata("TOOLTIP")
madcatzinc@0 355 end
madcatzinc@13 356
madcatzinc@0 357 self.DragStop = function()
madcatzinc@13 358 self:SetFrameStrata(self.strata)
madcatzinc@13 359 self.isMoving = false
madcatzinc@13 360 self:SetMovable(false)
madcatzinc@13 361 self:StopMovingOrSizing()
madcatzinc@0 362
madcatzinc@13 363 self:ClearAllPoints()
madcatzinc@13 364 self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
madcatzinc@13 365 local x,y = GetCursorPosition()
madcatzinc@18 366 CyborgMMO_RatPageController:CallbackDropped(self)
madcatzinc@0 367 end
madcatzinc@13 368
madcatzinc@13 369 return self
madcatzinc@13 370 end,
madcatzinc@0 371 }
madcatzinc@0 372
madcatzinc@25 373 ------------------------------------------------------------------------------
madcatzinc@13 374
madcatzinc@25 375 function CyborgMMO_CreateWowObject(type, ...)
madcatzinc@25 376 local object
madcatzinc@13 377
madcatzinc@25 378 if type == "item" then
madcatzinc@34 379 -- :KLUDGE: if the item is not in the cache, return an empty WowObject
madcatzinc@34 380 local id = ...
madcatzinc@34 381 if not GetItemInfo(id) then
madcatzinc@34 382 object = WowObject()
madcatzinc@34 383 else
madcatzinc@34 384 object = WowItem(...)
madcatzinc@34 385 end
madcatzinc@25 386 elseif type == "macro" then
madcatzinc@25 387 object = WowMacro(...)
madcatzinc@25 388 elseif type == "spell" then
madcatzinc@33 389 object = WowSpell(...)
madcatzinc@25 390 elseif type == "companion" then
madcatzinc@25 391 object = WowCompanion(...)
madcatzinc@25 392 elseif type == "equipmentset" then
madcatzinc@34 393 object = WowEquipmentSet(...)
madcatzinc@34 394 elseif type == "battlepet" then
madcatzinc@34 395 object = WowBattlePet(...)
madcatzinc@25 396 elseif type == "callback" then
madcatzinc@25 397 object = WowCallback(...)
madcatzinc@25 398 else
madcatzinc@25 399 object = WowObject(type, ...)
madcatzinc@25 400 end
madcatzinc@13 401
madcatzinc@25 402 return object
madcatzinc@25 403 end
madcatzinc@0 404
madcatzinc@25 405 function CyborgMMO_ClearBinding(key)
madcatzinc@25 406 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, nil)
madcatzinc@25 407 end
madcatzinc@13 408