Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 58.85 KB | None | 0 0
  1. local ADDON_NAME, ns = ...
  2. local oUF = ns.oUF or oUF
  3. assert(oUF, "Tukui was unable to locate oUF install.")
  4.  
  5. ns._Objects = {}
  6. ns._Headers = {}
  7.  
  8. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  9. if not C["unitframes"].enable == true then return end
  10.  
  11. ------------------------------------------------------------------------
  12. --  local variables
  13. ------------------------------------------------------------------------
  14.  
  15. local font1 = C["media"].uffont
  16. local font2 = C["media"].font
  17. local pixelfont = C["media"].pixelfont
  18. local normTex = C["media"].normTex
  19. local glowTex = C["media"].glowTex
  20. local bubbleTex = C["media"].bubbleTex
  21.  
  22. local backdrop = {
  23.     bgFile = C["media"].blank,
  24.     insets = {top = -T.mult, left = -T.mult, bottom = -T.mult, right = -T.mult},
  25. }
  26.  
  27. ------------------------------------------------------------------------
  28. --  Layout
  29. ------------------------------------------------------------------------
  30.  
  31. local function Shared(self, unit)
  32.     -- set our own colors
  33.     self.colors = T.oUF_colors
  34.    
  35.     -- register click
  36.     self:RegisterForClicks("AnyUp")
  37.     self:SetScript('OnEnter', UnitFrame_OnEnter)
  38.     self:SetScript('OnLeave', UnitFrame_OnLeave)
  39.    
  40.     -- menu? lol
  41.     self.menu = T.SpawnMenu
  42.  
  43.     -- backdrop for every units
  44.     self:SetBackdrop(backdrop)
  45.     self:SetBackdropColor(0, 0, 0)
  46.  
  47.     -- this is the glow border
  48.     self:CreateShadow("Default")
  49.    
  50.     ------------------------------------------------------------------------
  51.     --  Features we want for all units at the same time
  52.     ------------------------------------------------------------------------
  53.    
  54.     -- here we create an invisible frame for all element we want to show over health/power.
  55.     local InvFrame = CreateFrame("Frame", nil, self)
  56.     InvFrame:SetFrameStrata("HIGH")
  57.     InvFrame:SetFrameLevel(5)
  58.     InvFrame:SetAllPoints()
  59.    
  60.     -- symbols, now put the symbol on the frame we created above.
  61.     local RaidIcon = InvFrame:CreateTexture(nil, "OVERLAY")
  62.     RaidIcon:SetTexture("Interface\\AddOns\\Tukui\\medias\\textures\\raidicons.blp") -- thx hankthetank for texture
  63.     RaidIcon:SetHeight(20)
  64.     RaidIcon:SetWidth(20)
  65.     RaidIcon:SetPoint("TOP", 0, 11)
  66.     self.RaidIcon = RaidIcon
  67.    
  68.     ------------------------------------------------------------------------
  69.     --  Player and Target units layout (mostly mirror'd)
  70.     ------------------------------------------------------------------------
  71.    
  72.     if (unit == "player" or unit == "target") then
  73.         -- create a panel
  74.         local panel = CreateFrame("Frame", nil, self)
  75.         panel:CreatePanel("Default", 250, 15, "BOTTOM", self, "BOTTOM", 0, -3)
  76.         panel:SetFrameLevel(2)
  77.         panel:SetFrameStrata("MEDIUM")
  78.         panel:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  79.         self.panel = panel
  80.         self.panel:Hide()
  81.    
  82.         -- health bar
  83.         local health = CreateFrame('StatusBar', nil, self)
  84.         health:Height(26)
  85.         health:SetPoint("TOPLEFT")
  86.         health:SetPoint("TOPRIGHT")
  87.         health:SetStatusBarTexture(normTex)
  88.        
  89.         -- border
  90.         local Healthbg = CreateFrame("Frame", nil, self)
  91.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  92.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-8))
  93.         T.SetTemplate(Healthbg)
  94.         T.CreateShadow(Healthbg)
  95.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  96.         Healthbg:SetFrameLevel(2)
  97.         self.Healthbg = Healthbg
  98.                
  99.         -- health bar background
  100.         local healthBG = health:CreateTexture(nil, 'BORDER')
  101.         healthBG:SetAllPoints()
  102.         healthBG:SetTexture(.1, .1, .1)
  103.    
  104.         health.value = T.SetFontString(health, pixelfont, 8, "MONOCHROMEOUTLINE")
  105.         health.value:Point("RIGHT", health, "RIGHT", T.Scale(-2), T.Scale(-2))
  106.         health.PostUpdate = T.PostUpdateHealth
  107.                
  108.         self.Health = health
  109.         self.Health.bg = healthBG
  110.  
  111.         health.frequentUpdates = true
  112.         if C["unitframes"].showsmooth == true then
  113.             health.Smooth = true
  114.         end
  115.        
  116.         if C["unitframes"].unicolor == true then
  117.             health.colorTapping = false
  118.             health.colorDisconnected = false
  119.             health.colorClass = false
  120.             health:SetStatusBarColor(.3, .3, .3, 1)
  121.             healthBG:SetVertexColor(.1, .1, .1, 1)     
  122.         else
  123.             health.colorDisconnected = true
  124.             health.colorTapping = true 
  125.             health.colorClass = true
  126.             health.colorReaction = true        
  127.         end
  128.  
  129.         -- power
  130.         local power = CreateFrame('StatusBar', nil, self)
  131.         power:Height(8)
  132.         power:Point("TOPLEFT", health, "BOTTOMLEFT", 0, -6)
  133.         power:Point("TOPRIGHT", health, "BOTTOMRIGHT", 0, -6)
  134.         power:SetStatusBarTexture(normTex)
  135.        
  136.         -- power border
  137.         local powerborder = CreateFrame("Frame", nil, self)
  138.         T.CreatePanel(powerborder, 1, 1, "CENTER", health, "CENTER", 0, 0)
  139.         powerborder:ClearAllPoints()
  140.         powerborder:SetPoint("TOPLEFT", power, T.Scale(-2), T.Scale(2))
  141.         powerborder:SetPoint("BOTTOMRIGHT", power, T.Scale(2), T.Scale(-2))
  142.         powerborder:SetFrameStrata("MEDIUM")
  143.         T.CreateShadow(powerborder)
  144.         self.powerborder = powerborder
  145.        
  146.         local powerBG = power:CreateTexture(nil, 'BORDER')
  147.         powerBG:SetAllPoints(power)
  148.         powerBG:SetTexture(normTex)
  149.         powerBG.multiplier = 0.3
  150.        
  151.         power.value = T.SetFontString(health, pixelfont, 8, "MONOCHROMEOUTLINE")
  152.         power.value:Point("LEFT", health, "LEFT", T.Scale(2), T.Scale(-2))
  153.         power.PreUpdate = T.PreUpdatePower
  154.         power.PostUpdate = T.PostUpdatePower
  155.                
  156.         self.Power = power
  157.         self.Power.bg = powerBG
  158.        
  159.         power.frequentUpdates = true
  160.         power.colorDisconnected = true
  161.  
  162.         if C["unitframes"].showsmooth == true then
  163.             power.Smooth = true
  164.         end
  165.        
  166.         if C["unitframes"].unicolor == true then
  167.             power.colorTapping = true
  168.             power.colorClass = true
  169.             powerBG.multiplier = 0.1               
  170.         else
  171.             power.colorPower = true
  172.         end
  173.  
  174.         ------------------------------------------------------------------------
  175.         --  Debuff Highlight
  176.         ------------------------------------------------------------------------
  177.        if unit == "player" then
  178.         local dbh = self.Health:CreateTexture(nil, "OVERLAY", health)
  179.         dbh:SetAllPoints(health)
  180.         dbh:SetTexture(C["media"].normTex)
  181.         dbh:SetBlendMode("ADD")
  182.         dbh:SetVertexColor(0,0,0,0)
  183.         self.DebuffHighlight = dbh
  184.         self.DebuffHighlightFilter = true
  185.         self.DebuffHighlightAlpha = 0.6
  186.         end
  187.        
  188.         -- portraits
  189.         if (C["unitframes"].charportrait == true) then
  190.             local portrait = CreateFrame("PlayerModel", self:GetName().."_Portrait", self)
  191.             portrait:SetFrameLevel(1)
  192.             portrait:SetHeight(70)
  193.             portrait:SetWidth(55)
  194.             portrait:SetAlpha(1)
  195.             if unit == "player" then
  196.                 portrait:SetPoint("TOPRIGHT", health, "TOPLEFT", -7,0)
  197.                 portrait:SetPoint("BOTTOMRIGHT", power, "BOTTOMLEFT", -7,0)
  198.             elseif unit == "target" then
  199.                 portrait:SetPoint("TOPLEFT", health, "TOPRIGHT", 7,0)
  200.                 portrait:SetPoint("BOTTOMLEFT", power, "BOTTOMRIGHT", 7,0)
  201.             end
  202.             -- table.insert(self.__elements, TukuiDB.HidePortrait)
  203.             self.Portrait = portrait
  204.            
  205.             -- Portrait Border
  206.             portrait.bg = CreateFrame("Frame",nil,portrait)
  207.             portrait.bg:SetPoint("BOTTOMLEFT",portrait,"BOTTOMLEFT",T.Scale(-2),T.Scale(-2))
  208.             portrait.bg:SetPoint("TOPRIGHT",portrait,"TOPRIGHT",T.Scale(2),T.Scale(2))
  209.             T.SetTemplate(portrait.bg)
  210.             portrait.bg:SetFrameStrata("BACKGROUND")
  211.         end
  212.        
  213.         if T.myclass == "PRIEST" and C["unitframes"].weakenedsoulbar then
  214.             local ws = CreateFrame("StatusBar", self:GetName().."_WeakenedSoul", power)
  215.             ws:SetAllPoints(power)
  216.             ws:SetStatusBarTexture(C.media.normTex)
  217.             ws:GetStatusBarTexture():SetHorizTile(false)
  218.             ws:SetBackdrop(backdrop)
  219.             ws:SetBackdropColor(unpack(C.media.backdropcolor))
  220.             ws:SetStatusBarColor(191/255, 10/255, 10/255)
  221.            
  222.             self.WeakenedSoul = ws
  223.         end
  224.        
  225.         --[[ leaving here just in case someone want to use it, we now use our own Alt Power Bar.
  226.         -- alt power bar
  227.         local AltPowerBar = CreateFrame("StatusBar", self:GetName().."_AltPowerBar", self.Health)
  228.         AltPowerBar:SetFrameLevel(0)
  229.         AltPowerBar:SetFrameStrata("LOW")
  230.         AltPowerBar:SetHeight(5)
  231.         AltPowerBar:SetStatusBarTexture(C.media.normTex)
  232.         AltPowerBar:GetStatusBarTexture():SetHorizTile(false)
  233.         AltPowerBar:SetStatusBarColor(163/255,  24/255,  24/255)
  234.         AltPowerBar:EnableMouse(true)
  235.  
  236.         AltPowerBar:Point("LEFT", TukuiInfoLeft, 2, -2)
  237.         AltPowerBar:Point("RIGHT", TukuiInfoLeft, -2, 2)
  238.         AltPowerBar:Point("TOP", TukuiInfoLeft, 2, -2)
  239.         AltPowerBar:Point("BOTTOM", TukuiInfoLeft, -2, 2)
  240.        
  241.         AltPowerBar:SetBackdrop({
  242.             bgFile = C["media"].blank,
  243.             edgeFile = C["media"].blank,
  244.             tile = false, tileSize = 0, edgeSize = 1,
  245.             insets = { left = 0, right = 0, top = 0, bottom = T.Scale(-1)}
  246.         })
  247.         AltPowerBar:SetBackdropColor(0, 0, 0)
  248.  
  249.         self.AltPowerBar = AltPowerBar
  250.         --]]
  251.            
  252.         if (unit == "player") then
  253.  
  254.             -- custom info (low mana warning)
  255.             FlashInfo = CreateFrame("Frame", "TukuiFlashInfo", self)
  256.             FlashInfo:SetScript("OnUpdate", T.UpdateManaLevel)
  257.             FlashInfo.parent = self
  258.             FlashInfo:SetAllPoints(panel)
  259.             FlashInfo.ManaLevel = T.SetFontString(FlashInfo, pixelfont, 8, "OUTLINEMONOCHROME")
  260.             FlashInfo.ManaLevel:SetPoint("CENTER", panel, "CENTER", 0, 0)
  261.             self.FlashInfo = FlashInfo
  262.            
  263.             -- pvp status text
  264.             local status = T.SetFontString(panel, pixelfont, 8, "OUTLINEMONOCHROME")
  265.             status:SetPoint("CENTER", panel, "CENTER", 0, 0)
  266.             status:SetTextColor(0.69, 0.31, 0.31, 0)
  267.             self.Status = status
  268.             self:Tag(status, "[pvp]")
  269.            
  270.             -- leader icon
  271.             local Leader = InvFrame:CreateTexture(nil, "OVERLAY")
  272.             Leader:Height(14)
  273.             Leader:Width(14)
  274.             Leader:Point("TOPLEFT", 2, 8)
  275.             self.Leader = Leader
  276.            
  277.             -- master looter
  278.             local MasterLooter = InvFrame:CreateTexture(nil, "OVERLAY")
  279.             MasterLooter:Height(14)
  280.             MasterLooter:Width(14)
  281.             self.MasterLooter = MasterLooter
  282.             self:RegisterEvent("PARTY_LEADER_CHANGED", T.MLAnchorUpdate)
  283.             self:RegisterEvent("PARTY_MEMBERS_CHANGED", T.MLAnchorUpdate)
  284.            
  285.             -- show druid mana when shapeshifted in bear, cat or whatever
  286.             if T.myclass == "DRUID" then
  287.                 CreateFrame("Frame"):SetScript("OnUpdate", function() T.UpdateDruidMana(self) end)
  288.                 local DruidMana = T.SetFontString(health, pixelfont, 8, "OUTLINEMONOCHROME")
  289.                 DruidMana:SetTextColor(1, 0.49, 0.04)
  290.                 self.DruidMana = DruidMana
  291.             end
  292.            
  293.             if C["unitframes"].classbar then
  294.                 if T.myclass == "DRUID" then           
  295.                     local eclipseBar = CreateFrame('Frame', nil, self)
  296.                     eclipseBar:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 1)
  297.                     if T.lowversion then
  298.                         eclipseBar:Size(186, 8)
  299.                     else
  300.                         eclipseBar:Size(250, 8)
  301.                     end
  302.                     eclipseBar:SetFrameStrata("MEDIUM")
  303.                     eclipseBar:SetFrameLevel(8)
  304.                     eclipseBar:SetTemplate("Default")
  305.                     eclipseBar:SetBackdropBorderColor(0,0,0,0)
  306.                     eclipseBar:SetScript("OnShow", function() T.EclipseDisplay(self, false) end)
  307.                     eclipseBar:SetScript("OnUpdate", function() T.EclipseDisplay(self, true) end) -- just forcing 1 update on login for buffs/shadow/etc.
  308.                     eclipseBar:SetScript("OnHide", function() T.EclipseDisplay(self, false) end)
  309.                    
  310.                     local lunarBar = CreateFrame('StatusBar', nil, eclipseBar)
  311.                     lunarBar:SetPoint('LEFT', eclipseBar, 'LEFT', 0, 0)
  312.                     lunarBar:SetSize(eclipseBar:GetWidth(), eclipseBar:GetHeight())
  313.                     lunarBar:SetStatusBarTexture(normTex)
  314.                     lunarBar:SetStatusBarColor(.30, .52, .90)
  315.                     eclipseBar.LunarBar = lunarBar
  316.  
  317.                     local solarBar = CreateFrame('StatusBar', nil, eclipseBar)
  318.                     solarBar:SetPoint('LEFT', lunarBar:GetStatusBarTexture(), 'RIGHT', 0, 0)
  319.                     solarBar:SetSize(eclipseBar:GetWidth(), eclipseBar:GetHeight())
  320.                     solarBar:SetStatusBarTexture(normTex)
  321.                     solarBar:SetStatusBarColor(.80, .82,  .60)
  322.                     eclipseBar.SolarBar = solarBar
  323.  
  324.                     local eclipseBarText = eclipseBar:CreateFontString(nil, 'OVERLAY')
  325.                     eclipseBarText:SetPoint('TOP', panel)
  326.                     eclipseBarText:SetPoint('BOTTOM', panel)
  327.                     eclipseBarText:SetFont(C.media.pixelfont, 8, "MONOCHROMEOUTLINE")
  328.                     eclipseBar.PostUpdatePower = T.EclipseDirection
  329.                    
  330.                     -- hide "low mana" text on load if eclipseBar is show
  331.                     if eclipseBar and eclipseBar:IsShown() then FlashInfo.ManaLevel:SetAlpha(0) end
  332.  
  333.                     self.EclipseBar = eclipseBar
  334.                     self.EclipseBar.Text = eclipseBarText
  335.                 end
  336.  
  337.                 -- set holy power bar or shard bar
  338.                 if (T.myclass == "WARLOCK" or T.myclass == "PALADIN") then
  339.  
  340.                     local bars = CreateFrame("Frame", nil, self)
  341.                     bars:SetPoint("BOTTOMLEFT", self, "TOPLEFT", T.Scale(0), T.Scale(5))
  342.                     bars:Width(T.Scale(234))
  343.                     bars:Height(T.Scale(8))
  344.                    
  345.                     for i = 1, 3 do                
  346.                         bars[i]=CreateFrame("StatusBar", self:GetName().."_Shard"..i, self)
  347.                         bars[i]:Height(6)                  
  348.                         bars[i]:SetStatusBarTexture(normTex)
  349.                         bars[i]:GetStatusBarTexture():SetHorizTile(false)
  350.  
  351.                         if T.myclass == "WARLOCK" then
  352.                             bars[i]:SetStatusBarColor(255/255,101/255,101/255)
  353.                         elseif T.myclass == "PALADIN" then
  354.                             bars[i]:SetStatusBarColor(228/255,225/255,16/255)
  355.                         end
  356.                        
  357.                         if i == 1 then
  358.                             bars[i]:SetPoint("LEFT", bars)
  359.                             bars[i]:SetWidth(T.Scale(234 /3))
  360.                         else
  361.                             bars[i]:Point("LEFT", bars[i-1], "RIGHT", T.Scale(8), 0)
  362.                             bars[i]:SetWidth(T.Scale(234 /3))
  363.                         end
  364.                        
  365.                         bars[i].border = CreateFrame("Frame", nil, bars)
  366.                         bars[i].border:SetPoint("TOPLEFT", bars[i], "TOPLEFT", T.Scale(-2), T.Scale(2))
  367.                         bars[i].border:SetPoint("BOTTOMRIGHT", bars[i], "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  368.                         bars[i].border:SetFrameStrata("BACKGROUND")
  369.                         T.SetTemplate(bars[i].border)
  370.                         T.CreateShadow(bars[i].border)
  371.                         bars[i].border:SetBackdropColor( 0,0,0)
  372.                     end
  373.                    
  374.                     if T.myclass == "WARLOCK" then
  375.                         bars.Override = T.UpdateShards             
  376.                         self.SoulShards = bars
  377.                     elseif T.myclass == "PALADIN" then
  378.                         bars.Override = T.UpdateHoly
  379.                         self.HolyPower = bars
  380.                     end
  381.                 end
  382.  
  383.                 -- deathknight runes
  384.                 if T.myclass == "DEATHKNIGHT" then
  385.                     -- rescale top shadow border
  386.                     self.shadow:Point("TOPLEFT", -4, 12)
  387.                    
  388.                     local Runes = CreateFrame("Frame", nil, self)
  389.                     Runes:Point("BOTTOMLEFT", self, "TOPLEFT", 0,1)
  390.                     Runes:Height(8)
  391.                     if T.lowversion then
  392.                         Runes:SetWidth(186)
  393.                     else
  394.                         Runes:SetWidth(250)
  395.                     end
  396.                     Runes:SetBackdrop(backdrop)
  397.                     Runes:SetBackdropColor(0, 0, 0)
  398.  
  399.                     for i = 1, 6 do
  400.                         Runes[i] = CreateFrame("StatusBar", self:GetName().."_Runes"..i, health)
  401.                         Runes[i]:SetHeight(8)
  402.                         if T.lowversion then
  403.                             if i == 1 then
  404.                                 Runes[i]:SetWidth(31)
  405.                             else
  406.                                 Runes[i]:SetWidth(30)
  407.                             end
  408.                         else
  409.                             if i == 1 then
  410.                                 Runes[i]:SetWidth(40)
  411.                             else
  412.                                 Runes[i]:SetWidth(41)
  413.                             end
  414.                         end
  415.                         if (i == 1) then
  416.                             Runes[i]:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 1)
  417.                         else
  418.                             Runes[i]:Point("TOPLEFT", Runes[i-1], "TOPRIGHT", 1, 0)
  419.                         end
  420.                         Runes[i]:SetStatusBarTexture(normTex)
  421.                         Runes[i]:GetStatusBarTexture():SetHorizTile(false)
  422.                     end
  423.  
  424.                     self.Runes = Runes
  425.                 end
  426.                
  427.                 -- shaman totem bar
  428.                 if T.myclass == "SHAMAN" then
  429.                     -- rescale top shadow border
  430.                     self.shadow:Point("TOPLEFT", -4, 12)
  431.                    
  432.                     local TotemBar = {}
  433.                     TotemBar.Destroy = true
  434.                     for i = 1, 4 do
  435.                         TotemBar[i] = CreateFrame("StatusBar", self:GetName().."_TotemBar"..i, self)
  436.                         if (i == 1) then
  437.                            TotemBar[i]:Point("BOTTOMLEFT", self, "TOPLEFT", 0, 1)
  438.                         else
  439.                            TotemBar[i]:Point("TOPLEFT", TotemBar[i-1], "TOPRIGHT", 1, 0)
  440.                         end
  441.                         TotemBar[i]:SetStatusBarTexture(normTex)
  442.                         TotemBar[i]:Height(8)
  443.                         if T.lowversion then
  444.                             if i == 1 then
  445.                                 TotemBar[i]:SetWidth(45)
  446.                             else
  447.                                 TotemBar[i]:SetWidth(46)
  448.                             end
  449.                         else
  450.                             if i == 4 then
  451.                                 TotemBar[i]:SetWidth(61)
  452.                             else
  453.                                 TotemBar[i]:SetWidth(62)
  454.                             end
  455.                         end
  456.                         TotemBar[i]:SetBackdrop(backdrop)
  457.                         TotemBar[i]:SetBackdropColor(0, 0, 0)
  458.                         TotemBar[i]:SetMinMaxValues(0, 1)
  459.  
  460.                         TotemBar[i].bg = TotemBar[i]:CreateTexture(nil, "BORDER")
  461.                         TotemBar[i].bg:SetAllPoints(TotemBar[i])
  462.                         TotemBar[i].bg:SetTexture(normTex)
  463.                         TotemBar[i].bg.multiplier = 0.3
  464.                     end
  465.                     self.TotemBar = TotemBar
  466.                 end
  467.             end
  468.            
  469.             -- script for pvp status and low mana
  470.             self:SetScript("OnEnter", function(self)
  471.                 if self.EclipseBar and self.EclipseBar:IsShown() then
  472.                     self.EclipseBar.Text:Hide()
  473.                 end
  474.                 FlashInfo.ManaLevel:SetAlpha(0)
  475.                 status:SetAlpha(1)
  476.                 UnitFrame_OnEnter(self)
  477.             end)
  478.             self:SetScript("OnLeave", function(self)
  479.                 if self.EclipseBar and self.EclipseBar:IsShown() then
  480.                     self.EclipseBar.Text:Show()
  481.                 end
  482.                 FlashInfo.ManaLevel:SetAlpha(1)
  483.                 status:SetAlpha(0)
  484.                 UnitFrame_OnLeave(self)
  485.             end)
  486.         end
  487.        
  488.         if (unit == "target") then         
  489.             -- Unit name on target
  490.             local Name = health:CreateFontString(nil, "OVERLAY")
  491.             Name:Point("LEFT", panel, "LEFT", 4, 0)
  492.             Name:SetJustifyH("LEFT")
  493.             Name:SetFont(pixelfont, 8, "OUTLINEMONOCHROME")
  494.  
  495.             self:Tag(Name, '[Tukui:getnamecolor][Tukui:namelong] [Tukui:diffcolor][level] [shortclassification]')
  496.             self.Name = Name
  497.            
  498.             -- combo points on target
  499.             local CPoints = {}
  500.             CPoints.unit = PlayerFrame.unit
  501.             for i = 1, 5 do
  502.                 CPoints[i] = self:CreateTexture(nil, "OVERLAY")
  503.                 CPoints[i]:Height(12)
  504.                 CPoints[i]:Width(12)
  505.                 CPoints[i]:SetTexture(bubbleTex)
  506.                 if i == 1 then
  507.                     if T.lowversion then
  508.                         CPoints[i]:Point("TOPRIGHT", 15, 1.5)
  509.                     else
  510.                         CPoints[i]:Point("TOPLEFT", -15, 1.5)
  511.                     end
  512.                     CPoints[i]:SetVertexColor(0.69, 0.31, 0.31)
  513.                 else
  514.                     CPoints[i]:Point("TOP", CPoints[i-1], "BOTTOM", 1)
  515.                 end
  516.             end
  517.             CPoints[2]:SetVertexColor(0.69, 0.31, 0.31)
  518.             CPoints[3]:SetVertexColor(0.65, 0.63, 0.35)
  519.             CPoints[4]:SetVertexColor(0.65, 0.63, 0.35)
  520.             CPoints[5]:SetVertexColor(0.33, 0.59, 0.33)
  521.             self.CPoints = CPoints
  522.         end
  523.  
  524.         if (unit == "target" and C["unitframes"].targetauras) or (unit == "player" and C["unitframes"].playerauras) then
  525.             local buffs = CreateFrame("Frame", nil, self)
  526.             local debuffs = CreateFrame("Frame", nil, self)
  527.            
  528.             if (T.myclass == "SHAMAN" or T.myclass == "DEATHKNIGHT" or T.myclass == "PALADIN" or T.myclass == "WARLOCK") and (C["unitframes"].playerauras) and (unit == "player") then
  529.                 buffs:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 38)
  530.             else
  531.                 buffs:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 30)
  532.             end
  533.            
  534.             buffs:SetHeight(26)
  535.             buffs:SetWidth(252)
  536.             buffs.size = 26
  537.             buffs.num = 9
  538.                
  539.             debuffs:SetHeight(26)
  540.             debuffs:SetWidth(252)
  541.             debuffs:SetPoint("BOTTOMLEFT", buffs, "TOPLEFT", 2, 2)
  542.             debuffs.size = 26
  543.             debuffs.num = 9
  544.                        
  545.             buffs.spacing = 2.5
  546.             buffs.initialAnchor = 'TOPLEFT'
  547.             buffs.PostCreateIcon = T.PostCreateAura
  548.             buffs.PostUpdateIcon = T.PostUpdateAura
  549.             self.Buffs = buffs 
  550.                        
  551.             debuffs.spacing = 2
  552.             debuffs.initialAnchor = 'TOPRIGHT'
  553.             debuffs["growth-y"] = "UP"
  554.             debuffs["growth-x"] = "LEFT"
  555.             debuffs.PostCreateIcon = T.PostCreateAura
  556.             debuffs.PostUpdateIcon = T.PostUpdateAura
  557.            
  558.             -- an option to show only our debuffs on target
  559.             if unit == "target" then
  560.                 debuffs.onlyShowPlayer = C.unitframes.onlyselfdebuffs
  561.             end
  562.            
  563.             self.Debuffs = debuffs
  564.         end
  565.        
  566.         -- cast bar for player and target
  567.         if (C["unitframes"].unitcastbar == true) then
  568.             -- castbar of player and target
  569.             local castbar = CreateFrame("StatusBar", self:GetName().."_Castbar", self)
  570.             castbar:SetStatusBarTexture(normTex)
  571.             castbar:SetFrameLevel(6)
  572.             if (unit == "player") then
  573.                 castbar:SetPoint("BOTTOM", InvTukuiActionBarBackground, "CENTER", 0,240)
  574.                 castbar:SetHeight(T.Scale(20))
  575.                 castbar:SetWidth(T.Scale(230))
  576.             elseif (unit == "target") then
  577.                 castbar:SetPoint("BOTTOM", TukuiTarget, "TOP", 0, 70)
  578.                 castbar:SetHeight(T.Scale(18))
  579.                 castbar:SetWidth(T.Scale(250))
  580.             end
  581.             if (C["unitframes"].trikz == true) and (unit == "player") then
  582.                 castbar:SetPoint("BOTTOM", InvTukuiActionBarBackground, "CENTER", 14,38)
  583.                 castbar:SetHeight(T.Scale(22))
  584.                 castbar:SetWidth(T.Scale(344))
  585.             elseif (unit == "target") then
  586.                 castbar:SetPoint("CENTER", UIParent,"CENTER", 0, 250)
  587.                 castbar:SetHeight(T.Scale(20))
  588.                 castbar:SetWidth(T.Scale(250)) 
  589.             end            
  590.            
  591.             castbar.bg = CreateFrame("Frame", nil, castbar)
  592.             T.SetTemplate(castbar.bg)
  593.             T.CreateShadow(castbar.bg)
  594.             castbar.bg:SetPoint("TOPLEFT", T.Scale(-2), T.Scale(2))
  595.             castbar.bg:SetPoint("BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  596.             castbar.bg:SetFrameLevel(5)
  597.            
  598.             castbar.CustomTimeText = T.CustomCastTimeText
  599.             castbar.CustomDelayText = T.CustomCastDelayText
  600.             castbar.PostCastStart = T.PostCastStart
  601.             castbar.PostChannelStart = T.PostCastStart
  602.            
  603.             castbar.time = T.SetFontString(castbar, pixelfont, 8, "MONOCHROMEOUTLINE")
  604.             castbar.time:SetPoint("RIGHT", castbar, "RIGHT", T.Scale(-4), T.Scale(1))
  605.             castbar.time:SetTextColor(0.84, 0.75, 0.65)
  606.             castbar.time:SetJustifyH("RIGHT")
  607.  
  608.             castbar.Text = T.SetFontString(castbar, pixelfont, 8, "MONOCHROMEOUTLINE")
  609.             castbar.Text:SetPoint("LEFT", castbar, "LEFT", 4, 1)
  610.             castbar.Text:SetTextColor(0.84, 0.75, 0.65)
  611.            
  612.             if C["unitframes"].cbicons == true then
  613.                 castbar.button = CreateFrame("Frame", nil, castbar)
  614.                 castbar.button:SetHeight(T.Scale(22))
  615.                 castbar.button:SetWidth(T.Scale(22))
  616.  
  617.                 castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  618.                 castbar.icon:SetPoint("TOPLEFT", castbar.button, T.Scale(2), T.Scale(-2))
  619.                 castbar.icon:SetPoint("BOTTOMRIGHT", castbar.button, T.Scale(-2), T.Scale(2))
  620.                 castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  621.                
  622.             if unit == "target" or unit == "player" then
  623.                 castbar.button = CreateFrame("Frame", nil, castbar)
  624.                
  625.             if (unit == "player") then
  626.                 castbar.button:SetPoint("LEFT", -52, T.Scale(11.2))
  627.                 castbar.button:SetHeight(T.Scale(46))
  628.                 castbar.button:SetWidth(T.Scale(46))
  629.                 T.SetTemplate(castbar.button)
  630.                 T.CreateShadow(castbar.button)
  631.             elseif (unit == "target") then
  632.                 castbar.button:SetPoint("CENTER", 0, T.Scale(28))
  633.                 castbar.button:SetHeight(T.Scale(26))
  634.                 castbar.button:SetWidth(T.Scale(26))
  635.                 T.SetTemplate(castbar.button)
  636.                 T.CreateShadow(castbar.button)
  637.             end
  638.             if (C["unitframes"].trikz == true) and (unit == "player") then
  639.                 castbar.button:SetPoint("LEFT", -30, T.Scale(0))
  640.                 castbar.button:SetHeight(T.Scale(25))
  641.                 castbar.button:SetWidth(T.Scale(25))
  642.                 T.SetTemplate(castbar.button)
  643.                 T.CreateShadow(castbar.button)
  644.             elseif (unit == "target") then
  645.                 castbar.button:SetPoint("CENTER", UIParent, 0, T.Scale(50))
  646.                 castbar.button:SetHeight(T.Scale(40))
  647.                 castbar.button:SetWidth(T.Scale(40))
  648.                 T.SetTemplate(castbar.button)
  649.                 T.CreateShadow(castbar.button)
  650.             end
  651.                 castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  652.                 castbar.icon:SetPoint("TOPLEFT", castbar.button, T.Scale(2), T.Scale(-2))
  653.                 castbar.icon:SetPoint("BOTTOMRIGHT", castbar.button, T.Scale(-2), T.Scale(2))
  654.                 castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  655.                
  656.                 castbar.IconBackdrop = CreateFrame("Frame", nil, self)
  657.                 castbar.IconBackdrop:SetPoint("TOPLEFT", castbar.button, "TOPLEFT", T.Scale(-4), T.Scale(4))
  658.                 castbar.IconBackdrop:SetPoint("BOTTOMRIGHT", castbar.button, "BOTTOMRIGHT", T.Scale(4), T.Scale(-4))
  659.                 castbar.IconBackdrop:SetParent(castbar)
  660.                 castbar.IconBackdrop:SetBackdrop({
  661.                     edgeFile = glowTex, edgeSize = 4,
  662.                     insets = {left = 3, right = 3, top = 3, bottom = 3}
  663.                 })
  664.                 castbar.IconBackdrop:SetBackdropColor(0, 0, 0, 0)
  665.                 castbar.IconBackdrop:SetBackdropBorderColor(0, 0, 0, 0.7)
  666.         end    
  667.     end
  668.            
  669.             -- cast bar latency on player
  670.             if unit == "player" and C["unitframes"].cblatency == true then
  671.                 castbar.safezone = castbar:CreateTexture(nil, "ARTWORK")
  672.                 castbar.safezone:SetTexture(normTex)
  673.                 castbar.safezone:SetVertexColor(0.69, 0.31, 0.31, 0.75)
  674.                 castbar.SafeZone = castbar.safezone
  675.             end
  676.                    
  677.             self.Castbar = castbar
  678.             self.Castbar.Time = castbar.time
  679.             self.Castbar.Icon = castbar.icon
  680.         end
  681.        
  682.         -- add combat feedback support
  683.         if C["unitframes"].combatfeedback == true then
  684.             local CombatFeedbackText
  685.             if T.lowversion then
  686.                 CombatFeedbackText = T.SetFontString(health, C.media.pixelfont, 8, "MONOCHROMEOUTLINE")
  687.             else
  688.                 CombatFeedbackText = T.SetFontString(health, C.media.pixelfont, 8, "MONOCHROMEOUTLINE")
  689.             end
  690.             CombatFeedbackText:SetPoint("CENTER", 0, 1)
  691.             CombatFeedbackText.colors = {
  692.                 DAMAGE = {0.69, 0.31, 0.31},
  693.                 CRUSHING = {0.69, 0.31, 0.31},
  694.                 CRITICAL = {0.69, 0.31, 0.31},
  695.                 GLANCING = {0.69, 0.31, 0.31},
  696.                 STANDARD = {0.84, 0.75, 0.65},
  697.                 IMMUNE = {0.84, 0.75, 0.65},
  698.                 ABSORB = {0.84, 0.75, 0.65},
  699.                 BLOCK = {0.84, 0.75, 0.65},
  700.                 RESIST = {0.84, 0.75, 0.65},
  701.                 MISS = {0.84, 0.75, 0.65},
  702.                 HEAL = {0.33, 0.59, 0.33},
  703.                 CRITHEAL = {0.33, 0.59, 0.33},
  704.                 ENERGIZE = {0.31, 0.45, 0.63},
  705.                 CRITENERGIZE = {0.31, 0.45, 0.63},
  706.             }
  707.             self.CombatFeedbackText = CombatFeedbackText
  708.         end
  709.        
  710.         if C["unitframes"].healcomm then
  711.             local mhpb = CreateFrame('StatusBar', nil, self.Health)
  712.             mhpb:SetPoint('TOPLEFT', self.Health:GetStatusBarTexture(), 'TOPRIGHT', 0, 0)
  713.             mhpb:SetPoint('BOTTOMLEFT', self.Health:GetStatusBarTexture(), 'BOTTOMRIGHT', 0, 0)
  714.             if T.lowversion then
  715.                 mhpb:SetWidth(186)
  716.             else
  717.                 mhpb:SetWidth(250)
  718.             end
  719.             mhpb:SetStatusBarTexture(normTex)
  720.             mhpb:SetStatusBarColor(0, 1, 0.5, 0.25)
  721.             mhpb:SetMinMaxValues(0,1)
  722.  
  723.             local ohpb = CreateFrame('StatusBar', nil, self.Health)
  724.             ohpb:SetPoint('TOPLEFT', mhpb:GetStatusBarTexture(), 'TOPRIGHT', 0, 0)
  725.             ohpb:SetPoint('BOTTOMLEFT', mhpb:GetStatusBarTexture(), 'BOTTOMRIGHT', 0, 0)
  726.             ohpb:SetWidth(250)
  727.             ohpb:SetStatusBarTexture(normTex)
  728.             ohpb:SetStatusBarColor(0, 1, 0, 0.25)
  729.  
  730.             self.HealPrediction = {
  731.                 myBar = mhpb,
  732.                 otherBar = ohpb,
  733.                 maxOverflow = 1,
  734.             }
  735.         end
  736.        
  737.         -- player aggro
  738.         if C["unitframes"].playeraggro == true then
  739.             table.insert(self.__elements, T.UpdateThreat)
  740.             self:RegisterEvent('PLAYER_TARGET_CHANGED', T.UpdateThreat)
  741.             self:RegisterEvent('UNIT_THREAT_LIST_UPDATE', T.UpdateThreat)
  742.             self:RegisterEvent('UNIT_THREAT_SITUATION_UPDATE', T.UpdateThreat)
  743.         end
  744.     end
  745.    
  746.     ------------------------------------------------------------------------
  747.     --  Target of Target unit layout
  748.     ------------------------------------------------------------------------
  749.    
  750.     if (unit == "targettarget") then
  751.         -- create panel if higher version
  752.         local panel = CreateFrame("Frame", nil, self)
  753.         if not T.lowversion then
  754.             panel:CreatePanel("Default", 129, 17, "BOTTOM", self, "BOTTOM", 0, T.Scale(0))
  755.             panel:SetFrameLevel(2)
  756.             panel:SetFrameStrata("MEDIUM")
  757.             panel:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  758.             self.panel = panel
  759.             self.panel:Hide()
  760.         end
  761.        
  762.         -- border
  763.         local Healthbg = CreateFrame("Frame", nil, self)
  764.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  765.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  766.         T.SetTemplate(Healthbg)
  767.         T.CreateShadow(Healthbg)
  768.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  769.         Healthbg:SetFrameLevel(2)
  770.         self.Healthbg = Healthbg
  771.        
  772.         -- health bar
  773.         local health = CreateFrame('StatusBar', nil, self)
  774.         health:Height(20)
  775.         health:SetPoint("TOPLEFT")
  776.         health:SetPoint("TOPRIGHT")
  777.         health:SetStatusBarTexture(normTex)
  778.        
  779.         local healthBG = health:CreateTexture(nil, 'BORDER')
  780.         healthBG:SetAllPoints()
  781.         healthBG:SetTexture(.1, .1, .1)
  782.        
  783.         self.Health = health
  784.         self.Health.bg = healthBG
  785.        
  786.         health.frequentUpdates = true
  787.         if C["unitframes"].showsmooth == true then
  788.             health.Smooth = true
  789.         end
  790.        
  791.         if C["unitframes"].unicolor == true then
  792.             health.colorDisconnected = false
  793.             health.colorClass = false
  794.             health:SetStatusBarColor(.3, .3, .3, 1)
  795.             healthBG:SetVertexColor(.1, .1, .1, 1)     
  796.         else
  797.             health.colorDisconnected = true
  798.             health.colorClass = true
  799.             health.colorReaction = true        
  800.         end
  801.        
  802.         -- power
  803.         local power = CreateFrame('StatusBar', nil, self)
  804.         power:SetHeight(T.Scale(5))
  805.         power:SetPoint("TOPLEFT", health, "BOTTOMLEFT", 0, -6)
  806.         power:SetPoint("TOPRIGHT", health, "BOTTOMRIGHT", 0, -6)
  807.         power:SetStatusBarTexture(normTex)
  808.        
  809.         -- power border
  810.         local powerborder = CreateFrame("Frame", nil, self)
  811.         T.CreatePanel(powerborder, 1, 1, "CENTER", health, "CENTER", 0, 0)
  812.         powerborder:ClearAllPoints()
  813.         powerborder:SetPoint("TOPLEFT", power, T.Scale(-2), T.Scale(2))
  814.         powerborder:SetPoint("BOTTOMRIGHT", power, T.Scale(2), T.Scale(-2))
  815.         powerborder:SetFrameStrata("MEDIUM")
  816.         T.CreateShadow(powerborder)
  817.        
  818.         local powerBG = power:CreateTexture(nil, 'BORDER')
  819.         powerBG:SetAllPoints(power)
  820.         powerBG:SetTexture(normTex)
  821.         powerBG.multiplier = 0.3
  822.        
  823.         self.Power = power
  824.         self.Power.bg = powerBG
  825.        
  826.         power.frequentUpdates = true
  827.         power.colorDisconnected = true
  828.  
  829.         if C["unitframes"].showsmooth == true then
  830.             power.Smooth = true
  831.         end
  832.        
  833.         if C["unitframes"].unicolor == true then
  834.             power.colorTapping = true
  835.             power.colorClass = true
  836.             powerBG.multiplier = 0.1               
  837.         else
  838.             power.colorPower = true
  839.         end
  840.        
  841.         -- Unit name
  842.         local Name = health:CreateFontString(nil, "OVERLAY")
  843.         Name:SetPoint("CENTER", health, "CENTER", 0, 0)
  844.         Name:SetFont(pixelfont, 8, "OUTLINEMONOCHROME")
  845.         Name:SetJustifyH("CENTER")
  846.  
  847.         self:Tag(Name, '[Tukui:getnamecolor][Tukui:namemedium]')
  848.         self.Name = Name
  849.        
  850.         if C["unitframes"].totdebuffs == true and T.lowversion ~= true then
  851.             local debuffs = CreateFrame("Frame", nil, health)
  852.             debuffs:SetHeight(20)
  853.             debuffs:SetWidth(127)
  854.             debuffs.size = 20
  855.             debuffs.spacing = 2
  856.             debuffs.num = 6
  857.  
  858.             debuffs:SetPoint("TOPLEFT", health, "TOPLEFT", -0.5, 24)
  859.             debuffs.initialAnchor = "TOPLEFT"
  860.             debuffs["growth-y"] = "UP"
  861.             debuffs.PostCreateIcon = T.PostCreateAura
  862.             debuffs.PostUpdateIcon = T.PostUpdateAura
  863.             self.Debuffs = debuffs
  864.         end
  865.     end
  866.    
  867.     ------------------------------------------------------------------------
  868.     --  Pet unit layout
  869.     ------------------------------------------------------------------------
  870.    
  871.     if (unit == "pet") then
  872.         -- create panel if higher version
  873.         local panel = CreateFrame("Frame", nil, self)
  874.         if not T.lowversion then
  875.             panel:CreatePanel("Default", 129, 17, "BOTTOM", self, "BOTTOM", 0, 0)
  876.             panel:SetFrameLevel(2)
  877.             panel:SetFrameStrata("MEDIUM")
  878.             panel:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  879.             self.panel = panel
  880.             self.panel:Hide()
  881.         end
  882.        
  883.         -- border
  884.         local Healthbg = CreateFrame("Frame", nil, self)
  885.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  886.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-4))
  887.         T.SetTemplate(Healthbg)
  888.         T.CreateShadow(Healthbg)
  889.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  890.         Healthbg:SetFrameLevel(2)
  891.         self.Healthbg = Healthbg
  892.        
  893.         -- health bar
  894.         local health = CreateFrame('StatusBar', nil, self)
  895.         health:Height(T.Scale(22))
  896.         health:SetPoint("TOPLEFT")
  897.         health:SetPoint("TOPRIGHT")
  898.         health:SetStatusBarTexture(normTex)
  899.        
  900.         health.PostUpdate = T.PostUpdatePetColor
  901.                
  902.         self.Health = health
  903.         self.Health.bg = healthBG
  904.        
  905.         local healthBG = health:CreateTexture(nil, 'BORDER')
  906.         healthBG:SetAllPoints()
  907.         healthBG:SetTexture(.1, .1, .1)
  908.        
  909.         health.frequentUpdates = true
  910.         if C["unitframes"].showsmooth == true then
  911.             health.Smooth = true
  912.         end
  913.        
  914.         if C["unitframes"].unicolor == true then
  915.             health.colorDisconnected = false
  916.             health.colorClass = false
  917.             health:SetStatusBarColor(.3, .3, .3, 1)
  918.             healthBG:SetVertexColor(.1, .1, .1, 1)     
  919.         else
  920.             health.colorDisconnected = true
  921.             health.colorClass = true
  922.             health.colorReaction = true
  923.             if T.myclass == "HUNTER" then
  924.                 health.colorHappiness = true
  925.             end
  926.         end
  927.        
  928.         -- power
  929.         local power = CreateFrame('StatusBar', nil, self)
  930.         power:SetHeight(T.Scale(5))
  931.         power:Point("TOPLEFT", health, "BOTTOMLEFT", 0, -6)
  932.         power:Point("TOPRIGHT", health, "BOTTOMRIGHT", 0, -6)
  933.         power:SetStatusBarTexture(normTex)
  934.        
  935.         -- power border
  936.         local powerborder = CreateFrame("Frame", nil, self)
  937.         T.CreatePanel(powerborder, 1, 1, "CENTER", health, "CENTER", 0, 0)
  938.         powerborder:ClearAllPoints()
  939.         powerborder:SetPoint("TOPLEFT", power, T.Scale(-2), T.Scale(2))
  940.         powerborder:SetPoint("BOTTOMRIGHT", power, T.Scale(2), T.Scale(-2))
  941.         powerborder:SetFrameStrata("MEDIUM")
  942.         T.CreateShadow(powerborder)
  943.        
  944.         power.frequentUpdates = true
  945.         power.colorPower = true
  946.         if C["unitframes"].showsmooth == true then
  947.             power.Smooth = true
  948.         end
  949.  
  950.         local powerBG = power:CreateTexture(nil, 'BORDER')
  951.         powerBG:SetAllPoints(power)
  952.         powerBG:SetTexture(normTex)
  953.         powerBG.multiplier = 0.3
  954.                
  955.         self.Power = power
  956.         self.Power.bg = powerBG
  957.                
  958.         -- Unit name
  959.         local Name = health:CreateFontString(nil, "OVERLAY")
  960.         Name:SetPoint("CENTER", health, "CENTER", 0, 0)
  961.         Name:SetFont(pixelfont, 8, "OUTLINEMONOCHROME")
  962.         Name:SetJustifyH("CENTER")
  963.  
  964.         self:Tag(Name, '[Tukui:getnamecolor][Tukui:namemedium] [Tukui:diffcolor][level]')
  965.         self.Name = Name
  966.        
  967.         if (C["unitframes"].unitcastbar == true) then
  968.             local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  969.             castbar:SetStatusBarTexture(normTex)
  970.             self.Castbar = castbar
  971.            
  972.             if not T.lowversion then
  973.                 castbar.bg = castbar:CreateTexture(nil, "BORDER")
  974.                 castbar.bg:SetAllPoints(castbar)
  975.                 castbar.bg:SetTexture(normTex)
  976.                 castbar.bg:SetVertexColor(0.15, 0.15, 0.15)
  977.                 castbar:SetFrameLevel(3)
  978.                 castbar:SetAlpha(0.8)
  979.                 castbar:SetPoint("TOPLEFT", powerborder, T.Scale(2), T.Scale(-2))
  980.                 castbar:SetPoint("BOTTOMRIGHT", powerborder, T.Scale(-2), T.Scale(2))
  981.                
  982.                 castbar.CustomTimeText = T.CustomCastTimeText
  983.                 castbar.CustomDelayText = T.CustomCastDelayText
  984.                 castbar.PostCastStart = T.CheckCast
  985.                 castbar.PostChannelStart = T.CheckChannel
  986.  
  987.                 castbar.time = T.SetFontString(castbar, pixelfont, 8, "MONOCHROMEOUTLINE")
  988.                 castbar.time:SetPoint("RIGHT", power, "RIGHT", T.Scale(-0), T.Scale(-0))
  989.                 castbar.time:SetTextColor(0.84, 0.75, 0.65)
  990.                 castbar.time:SetJustifyH("RIGHT")
  991.  
  992.                 castbar.Text = T.SetFontString(castbar, pixelfont, 8, "MONOCHROMEOUTLINE")
  993.                 castbar.Text:Point("LEFT", power, "LEFT", 4, 0)
  994.                 castbar.Text:SetTextColor(0.84, 0.75, 0.65)
  995.                
  996.                 self.Castbar.Time = castbar.time
  997.             end
  998.         end
  999.        
  1000.         -- update pet name, this should fix "UNKNOWN" pet names on pet unit, health and bar color sometime being "grayish".
  1001.         self:RegisterEvent("UNIT_PET", T.updateAllElements)
  1002.     end
  1003.  
  1004.  
  1005.     ------------------------------------------------------------------------
  1006.     --  Focus unit layout
  1007.     ------------------------------------------------------------------------
  1008.    
  1009.     if (unit == "focus") then
  1010.         -- health
  1011.         local health = CreateFrame('StatusBar', nil, self)
  1012.         health:Height(22)
  1013.         health:SetPoint("TOPLEFT")
  1014.         health:SetPoint("TOPRIGHT")
  1015.         health:SetStatusBarTexture(normTex)
  1016.        
  1017.         -- border
  1018.         local Healthbg = CreateFrame("Frame", nil, self)
  1019.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  1020.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  1021.         T.SetTemplate(Healthbg)
  1022.         T.CreateShadow(Healthbg)
  1023.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1024.         Healthbg:SetFrameLevel(2)
  1025.         self.Healthbg = Healthbg
  1026.  
  1027.         health.frequentUpdates = true
  1028.         health.colorDisconnected = true
  1029.         if C["unitframes"].showsmooth == true then
  1030.             health.Smooth = true
  1031.         end
  1032.         health.colorClass = true
  1033.        
  1034.         local healthBG = health:CreateTexture(nil, 'BORDER')
  1035.         healthBG:SetAllPoints()
  1036.         healthBG:SetTexture(.1, .1, .1)
  1037.  
  1038.         health.value = T.SetFontString(health, pixelfont,8, "MONOCHROMEOUTLINE")
  1039.         health.value:Point("RIGHT", -2, 0)
  1040.         health.PostUpdate = T.PostUpdateHealth
  1041.                
  1042.         self.Health = health
  1043.         self.Health.bg = healthBG
  1044.        
  1045.         health.frequentUpdates = true
  1046.         if C["unitframes"].showsmooth == true then
  1047.             health.Smooth = true
  1048.         end
  1049.        
  1050.         if C["unitframes"].unicolor == true then
  1051.             health.colorDisconnected = false
  1052.             health.colorClass = false
  1053.             health:SetStatusBarColor(.3, .3, .3, 1)
  1054.             healthBG:SetVertexColor(.1, .1, .1, 1)     
  1055.         else
  1056.             health.colorDisconnected = true
  1057.             health.colorClass = true
  1058.             health.colorReaction = true
  1059.         end
  1060.    
  1061.         -- power
  1062.         local power = CreateFrame('StatusBar', nil, self)
  1063.         power:Height(6)
  1064.         power:Point("TOPLEFT", health, "BOTTOMLEFT", 0, -1)
  1065.         power:Point("TOPRIGHT", health, "BOTTOMRIGHT", 0, -1)
  1066.         power:SetStatusBarTexture(normTex)
  1067.        
  1068.         -- power border
  1069.         local powerborder = CreateFrame("Frame", nil, self)
  1070.         T.CreatePanel(powerborder, 1, 1, "CENTER", health, "CENTER", 0, 0)
  1071.         powerborder:ClearAllPoints()
  1072.         powerborder:SetPoint("TOPLEFT", power, T.Scale(-2), T.Scale(2))
  1073.         powerborder:SetPoint("BOTTOMRIGHT", power, T.Scale(2), T.Scale(-2))
  1074.         powerborder:SetFrameStrata("MEDIUM")
  1075.         T.CreateShadow(powerborder)
  1076.        
  1077.         power.frequentUpdates = true
  1078.         power.colorPower = true
  1079.         if C["unitframes"].showsmooth == true then
  1080.             power.Smooth = true
  1081.         end
  1082.  
  1083.         local powerBG = power:CreateTexture(nil, 'BORDER')
  1084.         powerBG:SetAllPoints(power)
  1085.         powerBG:SetTexture(normTex)
  1086.         powerBG.multiplier = 0.3
  1087.        
  1088.         power.value = T.SetFontString(health, pixelfont, 8, "MONOCHROMEOUTLINE")
  1089.         power.value:Point("LEFT", 2, 0)
  1090.         power.PreUpdate = T.PreUpdatePower
  1091.         power.PostUpdate = T.PostUpdatePower
  1092.                
  1093.         self.Power = power
  1094.         self.Power.bg = powerBG
  1095.        
  1096.         -- names
  1097.         local Name = health:CreateFontString(nil, "OVERLAY")
  1098.         Name:SetPoint("CENTER", health, "CENTER", 0, 0)
  1099.         Name:SetJustifyH("CENTER")
  1100.         Name:SetFont(pixelfont, 8, "OUTLINEMONOCHROME")
  1101.         Name:SetShadowColor(0, 0, 0)
  1102.         Name:SetShadowOffset(1.25, -1.25)
  1103.        
  1104.         self:Tag(Name, '[Tukui:getnamecolor][Tukui:namelong]')
  1105.         self.Name = Name
  1106.  
  1107.         -- create debuff for arena units
  1108.         local debuffs = CreateFrame("Frame", nil, self)
  1109.         debuffs:SetHeight(34)
  1110.         debuffs:SetWidth(200)
  1111.         debuffs:Point('LEFT', self, 'RIGHT', -4, 0)
  1112.         debuffs.size = 34
  1113.         debuffs.num = 5
  1114.         debuffs.spacing = 2
  1115.         debuffs.initialAnchor = 'RIGHT'
  1116.         debuffs["growth-x"] = "LEFT"
  1117.         debuffs.PostCreateIcon = T.PostCreateAura
  1118.         debuffs.PostUpdateIcon = T.PostUpdateAura
  1119.         self.Debuffs = debuffs
  1120.        
  1121.         local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  1122.         castbar:SetPoint("LEFT", 2, 0)
  1123.         castbar:SetPoint("RIGHT", -24, 0)
  1124.         castbar:SetPoint("BOTTOM", 0, -22)
  1125.        
  1126.         castbar:SetHeight(16)
  1127.         castbar:SetStatusBarTexture(normTex)
  1128.         castbar:SetFrameLevel(6)
  1129.        
  1130.         castbar.bg = CreateFrame("Frame", nil, castbar)
  1131.         castbar.bg:SetTemplate("Default")
  1132.         castbar.bg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1133.         castbar.bg:Point("TOPLEFT", -2, 2)
  1134.         castbar.bg:Point("BOTTOMRIGHT", 2, -2)
  1135.         castbar.bg:SetFrameLevel(5)
  1136.        
  1137.         castbar.time = T.SetFontString(castbar, pixelfont, 8, "OUTLINEMONOCHROME")
  1138.         castbar.time:Point("RIGHT", castbar, "RIGHT", -4, 0)
  1139.         castbar.time:SetTextColor(0.84, 0.75, 0.65)
  1140.         castbar.time:SetJustifyH("RIGHT")
  1141.         castbar.CustomTimeText = T.CustomCastTimeText
  1142.  
  1143.         castbar.Text = T.SetFontString(castbar, pixelfont, 8, "OUTLINEMONOCHROME")
  1144.         castbar.Text:SetPoint("LEFT", castbar, "LEFT", 4, 0)
  1145.         castbar.Text:SetTextColor(0.84, 0.75, 0.65)
  1146.        
  1147.         castbar.CustomDelayText = T.CustomCastDelayText
  1148.         castbar.PostCastStart = T.CheckCast
  1149.         castbar.PostChannelStart = T.CheckChannel
  1150.                                
  1151.         castbar.button = CreateFrame("Frame", nil, castbar)
  1152.         castbar.button:Height(castbar:GetHeight()+4)
  1153.         castbar.button:Width(castbar:GetHeight()+4)
  1154.         castbar.button:Point("LEFT", castbar, "RIGHT", 4, 0)
  1155.         castbar.button:SetTemplate("Default")
  1156.         castbar.button:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1157.         castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  1158.         castbar.icon:Point("TOPLEFT", castbar.button, 2, -2)
  1159.         castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  1160.         castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  1161.  
  1162.         self.Castbar = castbar
  1163.         self.Castbar.Time = castbar.time
  1164.         self.Castbar.Icon = castbar.icon
  1165.     end
  1166.    
  1167.     ------------------------------------------------------------------------
  1168.     --  Focus target unit layout
  1169.     ------------------------------------------------------------------------
  1170.  
  1171.     if (unit == "focustarget") then
  1172.         -- health
  1173.         local health = CreateFrame('StatusBar', nil, self)
  1174.         health:Height(22)
  1175.         health:SetPoint("TOPLEFT")
  1176.         health:SetPoint("TOPRIGHT")
  1177.         health:SetStatusBarTexture(normTex)
  1178.        
  1179.         -- border
  1180.         local Healthbg = CreateFrame("Frame", nil, self)
  1181.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  1182.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  1183.         T.SetTemplate(Healthbg)
  1184.         T.CreateShadow(Healthbg)
  1185.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1186.         Healthbg:SetFrameLevel(2)
  1187.         self.Healthbg = Healthbg
  1188.  
  1189.         health.frequentUpdates = true
  1190.         health.colorDisconnected = true
  1191.         if C["unitframes"].showsmooth == true then
  1192.             health.Smooth = true
  1193.         end
  1194.         health.colorClass = true
  1195.        
  1196.         local healthBG = health:CreateTexture(nil, 'BORDER')
  1197.         healthBG:SetAllPoints()
  1198.         healthBG:SetTexture(.1, .1, .1)
  1199.  
  1200.         health.value = T.SetFontString(health, pixelfont, 8, "OUTLINEMONOCHROME")
  1201.         health.value:Point("RIGHT", -2, 0)
  1202.         health.PostUpdate = T.PostUpdateHealth
  1203.                
  1204.         self.Health = health
  1205.         self.Health.bg = healthBG
  1206.        
  1207.         health.frequentUpdates = true
  1208.         if C["unitframes"].showsmooth == true then
  1209.             health.Smooth = true
  1210.         end
  1211.        
  1212.         if C["unitframes"].unicolor == true then
  1213.             health.colorDisconnected = false
  1214.             health.colorClass = false
  1215.             health:SetStatusBarColor(.3, .3, .3, 1)
  1216.             healthBG:SetVertexColor(.1, .1, .1, 1)     
  1217.         else
  1218.             health.colorDisconnected = true
  1219.             health.colorClass = true
  1220.             health.colorReaction = true
  1221.         end
  1222.    
  1223.         -- power
  1224.         local power = CreateFrame('StatusBar', nil, self)
  1225.         power:Height(6)
  1226.         power:Point("TOPLEFT", health, "BOTTOMLEFT", 0, -1)
  1227.         power:Point("TOPRIGHT", health, "BOTTOMRIGHT", 0, -1)
  1228.         power:SetStatusBarTexture(normTex)
  1229.        
  1230.          -- power border
  1231.         local powerborder = CreateFrame("Frame", nil, self)
  1232.         T.CreatePanel(powerborder, 1, 1, "CENTER", health, "CENTER", 0, 0)
  1233.         powerborder:ClearAllPoints()
  1234.         powerborder:SetPoint("TOPLEFT", power, T.Scale(-2), T.Scale(2))
  1235.         powerborder:SetPoint("BOTTOMRIGHT", power, T.Scale(2), T.Scale(-2))
  1236.         powerborder:SetFrameStrata("MEDIUM")
  1237.         T.CreateShadow(powerborder)
  1238.        
  1239.         power.frequentUpdates = true
  1240.         power.colorPower = true
  1241.         if C["unitframes"].showsmooth == true then
  1242.             power.Smooth = true
  1243.         end
  1244.  
  1245.         local powerBG = power:CreateTexture(nil, 'BORDER')
  1246.         powerBG:SetAllPoints(power)
  1247.         powerBG:SetTexture(normTex)
  1248.         powerBG.multiplier = 0.3
  1249.        
  1250.         power.value = T.SetFontString(health, pixelfont, 8, "OUTLINEMONOCHROME")
  1251.         power.value:Point("LEFT", 2, 0)
  1252.         power.PreUpdate = T.PreUpdatePower
  1253.         power.PostUpdate = T.PostUpdatePower
  1254.                
  1255.         self.Power = power
  1256.         self.Power.bg = powerBG
  1257.        
  1258.         -- names
  1259.         local Name = health:CreateFontString(nil, "OVERLAY")
  1260.         Name:SetPoint("CENTER", health, "CENTER", 0, 0)
  1261.         Name:SetJustifyH("CENTER")
  1262.         Name:SetFont(pixelfont, 8, "OUTLINEMONOCRHOME")
  1263.         Name:SetShadowColor(0, 0, 0)
  1264.         Name:SetShadowOffset(1.25, -1.25)
  1265.        
  1266.         self:Tag(Name, '[Tukui:getnamecolor][Tukui:namelong]')
  1267.         self.Name = Name
  1268.  
  1269.         -- create debuff for arena units
  1270.         local debuffs = CreateFrame("Frame", nil, self)
  1271.         debuffs:SetHeight(34)
  1272.         debuffs:SetWidth(200)
  1273.         debuffs:Point('LEFT', self, 'RIGHT', 4, 0)
  1274.         debuffs.size = 34
  1275.         debuffs.num = 2
  1276.         debuffs.spacing = 2
  1277.         debuffs.initialAnchor = 'LEFT'
  1278.         debuffs["growth-x"] = "RIGHT"
  1279.         debuffs.PostCreateIcon = T.PostCreateAura
  1280.         debuffs.PostUpdateIcon = T.PostUpdateAura
  1281.         self.Debuffs = debuffs
  1282.        
  1283.         local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  1284.         castbar:SetPoint("LEFT", 2, 0)
  1285.         castbar:SetPoint("RIGHT", -24, 0)
  1286.         castbar:SetPoint("BOTTOM", 0, -22)
  1287.        
  1288.         castbar:SetHeight(16)
  1289.         castbar:SetStatusBarTexture(normTex)
  1290.         castbar:SetFrameLevel(6)
  1291.        
  1292.         castbar.bg = CreateFrame("Frame", nil, castbar)
  1293.         castbar.bg:SetTemplate("Default")
  1294.         castbar.bg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1295.         castbar.bg:Point("TOPLEFT", -2, 2)
  1296.         castbar.bg:Point("BOTTOMRIGHT", 2, -2)
  1297.         castbar.bg:SetFrameLevel(5)
  1298.        
  1299.         castbar.time = T.SetFontString(castbar, pixelfont, 8, "OUTLINEMONOCHROME")
  1300.         castbar.time:Point("RIGHT", castbar, "RIGHT", -4, 0)
  1301.         castbar.time:SetTextColor(0.84, 0.75, 0.65)
  1302.         castbar.time:SetJustifyH("RIGHT")
  1303.         castbar.CustomTimeText = T.CustomCastTimeText
  1304.  
  1305.         castbar.Text = T.SetFontString(castbar, pixelfont, 8, "OUTLINEMONOCHROME")
  1306.         castbar.Text:Point("LEFT", castbar, "LEFT", 4, 0)
  1307.         castbar.Text:SetTextColor(0.84, 0.75, 0.65)
  1308.        
  1309.         castbar.CustomDelayText = T.CustomCastDelayText
  1310.         castbar.PostCastStart = T.CheckCast
  1311.         castbar.PostChannelStart = T.CheckChannel
  1312.                                
  1313.         castbar.button = CreateFrame("Frame", nil, castbar)
  1314.         castbar.button:Height(castbar:GetHeight()+4)
  1315.         castbar.button:Width(castbar:GetHeight()+4)
  1316.         castbar.button:Point("LEFT", castbar, "RIGHT", 4, 0)
  1317.         castbar.button:SetTemplate("Default")
  1318.         castbar.button:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1319.         castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  1320.         castbar.icon:Point("TOPLEFT", castbar.button, 2, -2)
  1321.         castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  1322.         castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  1323.  
  1324.         self.Castbar = castbar
  1325.         self.Castbar.Time = castbar.time
  1326.         self.Castbar.Icon = castbar.icon
  1327.     end
  1328.  
  1329.     ------------------------------------------------------------------------
  1330.     --  Arena or boss units layout (both mirror'd)
  1331.     ------------------------------------------------------------------------
  1332.    
  1333.     if (unit and unit:find("arena%d") and C["arena"].unitframes == true) or (unit and unit:find("boss%d") and C["unitframes"].showboss == true) then
  1334.         -- Right-click focus on arena or boss units
  1335.         self:SetAttribute("type2", "focus")
  1336.        
  1337.         -- health
  1338.         local health = CreateFrame('StatusBar', nil, self)
  1339.         health:Height(30)
  1340.         health:SetPoint("TOPLEFT")
  1341.         health:SetPoint("TOPRIGHT")
  1342.         health:SetStatusBarTexture(normTex)
  1343.        
  1344.         -- border
  1345.         local Healthbg = CreateFrame("Frame", nil, self)
  1346.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  1347.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  1348.         T.SetTemplate(Healthbg)
  1349.         T.CreateShadow(Healthbg)
  1350.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1351.         Healthbg:SetFrameLevel(2)
  1352.         self.Healthbg = Healthbg
  1353.  
  1354.         health.frequentUpdates = true
  1355.         health.colorDisconnected = true
  1356.         if C["unitframes"].showsmooth == true then
  1357.             health.Smooth = true
  1358.         end
  1359.         health.colorClass = true
  1360.        
  1361.         local healthBG = health:CreateTexture(nil, 'BORDER')
  1362.         healthBG:SetAllPoints()
  1363.         healthBG:SetTexture(.1, .1, .1)
  1364.  
  1365.         health.value = T.SetFontString(health, pixelfont, 8, "OUTLINEMONOCHROME")
  1366.         health.value:Point("RIGHT", -2, 0)
  1367.         health.PostUpdate = T.PostUpdateHealth
  1368.                
  1369.         self.Health = health
  1370.         self.Health.bg = healthBG
  1371.        
  1372.         health.frequentUpdates = true
  1373.         if C["unitframes"].showsmooth == true then
  1374.             health.Smooth = true
  1375.         end
  1376.        
  1377.         if C["unitframes"].unicolor == true then
  1378.             health.colorDisconnected = false
  1379.             health.colorClass = false
  1380.             health:SetStatusBarColor(.3, .3, .3, 1)
  1381.             healthBG:SetVertexColor(.1, .1, .1, 1)     
  1382.         else
  1383.             health.colorDisconnected = true
  1384.             health.colorClass = true
  1385.             health.colorReaction = true
  1386.         end
  1387.    
  1388.         -- power
  1389.         local power = CreateFrame('StatusBar', nil, self)
  1390.         power:Height(6)
  1391.         power:Point("TOPLEFT", health, "BOTTOMLEFT", 0, -6)
  1392.         power:Point("TOPRIGHT", health, "BOTTOMRIGHT", 0, -6)
  1393.         power:SetStatusBarTexture(normTex)
  1394.        
  1395.         -- power border
  1396.         local powerborder = CreateFrame("Frame", nil, self)
  1397.         T.CreatePanel(powerborder, 1, 1, "CENTER", health, "CENTER", 0, 0)
  1398.         powerborder:ClearAllPoints()
  1399.         powerborder:SetPoint("TOPLEFT", power, T.Scale(-2), T.Scale(2))
  1400.         powerborder:SetPoint("BOTTOMRIGHT", power, T.Scale(2), T.Scale(-2))
  1401.         powerborder:SetFrameStrata("MEDIUM")
  1402.         T.CreateShadow(powerborder)
  1403.        
  1404.         power.frequentUpdates = true
  1405.         power.colorPower = true
  1406.         if C["unitframes"].showsmooth == true then
  1407.             power.Smooth = true
  1408.         end
  1409.  
  1410.         local powerBG = power:CreateTexture(nil, 'BORDER')
  1411.         powerBG:SetAllPoints(power)
  1412.         powerBG:SetTexture(normTex)
  1413.         powerBG.multiplier = 0.3
  1414.        
  1415.         power.value = T.SetFontString(health, pixelfont, 8, "OUTLINEMONOCHROME")
  1416.         power.value:Point("LEFT", 2, 0)
  1417.         power.PreUpdate = T.PreUpdatePower
  1418.         power.PostUpdate = T.PostUpdatePower
  1419.                
  1420.         self.Power = power
  1421.         self.Power.bg = powerBG
  1422.        
  1423.         -- names
  1424.         local Name = health:CreateFontString(nil, "OVERLAY")
  1425.         Name:SetPoint("CENTER", health, "CENTER", 0, 0)
  1426.         Name:SetJustifyH("CENTER")
  1427.         Name:SetFont(pixelfont, 8, "OUTLINEMONOCHROME")
  1428.         Name:SetShadowColor(0, 0, 0)
  1429.         Name:SetShadowOffset(1.25, -1.25)
  1430.         Name.frequentUpdates = 0.2
  1431.        
  1432.         self:Tag(Name, '[Tukui:getnamecolor][Tukui:namemedium]')
  1433.         self.Name = Name
  1434.        
  1435.         if (unit and unit:find("boss%d")) then
  1436.             -- alt power bar
  1437.             local AltPowerBar = CreateFrame("StatusBar", nil, self.Health)
  1438.             AltPowerBar:SetFrameLevel(self.Health:GetFrameLevel() + 1)
  1439.             AltPowerBar:Height(4)
  1440.             AltPowerBar:SetStatusBarTexture(C.media.normTex)
  1441.             AltPowerBar:GetStatusBarTexture():SetHorizTile(false)
  1442.             AltPowerBar:SetStatusBarColor(1, 0, 0)
  1443.  
  1444.             AltPowerBar:SetPoint("LEFT")
  1445.             AltPowerBar:SetPoint("RIGHT")
  1446.             AltPowerBar:SetPoint("TOP", self.Health, "TOP")
  1447.            
  1448.             AltPowerBar:SetBackdrop({
  1449.               bgFile = C["media"].blank,
  1450.               edgeFile = C["media"].blank,
  1451.               tile = false, tileSize = 0, edgeSize = T.Scale(1),
  1452.               insets = { left = 0, right = 0, top = 0, bottom = T.Scale(-1)}
  1453.             })
  1454.             AltPowerBar:SetBackdropColor(0, 0, 0)
  1455.  
  1456.             self.AltPowerBar = AltPowerBar
  1457.            
  1458.             -- create buff at left of unit if they are boss units
  1459.             local buffs = CreateFrame("Frame", nil, self)
  1460.             buffs:SetHeight(34)
  1461.             buffs:SetWidth(252)
  1462.             buffs:Point("LEFT", self, "RIGHT", T.Scale(4), 0)
  1463.             buffs.size = 34
  1464.             buffs.num = 2
  1465.             buffs.spacing = 2
  1466.             buffs.initialAnchor = 'LEFT'
  1467.             buffs["growth-x"] = "RIGHT"
  1468.             buffs.PostCreateIcon = T.PostCreateAura
  1469.             buffs.PostUpdateIcon = T.PostUpdateAura
  1470.             self.Buffs = buffs
  1471.            
  1472.             -- because it appear that sometime elements are not correct.
  1473.             self:HookScript("OnShow", T.updateAllElements)
  1474.         end
  1475.  
  1476.         -- create debuff for arena units
  1477.         local debuffs = CreateFrame("Frame", nil, self)
  1478.         debuffs:SetHeight(34)
  1479.         debuffs:SetWidth(200)
  1480.         debuffs:SetPoint('LEFT', self, 'RIGHT', T.Scale(4), 0)
  1481.         debuffs.size = 34
  1482.         debuffs.num = 2
  1483.         debuffs.spacing = 2
  1484.         debuffs.initialAnchor = 'LEFT'
  1485.         debuffs["growth-x"] = "RIGHT"
  1486.         debuffs.PostCreateIcon = T.PostCreateAura
  1487.         debuffs.PostUpdateIcon = T.PostUpdateAura
  1488.         self.Debuffs = debuffs
  1489.                
  1490.         -- trinket feature via trinket plugin
  1491.         if (C.arena.unitframes) and (unit and unit:find('arena%d')) then
  1492.             local Trinketbg = CreateFrame("Frame", nil, self)
  1493.             Trinketbg:SetHeight(26)
  1494.             Trinketbg:SetWidth(26)
  1495.             Trinketbg:SetPoint("RIGHT", self, "LEFT", -6, 0)               
  1496.             Trinketbg:SetTemplate("Default")
  1497.             Trinketbg:SetFrameLevel(0)
  1498.             self.Trinketbg = Trinketbg
  1499.            
  1500.             local Trinket = CreateFrame("Frame", nil, Trinketbg)
  1501.             Trinket:SetAllPoints(Trinketbg)
  1502.             Trinket:SetPoint("TOPLEFT", Trinketbg, T.Scale(2), T.Scale(-2))
  1503.             Trinket:SetPoint("BOTTOMRIGHT", Trinketbg, T.Scale(-2), T.Scale(2))
  1504.             Trinket:SetFrameLevel(1)
  1505.             Trinket.trinketUseAnnounce = true
  1506.             self.Trinket = Trinket
  1507.         end
  1508.        
  1509.         -- boss & arena frames cast bar!
  1510.         local castbar = CreateFrame("StatusBar", self:GetName().."CastBar", self)
  1511.         castbar:SetPoint("LEFT", 21, 0)
  1512.         castbar:SetPoint("RIGHT", 0, 0)
  1513.         castbar:SetPoint("BOTTOM", 0, -35)
  1514.        
  1515.         castbar:SetHeight(15)
  1516.         castbar:SetStatusBarTexture(normTex)
  1517.         castbar:SetFrameLevel(6)
  1518.        
  1519.         castbar.bg = CreateFrame("Frame", nil, castbar)
  1520.         T.SetTemplate(castbar.bg)
  1521.         T.CreateShadow(castbar.bg)
  1522.         castbar.bg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1523.         castbar.bg:SetPoint("TOPLEFT", T.Scale(-2), T.Scale(2))
  1524.         castbar.bg:SetPoint("BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  1525.         castbar.bg:SetFrameLevel(5)
  1526.        
  1527.         castbar.time = T.SetFontString(castbar, pixelfont, 8, "OUTLINEMONOCHROME")
  1528.         castbar.time:SetPoint("RIGHT", castbar, "RIGHT", T.Scale(-4), 0)
  1529.         castbar.time:SetTextColor(0.84, 0.75, 0.65)
  1530.         castbar.time:SetJustifyH("RIGHT")
  1531.         castbar.CustomTimeText = T.CustomCastTimeText
  1532.  
  1533.         castbar.Text = T.SetFontString(castbar, pixelfont, 8, "OUTLINEMONOCHROME")
  1534.         castbar.Text:Point("LEFT", castbar, "LEFT", 4, 0)
  1535.         castbar.Text:SetTextColor(0.84, 0.75, 0.65)
  1536.        
  1537.         castbar.CustomDelayText = T.CustomCastDelayText
  1538.         castbar.PostCastStart = T.CheckCast
  1539.         castbar.PostChannelStart = T.CheckChannel
  1540.                                
  1541.         castbar.button = CreateFrame("Frame", nil, castbar)
  1542.         castbar.button:Height(castbar:GetHeight()+4)
  1543.         castbar.button:Width(castbar:GetHeight()+4)
  1544.         castbar.button:Point("RIGHT", castbar, "LEFT",-4, 0)
  1545.         T.SetTemplate(castbar.button)
  1546.         T.CreateShadow(castbar.button)
  1547.         castbar.button:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1548.         castbar.icon = castbar.button:CreateTexture(nil, "ARTWORK")
  1549.         castbar.icon:Point("TOPLEFT", castbar.button, T.Scale(2), T.Scale(-2))
  1550.         castbar.icon:Point("BOTTOMRIGHT", castbar.button, -2, 2)
  1551.         castbar.icon:SetTexCoord(0.08, 0.92, 0.08, .92)
  1552.  
  1553.         self.Castbar = castbar
  1554.         self.Castbar.Time = castbar.time
  1555.         self.Castbar.Icon = castbar.icon
  1556.     end
  1557.  
  1558.     ------------------------------------------------------------------------
  1559.     --  Main tanks and Main Assists layout (both mirror'd)
  1560.     ------------------------------------------------------------------------
  1561.    
  1562.     if(self:GetParent():GetName():match"TukuiMainTank" or self:GetParent():GetName():match"TukuiMainAssist") then
  1563.         -- Right-click focus on maintank or mainassist units
  1564.         self:SetAttribute("type2", "focus")
  1565.        
  1566.         -- health
  1567.         local health = CreateFrame('StatusBar', nil, self)
  1568.         health:Height(20)
  1569.         health:SetPoint("TOPLEFT")
  1570.         health:SetPoint("TOPRIGHT")
  1571.         health:SetStatusBarTexture(normTex)
  1572.        
  1573.         -- border
  1574.         local Healthbg = CreateFrame("Frame", nil, self)
  1575.         Healthbg:SetPoint("TOPLEFT", self, "TOPLEFT", T.Scale(-2), T.Scale(2))
  1576.         Healthbg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", T.Scale(2), T.Scale(-2))
  1577.         T.SetTemplate(Healthbg)
  1578.         T.CreateShadow(Healthbg)
  1579.         Healthbg:SetBackdropBorderColor(unpack(C["media"].altbordercolor))
  1580.         Healthbg:SetFrameLevel(2)
  1581.         self.Healthbg = Healthbg
  1582.        
  1583.         local healthBG = health:CreateTexture(nil, 'BORDER')
  1584.         healthBG:SetAllPoints()
  1585.         healthBG:SetTexture(.1, .1, .1)
  1586.                
  1587.         self.Health = health
  1588.         self.Health.bg = healthBG
  1589.        
  1590.         health.frequentUpdates = true
  1591.         if C["unitframes"].showsmooth == true then
  1592.             health.Smooth = true
  1593.         end
  1594.        
  1595.         if C["unitframes"].unicolor == true then
  1596.             health.colorDisconnected = false
  1597.             health.colorClass = false
  1598.             health:SetStatusBarColor(.3, .3, .3, 1)
  1599.             healthBG:SetVertexColor(.1, .1, .1, 1)
  1600.         else
  1601.             health.colorDisconnected = true
  1602.             health.colorClass = true
  1603.             health.colorReaction = true
  1604.         end
  1605.        
  1606.         -- names
  1607.         local Name = health:CreateFontString(nil, "OVERLAY")
  1608.         Name:SetPoint("CENTER", health, "CENTER", 0, 0)
  1609.         Name:SetJustifyH("CENTER")
  1610.         Name:SetFont(pixelfont, 8, "OUTLINEMONOCHROME")
  1611.         Name:SetShadowColor(0, 0, 0)
  1612.         Name:SetShadowOffset(1.25, -1.25)
  1613.        
  1614.         self:Tag(Name, '[Tukui:getnamecolor][Tukui:nameshort]')
  1615.         self.Name = Name
  1616.     end
  1617.    
  1618.     return self
  1619. end
  1620.  
  1621. ------------------------------------------------------------------------
  1622. --  Default position of Tukui unitframes
  1623. ------------------------------------------------------------------------
  1624.  
  1625. oUF:RegisterStyle('Tukui', Shared)
  1626.  
  1627. -- player
  1628. local player = oUF:Spawn('player', "TukuiPlayer")
  1629. player:SetPoint("BOTTOMLEFT", InvTukuiActionBarBackground, "TOPLEFT", 2, 61)
  1630.     player:Size(250, 20)
  1631.  
  1632.  
  1633. -- focus
  1634. local focus = oUF:Spawn('focus', "TukuiFocus")
  1635. focus:SetPoint("BOTTOMLEFT", InvTukuiActionBarBackground, "TOPLEFT", 0, 246)
  1636.     focus:Size(200, 29)
  1637.  
  1638. -- target
  1639. local target = oUF:Spawn('target', "TukuiTarget")
  1640. target:SetPoint("BOTTOMRIGHT", InvTukuiActionBarBackground, "TOPRIGHT", -2 ,61)
  1641.     target:Size(250, 20)
  1642.  
  1643. -- tot
  1644. local tot = oUF:Spawn('targettarget', "TukuiTargetTarget")
  1645. tot:SetPoint("BOTTOM", InvTukuiActionBarBackground, "TOP", 0,61)
  1646.     tot:Size(130, 20)
  1647.  
  1648. -- pet
  1649. local pet = oUF:Spawn('pet', "oUF_Tukz_pet")
  1650. pet:SetPoint("BOTTOM", InvTukuiActionBarBackground, "TOP", 0,105)
  1651.     pet:SetSize(T.Scale(130), T.Scale(20))
  1652.  
  1653. -- focus target
  1654. local focustarget = oUF:Spawn("focustarget", "TukuiFocusTarget")
  1655. focustarget:SetPoint("BOTTOM", focus, "TOP", 0, 35)
  1656.     focustarget:Size(200, 29)
  1657.  
  1658.  
  1659. if C.arena.unitframes then
  1660.     local arena = {}
  1661.     for i = 1, 5 do
  1662.         arena[i] = oUF:Spawn("arena"..i, "TukuiArena"..i)
  1663.         if i == 1 then
  1664.             arena[i]:SetPoint("RIGHT", UIParent, "RIGHT", -220, -209)
  1665.         else
  1666.             arena[i]:SetPoint("BOTTOM", arena[i-1], "TOP", 0, 45)
  1667.         end
  1668.         arena[i]:SetSize(T.Scale(200), T.Scale(30))
  1669.     end
  1670. end
  1671.  
  1672. if C["unitframes"].showboss then
  1673.     for i = 1,MAX_BOSS_FRAMES do
  1674.         local t_boss = _G["Boss"..i.."TargetFrame"]
  1675.         t_boss:UnregisterAllEvents()
  1676.         t_boss.Show = T.dummy
  1677.         t_boss:Hide()
  1678.         _G["Boss"..i.."TargetFrame".."HealthBar"]:UnregisterAllEvents()
  1679.         _G["Boss"..i.."TargetFrame".."ManaBar"]:UnregisterAllEvents()
  1680.     end
  1681.  
  1682.     local boss = {}
  1683.     for i = 1, MAX_BOSS_FRAMES do
  1684.         boss[i] = oUF:Spawn("boss"..i, "TukuiBoss"..i)
  1685.         if i == 1 then
  1686.             boss[i]:SetPoint("RIGHT", UIParent, "RIGHT", -220, -209)
  1687.         else
  1688.             boss[i]:SetPoint('BOTTOM', boss[i-1], 'TOP', 0, 45)            
  1689.         end
  1690.         boss[i]:SetSize(T.Scale(200), T.Scale(30))
  1691.     end
  1692. end
  1693.  
  1694. local assisttank_width = 100
  1695. local assisttank_height  = 20
  1696. if C["unitframes"].maintank == true then
  1697.     local tank = oUF:SpawnHeader('TukuiMainTank', nil, 'raid',
  1698.         'oUF-initialConfigFunction', ([[
  1699.             self:SetWidth(%d)
  1700.             self:SetHeight(%d)
  1701.         ]]):format(assisttank_width, assisttank_height),
  1702.         'showRaid', true,
  1703.         'groupFilter', 'MAINTANK',
  1704.         'yOffset', 7,
  1705.         'point' , 'BOTTOM',
  1706.         'template', 'oUF_TukuiMtt'
  1707.     )
  1708.     tank:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
  1709. end
  1710.  
  1711. if C["unitframes"].mainassist == true then
  1712.     local assist = oUF:SpawnHeader("TukuiMainAssist", nil, 'raid',
  1713.         'oUF-initialConfigFunction', ([[
  1714.             self:SetWidth(%d)
  1715.             self:SetHeight(%d)
  1716.         ]]):format(assisttank_width, assisttank_height),
  1717.         'showRaid', true,
  1718.         'groupFilter', 'MAINASSIST',
  1719.         'yOffset', 7,
  1720.         'point' , 'BOTTOM',
  1721.         'template', 'oUF_TukuiMtt'
  1722.     )
  1723.     if C["unitframes"].maintank == true then
  1724.         assist:SetPoint("TOPLEFT", TukuiMainTank, "BOTTOMLEFT", 2, -50)
  1725.     else
  1726.         assist:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
  1727.     end
  1728. end
  1729.  
  1730. -- this is just a fake party to hide Blizzard frame if no Tukui raid layout are loaded.
  1731. local party = oUF:SpawnHeader("oUF_noParty", nil, "party", "showParty", true)
  1732.  
  1733. ------------------------------------------------------------------------
  1734. -- Right-Click on unit frames menu.
  1735. -- Doing this to remove SET_FOCUS eveywhere.
  1736. -- SET_FOCUS work only on default unitframes.
  1737. -- Main Tank and Main Assist, use /maintank and /mainassist commands.
  1738. ------------------------------------------------------------------------
  1739.  
  1740. do
  1741.     UnitPopupMenus["SELF"] = { "PVP_FLAG", "LOOT_METHOD", "LOOT_THRESHOLD", "OPT_OUT_LOOT_TITLE", "LOOT_PROMOTE", "DUNGEON_DIFFICULTY", "RAID_DIFFICULTY", "RESET_INSTANCES", "RAID_TARGET_ICON", "SELECT_ROLE", "CONVERT_TO_PARTY", "CONVERT_TO_RAID", "LEAVE", "CANCEL" };
  1742.     UnitPopupMenus["PET"] = { "PET_PAPERDOLL", "PET_RENAME", "PET_ABANDON", "PET_DISMISS", "CANCEL" };
  1743.     UnitPopupMenus["PARTY"] = { "MUTE", "UNMUTE", "PARTY_SILENCE", "PARTY_UNSILENCE", "RAID_SILENCE", "RAID_UNSILENCE", "BATTLEGROUND_SILENCE", "BATTLEGROUND_UNSILENCE", "WHISPER", "PROMOTE", "PROMOTE_GUIDE", "LOOT_PROMOTE", "VOTE_TO_KICK", "UNINVITE", "INSPECT", "ACHIEVEMENTS", "TRADE", "FOLLOW", "DUEL", "RAID_TARGET_ICON", "SELECT_ROLE", "PVP_REPORT_AFK", "RAF_SUMMON", "RAF_GRANT_LEVEL", "CANCEL" }
  1744.     UnitPopupMenus["PLAYER"] = { "WHISPER", "INSPECT", "INVITE", "ACHIEVEMENTS", "TRADE", "FOLLOW", "DUEL", "RAID_TARGET_ICON", "RAF_SUMMON", "RAF_GRANT_LEVEL", "CANCEL" }
  1745.     UnitPopupMenus["RAID_PLAYER"] = { "MUTE", "UNMUTE", "RAID_SILENCE", "RAID_UNSILENCE", "BATTLEGROUND_SILENCE", "BATTLEGROUND_UNSILENCE", "WHISPER", "INSPECT", "ACHIEVEMENTS", "TRADE", "FOLLOW", "DUEL", "RAID_TARGET_ICON", "SELECT_ROLE", "RAID_LEADER", "RAID_PROMOTE", "RAID_DEMOTE", "LOOT_PROMOTE", "RAID_REMOVE", "PVP_REPORT_AFK", "RAF_SUMMON", "RAF_GRANT_LEVEL", "CANCEL" };
  1746.     UnitPopupMenus["RAID"] = { "MUTE", "UNMUTE", "RAID_SILENCE", "RAID_UNSILENCE", "BATTLEGROUND_SILENCE", "BATTLEGROUND_UNSILENCE", "RAID_LEADER", "RAID_PROMOTE", "RAID_MAINTANK", "RAID_MAINASSIST", "RAID_TARGET_ICON", "LOOT_PROMOTE", "RAID_DEMOTE", "RAID_REMOVE", "PVP_REPORT_AFK", "CANCEL" };
  1747.     UnitPopupMenus["VEHICLE"] = { "RAID_TARGET_ICON", "VEHICLE_LEAVE", "CANCEL" }
  1748.     UnitPopupMenus["TARGET"] = { "RAID_TARGET_ICON", "CANCEL" }
  1749.     UnitPopupMenus["ARENAENEMY"] = { "CANCEL" }
  1750.     UnitPopupMenus["FOCUS"] = { "RAID_TARGET_ICON", "CANCEL" }
  1751.     UnitPopupMenus["BOSS"] = { "RAID_TARGET_ICON", "CANCEL" }
  1752. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement