From ec7b8963de57e25e6d136621fe567091715fc666 Mon Sep 17 00:00:00 2001 From: Alar of Runetotem Date: Mon, 21 Nov 2016 23:17:04 +0100 Subject: [PATCH] Now you can equip follower directly from custom buttons --- OrderHall.lua | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) diff --git a/OrderHall.lua b/OrderHall.lua index 27a71ec..683e23a 100644 --- a/OrderHall.lua +++ b/OrderHall.lua @@ -24,8 +24,14 @@ local GameTooltip=GameTooltip local GCS local GHF local GHFMissions +local OHFFollowerTab +--*BEGIN +local UpgradeFrame +local UpgradeButtons={} +local pool={} function module:OnInitialize(...) if not ns.GHF then return end -- Waiting to be late initialized by init routine + OHFFollowerTab=OrderHallMissionFrame.FollowerTab -- Contains model view if GetAddOnEnableState(UnitName("player"),"OrderHallCommander") > 0 then ns.ingnoreHall=true self:Print("Delegating hall management to OrderHallCommander") @@ -78,7 +84,24 @@ function module:OnInitialize(...) Garrison_SortMissions_Class=L["Reward type"], }, L["Sort missions by:"],L["Original sort restores original sorting method, whatever it was (If you have another addon sorting mission, it should kick in again)"]) - +-- Uprades management + UpgradeFrame=CreateFrame("Frame",nil,OHFFollowerTab) + local u=UpgradeFrame + u:SetPoint("TOPLEFT",OHFFollowerTab,"TOPLEFT",5,-72) + u:SetPoint("BOTTOMLEFT",OHFFollowerTab,"BOTTOMLEFT",5,7) + u:SetWidth(70) + u:Show() + ---addon:SetBackdrop(u,C:Green()) + self:SecureHook("GarrisonMission_SetFollowerModel","RefreshUpgrades") + self:RegisterEvent("GARRISON_FOLLOWER_UPGRADED") + self:RegisterEvent("GARRISON_FOLLOWER_LIST_UPDATE","GARRISON_FOLLOWER_UPGRADED") + self:RegisterEvent("GARRISON_FOLLOWER_XP_CHANGED","GARRISON_FOLLOWER_UPGRADED") + UpgradeFrame:EnableMouse(true) +end +function module:GARRISON_FOLLOWER_UPGRADED(event,followerType,followerId) + if OHFFollowerTab:IsVisible() then + self:ScheduleTimer("RefreshUpgrades",0.3) + end end function module:AddLevel(source,button,mission,missionID,bigscreen) button.Level:SetPoint("CENTER", button, "TOPLEFT", 40, -36); @@ -105,7 +128,83 @@ function module:GetBigScreen() return false end --- - +function module:AcquireButton() + local b=tremove(pool) + if not b then + b=CreateFrame("Button",nil,UpgradeFrame,"GarrisonCommanderUpgradeButton,SecureActionbuttonTemplate") + b:EnableMouse(true) + b:RegisterForClicks("LeftButtonDown") + b:SetAttribute("type","item") + b:SetSize(40,40) + b.Icon:SetSize(40,40) + b:EnableMouse(true) + b:RegisterForClicks("LeftButtonDown") + end + tinsert(UpgradeButtons,b) + return b +end +function module:ReleaseButton(u) + u:Hide() + u:ClearAllPoints() + tinsert(pool,u) +end +function module:RefreshUpgrades(model,followerID,displayID,showWeapon) + print("YO") + if not OHFFollowerTab:IsVisible() then return end + if model then + UpgradeFrame:SetFrameStrata(model:GetFrameStrata()) + UpgradeFrame:SetFrameLevel(model:GetFrameLevel()+5) + end + if not followerID then followerID=OHFFollowerTab.followerID end + local follower=addon:GetHeroData(followerID) + for i=1,#UpgradeButtons do + self:ReleaseButton(UpgradeButtons[i]) + end + wipe(UpgradeButtons) + if not follower then print("No follower for ",followerID) return end + if follower.isTroop then return end + if not follower.isCollected then return end + if follower.status==GARRISON_FOLLOWER_ON_MISSION then return end + if follower.status==GARRISON_FOLLOWER_COMBAT_ALLY then return end + if follower.status==GARRISON_FOLLOWER_INACTIVE then return end + local u=UpgradeFrame + local previous + if follower.iLevel <850 then + for _,id in pairs(addon:GetData("Upgrades")) do + previous=self:RenderUpgradeButton(id,previous) + end + end + if follower.isMaxLevel and follower.quality ~=LE_ITEM_QUALITY_EPIC then + for _,id in pairs(addon:GetData("Xp")) do + previous=self:RenderUpgradeButton(id,previous) + end + end + if follower.quality >=LE_ITEM_QUALITY_RARE then + for _,id in pairs(addon:GetData("Equipment")) do + previous=self:RenderUpgradeButton(id,previous) + end + end +end +function module:RenderUpgradeButton(id,previous) + local qt=GetItemCount(id) + if qt== 0 then return previous end --Not rendering empty buttons + print("Rendering",id,"for",qt,"pieces") + local b=self:AcquireButton() + if previous then + b:SetPoint("TOPLEFT",previous,"BOTTOMLEFT",0,-8) + else + b:SetPoint("TOPLEFT",5,-10) + end + previous=b + b.itemID=id + b:SetAttribute("item",select(2,GetItemInfo(id))) + GarrisonMissionFrame_SetItemRewardDetails(b) + b.Quantity:SetFormattedText("%d",qt) + b.Quantity:SetTextColor(C.Yellow()) + b.Quantity:Show() + b:Show() + return b +end function module:Setup(this,...) --@debug@ print("Doing one time initialization for",this:GetName(),...) @@ -232,6 +331,19 @@ function module:OpenLastTab() print("Should restore tab") --@end-debug@ end +function addon:SetBackdrop(frame,r,g,b) + r=r or 1 + g=g or 0 + b=b or 0 + frame:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4} + } + ) + frame:SetBackdropColor(r,g,b,1) +end do local s=setmetatable({},{__index=function(t,k) return 0 end}) local FOLLOWER_STATUS_FORMAT=(ns.bigscreen and L["Followers status "] or "" ).. -- 1.7.9.5