Mercurial > wow > buffalo2
diff ObjectiveUI.lua @ 1:b0447b382f36
sorting client events from maintenance logic
implemented all that action buttons entail for quest items
author | Nenue |
---|---|
date | Wed, 30 Mar 2016 16:30:49 -0400 |
parents | 3dbcad2b387d |
children | a2396b03ce63 |
line wrap: on
line diff
--- a/ObjectiveUI.lua Wed Mar 30 02:24:56 2016 -0400 +++ b/ObjectiveUI.lua Wed Mar 30 16:30:49 2016 -0400 @@ -20,16 +20,24 @@ end Tracker.OnMouseUp = function(self, button) - if button == 'LeftButton' then + + if self.initialButton == 'LeftButton' then self:Select() mod.UpdateWrapper() + if self.modShift then + self:Remove() + end elseif button == 'RightButton' then self:Open() end + self.initialButton = nil + self.modShift = nil print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r ->',self.info.trackingID) end Tracker.OnMouseDown = function(self, button) + self.initialButton = button + self.modShift = IsShiftKeyDown() if button == 'LeftButton' then self:SetStyle('Active') end @@ -48,9 +56,12 @@ SetSuperTrackedQuestID(self.info.questID) end Quest.Open = function(self) - print('something something quest log') - QuestMapFrame_ShowQuestDetails(self.info.questID) - ToggleQuestLog() + QuestMapFrame_OpenToQuestDetails(self.info.questID) +end + +Quest.Remove = function(self) + RemoveQuestWatch(self.info.questIndex) + QuestPOIUpdateIcons() end @@ -62,3 +73,115 @@ Cheevs.Open = function(self) end +---------------------------------------------------------------------------------------- +--- frame template and scripts lifted from "QuestKing 2" by Barjack +--- url: http://mods.curse.com/addons/wow/questking +---------------------------------------------------------------------------------------- +local usedButtons = mod.Quest.itemButtons +local freeButtons = mod.Quest.freeButtons +mod.SetItemButton = function(block, info) + local itemInfo = info.specialItem + if not itemInfo then + return + end + --- .specialItem :: {link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable} + + + local itemButton + if not info.itemButton then + if #freeButtons >= 1 then + print('|cFF00FFFFfound a free button') + itemButton = freeButtons[#freeButtons] + freeButtons[#freeButtons] = nil + else + print('|cFFFF4400starting new button') + local buttonIndex = mod.Quest.numButtons + #freeButtons + 1 + itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate') + itemButton.buttonIndex = buttonIndex + itemButton:SetSize(48, 48) + itemButton:GetNormalTexture():SetSize(80,80) + end + mod.Quest.numButtons = mod.Quest.numButtons + 1 + else + print('|cFF00FF00found assigned button') + itemButton = info.itemButton + end + -- set values + info.itemButton = itemButton + block.itemButton = itemButton + usedButtons[info.questLogIndex] = itemButton + + itemButton:SetAttribute("type", "item") + itemButton:SetAttribute("item", itemInfo.link) + + itemButton.questLogIndex = info.questLogIndex + itemButton.charges = itemInfo.charges + itemButton.rangeTimer = -1 + itemButton.block = block + + SetItemButtonTexture(itemButton, itemInfo.icon) + SetItemButtonCount(itemButton, itemInfo.charges) + Veneer_QuestObjectiveItem_UpdateCooldown(itemButton); + + return itemButton +end +--- Clear an itemButton from the given block +mod.FreeItemButton = function(block, itemButton) + if block.itemButton ~= itemButton then + print('|cFFFF0088trying to release mismatched action button') + return + end + + block.itemButton = nil + block.icon:Hide() + + itemButton.block = nil + itemButton:Hide() + + usedButtons[itemButton.questLogIndex] = nil + freeButtons[#freeButtons + 1] = itemButton + mod.Quest.numButtons = mod.Quest.numButtons - 1 + print('|cFFFF0088released', itemButton:GetName(),'from', block:GetName()) +end + +function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed) + -- Handle range indicator + local rangeTimer = self.rangeTimer + if (rangeTimer) then + rangeTimer = rangeTimer - elapsed + if (rangeTimer <= 0) then + local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex) + if ((not charges) or (charges ~= self.charges)) then + QuestKing:UpdateTracker() + return + end + + local count = self.HotKey + local valid = IsQuestLogSpecialItemInRange(self.questLogIndex) + if (valid == 0) then + count:Show() + count:SetVertexColor(1.0, 0.1, 0.1) + elseif (valid == 1) then + count:Show() + count:SetVertexColor(0.6, 0.6, 0.6) + else + count:Hide() + end + rangeTimer = TOOLTIP_UPDATE_TIME + end + + self.rangeTimer = rangeTimer + end +end + +function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton) + local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex) + if (start) then + CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable) + if (duration > 0 and enable == 0) then + SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4) + else + SetItemButtonTextureVertexColor(itemButton, 1, 1, 1) + end + end +end \ No newline at end of file