Thread Tools Display Modes
04-14-17, 02:54 AM   #1
Noxley
A Murloc Raider
Join Date: Apr 2017
Posts: 7
Target Frame not fading in or out.

Hello all,

I`m using an addon 'daftFrameFade' made by: tonyis3l33t.
It's working great and all, except that the target frame is not fading in or out over time, it just pops up.

This is the .lua file:
Code:
local addonName, addonTable = ... ;

local addon = CreateFrame("Frame");

addon:RegisterEvent("PLAYER_LOGIN");
addon:RegisterEvent("PLAYER_REGEN_DISABLED");
addon:RegisterEvent("PLAYER_REGEN_ENABLED");
addon:RegisterEvent("PLAYER_FOCUS_CHANGED");
addon:RegisterEvent("PLAYER_TARGET_CHANGED");
addon:RegisterUnitEvent("UNIT_HEALTH_FREQUENT");
addon:RegisterUnitEvent("UNIT_POWER_FREQUENT");
addon:RegisterUnitEvent("QUEST_WATCH_LIST_CHANGED");
addon:RegisterUnitEvent("QUEST_WATCH_UPDATE");
addon:RegisterUnitEvent("UNIT_QUEST_LOG_CHANGED");


local TopEdgeHover = CreateFrame("Frame");
TopEdgeHover:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 0, 0);
TopEdgeHover:SetSize(UIParent:GetWidth(), 50);
TopEdgeHover:SetFrameStrata("BACKGROUND");
TopEdgeHover:SetScript("OnEnter", function() end);	


---- HELPER FUNCTIONS ----

function addon:FadeFrameIn(Frame)

	if UnitAffectingCombat("player") then
		if Frame:IsShown() then
			UIFrameFadeIn(Frame, addonTable.COMBAT_TIMETOFADEIN, Frame:GetAlpha(), addonTable.COMBAT_FADEIN);
		end;
	else
		if Frame:IsShown() then
			UIFrameFadeIn(Frame, addonTable.NOCOMBAT_TIMETOFADEIN, Frame:GetAlpha(), addonTable.NOCOMBAT_FADEIN);
		end;
	end;
end;


function addon:FadeFrameOut(Frame)

	if UnitAffectingCombat("player") or InCombatLockdown() then
		if Frame:IsShown() then
			UIFrameFadeOut(Frame, addonTable.COMBAT_TIMETOFADEOUT, Frame:GetAlpha(), addonTable.COMBAT_FADEOUT);
		end;
	else
		if Frame:IsShown() then
			UIFrameFadeOut(Frame, addonTable.NOCOMBAT_TIMETOFADEOUT, Frame:GetAlpha(), addonTable.NOCOMBAT_FADEOUT);
		end;
	end;
end;


function addon:SetupBasicFading(setting, Frame)
	if setting then
		Frame:SetScript("OnEnter", function(Frame)
			addon:FadeFrameIn(Frame);
		end);
		
		WorldFrame:HookScript("OnEnter", function()
			addon:FadeFrameOut(Frame);
		end);
	end;
end;


function addon:FadeOutAll()
	if addonTable.BUFFS then 
		addon:FadeFrameOut(BuffFrame);
	end;
	
	if addonTable.CHATTABS then 
		for i = 1, NUM_CHAT_WINDOWS do
			local chatFrameNumber = ("ChatFrame%d"):format(i);
			local ChatFrameNumberTab = _G[chatFrameNumber.."Tab"];
			
			addon:FadeFrameOut(ChatFrameNumberTab);
		end;
	end;
	
	if addonTable.MAINMENUBAR then
		addon:FadeFrameOut(MainMenuBar);
	end;
	
	if addonTable.MINIMAP then	
		addon:FadeFrameOut(Minimap);
		addon:FadeFrameOut(MinimapCluster);
	end;
	
	if addonTable.OBJECTIVETRACKER then
		addon:FadeFrameOut(ObjectiveTrackerFrame);
	end;

	if addonTable.PARTY then
		if not IsInRaid() then
			for i = 1, GetNumGroupMembers()-1 do
				local partyMemberFrameNumber = ("PartyMemberFrame%d"):format(i);
				local PartyMemberFrameNumber = _G[partyMemberFrameNumber];
				
				addon:FadeFrameOut(PartyMemberFrameNumber);				
			end;
		end;
	end;
	
	if addonTable.PLAYER then 
		addon:FadeFrameOut(PlayerFrame);
	end;

	if addonTable.RAIDMANAGER then
		if not CompactRaidFrameContainer:IsShown() then
			addon:FadeFrameOut(CompactRaidFrameManager);
		end;
	end;
	
	if addonTable.VEHICLESEATINDICATOR then
		addon:FadeFrameOut(VehicleSeatIndicator);
	end;
	
	if addonTable.WORLDSTATEFRAME then
		addon:FadeFrameOut(WorldStateAlwaysUpFrame);
	end;
	
end;


---- FUNCTIONS ----

function addon:HookFrames()


	WorldFrame:HookScript("OnEnter", function()
		
		if addonTable.BUFFS then
				
			if UnitName("target") == UnitName("player") then
				
			else
				addon:FadeFrameOut(BuffFrame);
			end;
			
		end;
		
		if addonTable.PLAYER then
		
			php = UnitHealth("player") / UnitHealthMax("player");
			pmp = UnitPower("player") / UnitPowerMax("player");
			
			if UnitExists("target") then
				
			else
			
				if php == 1 and (pmp == 1 or pmp == 0) then
					addon:FadeFrameOut(PlayerFrame);
				end;
			end;
		end;
	
		if addonTable.MINIMAP then
			addon:FadeFrameOut(Minimap);
			addon:FadeFrameOut(MinimapCluster);
		end;
		
		if addonTable.RAIDMANAGER then
			if not CompactRaidFrameContainer:IsShown() then
				addon:FadeFrameOut(CompactRaidFrameManager);
			end;
		end;
		
		if addonTable.OBJECTIVETRACKER then
			addon:FadeFrameOut(ObjectiveTrackerFrame);
		end;
		
		if addonTable.MAINMENUBAR then
			addon:FadeFrameOut(MainMenuBar);
		end;
		
	end);


	if addonTable.BUFFS then
		PlayerFrame:HookScript("OnEnter", function()
			addon:FadeFrameIn(BuffFrame);
		end);
		
		TopEdgeHover:HookScript("OnEnter", function()
			addon:FadeFrameIn(BuffFrame);
		end);
	end;


	if addonTable.CHATTABS then
		for i = 1, NUM_CHAT_WINDOWS do
			local chatFrameNumber = ("ChatFrame%d"):format(i);
			local ChatFrameNumberTab = _G[chatFrameNumber.."Tab"];
			
			addon:SetupBasicFading(addonTable.CHATTABS, ChatFrameNumberTab);
			
			ChatFrameNumberTab:HookScript("OnEnter", function()
				if self:IsShown() then
					addon:FadeFrameIn(GeneralDockManager);
				end;
			end);
		end;
	end;
	
	
	if addonTable.MAINMENUBAR then
	
	
		MainMenuBar:HookScript("OnEnter", function(self)
			addon:FadeFrameIn(self);
		end);
		
		
		ParentFrames = { 
		MainMenuBar, MultiBarBottomLeft, MultiBarBottomRight, 
		MultiBarLeft, MultiBarRight, StanceBarFrame, PetBarFrame,
		};
		
		
		for _, ParentFrame in ipairs(ParentFrames) do 
			ChildFrames = { ParentFrame:GetChildren() };
			
			for _, ChildFrame in ipairs(ChildFrames) do 
				ChildFrame:HookScript("OnEnter", function()
					addon:FadeFrameIn(MainMenuBar);
				end);
			end;
		end;

		
		local setScriptActionBars = {
			CharacterMicroButton,
			SpellbookMicroButton,
			TalentMicroButton,
			AchievementMicroButton,
			QuestLogMicroButton,
			GuildMicroButton,
			LFDMicroButton,
			CollectionsMicroButton,
			EJMicroButton,
			StoreMicroButton,
			MainMenuMicroButton,
			MainMenuBarBackpackButton,
			CharacterBag0Slot,
			CharacterBag1Slot,
			CharacterBag2Slot,
			CharacterBag3Slot,
		}
		

		for _, region in pairs(setScriptActionBars) do
			region:HookScript("OnEnter", function()
				addon:FadeFrameIn(MainMenuBar);
			end);
		end;
	end;


	if addonTable.MINIMAP then
		
		MinimapChildren = { Minimap:GetChildren() };
		for _, MinimapChild in ipairs(MinimapChildren) do 
			MinimapChild:HookScript("OnEnter", function()
				addon:FadeFrameIn(Minimap);
				addon:FadeFrameIn(MinimapCluster);
			end);
		end;
		
		MinimapClusterChildren = { MinimapCluster:GetChildren() };
		for _, MinimapClusterChild in ipairs(MinimapClusterChildren) do 
			MinimapClusterChild:HookScript("OnEnter", function()
				addon:FadeFrameIn(Minimap);
				addon:FadeFrameIn(MinimapCluster);
			end);
		end;
	end;


	if addonTable.RAIDMANAGER then
		if not CompactRaidFrameContainer:IsShown() then
			CompactRaidFrameManager:HookScript("OnEnter", function(self)
				addon:FadeFrameIn(self);
			end);
		end;
	end;


	if addonTable.PARTY then
		if PartyMemberFrame1:IsShown() then
			for i = 1, GetNumGroupMembers()-1 do
				local partyMemberFrameNumber = ("PartyMemberFrame%d"):format(i);
				local PartyMemberFrameNumberFrame = _G[partyMemberFrameNumber];

				addon:SetupBasicFading(addonTable.PARTY, PartyMemberFrameNumberFrame);
			end;
		end;
	end;
	
	
	if addonTable.PLAYER then
		PlayerFrame:HookScript("OnEnter", function(self)
			addon:FadeFrameIn(self);
		end);
		
		PlayerFrameChildren = { PlayerFrame:GetChildren() };
		for _, PlayerFrameChild in ipairs(PlayerFrameChildren) do 
			PlayerFrameChild:HookScript("OnEnter", function()
				addon:FadeFrameIn(PlayerFrame);
			end);
		end;
		
		PetFrameChildren = { PetFrame:GetChildren() };
		for _, PetFrameChild in ipairs(PetFrameChildren) do 
			PetFrameChild:HookScript("OnEnter", function()
				addon:FadeFrameIn(PetFrame);
			end);
		end;
	end;

	
	if addonTable.TARGET then
		TargetFrame:HookScript("OnShow", function(self)
			addon:FadeFrameIn(self);
		end);
	end;

	
	if addonTable.OBJECTIVETRACKER then
		ObjectiveTrackerFrame:SetScript("OnEnter", function(self)
			addon:FadeFrameIn(self);
		end);
		
		ObjectiveTrackerBlocksFrame:SetScript("OnEnter", function()
			addon:FadeFrameIn(ObjectiveTrackerFrame);
		end);
		
		ObjectiveTrackerFrameChildren = { ObjectiveTrackerFrame:GetChildren() };
		for _, ObjectiveTrackerFrameChild in ipairs(ObjectiveTrackerFrameChildren) do 
			ObjectiveTrackerFrameChild:SetScript("OnEnter", function()
				addon:FadeFrameIn(ObjectiveTrackerFrame);
			end);
		end;
		
		ObjectiveTrackerBlocksFrameChildren = { ObjectiveTrackerBlocksFrame:GetChildren() };
		for _, ObjectiveTrackerBlocksFrameChild in ipairs(ObjectiveTrackerBlocksFrameChildren) do 
			ObjectiveTrackerBlocksFrameChild:SetScript("OnEnter", function()
				addon:FadeFrameIn(ObjectiveTrackerFrame);
			end);
		end;
	end;
	
	
	if addonTable.WORLDSTATEFRAME then
		addon:SetupBasicFading(addonTable.WORLDSTATEFRAME, WorldStateAlwaysUpFrame);
		
		TopEdgeHover:HookScript("OnEnter", function()
			addon:FadeFrameIn(WorldStateAlwaysUpFrame);
		end);	
	end;
	
	addon:SetupBasicFading(addonTable.VEHICLESEATINDICATOR, VehicleSeatIndicator);
	

end;


---- MAIN ----


addon:SetScript("OnEvent", function(self, event, ...)

	if event == "PLAYER_LOGIN" then
		addon:HookFrames();
	end;
	
	if event == "PLAYER_LOGIN" 
	or event == "PLAYER_REGEN_DISABLED"
	or event == "PLAYER_REGEN_ENABLED" then
		addon:FadeOutAll();
	end;
	
	if event == "PLAYER_TARGET_CHANGED" then
		if UnitExists("target") 
		or UnitIsDead("target") then
			
			if addonTable.PLAYER then
				addon:FadeFrameIn(PlayerFrame);
			end;
			
			if addonTable.BUFFS then
				if UnitName("target") == UnitName("player") then
					addon:FadeFrameIn(BuffFrame);
				end;
			end;
			
		else
			
			if addonTable.PLAYER then
				addon:FadeFrameOut(PlayerFrame);
			end;
			
			if addonTable.BUFFS then
				addon:FadeFrameOut(BuffFrame);
			end;
		end;
	end;
	
	
	if addonTable.PLAYER then
		
		if event == "UNIT_HEALTH_FREQUENT" 
		or event == "UNIT_POWER_FREQUENT" then
		
			if  not UnitAffectingCombat("player") then
				local php = UnitHealth("player") / UnitHealthMax("player");
				local pmp = UnitPower("player") / UnitPowerMax("player");
			
				if php == 1 and (pmp == 1 or pmp == 0) then 
					if UnitExists("target") or UnitIsDead("target") then
						return;
					else 
						addon:FadeFrameOut(PlayerFrame);
					end;
				end;
			
				if php < 1 or (pmp < 1 and pmp > 0) then
					addon:FadeFrameIn(PlayerFrame);
				end;
			end;
		end;
	end;
	
	if addonTable.OBJECTIVETRACKER_PULSE then
		
		if event == "QUEST_WATCH_LIST_CHANGED" 
		or event == "UNIT_QUEST_LOG_CHANGED"
		or event == "QUEST_WATCH_UPDATE" then
			addon:FadeFrameIn(ObjectiveTrackerFrame);
			C_Timer.After(2, function() 
				addon:FadeFrameOut(ObjectiveTrackerFrame);
			end);
		end;
	end;
end);
And the .toc file:
Code:
## Interface: 70000
## Title: daftFrameFade
## Notes: Fades default frames based on mouseover and combat status.
## Author: Daftwise - US Destromath
## Version: 70000.22


daftFrameFade.lua
Options.lua
And the Options.lua file:
Code:
local addonName, addonTable = ... ;

addonTable.NOCOMBAT_TIMETOFADEIN = 1.0;
addonTable.NOCOMBAT_FADEIN = 1.0;
addonTable.NOCOMBAT_TIMETOFADEOUT = 1.0;
addonTable.NOCOMBAT_FADEOUT = 0.0;

addonTable.COMBAT_TIMETOFADEIN = 0.5;
addonTable.COMBAT_FADEIN = 1.0;
addonTable.COMBAT_TIMETOFADEOUT = 0.5;
addonTable.COMBAT_FADEOUT = 1.0;

-- true for enable, false for disable.
addonTable.BUFFS = false; -- will show when targeting self or when hovering over PlayerFrame
addonTable.CHATTABS = false;
addonTable.MAINMENUBAR = false;
addonTable.MINIMAP = false;
addonTable.OBJECTIVETRACKER = true;
addonTable.OBJECTIVETRACKER_PULSE = false; -- Briefly show the Object Tracker when updating achieve/quest progress
addonTable.PARTY = false;
addonTable.PLAYER = true;
addonTable.RAIDMANAGER = false;
addonTable.TARGET = true;
addonTable.VEHICLESEATINDICATOR = true;
addonTable.WORLDSTATEFRAME = true;  -- pvp and zone-wide progress frame
My question is if there is a way to slowly fade in and out the target frame if it excists. Also placed a post on Curse but no reply from Tony there.

Anyone that can help me?

Thanks in advance.

- Nox
  Reply With Quote
04-15-17, 07:54 AM   #2
MunkDev
A Scalebane Royal Guard
 
MunkDev's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2015
Posts: 431
Lua Code:
  1. function addon:FadeFrameIn(Frame)
  2.     if UnitAffectingCombat("player") then
  3.         UIFrameFadeIn(Frame, addonTable.COMBAT_TIMETOFADEIN, Frame:GetAlpha(), addonTable.COMBAT_FADEIN);
  4.     else
  5.         UIFrameFadeIn(Frame, addonTable.NOCOMBAT_TIMETOFADEIN, Frame:GetAlpha(), addonTable.NOCOMBAT_FADEIN);
  6.     end;
  7. end;
  8.  
  9.  
  10. function addon:FadeFrameOut(Frame)
  11.     if UnitAffectingCombat("player") or InCombatLockdown() then
  12.         UIFrameFadeOut(Frame, addonTable.COMBAT_TIMETOFADEOUT, Frame:GetAlpha(), addonTable.COMBAT_FADEOUT);
  13.     else
  14.         UIFrameFadeOut(Frame, addonTable.NOCOMBAT_TIMETOFADEOUT, Frame:GetAlpha(), addonTable.NOCOMBAT_FADEOUT);
  15.     end;
  16. end;

Explanation: It's not necessary for the frame in question to be shown to manipulate its alpha value. Alpha value (opacity) and whether the frame is currently shown are unrelated things, so I took out the requirements for the frames to be shown.

Also note that this bit affects the target frame in particular, so I'm guessing this is something you can turn off in the settings?
Lua Code:
  1. if addonTable.TARGET then
  2.         TargetFrame:HookScript("OnShow", function(self)
  3.             addon:FadeFrameIn(self);
  4.         end);
  5.     end;

If it doesn't have any in-game options, you should be able to disable that behaviour by setting the flag manually in the options file:
Lua Code:
  1. addonTable.TARGET = false;
__________________

Last edited by MunkDev : 04-15-17 at 07:59 AM.
  Reply With Quote
04-19-17, 07:39 AM   #3
Noxley
A Murloc Raider
Join Date: Apr 2017
Posts: 7
Thanks for your reply, MunkDev.

Was your fix supposed to make the target frame fade in and out? I replaced the code with yours but it still just pops up instantly.

Any idea?
  Reply With Quote

WoWInterface » Developer Discussions » Lua/XML Help » Target Frame not fading in or out.


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off