comparison WowObjects.lua @ 0:bf9220814fb5

The first version of the Cyborg MMO7 addon for warcraft
author madcatzinc@35b17cf1-18cd-47ff-9ca3-31d6b526ef09
date Tue, 24 Jan 2012 17:14:21 +0000
parents
children d186f8cd5000
comparison
equal deleted inserted replaced
-1:000000000000 0:bf9220814fb5
1 --~ Warcraft Plugin for Cyborg MMO7
2 --~ Filename: WowObjects.lua
3 --~ Description: Warcraft in game object models
4 --~ Copyright (C) 2012 Mad Catz Inc.
5 --~ Author: Christopher Hooks
6
7 --~ This program is free software; you can redistribute it and/or
8 --~ modify it under the terms of the GNU General Public License
9 --~ as published by the Free Software Foundation; either version 2
10 --~ of the License, or (at your option) any later version.
11
12 --~ This program is distributed in the hope that it will be useful,
13 --~ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 --~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 --~ GNU General Public License for more details.
16
17 --~ You should have received a copy of the GNU General Public License
18 --~ along with this program; if not, write to the Free Software
19 --~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
21 WowObject = {
22 new = function(type, detail, subdetail)
23 local self = {};
24 self.Texture = nil;
25 self.Name = "NoName";
26 self.Type = type;
27 self.Detail = detail;
28 self.Subdetail = subdetail;
29
30
31 -- Methods --
32 self.DoAction = function()
33 msg("Nothing To Do");
34 end
35
36 self.Pickup = function()
37 msg("Pick up Item");
38 end
39
40 self.SetBinding = function(key)
41 end
42
43 self.PlaySound = function()
44 PlaySound("igAbilityIconDrop");
45 end
46
47 return self;
48 end,
49
50 ClearBinding = function(key)
51 local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(WowObject.DoNothing);
52 if(1 ~= SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")) then
53 msg("Failed to bind companion to button click");
54 end
55 end,
56
57 DoNothing = function()
58 end,
59
60 Load = function(object)
61 if("item" == type) then
62 object = WowItem.Load(Object)
63 elseif("macro" == type) then
64 object = WowMacro.Load(object)
65 elseif("spell" == type) then
66 object = WowSpell.Load(object)
67 elseif("petaction" == type) then
68 object = WowSpell.Load(object)
69 --elseif("merchant"== type) then
70 --object = SlotMerchant.new(detail,subdetail)
71 elseif("companion" == type) then
72 object = WowCompanion.Load(object)
73 elseif("equipmentset" == type) then
74 object = WowEquipmentSet.Load(object)
75 else
76 object = WowObject.new(type,detail, subdetail)
77 end
78 return object;
79 end,
80
81 -- Static Methods --
82 Create = function(objectType, detail, subdetail)
83 local object;
84 if("item" == objectType) then
85 object = WowItem.new(detail,subdetail)
86 elseif("macro" == objectType) then
87 object = WowMacro.new(detail)
88 elseif("spell" == objectType) then
89 object = WowSpell.new(objectType, detail,subdetail)
90 elseif("petaction" == objectType) then
91 object = WowSpell.new(objectType, detail,subdetail)
92 elseif("merchant"== objectType) then
93 object = SlotMerchant.new(detail,subdetail)
94 elseif("companion" == objectType) then
95 object = WowCompanion.new(detail,subdetail)
96 elseif("equipmentset" == objectType) then
97 object = WowEquipmentSet.new(objectType,detail,subdetail)
98 elseif("callback" == objectType) then
99 object = WowCallback.new(detail);
100 else
101 object = WowObject.new(objectType,detail, subdetail)
102 end
103
104 return object;
105 end
106 }
107
108 local CallbackCursor = nil;
109
110 CallbackIcons = {
111 new = function(self)
112 self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs = self:GetPoint();
113 --self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs);
114 self.strata = self:GetFrameStrata();
115 self.wowObject = WowCallback.new(self:GetName());
116 self.wowObject.SetTextures(self);
117 self:RegisterForDrag("LeftButton","RightButton")
118 self:SetResizable(false);
119
120 self.OnClick = function()
121 self.wowObject.DoAction();
122 end
123
124
125 self.DragStart = function()
126 self:SetMovable(true);
127 self:StartMoving();
128 self.isMoving = true;
129 self:SetFrameStrata("TOOLTIP")
130 end
131
132 self.DragStop = function()
133
134 self:SetFrameStrata(self.strata);
135 self.isMoving = false;
136 self:SetMovable(false);
137 self:StopMovingOrSizing();
138
139 self:ClearAllPoints();
140 self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs);
141 local x, y = GetCursorPosition();
142 RatPageController.Instance().CallbackDropped(self)
143 end
144
145 return self;
146 end
147 }
148
149 WowCallback = {
150 new = function(callbackName)
151 local self = WowObject.new("callback", callbackName, "");
152 self.CallbackName = callbackName;
153 self.Texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga"
154
155 self.SetTextures = function(buttonFrame)
156 buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga")
157 buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Down.tga")
158 buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Over.tga")
159 end
160
161 self.DoAction = function()
162 local action = GetCallback(self.CallbackName)
163 msg("calling callback:- "..self.CallbackName);
164 action();
165
166 end
167
168 self.PickupCallback = function()
169
170 local slot = nil;
171 local observers = RatPageModel.Instance().GetAllObservers();
172 for i = 1, (# observers) do
173 if(MouseIsOver(observers[i])) then
174 slot = observers[i];
175 break;
176 end
177 end
178 slot:SetNormalTexture(slot.UnCheckedTexture)
179 end
180
181
182 self.ClickHandler = function(self, button, down)
183 msg("click handler");
184 CallbackCursor:StopMoving();
185 CallbackCursor:Hide();
186
187 if("LeftButton" == button) then
188 else
189
190 end
191 end
192
193 self.Pickup = function()
194 self.PlaySound()
195 ClearCursor();
196 self.PickupCallback();
197
198 end
199
200
201 self.SetBinding = function(key)
202 local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(self.DoAction);
203 if(1 ~= SetOverrideBindingClick(CallbackFactory.Instance().Frame, true, key, name, "LeftButton")) then
204 msg("Failed to Bind modeChange");
205 end
206 end
207
208 return self;
209 end
210 }
211
212 -- WowItem Class --
213
214 WowItem = {
215 new = function(number, itemID)
216 local self = WowObject.new("item", number, itemID); -- base class
217 -- Set all the item info. --
218 self.Name,
219 self.Link,
220 self.Rarity,
221 self.Level,
222 self.MinLevel,
223 self.Type,
224 self.SubType,
225 self.StackCount,
226 self.EquipLoc,
227 self.Texture,
228 self.SellPrice = GetItemInfo(itemID);
229
230 -- override method --
231 self.DoAction = function()
232 msg("Use Item");
233 end
234
235 -- override method --
236 self.Pickup = function()
237 self.PlaySound()
238 ClearCursor();
239 --SetCursor(self.Texture);
240 return PickupItem(self.Link);
241 end
242
243 self.SetBinding = function(key)
244 SetOverrideBinding(CallbackFactory.Instance().Frame, true, key, "ITEM "..self.Name);
245 end
246
247 return self;
248 end,
249 }
250
251 -- WowSpell Class --
252
253 WowSpell = {
254 new = function(type, spellbookID, spellbook)
255 local self = WowObject.new(type, spellbookID, spellbook) -- base class
256 self.SpellbookID = spellbookID;
257 self.Spellbook = spellbook;
258 self.Name, self.Rank = GetSpellBookItemName(spellbookID, spellbook);
259 self.Texture = GetSpellBookItemTexture(spellbookID, spellbook);
260 self.Type = type;
261
262
263 -- override method --
264 self.DoAction = function()
265 msg("Cast Spell");
266 end
267
268 -- override method --
269 self.Pickup = function()
270 self.PlaySound()
271 ClearCursor();
272 --SetCursor(self.Texture);
273 return PickupSpellBookItem(self.SpellbookID, self.Spellbook);
274 end
275
276 self.SetBinding = function(key)
277 msg("Binding to key "..key)
278 self.Key = key
279 SetOverrideBinding(CallbackFactory.Instance().Frame, true, self.Key, self.Type.." "..self.Name);
280 end
281
282 return self;
283
284 end,
285
286 Load = function(object)
287 local o = WowSpell.new(object.Type, object.Detail, object.Subdetail);
288 o.Name = object.Name;
289 o.Texture = object.Texture;
290 return o;
291 end
292 }
293
294 -- WowMacro Class --
295
296 WowMacro = {
297 new = function(index)
298 local self = WowObject.new("macro", index, nil); -- base class
299 -- Set all the item info. --
300 self.Name,
301 self.Texture,
302 self.Body,
303 self.isLocal = GetMacroInfo(index);
304 self.Index = index;
305
306 -- override method --
307 self.DoAction = function()
308 msg("Use Item");
309 end
310
311 -- override method --
312 self.Pickup = function()
313 self.PlaySound()
314 ClearCursor();
315 --SetCursor(self.Texture);
316 return PickupMacro(self.Index);
317 end
318
319 self.SetBinding = function(key)
320 self.Key = key;
321 SetOverrideBinding(CallbackFactory.Instance().Frame, true, key, "MACRO "..self.Index);
322 end
323
324 return self;
325 end,
326 }
327
328
329 -- WowCompanion Class --
330
331 WowCompanion = {
332 new = function(index, SubType)
333 local self = WowObject.new("companion", index, SubType); -- base class
334 -- Set all the item info. --
335 self.Id, self.Name, self.SpellId, self.Texture, self.isSummoned = GetCompanionInfo(SubType, index);
336 self.SubType = SubType;
337 self.index = index;
338 -- override method --
339 self.DoAction = function()
340 if((self.SubType == "MOUNT") and IsMounted()) then
341 Dismount();
342 else
343 CallCompanion(self.SubType, self.index);
344 end
345 end
346
347 -- override method --
348 self.Pickup = function()
349 self.PlaySound()
350 return PickupCompanion(self.SubType, self.index);
351 end
352
353 self.SetBinding = function(key)
354 self.Key = key
355 local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(self.DoAction);
356 if(1 ~= SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")) then
357 msg("Failed to bind companion to button click");
358 end
359 --SetOverrideBinding(hiddenModeChanger, true, key, "MACRO "..self.Index);
360 end
361
362 return self;
363 end,
364
365 Load = function(object)
366 local o = WowCompanion.new(object.index, object.SubType);
367 return o;
368 end
369 }
370
371 -- WowMerchant Class --
372 WowMerchant = {
373 new = function(index)
374 local self = WowObject.new("macro", index, nil); -- base class
375 -- Set all the item info. --
376 self.Name,
377 self.Texture,
378 self.Price,
379 self.Quantity,
380 self.NumAvailable,
381 self.IsUsable,
382 self.ExtendedCost = GetMerchantItemInfo(index);
383 self.Index = index;
384
385 -- override method --
386 self.DoAction = function()
387 msg("Use Item");
388 end
389
390 -- override method --
391 self.Pickup = function()
392 self.PlaySound()
393 ClearCursor();
394 --SetCursor(self.Texture);
395 return PickupMerchantItem(self.Index);
396 end
397
398 self.SetBinding = function(key)
399 self.Key = key
400 SetOverrideBinding(CallbackFactory.Instance().Frame, true, key, "MERCHANT "..self.Index);
401 end
402
403 return self;
404 end,
405 }
406
407 -- WowEquipmentSet Class --
408 WowEquipmentSet = {
409 new = function(objectType, name, index)
410 local self = WowObject.new(objectType, name, index); -- base class
411 -- Set all the item info. --
412 texture, lessIndex = GetEquipmentSetInfoByName(name);
413 self.Texture = "Interface\\Icons\\"..texture;
414 self.Name = name
415 self.Index = lessIndex+1;
416
417 -- override method --
418 self.DoAction = function()
419 UseEquipmentSet(self.Name);
420 end
421
422 -- override method --
423 self.Pickup = function()
424 self.PlaySound()
425 ClearCursor();
426 --SetCursor(self.Texture);
427 return PickupEquipmentSetByName(self.Name);
428 end
429
430 self.SetBinding = function(key)
431 self.Key = key
432 local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(self.DoAction);
433 if(1 ~= SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")) then
434 msg("Failed to bind companion to button click");
435 end
436 end
437
438 return self;
439 end,
440 }
441
442
443 -- End Of WowObjects --