Quantcast

Optimization and estetical

Alar of Daggerspine [07-20-15 - 15:08]
Optimization and estetical

DrawSingleSlimButton renamed
Slightly optimized first loading
InProgress party now marked as full

Signed-off-by: Alar of Daggerspine <alar@aspide.it>
Filename
GarrisonCommander.lua
PartyCache.lua
Widgets.lua
diff --git a/GarrisonCommander.lua b/GarrisonCommander.lua
index 3f9d99c..7b5b707 100644
--- a/GarrisonCommander.lua
+++ b/GarrisonCommander.lua
@@ -331,7 +331,7 @@ function addon.Garrison_SortMissions_Chance(missionsList)
 	table.sort(missionsList, sorters.Chance);
 end
 function addon.Garrison_SortMissions_Age(missionsList)
-	addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
+	--addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
 	table.sort(missionsList, sorters.Age);
 end
 function addon.Garrison_SortMissions_Duration(missionsList)
@@ -339,7 +339,7 @@ function addon.Garrison_SortMissions_Duration(missionsList)
 	table.sort(missionsList, sorters.Duration);
 end
 function addon.Garrison_SortMissions_Followers(missionsList)
-	addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
+	--addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
 	table.sort(missionsList, sorters.Followers);
 end
 function addon.Garrison_SortMissions_Xp(missionsList)
@@ -347,11 +347,11 @@ function addon.Garrison_SortMissions_Xp(missionsList)
 	table.sort(missionsList, sorters.Xp);
 end
 function addon.Garrison_SortMissions_Original(missionsList)
-	addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
+	--addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
 	origGarrison_SortMissions(missionsList)
 end
 function addon.Garrison_SortMissions_Class(missionsList)
-	addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
+	--addon:OnAllGarrisonMissions(function(missionID) addon:MatchMaker(missionID) end)
 	table.sort(missionsList, sorters.Class);
 end
 local t={}
@@ -552,10 +552,11 @@ function addon:GetCounterBias(missionID,threat)
 	if (type(index)=="table" and type(counters)=="table") then
 		index=index[cleanicon(tostring(threat))]
 		if (type(index) == "table") then
+			local members=self:GetParty(missionID,'members',empty)
 			for i=1,#index do
 				local follower=data[index[i]]
 				if ((tonumber(follower.bias) or -1) > bias) then
-					if (tContains(self:GetParty(missionID).members,follower.followerID)) then
+					if (tContains(members,follower.followerID)) then
 						if (dbg) then print("   Choosen",self:GetFollowerData(follower.followerID,'fullname')) end
 						bias=follower.bias
 						who=follower.name
@@ -2468,9 +2469,6 @@ function over.GarrisonMissionPage_Close(self)
 	-- I hooked this handler, so I dont want it to be called in the middle of cleanup operations
 	GarrisonMissionFrame.MissionTab.MissionList:Show();
 end
-function over.GarrisonMissionButton_SetRewards(frame,rewards,numRewards)
-	addon:DrawSingleButton(GMF,frame,false,ns.bigscreen)
-end
 function addon:AddRewards(frame, rewards, numRewards)
 	if (numRewards > 0) then
 		local index = 1;
@@ -2630,10 +2628,10 @@ end
 -- @param bigscreen enlarge button or not

 function addon:DrawSingleButton(page,button,progressing,bigscreen)
+	button:SetAlpha(1.0)
 	local mission=button.info
 	if mission then
 		local missionID=mission.missionID
-		if not button.party then button.party=self:GetParty(missionID) end
 		self:AddStandardDataToButton(page,button,mission,missionID,bigscreen)
 		self:AddIndicatorToButton(button,mission,missionID,bigscreen)
 		self:AddRewards(button, mission.rewards, mission.numRewards);
@@ -2660,30 +2658,44 @@ function addon:DrawSingleButton(page,button,progressing,bigscreen)
 		button.info=nil
 	end
 end
-function addon:DrawSingleSlimButton(page,button,progressing,bigscreen)
-	local mission=button.info
+function addon:DrawSlimButton(page,frame,progressing,bigscreen)
+	local mission=frame.info
 	if mission then
 		local missionID=mission.missionID
-		local frame=button
-		self:AddStandardDataToButton(page,button,mission,missionID,bigscreen)
-		self.AddRewards(button, mission.rewards, mission.numRewards);
+		self:AddStandardDataToButton(page,frame,mission,missionID,bigscreen)
+		self:AddRewards(frame, mission.rewards, mission.numRewards);
 		if mission.followerTypeID==LE_FOLLOWER_TYPE_GARRISON_6_0 then
-			self:AddFollowersToButton(button,mission,missionID,bigscreen)
+			self:AddFollowersToButton(frame,mission,missionID,bigscreen)
 		else
-			self:AddShipsToButton(button,mission,missionID,bigscreen)
+			self:AddShipsToButton(frame,mission,missionID,bigscreen)
 		end
 		frame.Title:SetPoint("TOPLEFT",frame.Indicators,"TOPRIGHT",0,-5)
 		frame.Success:SetPoint("LEFT",frame.Indicators,"RIGHT",0,0)
 		frame.Failure:SetPoint("LEFT",frame.Indicators,"RIGHT",0,0)
 		frame.Summary:ClearAllPoints()
 		frame.Summary:SetPoint("TOPLEFT",frame.Title,"BOTTOMLEFT",0,-10)
-		button:Show();
+		frame:Show();
 	else
-		button:Hide();
-		button.info=nil
+		frame:Hide();
+		frame.info=nil
 	end
 end
 function addon:AddStandardDataToButton(page,button,mission,missionID,bigscreen)
+	if (bigscreen) then
+		button.Rewards[1]:SetPoint("RIGHT",button,"RIGHT",-500 - (GMM and 40 or 0),0)
+		local width=GMF.MissionTab.MissionList.showInProgress and BIGBUTTON or SMALLBUTTON
+		button:SetWidth(width+600)
+		button.Rewards[1]:SetPoint("RIGHT",button,"RIGHT",-500 - (GMM and 40 or 0),0)
+	end
+	button.MissionType:SetAtlas(mission.typeAtlas);
+	if page then return end
+	if (mission.inProgress) then
+		button.Overlay:Show();
+		button.Summary:SetText(mission.timeLeft.." "..RED_FONT_COLOR_CODE..GARRISON_MISSION_IN_PROGRESS..FONT_COLOR_CODE_CLOSE);
+	else
+		button.Overlay:Hide();
+	end
+
 	button.Title:SetWidth(0);
 --[===[@non-debug@
 	button.Title:SetText(mission.name)
@@ -2735,18 +2747,6 @@ function addon:AddStandardDataToButton(page,button,mission,missionID,bigscreen)
 	end

 	button:Enable();
-	if (mission.inProgress) then
-		button.Overlay:Show();
-		button.Summary:SetText(mission.timeLeft.." "..RED_FONT_COLOR_CODE..GARRISON_MISSION_IN_PROGRESS..FONT_COLOR_CODE_CLOSE);
-	else
-		button.Overlay:Hide();
-	end
-	if (bigscreen) then
-		button.Rewards[1]:SetPoint("RIGHT",button,"RIGHT",-500 - (GMM and 40 or 0),0)
-		local width=GMF.MissionTab.MissionList.showInProgress and BIGBUTTON or SMALLBUTTON
-		button:SetWidth(width+600)
-		button.Rewards[1]:SetPoint("RIGHT",button,"RIGHT",-500 - (GMM and 40 or 0),0)
-	end
 	button.MissionType:SetPoint("TOPLEFT",5,-2)
 	local n=mission.numRewards
 	local w=button:GetWidth()-175 -- 655 for standard 830 button
@@ -2762,7 +2762,6 @@ function addon:AddStandardDataToButton(page,button,mission,missionID,bigscreen)
 		button.Summary:ClearAllPoints();
 		button.Summary:SetPoint("TOPLEFT", button.Title, "BOTTOMLEFT", 0, -4);
 	end
-	button.MissionType:SetAtlas(mission.typeAtlas);
 end

 function addon:AddThreatsToButton(button,mission,missionID,bigscreen)
@@ -2778,7 +2777,7 @@ function addon:AddThreatsToButton(button,mission,missionID,bigscreen)
 					button.GcThreats={}
 				end
 				button.Env.missionID=missionID
-				local party=self:GetParty(missionID)
+				local party=button.party
 				if mission.typeIcon then
 					button.Env.IsEnv=true
 					button.Env:Show()
@@ -2799,6 +2798,7 @@ function addon:AddThreatsToButton(button,mission,missionID,bigscreen)
 					button.Env:Hide()
 				end
 				local enemies=mission.enemies or select(8,G.GetMissionInfo(missionID))
+				local threats=self:GetParty(missionID,'threats')
 				for i,enemy in ipairs(enemies) do
 					for mechanicID, mechanic in pairs(enemy.mechanics) do
 						local th=button.GcThreats[threatIndex]
@@ -2809,7 +2809,7 @@ function addon:AddThreatsToButton(button,mission,missionID,bigscreen)
 							th:SetPoint("BOTTOMLEFT",button,165 + 35 * threatIndex,8)
 							button.GcThreats[threatIndex]=th
 						end
-						th.countered=self:SetThreatColor(th,self:GetParty(missionID,'threats')[threatIndex])
+						th.countered=self:SetThreatColor(th,threats[threatIndex])
 						th.Icon:SetTexture(mechanic.icon)
 						th.texture=mechanic.icon
 						th.Name=mechanic.name
@@ -2850,14 +2850,21 @@ function addon:AddIndicatorToButton(button,mission,missionID,bigscreen)
 	local panel=button.gcINDICATOR
 	local perc=select(4,G.GetPartyMissionInfo(missionID))
 	if button.party then perc=button.party.perc end
-	panel.Percent:SetFormattedText(GARRISON_MISSION_PERCENT_CHANCE,perc)
-	panel.Percent:SetTextColor(self:GetDifficultyColors(perc))
+	if button.party.full then
+		panel.Percent:SetFormattedText(GARRISON_MISSION_PERCENT_CHANCE,perc)
+		panel.Percent:SetTextColor(self:GetDifficultyColors(perc))
+	else
+		panel.Percent:SetText("N/A")
+		panel.Percent:SetTextColor(C:Silver())
+	end
 	panel.Percent:SetWidth(80)
 	panel.Percent:Show()
 	if (GMFMissions.showInProgress) then
 		panel.Percent:SetJustifyV("CENTER")
+		panel.Percent:SetJustifyH("RIGHT")
 		panel.Age:Hide()
 	else
+		panel.Percent:SetJustifyV("BOTTOM")
 		panel.Percent:SetJustifyH("RIGHT")
 		panel.Age:SetFormattedText("Expires in \n%s",mission.offerTimeRemaining)
 		panel.Age:SetTextColor(self:GetAgeColor(mission.offerEndTime))
@@ -2921,7 +2928,6 @@ function addon:AddFollowersToButton(button,mission,missionID,bigscreen)
 		button.gcPANEL.Party[1]:SetPoint("BOTTOMLEFT",button.Rewards[1],"BOTTOMLEFT", position,0)
 	end
 	local party=button.party
-	if not party then party=self:GetParty(missionID) end
 	local t,b
 	if not GMFMissions.showInProgress then
 		b=G.GetBuffedFollowersForMission(missionID)
@@ -2971,9 +2977,21 @@ function over.GarrisonMissionFrame_SelectTab(self,tab,...)
 		ns.GMC:Hide()
 	end
 end
---override("GarrisonMissionList_Update")
-override("GarrisonMissionButton_SetRewards",true)
---GMFMissions.listScroll.update = over.GarrisonMissionList_Update
+function addon:HookedGarrisonMissionButton_SetRewards(frame,rewards,numRewards)
+	frame.party=self:GetParty(frame.info.missionID)
+	self:DrawSingleButton(GMF,frame,false,ns.bigscreen)
+end
+
+function addon:HookedGMFMissions_update(frame)
+	for _,b in ipairs(frame.buttons) do
+		if b.info then
+			b.party=self:GetParty(b.info.missionID)
+			self:DrawSingleButton(GMF,b,false,ns.bigscreen)
+		end
+	end
+end
+addon:SafeSecureHook(GMFMissions.listScroll,"update","HookedGMFMissions_update")
+addon:SafeSecureHook("GarrisonMissionButton_SetRewards")

 override("GarrisonMissionButton_OnEnter")
 override("GarrisonMissionPageFollowerFrame_OnEnter")
diff --git a/PartyCache.lua b/PartyCache.lua
index 66eddf7..4033a6d 100644
--- a/PartyCache.lua
+++ b/PartyCache.lua
@@ -211,6 +211,7 @@ function addon:GetParty(missionID,key,default)
 		if not party.perc or party.perc < 1 then
 			party.perc=G.GetMissionSuccessChance(missionID)
 		end
+		party.full=true
 		--Running Mission, taking followers from mission data
 		local followers=self:GetMissionData(missionID,'followers')
 		print(followers)
diff --git a/Widgets.lua b/Widgets.lua
index ba6ab7d..6f404fd 100644
--- a/Widgets.lua
+++ b/Widgets.lua
@@ -368,13 +368,13 @@ local function GMCMissionButton()
 		self.frame.info=mission
 		self.frame.fromFollowerPage=true
 		self.frame:EnableMouse(true)
-		self.frame.party=party
+		self.frame.party=party or addon:GetParty(mission.missionID)
 		if self.type==Type1 then
 			addon:DrawSingleButton(false,self.frame,false,false)
 			self.frame:SetScript("OnEnter",GarrisonMissionButton_OnEnter)
 			self.frame:SetScript("OnLeave",ns.OnLeave)
 		else
-			addon:DrawSingleSlimButton(false,self.frame,false,false)
+			addon:DrawSlimButton(false,self.frame,false,false)
 			self.frame:SetScript("OnEnter",nil)
 			self.frame:SetScript("OnLeave",nil)
 		end