annotate WowObjects.lua @ 30:ea423ee3a8c1

Don't preload the macro frame, test for it when necessary.
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Thu, 25 Apr 2013 01:31:11 +0000
parents b7074b47cfc7
children 1c0af1810e06
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@25 29 self.Texture = nil
madcatzinc@25 30 self.Name = "NoName"
madcatzinc@25 31 self.Type = type
madcatzinc@25 32 self.Detail = detail
madcatzinc@25 33 self.Subdetail = subdetail
madcatzinc@25 34
madcatzinc@25 35 setmetatable(self, WowObject_mt)
madcatzinc@25 36
madcatzinc@25 37 return self
madcatzinc@25 38 end
madcatzinc@25 39
madcatzinc@25 40 function WowObject_methods:DoAction()
madcatzinc@25 41 CyborgMMO_DPrint("Nothing To Do")
madcatzinc@25 42 end
madcatzinc@25 43
madcatzinc@25 44 function WowObject_methods:Pickup()
madcatzinc@25 45 CyborgMMO_DPrint("Pick up Item")
madcatzinc@25 46 end
madcatzinc@25 47
madcatzinc@25 48 function WowObject_methods:SetBinding(key)
madcatzinc@25 49 end
madcatzinc@25 50
madcatzinc@25 51 function WowObject_methods:PlaySound()
madcatzinc@25 52 PlaySound("igAbilityIconDrop")
madcatzinc@25 53 end
madcatzinc@25 54
madcatzinc@25 55 ------------------------------------------------------------------------------
madcatzinc@25 56
madcatzinc@25 57 local WowCallback_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 58 local WowCallback_mt = {__index=WowCallback_methods}
madcatzinc@25 59
madcatzinc@25 60 local function WowCallback(callbackName)
madcatzinc@25 61 local self = WowObject("callback", callbackName, "")
madcatzinc@25 62
madcatzinc@25 63 self.CallbackName = callbackName
madcatzinc@25 64 self.Texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga"
madcatzinc@25 65
madcatzinc@25 66 setmetatable(self, WowCallback_mt)
madcatzinc@25 67
madcatzinc@25 68 return self
madcatzinc@25 69 end
madcatzinc@25 70
madcatzinc@25 71 function WowCallback_methods:SetTextures(buttonFrame)
madcatzinc@25 72 CyborgMMO_DPrint("TextureName = "..self.CallbackName)
madcatzinc@25 73 buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga")
madcatzinc@25 74 buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Down.tga")
madcatzinc@25 75 buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Over.tga")
madcatzinc@25 76 end
madcatzinc@25 77
madcatzinc@25 78 function WowCallback_methods:DoAction()
madcatzinc@25 79 local action = CyborgMMO_CallbackFactory:GetCallback(self.CallbackName)
madcatzinc@25 80 CyborgMMO_DPrint("calling callback:- "..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@25 97 self:PlaySound()
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@25 112 local function WowItem(number, itemID)
madcatzinc@25 113 local self = WowObject("item", number, itemID)
madcatzinc@0 114
madcatzinc@25 115 self.Name,
madcatzinc@25 116 self.Link,
madcatzinc@25 117 self.Rarity,
madcatzinc@25 118 self.Level,
madcatzinc@25 119 self.MinLevel,
madcatzinc@25 120 self.Type,
madcatzinc@25 121 self.SubType,
madcatzinc@25 122 self.StackCount,
madcatzinc@25 123 self.EquipLoc,
madcatzinc@25 124 self.Texture,
madcatzinc@25 125 self.SellPrice = GetItemInfo(itemID)
madcatzinc@0 126
madcatzinc@25 127 setmetatable(self, WowItem_mt)
madcatzinc@0 128
madcatzinc@25 129 return self
madcatzinc@25 130 end
madcatzinc@0 131
madcatzinc@25 132 function WowItem_methods:DoAction()
madcatzinc@25 133 CyborgMMO_DPrint("Use Item")
madcatzinc@25 134 end
madcatzinc@25 135
madcatzinc@25 136 function WowItem_methods:Pickup()
madcatzinc@25 137 self:PlaySound()
madcatzinc@25 138 ClearCursor()
madcatzinc@25 139 -- SetCursor(self.Texture)
madcatzinc@25 140 return PickupItem(self.Link)
madcatzinc@25 141 end
madcatzinc@25 142
madcatzinc@25 143 function WowItem_methods:SetBinding(key)
madcatzinc@25 144 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "ITEM "..self.Name)
madcatzinc@25 145 end
madcatzinc@25 146
madcatzinc@25 147 ------------------------------------------------------------------------------
madcatzinc@25 148
madcatzinc@25 149 local WowSpell_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 150 local WowSpell_mt = {__index=WowSpell_methods}
madcatzinc@25 151
madcatzinc@25 152 local function WowSpell(type, spellbookID, spellbook)
madcatzinc@25 153 local self = WowObject(type, spellbookID, spellbook)
madcatzinc@25 154
madcatzinc@25 155 self.SpellbookID = spellbookID
madcatzinc@25 156 self.Spellbook = spellbook
madcatzinc@25 157 self.Name,self.Rank = GetSpellBookItemName(spellbookID, spellbook)
madcatzinc@25 158 self.Texture = GetSpellBookItemTexture(spellbookID, spellbook)
madcatzinc@25 159 self.Type = type
madcatzinc@25 160
madcatzinc@25 161 setmetatable(self, WowSpell_mt)
madcatzinc@25 162
madcatzinc@25 163 return self
madcatzinc@25 164 end
madcatzinc@25 165
madcatzinc@25 166 function WowSpell_methods:DoAction()
madcatzinc@25 167 CyborgMMO_DPrint("Cast Spell")
madcatzinc@25 168 end
madcatzinc@25 169
madcatzinc@25 170 function WowSpell_methods:Pickup()
madcatzinc@25 171 self:PlaySound()
madcatzinc@25 172 ClearCursor()
madcatzinc@25 173 -- SetCursor(self.Texture)
madcatzinc@25 174 return PickupSpellBookItem(self.SpellbookID, self.Spellbook)
madcatzinc@25 175 end
madcatzinc@25 176
madcatzinc@25 177 function WowSpell_methods:SetBinding(key)
madcatzinc@25 178 CyborgMMO_DPrint("Binding to key "..key)
madcatzinc@25 179 self.Key = key
madcatzinc@25 180 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, self.Key, self.Type.." "..self.Name)
madcatzinc@25 181 end
madcatzinc@25 182
madcatzinc@25 183 ------------------------------------------------------------------------------
madcatzinc@25 184
madcatzinc@25 185 local WowMacro_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 186 local WowMacro_mt = {__index=WowMacro_methods}
madcatzinc@25 187
madcatzinc@25 188 local function WowMacro(index)
madcatzinc@25 189 local self = WowObject("macro", index, nil)
madcatzinc@25 190
madcatzinc@25 191 self.Name,
madcatzinc@25 192 self.Texture,
madcatzinc@25 193 self.Body,
madcatzinc@25 194 self.isLocal = GetMacroInfo(index)
madcatzinc@25 195 self.Index = index
madcatzinc@25 196
madcatzinc@25 197 setmetatable(self, WowMacro_mt)
madcatzinc@25 198
madcatzinc@25 199 return self
madcatzinc@25 200 end
madcatzinc@25 201
madcatzinc@25 202 function WowMacro_methods:DoAction()
madcatzinc@25 203 CyborgMMO_DPrint("Use Item")
madcatzinc@25 204 end
madcatzinc@25 205
madcatzinc@25 206 function WowMacro_methods:Pickup()
madcatzinc@25 207 self:PlaySound()
madcatzinc@25 208 ClearCursor()
madcatzinc@25 209 -- SetCursor(self.Texture)
madcatzinc@25 210 return PickupMacro(self.Index)
madcatzinc@25 211 end
madcatzinc@25 212
madcatzinc@25 213 function WowMacro_methods:SetBinding(key)
madcatzinc@25 214 self.Key = key
madcatzinc@25 215 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "MACRO "..self.Index)
madcatzinc@25 216 end
madcatzinc@25 217
madcatzinc@25 218 ------------------------------------------------------------------------------
madcatzinc@25 219
madcatzinc@25 220 local WowCompanion_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 221 local WowCompanion_mt = {__index=WowCompanion_methods}
madcatzinc@25 222
madcatzinc@25 223 local function WowCompanion(index, SubType)
madcatzinc@25 224 local self = WowObject("companion", index, SubType)
madcatzinc@25 225
madcatzinc@25 226 self.Id,
madcatzinc@25 227 self.Name,
madcatzinc@25 228 self.SpellId,
madcatzinc@25 229 self.Texture,
madcatzinc@25 230 self.isSummoned = GetCompanionInfo(SubType, index)
madcatzinc@25 231 self.SubType = SubType
madcatzinc@25 232 self.index = index
madcatzinc@25 233
madcatzinc@25 234 setmetatable(self, WowCompanion_mt)
madcatzinc@25 235
madcatzinc@25 236 return self
madcatzinc@25 237 end
madcatzinc@25 238
madcatzinc@25 239 function WowCompanion_methods:DoAction()
madcatzinc@25 240 if self.SubType == "MOUNT" and IsMounted() then
madcatzinc@25 241 Dismount()
madcatzinc@25 242 else
madcatzinc@25 243 CallCompanion(self.SubType, self.index)
madcatzinc@25 244 end
madcatzinc@25 245 end
madcatzinc@25 246
madcatzinc@25 247 function WowCompanion_methods:Pickup()
madcatzinc@25 248 self:PlaySound()
madcatzinc@25 249 return PickupCompanion(self.SubType, self.index)
madcatzinc@25 250 end
madcatzinc@25 251
madcatzinc@25 252 function WowCompanion_methods:SetBinding(key)
madcatzinc@25 253 self.Key = key
madcatzinc@25 254 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end)
madcatzinc@25 255 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@25 256 -- SetOverrideBinding(hiddenModeChanger, true, key, "MACRO "..self.Index)
madcatzinc@25 257 end
madcatzinc@25 258
madcatzinc@25 259 ------------------------------------------------------------------------------
madcatzinc@25 260
madcatzinc@25 261 local WowMerchant_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 262 local WowMerchant_mt = {__index=WowMerchant_methods}
madcatzinc@25 263
madcatzinc@25 264 local function WowMerchant(index)
madcatzinc@25 265 local self = WowObject("merchant", index, nil)
madcatzinc@25 266
madcatzinc@25 267 self.Name,
madcatzinc@25 268 self.Texture,
madcatzinc@25 269 self.Price,
madcatzinc@25 270 self.Quantity,
madcatzinc@25 271 self.NumAvailable,
madcatzinc@25 272 self.IsUsable,
madcatzinc@25 273 self.ExtendedCost = GetMerchantItemInfo(index)
madcatzinc@25 274 self.Index = index
madcatzinc@25 275
madcatzinc@25 276 setmetatable(self, WowMerchant_mt)
madcatzinc@25 277
madcatzinc@25 278 return self
madcatzinc@25 279 end
madcatzinc@25 280
madcatzinc@25 281 function WowMerchant_methods:DoAction()
madcatzinc@25 282 CyborgMMO_DPrint("Use Item")
madcatzinc@25 283 end
madcatzinc@25 284
madcatzinc@25 285 function WowMerchant_methods:Pickup()
madcatzinc@25 286 self:PlaySound()
madcatzinc@25 287 ClearCursor()
madcatzinc@25 288 -- SetCursor(self.Texture)
madcatzinc@25 289 return PickupMerchantItem(self.Index)
madcatzinc@25 290 end
madcatzinc@25 291
madcatzinc@25 292 function WowMerchant_methods:SetBinding(key)
madcatzinc@25 293 self.Key = key
madcatzinc@25 294 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "MERCHANT "..self.Index)
madcatzinc@25 295 end
madcatzinc@25 296
madcatzinc@25 297 ------------------------------------------------------------------------------
madcatzinc@25 298
madcatzinc@25 299 local WowEquipmentSet_methods = setmetatable({}, {__index=WowObject_methods})
madcatzinc@25 300 local WowEquipmentSet_mt = {__index=WowEquipmentSet_methods}
madcatzinc@25 301
madcatzinc@25 302 local function WowEquipmentSet(objectType, name, index)
madcatzinc@25 303 local self = WowObject(objectType, name, index)
madcatzinc@25 304
madcatzinc@25 305 local texture,lessIndex = GetEquipmentSetInfoByName(name)
madcatzinc@25 306 self.Texture = "Interface\\Icons\\"..texture
madcatzinc@25 307 self.Name = name
madcatzinc@25 308 self.Index = lessIndex + 1
madcatzinc@25 309
madcatzinc@25 310 setmetatable(self, WowEquipmentSet_mt)
madcatzinc@25 311
madcatzinc@25 312 return self
madcatzinc@25 313 end
madcatzinc@25 314
madcatzinc@25 315 function WowEquipmentSet_methods:DoAction()
madcatzinc@25 316 UseEquipmentSet(self.Name)
madcatzinc@25 317 end
madcatzinc@25 318
madcatzinc@25 319 function WowEquipmentSet_methods:Pickup()
madcatzinc@25 320 self:PlaySound()
madcatzinc@25 321 ClearCursor()
madcatzinc@25 322 -- SetCursor(self.Texture)
madcatzinc@25 323 return PickupEquipmentSetByName(self.Name)
madcatzinc@25 324 end
madcatzinc@25 325
madcatzinc@25 326 function WowEquipmentSet_methods:SetBinding(key)
madcatzinc@25 327 self.Key = key
madcatzinc@25 328 local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end);
madcatzinc@25 329 SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")
madcatzinc@25 330 end
madcatzinc@25 331
madcatzinc@25 332 ------------------------------------------------------------------------------
madcatzinc@25 333
madcatzinc@25 334 -- this class is used by pre-defined icons in the corner of the Rat page
madcatzinc@4 335 CyborgMMO_CallbackIcons = {
madcatzinc@0 336 new = function(self)
madcatzinc@13 337 self.point,
madcatzinc@13 338 self.relativeTo,
madcatzinc@13 339 self.relativePoint,
madcatzinc@13 340 self.xOfs,
madcatzinc@13 341 self.yOfs = self:GetPoint()
madcatzinc@13 342 -- self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
madcatzinc@13 343 self.strata = self:GetFrameStrata()
madcatzinc@25 344 self.wowObject = WowCallback(string.gsub(self:GetName(), self:GetParent():GetName(), "",1))
madcatzinc@25 345 self.wowObject:SetTextures(self)
madcatzinc@0 346 self:RegisterForDrag("LeftButton","RightButton")
madcatzinc@13 347 self:SetResizable(false)
madcatzinc@13 348
madcatzinc@0 349 self.OnClick = function()
madcatzinc@25 350 self.wowObject:DoAction()
madcatzinc@0 351 end
madcatzinc@13 352
madcatzinc@0 353 self.DragStart = function()
madcatzinc@13 354 self:SetMovable(true)
madcatzinc@13 355 self:StartMoving()
madcatzinc@13 356 self.isMoving = true
madcatzinc@0 357 self:SetFrameStrata("TOOLTIP")
madcatzinc@0 358 end
madcatzinc@13 359
madcatzinc@0 360 self.DragStop = function()
madcatzinc@13 361 self:SetFrameStrata(self.strata)
madcatzinc@13 362 self.isMoving = false
madcatzinc@13 363 self:SetMovable(false)
madcatzinc@13 364 self:StopMovingOrSizing()
madcatzinc@0 365
madcatzinc@13 366 self:ClearAllPoints()
madcatzinc@13 367 self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs)
madcatzinc@13 368 local x,y = GetCursorPosition()
madcatzinc@18 369 CyborgMMO_RatPageController:CallbackDropped(self)
madcatzinc@0 370 end
madcatzinc@13 371
madcatzinc@13 372 return self
madcatzinc@13 373 end,
madcatzinc@0 374 }
madcatzinc@0 375
madcatzinc@25 376 ------------------------------------------------------------------------------
madcatzinc@13 377
madcatzinc@25 378 function CyborgMMO_CreateWowObject(type, ...)
madcatzinc@25 379 local object
madcatzinc@13 380
madcatzinc@25 381 if type == "item" then
madcatzinc@25 382 object = WowItem(...)
madcatzinc@25 383 elseif type == "macro" then
madcatzinc@25 384 object = WowMacro(...)
madcatzinc@25 385 elseif type == "spell" then
madcatzinc@25 386 object = WowSpell(type, ...)
madcatzinc@25 387 elseif type == "petaction" then
madcatzinc@25 388 object = WowSpell(type, ...)
madcatzinc@25 389 elseif type == "merchant" then
madcatzinc@25 390 object = WowMerchant(...)
madcatzinc@25 391 elseif type == "companion" then
madcatzinc@25 392 object = WowCompanion(...)
madcatzinc@25 393 elseif type == "equipmentset" then
madcatzinc@25 394 object = WowEquipmentSet(type, ...)
madcatzinc@25 395 elseif type == "callback" then
madcatzinc@25 396 object = WowCallback(...)
madcatzinc@25 397 else
madcatzinc@25 398 object = WowObject(type, ...)
madcatzinc@25 399 end
madcatzinc@13 400
madcatzinc@25 401 return object
madcatzinc@25 402 end
madcatzinc@0 403
madcatzinc@25 404 function CyborgMMO_ClearBinding(key)
madcatzinc@25 405 SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, nil)
madcatzinc@25 406 end
madcatzinc@13 407