View Single Post
04-17-19, 10:56 AM   #15
Fizzlemizz
I did that?
 
Fizzlemizz's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Dec 2011
Posts: 1,879
Your code above, the target frame (ft) is assigned an OnEvent script using:
Code:
ft:SetScript("OnEvent", function(self) SetPortraitTexture(self.Texture, "target")  end)
It didn't ever assign the OnEvent function (which would have required using a :HookScript or else it would have only replaced (overwritten) the original script that set the portrait texture if you had used SetScript).

This is an example using a single event frame (EventFrame) for all units rather than an OnEvent script for each unit frame. The separate event frame is not required eg. you could use the Player frame for all events, it just helps to make clearer what is happening.

You can add events to OnEventFunc and use it to update the units needed for that event.

Lua Code:
  1. --Target Classification
  2. local default = "Interface/AddOns/ClassicPortrait/media/default"
  3. local uClassTextures = {
  4.     worldboss = "Interface/AddOns/ClassicPortrait/media/worldboss",
  5.     boss = "Interface/AddOns/ClassicPortrait/media/boss",
  6.     elite = "Interface/AddOns/ClassicPortrait/media/elite",
  7.     rare = "Interface/AddOns/ClassicPortrait/media/rare",
  8.     rareelite = "Interface/AddOns/ClassicPortrait/media/rareelite",
  9. }
  10.  
  11. local UnitFrames = {} -- holder for unit frames created, Stored as UnitFrames[unit id] = frame
  12.  
  13. local fp = CreateFrame("Button", "FarmootPlayerPortrait", UIParent, "SecureUnitButtonTemplate")
  14. UnitFrames.player = fp -- add the player frame to the UnitFrames table
  15. fp:SetSize(70, 70)
  16. fp:SetPoint("CENTER", -80, -350)
  17. fp:SetAttribute("unit", "player")
  18. RegisterUnitWatch(fp)
  19. fp:SetAttribute("toggleForVehicle", true)
  20. fp:RegisterForClicks("AnyUp")
  21. fp:SetAttribute("*type1", "target")
  22. fp:SetAttribute("*type2", "togglemenu")
  23. fp:SetAttribute("*type3", "assist")
  24. fp.Texture = fp:CreateTexture("$parent_Texture", "BACKGROUND")
  25. fp.Texture:SetAllPoints()
  26. --SetPortraitTexture(fp.Texture, "player")
  27. fp.Border = fp:CreateTexture("$parent_Border", "BORDER")
  28. fp.Border:SetPoint("TOPLEFT", -6, 4)
  29. fp.Border:SetPoint("BOTTOMRIGHT", 6, -10)
  30. fp.Border:SetTexture("Interface/PLAYERFRAME/UI-PlayerFrame-Deathknight-Ring")
  31. fp.Border:SetVertexColor(1, 1, 0, 1)
  32.  
  33. --Target Frame
  34. local ft = CreateFrame("Button", "FarmootTargetPortrait", UIParent, "SecureUnitButtonTemplate")
  35. UnitFrames.target = ft -- add the target frame to the UnitFrames table
  36. ft:SetSize(70, 70)
  37. ft:SetPoint("CENTER", 110, -350)
  38. ft:SetAttribute("unit", "target")
  39. RegisterUnitWatch(ft)
  40. ft:SetAttribute("toggleForVehicle", true)
  41. ft:RegisterForClicks("AnyUp")
  42. ft:SetAttribute("*type1", "target")
  43. ft:SetAttribute("*type2", "togglemenu")
  44. ft:SetAttribute("*type3", "assist")
  45. ft.Texture = ft:CreateTexture("$parent_Texture", "BACKGROUND")
  46. ft.Texture:SetAllPoints()
  47. ft.Border = ft:CreateTexture("$parent_Border", "BORDER")
  48. ft.Border:SetPoint("TOPLEFT", -6, 4)
  49. ft.Border:SetPoint("BOTTOMRIGHT", 6, -10)
  50. ft.Border:SetVertexColor(1, 1, 0, 1)
  51.  
  52. local function OnEventFunc(self, event, ...)
  53.     local arg1 = ... -- add more args depending returns from on events used. UNIT_xxx events return the unit id ("player", "target" etc.) as arg1 (being first parameter of ...).
  54.     -- UnitFrames[arg1] eg. UnitFrames["player"]
  55.     if event == "UNIT_PORTRAIT_UPDATE" and UnitFrames[arg1] then
  56.         SetPortraitTexture(UnitFrames[arg1].Texture, arg1)
  57.     elseif event == "PLAYER_TARGET_CHANGED" and UnitExists("target") then
  58.         SetPortraitTexture(UnitFrames.target.Texture, "target")
  59.         UnitFrames.target.Border:SetTexture(uClassTextures[UnitClassification("target")] or default)
  60.     end
  61. end
  62. local EventFrame = CreateFrame("Frame")
  63. EventFrame:SetScript("OnEvent", OnEventFunc)
  64. EventFrame:RegisterEvent("UNIT_PORTRAIT_UPDATE")
  65. EventFrame:RegisterEvent("PLAYER_TARGET_CHANGED")
__________________
Fizzlemizz
Maintainer of Discord Unit Frames and Discord Art.
Author of FauxMazzle, FauxMazzleHUD and Move Pad Plus.

Last edited by Fizzlemizz : 04-17-19 at 02:01 PM.
  Reply With Quote