local PA , ACL , ACH = unpack ( _G.ProjectAzilroka )
local DO = PA : NewModule ( ' DragonOverlay ' , ' AceEvent-3.0 ' )
PA.DO , _G.DragonOverlay = DO , DO
local _G = _G
local next , tinsert , unpack , strfind = next , tinsert , unpack , strfind
local UnitIsPlayer , UnitClass , UnitClassification = UnitIsPlayer , UnitClass , UnitClassification
DO.Title , DO.Description , DO.Authors , DO.ImageCredits , DO.isEnabled = ' Dragon Overlay ' , ACL [ ' Provides an overlay on UnitFrames for Boss, Elite, Rare and RareElite ' ] , ' Azilroka Nihilistzsche ' , ' Codeblake Kkthnxbye Narley Durandil ' , false
local CLASS_ICON_TCOORDS , MediaPath = CLASS_ICON_TCOORDS , ' Interface/AddOns/ProjectAzilroka/Media/DragonOverlay/ '
DO.Textures = {
Azure = MediaPath .. ' Azure ' ,
Chromatic = MediaPath .. ' Chromatic ' ,
Crimson = MediaPath .. ' Crimson ' ,
Golden = MediaPath .. ' Golden ' ,
Jade = MediaPath .. ' Jade ' ,
Onyx = MediaPath .. ' Onyx ' ,
HeavenlyBlue = MediaPath .. ' HeavenlyBlue ' ,
HeavenlyCrimson = MediaPath .. ' HeavenlyCrimson ' ,
HeavenlyGolden = MediaPath .. ' HeavenlyGolden ' ,
HeavenlyJade = MediaPath .. ' HeavenlyJade ' ,
HeavenlyOnyx = MediaPath .. ' HeavenlyOnyx ' ,
ClassicElite = MediaPath .. ' ClassicElite ' ,
ClassicRareElite = MediaPath .. ' ClassicRareElite ' ,
ClassicRare = MediaPath .. ' ClassicRare ' ,
ClassicBoss = MediaPath .. ' ClassicBoss ' ,
}
function DO : SetOverlay ( )
local Points = UnitIsPlayer ( ' target ' ) and DO.db . ClassIcon and ' ClassIconPoints ' or ' DragonPoints '
local Frame = _G [ DO.db [ Points ] . relativeTo ]
if Frame then
if Points == ' ClassIconPoints ' then
local _ , classToken = UnitClass ( ' target ' )
DO.frame : SetSize ( DO.db . IconSize , DO.db . IconSize )
DO.frame . Texture : SetTexture ( ' Interface/WorldStateFrame/Icons-Classes ' )
DO.frame . Texture : SetTexCoord ( unpack ( CLASS_ICON_TCOORDS [ classToken ] ) )
else
DO.frame : SetSize ( DO.db . Width , DO.db . Height )
DO.frame . Texture : SetTexture ( DO.Textures [ DO.db [ UnitClassification ( ' target ' ) ] ] )
DO.frame . Texture : SetTexCoord ( DO.db . FlipDragon and 1 or 0 , DO.db . FlipDragon and 0 or 1 , 0 , 1 )
end
DO.frame : ClearAllPoints ( )
DO.frame : SetParent ( Frame )
DO.frame : SetPoint ( DO.db [ Points ] . point , Frame.Health , DO.db [ Points ] . relativePoint , DO.db [ Points ] . xOffset , DO.db [ Points ] . yOffset )
DO.frame : SetFrameStrata ( DO.db . Strata )
DO.frame : SetFrameLevel ( DO.db . Level )
end
end
function DO : GetOptions ( )
local DragonOverlay = ACH : Group ( DO.Title , DO.Description , nil , nil , function ( info ) return DO.db [ info [ # info ] ] end )
PA.Options . args.DragonOverlay = DragonOverlay
DragonOverlay.args . Description = ACH : Description ( DO.Description , 0 )
DragonOverlay.args . Enable = ACH : Toggle ( ACL [ " Enable " ] , nil , 1 , nil , nil , nil , nil , function ( info , value ) DO.db [ info [ # info ] ] = value if not DO.isEnabled then DO : Initialize ( ) else _G.StaticPopup_Show ( ' PROJECTAZILROKA_RL ' ) end end )
DragonOverlay.args . General = ACH : Group ( ACL [ " General " ] , nil , 2 , nil , nil , function ( info , value ) DO.db [ info [ # info ] ] = value DO : SetOverlay ( ) end )
DragonOverlay.args . General.inline = true
DragonOverlay.args . General.args . ClassIcon = ACH : Toggle ( ACL [ " Class Icon " ] , nil , 1 )
DragonOverlay.args . General.args . FlipDragon = ACH : Toggle ( ACL [ " Flip Dragon " ] , nil , 2 )
DragonOverlay.args . General.args . Strata = ACH : Select ( ACL [ " Frame Strata " ] , nil , 3 , { BACKGROUND = ' BACKGROUND ' , LOW = ' LOW ' , MEDIUM = ' MEDIUM ' , HIGH = ' HIGH ' , DIALOG = ' DIALOG ' , FULLSCREEN = ' FULLSCREEN ' , FULLSCREEN_DIALOG = ' FULLSCREEN_DIALOG ' , TOOLTIP = ' TOOLTIP ' } )
DragonOverlay.args . General.args . Level = ACH : Range ( ACL [ " Frame Level " ] , nil , 4 , { min = 0 , max = 255 , step = 1 } )
DragonOverlay.args . General.args . IconSize = ACH : Range ( ACL [ " Icon Size " ] , nil , 5 , { min = 0 , max = 256 , step = 1 } )
DragonOverlay.args . General.args . Width = ACH : Range ( ACL [ " Width " ] , nil , 6 , { min = 1 , max = 256 , step = 1 } )
DragonOverlay.args . General.args . Height = ACH : Range ( ACL [ " Height " ] , nil , 7 , { min = 1 , max = 256 , step = 1 } )
DragonOverlay.args . General.args . Dragons = ACH : Group ( ACL [ " Dragons " ] , nil , - 6 )
DragonOverlay.args . General.args . Dragons.inline = true
DragonOverlay.args . General.args . Textures = ACH : Group ( ACL [ " Preview " ] , nil , - 5 )
DragonOverlay.args . General.args . Textures.inline = true
local parents , frames , textures = { oUF_PetBattleFrameHider } , { } , { }
if PA.Tukui then tinsert ( parents , _G.Tukui [ 1 ] . PetHider ) end
if PA.ElvUI then tinsert ( parents , _G.ElvUFParent ) end
for _ , parent in next , parents do
for _ , UnitFrame in next , { parent : GetChildren ( ) } do
if _G.SecureButton_GetUnit ( UnitFrame ) == ' target ' then frames [ UnitFrame : GetName ( ) ] = UnitFrame : GetName ( ) end
end
end
for Option , Name in next , { ClassIconPoints = ACL [ " Class Icon Points " ] , DragonPoints = ACL [ " Dragon Points " ] } do
DragonOverlay.args . General.args [ Option ] = ACH : Group ( Name , nil , nil , nil , function ( info ) return DO.db [ Option ] [ info [ # info ] ] end , function ( info , value ) DO.db [ Option ] [ info [ # info ] ] = value DO : SetOverlay ( ) end )
DragonOverlay.args . General.args [ Option ] . inline = true
DragonOverlay.args . General.args [ Option ] . args.point = ACH : Select ( ACL [ " Anchor Point " ] , nil , 1 , PA.AllPoints )
DragonOverlay.args . General.args [ Option ] . args.relativeTo = ACH : Select ( ACL [ " Relative Frame " ] , nil , 2 , frames )
DragonOverlay.args . General.args [ Option ] . args.relativePoint = ACH : Select ( ACL [ " Relative Point " ] , nil , 3 , PA.AllPoints )
DragonOverlay.args . General.args [ Option ] . args.xOffset = ACH : Range ( ACL [ " X Offset " ] , nil , 4 , { min = - 350 , max = 350 , step = 1 } )
DragonOverlay.args . General.args [ Option ] . args.yOffset = ACH : Range ( ACL [ " Y Offset " ] , nil , 5 , { min = - 350 , max = 350 , step = 1 } )
end
DragonOverlay.args . General.args . ClassIconPoints.hidden = function ( ) return ( not DO.db . ClassIcon ) end
for texture in next , DO.Textures do textures [ texture ] = texture : gsub ( ' (%l)(%u%l) ' , ' %1 %2 ' ) end
for Option , Name in next , { elite = ACL [ " Elite " ] , rare = ACL [ " Rare " ] , rareelite = ACL [ " Rare Elite " ] , worldboss = ACL [ " World Boss " ] } do
DragonOverlay.args . General.args . Dragons.args [ Option ] = ACH : Select ( Name , nil , nil , textures )
DragonOverlay.args . General.args . Textures.args [ Option ] = ACH : Execute ( Name , nil , nil , nil , function ( ) return DO.Textures [ DO.db [ Option ] ] , strfind ( DO.db [ Option ] , ' Classic ' ) and 32 or 128 , 32 end )
end
DragonOverlay.args . AuthorHeader = ACH : Header ( ACL [ " Authors: " ] , - 4 )
DragonOverlay.args . Authors = ACH : Description ( DO.Authors , - 3 , ' large ' )
DragonOverlay.args . CreditsHeader = ACH : Header ( ACL [ " Image Credits: " ] , - 2 )
DragonOverlay.args . Credits = ACH : Description ( DO.ImageCredits , - 1 , ' large ' )
end
function DO : BuildProfile ( )
PA.Defaults . profile.DragonOverlay = {
Enable = true ,
Strata = ' MEDIUM ' ,
Level = 12 ,
IconSize = 32 ,
Width = 128 ,
Height = 64 ,
worldboss = ' Chromatic ' ,
elite = ' HeavenlyGolden ' ,
rare = ' Onyx ' ,
rareelite = ' HeavenlyOnyx ' ,
ClassIcon = false ,
FlipDragon = false ,
ClassIconPoints = {
point = ' CENTER ' ,
relativeTo = PA.Tukui and ' oUF_TukuiTarget ' or PA.ElvUI and ' ElvUF_Target ' or PA.NUI and ' NihilistUF_Target ' or ' oUF_Target ' ,
relativePoint = ' TOP ' ,
xOffset = 0 ,
yOffset = 5 ,
} ,
DragonPoints = {
point = ' CENTER ' ,
relativeTo = PA.Tukui and ' oUF_TukuiTarget ' or PA.ElvUI and ' ElvUF_Target ' or PA.NUI and ' NihilistUF_Target ' or ' oUF_Target ' ,
relativePoint = ' TOP ' ,
xOffset = 0 ,
yOffset = 5 ,
} ,
}
end
function DO : UpdateSettings ( )
DO.db = PA.db . DragonOverlay
end
function DO : Initialize ( )
if DO.db . Enable ~= true then
return
end
DO.isEnabled = true
local frame = CreateFrame ( ' Frame ' , ' DragonOverlayFrame ' , UIParent )
frame.Texture = frame : CreateTexture ( nil , ' ARTWORK ' )
frame.Texture : SetAllPoints ( )
DO.frame = frame
DO : RegisterEvent ( ' PLAYER_TARGET_CHANGED ' , ' SetOverlay ' )
end