Mercurial > wow > reaction
comparison classes/MultiCastButton.lua @ 163:ab5c37989986
- totem bar now stores which page was selected across sessions
- totem bar shouldn't be messed up if resized around on non-shaman toons now
| author | Flick <flickerstreak@gmail.com> |
|---|---|
| date | Sat, 22 Aug 2009 00:12:44 +0000 |
| parents | fc08372f0c7a |
| children | 8241be11dcc0 |
comparison
equal
deleted
inserted
replaced
| 162:fc08372f0c7a | 163:ab5c37989986 |
|---|---|
| 102 -- set up some globals in the secure environment | 102 -- set up some globals in the secure environment |
| 103 flyout = self:GetFrameRef("flyout") | 103 flyout = self:GetFrameRef("flyout") |
| 104 flyoutChildren = newtable() | 104 flyoutChildren = newtable() |
| 105 nMultiCastSlots = self:GetAttribute("nMultiCastSlots") | 105 nMultiCastSlots = self:GetAttribute("nMultiCastSlots") |
| 106 baseActionID = self:GetAttribute("baseActionID") | 106 baseActionID = self:GetAttribute("baseActionID") |
| 107 currentMultiCastPage = currentMultiCastPage or 1 | 107 currentMultiCastPage = currentMultiCastPage or self:GetAttribute("lastSummon") or 1 |
| 108 multiCastSpellList = newtable() | 108 multiCastSpellList = newtable() |
| 109 for i = 1, nMultiCastSlots do | 109 for i = 1, nMultiCastSlots do |
| 110 tinsert(multiCastSpellList, newtable()) | 110 tinsert(multiCastSpellList, newtable()) |
| 111 end | 111 end |
| 112 ]] | 112 ]] |
| 113 | 113 |
| 114 local _onstate_multispellpage = -- function(self, stateid, newstate) | 114 local _onstate_multispellpage = -- function(self, stateid, newstate) |
| 115 [[ | 115 [[ |
| 116 currentMultiCastPage = tonumber(newstate) | 116 currentMultiCastPage = tonumber(newstate) |
| 117 control:CallMethod("UpdateLastSummon",currentMultiCastPage) | |
| 117 control:ChildUpdate() | 118 control:ChildUpdate() |
| 118 ]] | 119 ]] |
| 119 | 120 |
| 120 | 121 |
| 121 -- buttons | 122 -- buttons |
| 259 function MultiCast:New( idx, btnConfig, bar ) | 260 function MultiCast:New( idx, btnConfig, bar ) |
| 260 if idx < 1 or idx > NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2 then | 261 if idx < 1 or idx > NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2 then |
| 261 error("Multicast button index out of range") | 262 error("Multicast button index out of range") |
| 262 end | 263 end |
| 263 | 264 |
| 265 if idx > bar.nMultiCastSlots then | |
| 266 return false | |
| 267 end | |
| 268 | |
| 264 local name = format("ReAction_%s_Action_%d",bar:GetName(),idx) | 269 local name = format("ReAction_%s_Action_%d",bar:GetName(),idx) |
| 265 | 270 |
| 266 self = Super.New(self, name, btnConfig, bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" ) | 271 self = Super.New(self, name, btnConfig, bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" ) |
| 267 | 272 |
| 268 local barFrame = bar:GetFrame() | 273 local barFrame = bar:GetFrame() |
| 269 local f = self:GetFrame() | 274 local f = self:GetFrame() |
| 270 | 275 |
| 271 -- attributes | 276 -- attributes |
| 277 local page = (idx == NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2) and 1 or (bar:GetConfig().lastSummon or 1) | |
| 272 if idx == 1 or idx == NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2 then | 278 if idx == 1 or idx == NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2 then |
| 273 f:SetAttribute("type","spell") | 279 f:SetAttribute("type","spell") |
| 274 local spells = idx == 1 and TOTEM_MULTI_CAST_SUMMON_SPELLS or TOTEM_MULTI_CAST_RECALL_SPELLS | 280 local spells = idx == 1 and TOTEM_MULTI_CAST_SUMMON_SPELLS or TOTEM_MULTI_CAST_RECALL_SPELLS |
| 281 f:SetAttribute("spell",spells[page]) | |
| 275 for i, spell in ipairs(spells) do | 282 for i, spell in ipairs(spells) do |
| 276 if spell and IsSpellKnown(spell) then | 283 if spell and IsSpellKnown(spell) then |
| 277 f:SetAttribute("spell-page"..i, spell) | 284 f:SetAttribute("spell-page"..i, spell) |
| 278 if i == 1 then | |
| 279 -- TODO: store/restore last used summon | |
| 280 f:SetAttribute("spell",spell) | |
| 281 end | |
| 282 end | 285 end |
| 283 end | 286 end |
| 284 else | 287 else |
| 285 local baseAction = barFrame:GetAttribute("baseActionID") + TOTEM_PRIORITIES[idx-1] | 288 local baseAction = barFrame:GetAttribute("baseActionID") + TOTEM_PRIORITIES[idx-1] |
| 286 f:SetAttribute("type","action") | 289 f:SetAttribute("type","action") |
| 287 f:SetAttribute("action", baseAction) | 290 f:SetAttribute("action", baseAction + (page - 1) * NUM_MULTI_CAST_BUTTONS_PER_PAGE) |
| 288 for i = 1, NUM_MULTI_CAST_PAGES do | 291 for i = 1, NUM_MULTI_CAST_PAGES do |
| 289 f:SetAttribute("action-page"..i, baseAction + (i-1) * NUM_MULTI_CAST_BUTTONS_PER_PAGE) | 292 f:SetAttribute("action-page"..i, baseAction + (i-1) * NUM_MULTI_CAST_BUTTONS_PER_PAGE) |
| 290 end | 293 end |
| 291 end | 294 end |
| 292 f:SetAttribute("bar-idx",idx) | 295 f:SetAttribute("bar-idx",idx) |
| 535 maxIdx = max(idx,maxIdx) | 538 maxIdx = max(idx,maxIdx) |
| 536 end | 539 end |
| 537 end | 540 end |
| 538 | 541 |
| 539 if #summon == 0 and #recall == 0 then | 542 if #summon == 0 and #recall == 0 then |
| 540 return 0 -- no multicast capability | 543 bar.nMultiCastSlots = 0 -- no multicast capability |
| 544 return | |
| 541 end | 545 end |
| 542 | 546 |
| 543 local slots = { } | 547 local slots = { } |
| 544 | 548 |
| 545 tinsert(slots, summon) | 549 tinsert(slots, summon) |
| 553 tinsert(slots, recall) | 557 tinsert(slots, recall) |
| 554 | 558 |
| 555 local barFrame = bar:GetFrame() | 559 local barFrame = bar:GetFrame() |
| 556 | 560 |
| 557 -- init bar secure environment | 561 -- init bar secure environment |
| 562 barFrame:SetAttribute("lastSummon",bar:GetConfig().lastSummon) | |
| 558 barFrame:SetAttribute("nMultiCastSlots",#slots) | 563 barFrame:SetAttribute("nMultiCastSlots",#slots) |
| 559 barFrame:SetAttribute("baseActionID", (NUM_ACTIONBAR_PAGES + GetMultiCastBarOffset() - 1)*NUM_ACTIONBAR_BUTTONS) | 564 barFrame:SetAttribute("baseActionID", (NUM_ACTIONBAR_PAGES + GetMultiCastBarOffset() - 1)*NUM_ACTIONBAR_BUTTONS) |
| 560 barFrame:SetAttribute("_onstate-multispellpage", _onstate_multispellpage) | 565 barFrame:SetAttribute("_onstate-multispellpage", _onstate_multispellpage) |
| 561 barFrame:Execute(_bar_init) | 566 barFrame:Execute(_bar_init) |
| 567 | |
| 568 function barFrame:UpdateLastSummon(value) | |
| 569 bar:GetConfig().lastSummon = value | |
| 570 end | |
| 562 | 571 |
| 563 for i, p in ipairs(TOTEM_PRIORITIES) do | 572 for i, p in ipairs(TOTEM_PRIORITIES) do |
| 564 barFrame:SetAttribute("TOTEM_PRIORITY_"..i,p) | 573 barFrame:SetAttribute("TOTEM_PRIORITY_"..i,p) |
| 565 end | 574 end |
| 566 | 575 |
| 627 multiCastSpellList[self:GetAttribute("spell-slot")][self:GetAttribute("spell-index")] = self:GetAttribute("spell-id") | 636 multiCastSpellList[self:GetAttribute("spell-slot")][self:GetAttribute("spell-index")] = self:GetAttribute("spell-id") |
| 628 ]]) | 637 ]]) |
| 629 end | 638 end |
| 630 end | 639 end |
| 631 | 640 |
| 632 return #slots | 641 bar.nMultiCastSlots = #slots |
| 633 end | 642 end |
| 634 | 643 |
