madcatzinc@13: --~ Warcraft Plugin for Cyborg MMO7 madcatzinc@0: --~ Filename: WowObjects.lua madcatzinc@0: --~ Description: Warcraft in game object models madcatzinc@0: --~ Copyright (C) 2012 Mad Catz Inc. madcatzinc@0: --~ Author: Christopher Hooks madcatzinc@0: madcatzinc@0: --~ This program is free software; you can redistribute it and/or madcatzinc@0: --~ modify it under the terms of the GNU General Public License madcatzinc@0: --~ as published by the Free Software Foundation; either version 2 madcatzinc@0: --~ of the License, or (at your option) any later version. madcatzinc@0: madcatzinc@0: --~ This program is distributed in the hope that it will be useful, madcatzinc@0: --~ but WITHOUT ANY WARRANTY; without even the implied warranty of madcatzinc@0: --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the madcatzinc@0: --~ GNU General Public License for more details. madcatzinc@0: madcatzinc@0: --~ You should have received a copy of the GNU General Public License madcatzinc@0: --~ along with this program; if not, write to the Free Software madcatzinc@0: --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. madcatzinc@0: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@0: madcatzinc@25: local WowObject_methods = {} madcatzinc@25: local WowObject_mt = {__index=WowObject_methods} madcatzinc@25: madcatzinc@25: local function WowObject(type, detail, subdetail) madcatzinc@25: local self = {} madcatzinc@25: madcatzinc@25: self.Texture = nil madcatzinc@25: self.Name = "NoName" madcatzinc@25: self.Type = type madcatzinc@25: self.Detail = detail madcatzinc@25: self.Subdetail = subdetail madcatzinc@25: madcatzinc@25: setmetatable(self, WowObject_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowObject_methods:DoAction() madcatzinc@25: CyborgMMO_DPrint("Nothing To Do") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowObject_methods:Pickup() madcatzinc@25: CyborgMMO_DPrint("Pick up Item") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowObject_methods:SetBinding(key) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowObject_methods:PlaySound() madcatzinc@25: PlaySound("igAbilityIconDrop") madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: local WowCallback_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowCallback_mt = {__index=WowCallback_methods} madcatzinc@25: madcatzinc@25: local function WowCallback(callbackName) madcatzinc@25: local self = WowObject("callback", callbackName, "") madcatzinc@25: madcatzinc@25: self.CallbackName = callbackName madcatzinc@25: self.Texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga" madcatzinc@25: madcatzinc@25: setmetatable(self, WowCallback_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowCallback_methods:SetTextures(buttonFrame) madcatzinc@25: CyborgMMO_DPrint("TextureName = "..self.CallbackName) madcatzinc@25: buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga") madcatzinc@25: buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Down.tga") madcatzinc@25: buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Over.tga") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowCallback_methods:DoAction() madcatzinc@25: local action = CyborgMMO_CallbackFactory:GetCallback(self.CallbackName) madcatzinc@25: CyborgMMO_DPrint("calling callback:- "..self.CallbackName) madcatzinc@25: action() madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowCallback_methods:PickupCallback() madcatzinc@25: local slot = nil madcatzinc@25: local observers = CyborgMMO_RatPageModel:GetAllObservers() madcatzinc@25: for i=1,#observers do madcatzinc@25: if MouseIsOver(observers[i]) then madcatzinc@25: slot = observers[i] madcatzinc@25: break madcatzinc@0: end madcatzinc@25: end madcatzinc@25: slot:SetNormalTexture(slot.UnCheckedTexture) madcatzinc@25: end madcatzinc@0: madcatzinc@25: function WowCallback_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: ClearCursor() madcatzinc@25: self:PickupCallback() madcatzinc@25: end madcatzinc@0: madcatzinc@25: function WowCallback_methods:SetBinding(key) madcatzinc@25: local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function(...) return self:DoAction(...) end) madcatzinc@25: SetOverrideBindingClick(CyborgMMO_CallbackFactory.Frame, true, key, name, "LeftButton") madcatzinc@25: end madcatzinc@0: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@0: madcatzinc@25: local WowItem_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowItem_mt = {__index=WowItem_methods} madcatzinc@0: madcatzinc@25: local function WowItem(number, itemID) madcatzinc@25: local self = WowObject("item", number, itemID) madcatzinc@0: madcatzinc@25: self.Name, madcatzinc@25: self.Link, madcatzinc@25: self.Rarity, madcatzinc@25: self.Level, madcatzinc@25: self.MinLevel, madcatzinc@25: self.Type, madcatzinc@25: self.SubType, madcatzinc@25: self.StackCount, madcatzinc@25: self.EquipLoc, madcatzinc@25: self.Texture, madcatzinc@25: self.SellPrice = GetItemInfo(itemID) madcatzinc@0: madcatzinc@25: setmetatable(self, WowItem_mt) madcatzinc@0: madcatzinc@25: return self madcatzinc@25: end madcatzinc@0: madcatzinc@25: function WowItem_methods:DoAction() madcatzinc@25: CyborgMMO_DPrint("Use Item") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowItem_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: ClearCursor() madcatzinc@25: -- SetCursor(self.Texture) madcatzinc@25: return PickupItem(self.Link) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowItem_methods:SetBinding(key) madcatzinc@25: SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "ITEM "..self.Name) madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: local WowSpell_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowSpell_mt = {__index=WowSpell_methods} madcatzinc@25: madcatzinc@25: local function WowSpell(type, spellbookID, spellbook) madcatzinc@25: local self = WowObject(type, spellbookID, spellbook) madcatzinc@25: madcatzinc@25: self.SpellbookID = spellbookID madcatzinc@25: self.Spellbook = spellbook madcatzinc@25: self.Name,self.Rank = GetSpellBookItemName(spellbookID, spellbook) madcatzinc@25: self.Texture = GetSpellBookItemTexture(spellbookID, spellbook) madcatzinc@25: self.Type = type madcatzinc@25: madcatzinc@25: setmetatable(self, WowSpell_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowSpell_methods:DoAction() madcatzinc@25: CyborgMMO_DPrint("Cast Spell") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowSpell_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: ClearCursor() madcatzinc@25: -- SetCursor(self.Texture) madcatzinc@25: return PickupSpellBookItem(self.SpellbookID, self.Spellbook) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowSpell_methods:SetBinding(key) madcatzinc@25: CyborgMMO_DPrint("Binding to key "..key) madcatzinc@25: self.Key = key madcatzinc@25: SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, self.Key, self.Type.." "..self.Name) madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: local WowMacro_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowMacro_mt = {__index=WowMacro_methods} madcatzinc@25: madcatzinc@25: local function WowMacro(index) madcatzinc@25: local self = WowObject("macro", index, nil) madcatzinc@25: madcatzinc@25: self.Name, madcatzinc@25: self.Texture, madcatzinc@25: self.Body, madcatzinc@25: self.isLocal = GetMacroInfo(index) madcatzinc@25: self.Index = index madcatzinc@25: madcatzinc@25: setmetatable(self, WowMacro_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowMacro_methods:DoAction() madcatzinc@25: CyborgMMO_DPrint("Use Item") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowMacro_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: ClearCursor() madcatzinc@25: -- SetCursor(self.Texture) madcatzinc@25: return PickupMacro(self.Index) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowMacro_methods:SetBinding(key) madcatzinc@25: self.Key = key madcatzinc@25: SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "MACRO "..self.Index) madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: local WowCompanion_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowCompanion_mt = {__index=WowCompanion_methods} madcatzinc@25: madcatzinc@25: local function WowCompanion(index, SubType) madcatzinc@25: local self = WowObject("companion", index, SubType) madcatzinc@25: madcatzinc@25: self.Id, madcatzinc@25: self.Name, madcatzinc@25: self.SpellId, madcatzinc@25: self.Texture, madcatzinc@25: self.isSummoned = GetCompanionInfo(SubType, index) madcatzinc@25: self.SubType = SubType madcatzinc@25: self.index = index madcatzinc@25: madcatzinc@25: setmetatable(self, WowCompanion_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowCompanion_methods:DoAction() madcatzinc@25: if self.SubType == "MOUNT" and IsMounted() then madcatzinc@25: Dismount() madcatzinc@25: else madcatzinc@25: CallCompanion(self.SubType, self.index) madcatzinc@25: end madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowCompanion_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: return PickupCompanion(self.SubType, self.index) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowCompanion_methods:SetBinding(key) madcatzinc@25: self.Key = key madcatzinc@25: local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end) madcatzinc@25: SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton") madcatzinc@25: -- SetOverrideBinding(hiddenModeChanger, true, key, "MACRO "..self.Index) madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: local WowMerchant_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowMerchant_mt = {__index=WowMerchant_methods} madcatzinc@25: madcatzinc@25: local function WowMerchant(index) madcatzinc@25: local self = WowObject("merchant", index, nil) madcatzinc@25: madcatzinc@25: self.Name, madcatzinc@25: self.Texture, madcatzinc@25: self.Price, madcatzinc@25: self.Quantity, madcatzinc@25: self.NumAvailable, madcatzinc@25: self.IsUsable, madcatzinc@25: self.ExtendedCost = GetMerchantItemInfo(index) madcatzinc@25: self.Index = index madcatzinc@25: madcatzinc@25: setmetatable(self, WowMerchant_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowMerchant_methods:DoAction() madcatzinc@25: CyborgMMO_DPrint("Use Item") madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowMerchant_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: ClearCursor() madcatzinc@25: -- SetCursor(self.Texture) madcatzinc@25: return PickupMerchantItem(self.Index) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowMerchant_methods:SetBinding(key) madcatzinc@25: self.Key = key madcatzinc@25: SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, "MERCHANT "..self.Index) madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: local WowEquipmentSet_methods = setmetatable({}, {__index=WowObject_methods}) madcatzinc@25: local WowEquipmentSet_mt = {__index=WowEquipmentSet_methods} madcatzinc@25: madcatzinc@25: local function WowEquipmentSet(objectType, name, index) madcatzinc@25: local self = WowObject(objectType, name, index) madcatzinc@25: madcatzinc@25: local texture,lessIndex = GetEquipmentSetInfoByName(name) madcatzinc@25: self.Texture = "Interface\\Icons\\"..texture madcatzinc@25: self.Name = name madcatzinc@25: self.Index = lessIndex + 1 madcatzinc@25: madcatzinc@25: setmetatable(self, WowEquipmentSet_mt) madcatzinc@25: madcatzinc@25: return self madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowEquipmentSet_methods:DoAction() madcatzinc@25: UseEquipmentSet(self.Name) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowEquipmentSet_methods:Pickup() madcatzinc@25: self:PlaySound() madcatzinc@25: ClearCursor() madcatzinc@25: -- SetCursor(self.Texture) madcatzinc@25: return PickupEquipmentSetByName(self.Name) madcatzinc@25: end madcatzinc@25: madcatzinc@25: function WowEquipmentSet_methods:SetBinding(key) madcatzinc@25: self.Key = key madcatzinc@25: local buttonFrame,parentFrame,name = CyborgMMO_CallbackFactory:AddCallback(function() self:DoAction() end); madcatzinc@25: SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton") madcatzinc@25: end madcatzinc@25: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@25: madcatzinc@25: -- this class is used by pre-defined icons in the corner of the Rat page madcatzinc@4: CyborgMMO_CallbackIcons = { madcatzinc@0: new = function(self) madcatzinc@13: self.point, madcatzinc@13: self.relativeTo, madcatzinc@13: self.relativePoint, madcatzinc@13: self.xOfs, madcatzinc@13: self.yOfs = self:GetPoint() madcatzinc@13: -- self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs) madcatzinc@13: self.strata = self:GetFrameStrata() madcatzinc@25: self.wowObject = WowCallback(string.gsub(self:GetName(), self:GetParent():GetName(), "",1)) madcatzinc@25: self.wowObject:SetTextures(self) madcatzinc@0: self:RegisterForDrag("LeftButton","RightButton") madcatzinc@13: self:SetResizable(false) madcatzinc@13: madcatzinc@0: self.OnClick = function() madcatzinc@25: self.wowObject:DoAction() madcatzinc@0: end madcatzinc@13: madcatzinc@0: self.DragStart = function() madcatzinc@13: self:SetMovable(true) madcatzinc@13: self:StartMoving() madcatzinc@13: self.isMoving = true madcatzinc@0: self:SetFrameStrata("TOOLTIP") madcatzinc@0: end madcatzinc@13: madcatzinc@0: self.DragStop = function() madcatzinc@13: self:SetFrameStrata(self.strata) madcatzinc@13: self.isMoving = false madcatzinc@13: self:SetMovable(false) madcatzinc@13: self:StopMovingOrSizing() madcatzinc@0: madcatzinc@13: self:ClearAllPoints() madcatzinc@13: self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs) madcatzinc@13: local x,y = GetCursorPosition() madcatzinc@18: CyborgMMO_RatPageController:CallbackDropped(self) madcatzinc@0: end madcatzinc@13: madcatzinc@13: return self madcatzinc@13: end, madcatzinc@0: } madcatzinc@0: madcatzinc@25: ------------------------------------------------------------------------------ madcatzinc@13: madcatzinc@25: function CyborgMMO_CreateWowObject(type, ...) madcatzinc@25: local object madcatzinc@13: madcatzinc@25: if type == "item" then madcatzinc@25: object = WowItem(...) madcatzinc@25: elseif type == "macro" then madcatzinc@25: object = WowMacro(...) madcatzinc@25: elseif type == "spell" then madcatzinc@25: object = WowSpell(type, ...) madcatzinc@25: elseif type == "petaction" then madcatzinc@25: object = WowSpell(type, ...) madcatzinc@25: elseif type == "merchant" then madcatzinc@25: object = WowMerchant(...) madcatzinc@25: elseif type == "companion" then madcatzinc@25: object = WowCompanion(...) madcatzinc@25: elseif type == "equipmentset" then madcatzinc@25: object = WowEquipmentSet(type, ...) madcatzinc@25: elseif type == "callback" then madcatzinc@25: object = WowCallback(...) madcatzinc@25: else madcatzinc@25: object = WowObject(type, ...) madcatzinc@25: end madcatzinc@13: madcatzinc@25: return object madcatzinc@25: end madcatzinc@0: madcatzinc@25: function CyborgMMO_ClearBinding(key) madcatzinc@25: SetOverrideBinding(CyborgMMO_CallbackFactory.Frame, true, key, nil) madcatzinc@25: end madcatzinc@13: