Added definitions for unitframes

This commit is contained in:
Tercio Jose
2023-08-12 21:20:31 -03:00
parent 0b32fe3459
commit 592b9a39ab
4 changed files with 262 additions and 84 deletions
+1
View File
@@ -14,3 +14,4 @@
---@field Mixin fun(self:table, target:table, ...) : table
---@field SetButtonTexture fun(self:table, button:button|df_button, texture:atlasname|texturepath|textureid)
---@field CreateFadeAnimation fun(self:table, UIObject:uiobject, fadeInTime:number?, fadeOutTime:number?, fadeInAlpha:number?, fadeOutAlpha:number?)
---@field UnitGroupRolesAssigned fun(self:table, unitId: unit, specId: specializationid) : string
+10 -2
View File
@@ -1,6 +1,6 @@
local dversion = 456
local dversion = 457
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary(major, minor)
@@ -233,14 +233,22 @@ end
---return the role of the unit, this is safe to use for all versions of wow
---@param unitId string
---@param specId number
---@return string
function DF.UnitGroupRolesAssigned(unitId)
function DF.UnitGroupRolesAssigned(unitId, specId)
if (not DF.IsTimewalkWoW()) then --Was function exist check. TBC has function, returns NONE. -Flamanis 5/16/2022
local role = UnitGroupRolesAssigned(unitId)
if (specId == 1473) then
return "SUPPORT"
end
if (role == "NONE" and UnitIsUnit(unitId, "player")) then
local specializationIndex = GetSpecialization() or 0
local id, name, description, icon, role, primaryStat = GetSpecializationInfo(specializationIndex)
if (id == 1473) then
return "SUPPORT"
end
return id and role or "NONE"
end
+30 -15
View File
@@ -351,7 +351,13 @@ detailsFramework.PayloadMixin = {
---mixin to use with DetailsFramework:Mixin(table, detailsFramework.ScriptHookMixin)
---
---@class DetailsFramework.ScriptHookMixin
---@class df_scripthookmixin
---@field HookList table
---@field SetHook fun(self: table, hookType: string, func: function)
---@field HasHook fun(self: table, hookType: string, func: function)
---@field RunHooksForWidget fun(self: table, event: string, ...)
---@field ClearHooks fun(self: table)
detailsFramework.ScriptHookMixin = {
RunHooksForWidget = function(self, event, ...)
local hooks = self.HookList[event]
@@ -991,6 +997,29 @@ detailsFramework.ValueMixin = {
statusBar:
--]=]
---@class df_statusbarmixin : table
---@field SetTexture fun(self: table, texture: string, isTemporary: boolean)
---@field ResetTexture fun(self: table)
---@field GetTexture fun(self: table) : string
---@field SetAtlas fun(self: table, atlasName: string)
---@field GetAtlas fun(self: table) : string
---@field SetTexCoord fun(self: table, ...)
---@field GetTexCoord fun(self: table) : number, number, number, number
---@field SetColor fun(self: table, ...)
---@field GetColor fun(self: table) : number, number, number, number
---@field SetMaskTexture fun(self: table, texture: string)
---@field GetMaskTexture fun(self: table) : string
---@field SetMaskTexCoord fun(self: table, ...)
---@field GetMaskTexCoord fun(self: table) : number, number, number, number
---@field SetMaskAtlas fun(self: table, atlasName: string)
---@field GetMaskAtlas fun(self: table) : string
---@field AddMaskTexture fun(self: table, texture: string)
---@field SetBorderTexture fun(self: table, texture: string)
---@field GetBorderTexture fun(self: table) : string
---@field SetBorderColor fun(self: table, ...)
---@field GetBorderColor fun(self: table) : number, number, number, number
detailsFramework.StatusBarFunctions = {
SetTexture = function(self, texture, isTemporary)
self.barTexture:SetTexture(texture)
@@ -1046,20 +1075,6 @@ detailsFramework.StatusBarFunctions = {
self.barTextureMask:GetTexture()
end,
--SetMaskTexCoord = function(self, ...) --MaskTexture doesn't not support texcoord
-- if (not self:HasTextureMask()) then
-- return
-- end
-- self.barTextureMask:SetTexCoord(...)
--end,
--GetMaskTexCoord = function(self, ...)
-- if (not self:HasTextureMask()) then
-- return
-- end
-- self.barTextureMask:GetTexCoord()
--end,
SetMaskAtlas = function(self, atlasName)
if (not self:HasTextureMask()) then
return
+221 -67
View File
@@ -28,6 +28,8 @@ local GetUnitPowerBarInfoByID = GetUnitPowerBarInfoByID
local IsInGroup = IsInGroup
local UnitPowerType = UnitPowerType
local UnitIsConnected = UnitIsConnected
local UnitPlayerControlled = UnitPlayerControlled
local UnitIsTapDenied = UnitIsTapDenied
local max = math.max
local min = math.min
local abs = math.abs
@@ -59,6 +61,38 @@ local cleanfunction = function() end
healthBar:SetTexture(texture)
--]=]
---@class df_healthbarsettings : table
---@field CanTick boolean
---@field ShowHealingPrediction boolean
---@field ShowShields boolean
---@field BackgroundColor table
---@field Texture texturepath|textureid|atlasname
---@field ShieldIndicatorTexture texturepath|textureid|atlasname
---@field ShieldGlowTexture texturepath|textureid|atlasname
---@field ShieldGlowWidth number
---@field Width number
---@field Height number
---@class df_healthbar : statusbar, df_scripthookmixin, df_statusbarmixin
---@field unit unit
---@field displayedUnit unit
---@field currentHealth number
---@field currentHealthMax number
---@field WidgetType string
---@field Settings df_healthbarsettings
---@field background texture
---@field incomingHealIndicator texture
---@field shieldAbsorbIndicator texture
---@field healAbsorbIndicator texture
---@field shieldAbsorbGlow texture
---@field barTexture texture
---@field SetUnit fun(self:df_healthbar, unit:unit, displayedUnit:unit)
---@field GetTexture fun(self:df_healthbar) : texture
---@field SetTexture fun(self:df_healthbar, texture:texturepath|textureid|atlasname)
---@field SetColor fun(self:df_healthbar, red:number, green:number, blue:number, alpha:number)
---@field UpdateHealPrediction fun(self:df_healthbar)
---@field UpdateHealth fun(self:df_healthbar)
---@field UpdateMaxHealth fun(self:df_healthbar)
--healthBar meta prototype
local healthBarMetaPrototype = {
@@ -69,7 +103,7 @@ local cleanfunction = function() end
--check if there's a metaPrototype already existing
if (_G[detailsFramework.GlobalWidgetControlNames["healthBar"]]) then
--get the already existing metaPrototype
local oldMetaPrototype = _G[detailsFramework.GlobalWidgetControlNames ["healthBar"]]
local oldMetaPrototype = _G[detailsFramework.GlobalWidgetControlNames["healthBar"]]
--check if is older
if ( (not oldMetaPrototype.dversion) or (oldMetaPrototype.dversion < detailsFramework.dversion) ) then
--the version is older them the currently loading one
@@ -132,7 +166,6 @@ local cleanfunction = function() end
--setup the castbar to be used by another unit
healthBarMetaFunctions.SetUnit = function(self, unit, displayedUnit)
if (self.unit ~= unit or self.displayedUnit ~= displayedUnit or unit == nil) then
self.unit = unit
self.displayedUnit = displayedUnit or unit
@@ -181,9 +214,9 @@ local cleanfunction = function() end
else
--remove all registered events
for _, eventTable in ipairs(self.HealthBarEvents) do
local event = eventTable [1]
local event = eventTable[1]
if event then
self:UnregisterEvent (event)
self:UnregisterEvent(event)
end
end
@@ -348,7 +381,6 @@ local cleanfunction = function() end
self:UpdateHealPrediction()
end
healthBarMetaFunctions.UNIT_HEAL_PREDICTION = function(self, ...)
self:UpdateMaxHealth()
self:UpdateHealth()
@@ -368,8 +400,7 @@ local cleanfunction = function() end
end
-- ~healthbar
function detailsFramework:CreateHealthBar (parent, name, settingsOverride)
function detailsFramework:CreateHealthBar(parent, name, settingsOverride)
assert(name or parent:GetName(), "DetailsFramework:CreateHealthBar parameter 'name' omitted and parent has no name.")
local healthBar = CreateFrame("StatusBar", name or (parent:GetName() .. "HealthBar"), parent, "BackdropTemplate")
@@ -695,6 +726,37 @@ end
@settingsOverride = table with keys and values to replace the defaults from the framework
--]=]
---@class df_castbarsettings : table
---@field NoFadeEffects boolean if true it won't play fade effects when a cast if finished
---@field ShowTradeSkills boolean if true, it shows cast for trade skills, e.g. creating an icon with blacksmith
---@field ShowShield boolean if true, shows the shield above the spell icon for non interruptible casts
---@field CanTick boolean if true it will run its OnTick function every tick.
---@field ShowCastTime boolean if true, show the remaining time to finish the cast, lazy tick must be enabled
---@field FadeInTime number amount of time in seconds to go from zero to 100% alpha when starting to cast
---@field FadeOutTime number amount of time in seconds to go from 100% to zero alpha when the cast finishes
---@field CanLazyTick boolean if true, it'll execute the lazy tick function, it ticks in a much slower pace comparece with the regular tick
---@field LazyUpdateCooldown number amount of time to wait for the next lazy update, this updates non critical things like the cast timer
---@field ShowEmpoweredDuration boolean full hold time for empowered spells
---@field FillOnInterrupt boolean
---@field HideSparkOnInterrupt boolean
---@field Width number
---@field Height number
---@field Colors df_castcolors
---@field BackgroundColor table
---@field Texture texturepath|textureid
---@field BorderShieldWidth number
---@field BorderShieldHeight number
---@field BorderShieldCoords table
---@field BorderShieldTexture number
---@field SpellIconWidth number
---@field SpellIconHeight number
---@field ShieldIndicatorTexture texturepath|textureid
---@field ShieldGlowTexture texturepath|textureid
---@field SparkTexture texturepath|textureid
---@field SparkWidth number
---@field SparkHeight number
---@field SparkOffset number
detailsFramework.CastFrameFunctions = {
WidgetType = "castBar",
@@ -807,7 +869,7 @@ detailsFramework.CastFrameFunctions = {
SetDefaultColor = function(self, colorType, r, g, b, a)
assert(type(colorType) == "string", "DetailsFramework: CastBar:SetDefaultColor require a string in the first argument.")
self.Colors [colorType]:SetColor (r, g, b, a)
self.Colors[colorType]:SetColor(r, g, b, a)
end,
--this get a color suggestion based on the type of cast being shown in the cast bar
@@ -835,7 +897,7 @@ detailsFramework.CastFrameFunctions = {
--update all colors of the cast bar
UpdateCastColor = function(self)
local castColor = self:GetCastColor()
self:SetColor (castColor) --SetColor handles with ParseColors()
self:SetColor(castColor) --SetColor handles with ParseColors()
end,
--initial checks to know if this is a valid cast and should show the cast bar, if this fails the cast bar won't show
@@ -869,7 +931,6 @@ detailsFramework.CastFrameFunctions = {
--this check if the cast did reach 100% in the statusbar, mostly called from OnTick
CheckCastIsDone = function(self, event, isFinished)
--check max value
if (not isFinished and not self.finished) then
if (self.casting) then
@@ -894,10 +955,10 @@ detailsFramework.CastFrameFunctions = {
--the cast is finished
if (isFinished) then
if (self.casting) then
self.UNIT_SPELLCAST_STOP (self, self.unit, self.unit, self.castID, self.spellID)
self.UNIT_SPELLCAST_STOP(self, self.unit, self.unit, self.castID, self.spellID)
elseif (self.channeling) then
self.UNIT_SPELLCAST_CHANNEL_STOP (self, self.unit, self.unit, self.castID, self.spellID)
self.UNIT_SPELLCAST_CHANNEL_STOP(self, self.unit, self.unit, self.castID, self.spellID)
end
return true
@@ -918,12 +979,12 @@ detailsFramework.CastFrameFunctions = {
--register events
if (unit) then
for _, eventTable in ipairs(self.CastBarEvents) do
local event = eventTable [1]
local isUnitEvent = eventTable [2]
local event = eventTable[1]
local isUnitEvent = eventTable[2]
if event then
if (isUnitEvent) then
self:RegisterUnitEvent (event, unit)
self:RegisterUnitEvent(event, unit)
else
self:RegisterEvent(event)
end
@@ -950,13 +1011,13 @@ detailsFramework.CastFrameFunctions = {
self:CancelScheduleToHide()
--self:PLAYER_ENTERING_WORLD (unit, unit)
self:OnEvent ("PLAYER_ENTERING_WORLD", unit, unit)
self:OnEvent("PLAYER_ENTERING_WORLD", unit, unit)
else
for _, eventTable in ipairs(self.CastBarEvents) do
local event = eventTable [1]
local event = eventTable[1]
if event then
self:UnregisterEvent (event)
self:UnregisterEvent(event)
end
end
@@ -1029,7 +1090,7 @@ detailsFramework.CastFrameFunctions = {
if (self.unit) then
if (self.casting) then
local name, text, texture, startTime = CastInfo.UnitCastingInfo (self.unit)
local name, text, texture, startTime = CastInfo.UnitCastingInfo(self.unit)
if (name) then
--[[if not self.spellStartTime then
self:UpdateCastingInfo(self.unit)
@@ -1040,7 +1101,7 @@ detailsFramework.CastFrameFunctions = {
self:RunHooksForWidget("OnShow", self, self.unit)
elseif (self.channeling) then
local name, text, texture, endTime = CastInfo.UnitChannelInfo (self.unit)
local name, text, texture, endTime = CastInfo.UnitChannelInfo(self.unit)
if (name) then
--[[if not self.spellEndTime then
self:UpdateChannelInfo(self.unit)
@@ -1141,7 +1202,7 @@ detailsFramework.CastFrameFunctions = {
OnTick = function(self, deltaTime)
if (self.casting) then
if (not self:OnTick_Casting (deltaTime)) then
if (not self:OnTick_Casting(deltaTime)) then
return
end
@@ -1153,7 +1214,7 @@ detailsFramework.CastFrameFunctions = {
end
elseif (self.channeling) then
if (not self:OnTick_Channeling (deltaTime)) then
if (not self:OnTick_Channeling(deltaTime)) then
return
end
@@ -1192,7 +1253,7 @@ detailsFramework.CastFrameFunctions = {
--animation calls
Animation_FadeOut = function(self)
self:ScheduleToHide (false)
self:ScheduleToHide(false)
if (self.fadeInAnimation:IsPlaying()) then
self.fadeInAnimation:Stop()
@@ -1236,8 +1297,8 @@ detailsFramework.CastFrameFunctions = {
end,
PLAYER_ENTERING_WORLD = function(self, unit, arg1)
local isChannel = CastInfo.UnitChannelInfo (unit)
local isRegularCast = CastInfo.UnitCastingInfo (unit)
local isChannel = CastInfo.UnitChannelInfo(unit)
local isRegularCast = CastInfo.UnitCastingInfo(unit)
if (isChannel) then
self.channeling = true
@@ -1261,10 +1322,10 @@ detailsFramework.CastFrameFunctions = {
end,
UpdateCastingInfo = function(self, unit)
local name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible, spellID = CastInfo.UnitCastingInfo (unit)
local name, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible, spellID = CastInfo.UnitCastingInfo(unit)
--is valid?
if (not self:IsValid (unit, name, isTradeSkill, true)) then
if (not self:IsValid(unit, name, isTradeSkill, true)) then
return
end
@@ -1320,13 +1381,10 @@ detailsFramework.CastFrameFunctions = {
--update the interrupt cast border
self:UpdateInterruptState()
end,
UNIT_SPELLCAST_START = function(self, unit)
self:UpdateCastingInfo(unit)
self:RunHooksForWidget("OnCastStart", self, self.unit, "UNIT_SPELLCAST_START")
end,
@@ -1352,8 +1410,7 @@ detailsFramework.CastFrameFunctions = {
local curDuration = curEndTime - curStartTime
local offset = width * curEndTime / (endTime - startTime) * 1000
if curDuration > -1 then
stagePip = self.stagePips[i]
local stagePip = self.stagePips[i]
if not stagePip then
stagePip = self:CreateTexture(nil, "overlay", nil, 2)
stagePip:SetBlendMode("ADD")
@@ -1396,7 +1453,6 @@ detailsFramework.CastFrameFunctions = {
self.empowered = true
self.numStages = numStages
local lastStageEndTime = 0
for i = 1, numStages do
self.empStages[i] = {
@@ -1473,9 +1529,7 @@ detailsFramework.CastFrameFunctions = {
end,
UNIT_SPELLCAST_CHANNEL_START = function(self, unit, ...)
self:UpdateChannelInfo(unit, ...)
self:RunHooksForWidget("OnCastStart", self, self.unit, "UNIT_SPELLCAST_CHANNEL_START")
end,
@@ -1613,12 +1667,12 @@ detailsFramework.CastFrameFunctions = {
end
local castColor = self:GetCastColor()
self:SetColor (castColor) --SetColor handles with ParseColors()
self:SetColor(castColor) --SetColor handles with ParseColors()
self.percentText:Hide()
self.Text:SetText(INTERRUPTED) --auto locale within the global namespace
self:ScheduleToHide (1)
self:ScheduleToHide(1)
end
end,
@@ -1640,7 +1694,7 @@ detailsFramework.CastFrameFunctions = {
UNIT_SPELLCAST_CHANNEL_UPDATE = function(self, unit, ...)
local name, text, texture, startTime, endTime, isTradeSkill, notInterruptible, spellID, _, numStages = CastInfo.UnitChannelInfo (unit)
if (not self:IsValid (unit, name, isTradeSkill)) then
if (not self:IsValid(unit, name, isTradeSkill)) then
return
end
@@ -1671,11 +1725,68 @@ detailsFramework.CastFrameFunctions = {
self:UpdateCastColor()
self:UpdateInterruptState()
end,
}
detailsFramework:Mixin(detailsFramework.CastFrameFunctions, detailsFramework.ScriptHookMixin)
---@alias caststage_color
---| "Casting"
---| "Channeling"
---| "Interrupted"
---| "Failed"
---| "NotInterruptable"
---| "Finished"
---@class df_castcolors : table
---@field Casting table
---@field Channeling table
---@field Interrupted table
---@field Failed table
---@field NotInterruptable table
---@field Finished table
---@class df_castbar : statusbar, df_scripthookmixin, df_statusbarmixin, df_castbarsettings
---@field unit string
---@field displayedUnit string
---@field WidgetType string
---@field value number
---@field maxValue number
---@field spellStartTime number
---@field spellEndTime number
---@field empowered boolean
---@field curStage number
---@field numStages number
---@field empStages {start:number, finish:number}[]
---@field stagePips texture[]
---@field holdAtMaxTime number
---@field casting boolean
---@field channeling boolean
---@field interrupted boolean
---@field failed boolean
---@field finished boolean
---@field canInterrupt boolean
---@field spellID spellid
---@field castID number
---@field spellName spellname
---@field spellTexture textureid
---@field Colors df_castcolors
---@field background texture
---@field extraBackground texture
---@field Text fontstring
---@field BorderShield texture
---@field Icon texture
---@field Spark texture
---@field percentText fontstring
---@field barTexture texture
---@field flashTexture texture
---@field fadeOutAnimation animationgroup
---@field fadeInAnimation animationgroup
---@field flashAnimation animationgroup
---@field SetUnit fun(self:df_castbar, unit:string)
---@field SetDefaultColor fun(self:df_castbar, colorType: caststage_color, red:any, green:number?, blue:number?, alpha:number?)
---@field UpdateCastColor fun(self:df_castbar) after setting a new color, call this function to update the bar color (while casting or channeling)
---@field GetCastColor fun(self:df_castbar) return a table with the color values for the current state of the casting process
-- ~castbar
function detailsFramework:CreateCastBar(parent, name, settingsOverride)
@@ -1716,11 +1827,11 @@ function detailsFramework:CreateCastBar(parent, name, settingsOverride)
castBar:SetStatusBarTexture(castBar.barTexture)
--animations fade in and out
local fadeOutAnimationHub = detailsFramework:CreateAnimationHub (castBar, detailsFramework.CastFrameFunctions.Animation_FadeOutStarted, detailsFramework.CastFrameFunctions.Animation_FadeOutFinished)
local fadeOutAnimationHub = detailsFramework:CreateAnimationHub(castBar, detailsFramework.CastFrameFunctions.Animation_FadeOutStarted, detailsFramework.CastFrameFunctions.Animation_FadeOutFinished)
fadeOutAnimationHub.alpha1 = detailsFramework:CreateAnimation(fadeOutAnimationHub, "ALPHA", 1, 1, 1, 0)
castBar.fadeOutAnimation = fadeOutAnimationHub
local fadeInAnimationHub = detailsFramework:CreateAnimationHub (castBar, detailsFramework.CastFrameFunctions.Animation_FadeInStarted, detailsFramework.CastFrameFunctions.Animation_FadeInFinished)
local fadeInAnimationHub = detailsFramework:CreateAnimationHub(castBar, detailsFramework.CastFrameFunctions.Animation_FadeInStarted, detailsFramework.CastFrameFunctions.Animation_FadeInFinished)
fadeInAnimationHub.alpha1 = detailsFramework:CreateAnimation(fadeInAnimationHub, "ALPHA", 1, 0.150, 0, 1)
castBar.fadeInAnimation = fadeInAnimationHub
@@ -1733,7 +1844,7 @@ function detailsFramework:CreateCastBar(parent, name, settingsOverride)
flashTexture:SetBlendMode("ADD")
castBar.flashTexture = flashTexture
local flashAnimationHub = detailsFramework:CreateAnimationHub (flashTexture, function() flashTexture:Show() end, function() flashTexture:Hide() end)
local flashAnimationHub = detailsFramework:CreateAnimationHub(flashTexture, function() flashTexture:Show() end, function() flashTexture:Hide() end)
detailsFramework:CreateAnimation(flashAnimationHub, "ALPHA", 1, 0.2, 0, 0.8)
detailsFramework:CreateAnimation(flashAnimationHub, "ALPHA", 2, 0.2, 1, 0)
castBar.flashAnimation = flashAnimationHub
@@ -1781,6 +1892,7 @@ end
--]=]
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--unit frame
@@ -1789,6 +1901,32 @@ end
return unit and not UnitPlayerControlled(unit) and UnitIsTapDenied(unit)
end
---@class df_unitframesettings : table
---@field ClearUnitOnHide boolean
---@field ShowCastBar boolean
---@field ShowPowerBar boolean
---@field ShowUnitName boolean
---@field ShowBorder boolean
---@field CanModifyHealhBarColor boolean
---@field ColorByAggro boolean
---@field FixedHealthColor boolean
---@field UseFriendlyClassColor boolean
---@field UseEnemyClassColor boolean
---@field ShowTargetOverlay boolean
---@field BorderColor table
---@field CanTick boolean
---@field Width number
---@field Height number
---@field PowerBarHeight number
---@field CastBarHeight number
---@class df_unitframemixin
---@field WidgetType string
---@field Settings df_unitframesettings
---@field SetHealthBarColor fun(self:df_unitframe, r:number, g:number?, b:number?, a:number?)
---@field SetUnit fun(self:df_unitframe, unit:string) sets the unit to be shown in the unit frame
---@field OnTick fun(self:df_unitframe, deltaTime:number?) if CanTick is true, this function will be called every frame
detailsFramework.UnitFrameFunctions = {
WidgetType = "unitFrame",
@@ -1846,9 +1984,9 @@ end
},
Initialize = function(self)
self.border:SetBorderColor (self.Settings.BorderColor)
self.border:SetBorderColor(self.Settings.BorderColor)
PixelUtil.SetWidth (self, self.Settings.Width, 1)
PixelUtil.SetWidth(self, self.Settings.Width, 1)
PixelUtil.SetHeight(self, self.Settings.Height, 1)
PixelUtil.SetPoint(self.powerBar, "bottomleft", self, "bottomleft", 0, 0, 1, 1)
@@ -1862,7 +2000,7 @@ end
end,
SetHealthBarColor = function(self, r, g, b, a)
self.healthBar:SetColor (r, g, b, a)
self.healthBar:SetColor(r, g, b, a)
end,
--register all events which will be used by the unit frame
@@ -1895,7 +2033,7 @@ end
UnregisterEvents = function(self)
for index, eventTable in ipairs(self.UnitFrameEvents) do
local event, firstUnit, secondUnit = unpack(eventTable)
self:UnregisterEvent (event)
self:UnregisterEvent(event)
end
self:SetScript("OnEvent", nil)
@@ -1909,17 +2047,17 @@ end
--when an event happen for this unit, send it to the apropriate function
OnEvent = function(self, event, ...)
--run the function for this event
local eventFunc = self [event]
local eventFunc = self[event]
if (eventFunc) then
--is this event an unit event?
if (self.IsUnitEvent [event]) then
if (self.IsUnitEvent[event]) then
local unit = ...
--check if is for this unit (even if the event is registered only for the unit)
if (unit == self.unit or unit == self.displayedUnit) then
eventFunc (self, ...)
eventFunc(self, ...)
end
else
eventFunc (self, ...)
eventFunc(self, ...)
end
end
end,
@@ -2033,7 +2171,7 @@ end
r, g, b = detailsFramework:ParseColors(r)
end
self:SetHealthBarColor (r, g, b)
self:SetHealthBarColor(r, g, b)
return
end
@@ -2041,15 +2179,15 @@ end
if (self.Settings.FixedHealthColor) then
local FixedHealthColor = self.Settings.FixedHealthColor
r, g, b = FixedHealthColor.r, FixedHealthColor.g, FixedHealthColor.b
self:SetHealthBarColor (r, g, b)
self:SetHealthBarColor(r, g, b)
return
end
--check if the unit is a player
if (UnitIsPlayer (unit)) then
if (UnitIsPlayer(unit)) then
--check if the unit is disconnected (in case it is a player
if (not UnitIsConnected (unit)) then
self:SetHealthBarColor (.5, .5, .5)
if (not UnitIsConnected(unit)) then
self:SetHealthBarColor(.5, .5, .5)
return
end
@@ -2058,50 +2196,50 @@ end
if (self.Settings.UseFriendlyClassColor) then
local _, className = UnitClass(unit)
if (className) then
local classColor = RAID_CLASS_COLORS [className]
local classColor = RAID_CLASS_COLORS[className]
if (classColor) then
self:SetHealthBarColor (classColor.r, classColor.g, classColor.b)
self:SetHealthBarColor(classColor.r, classColor.g, classColor.b)
return
end
end
else
self:SetHealthBarColor (0, 1, 0)
self:SetHealthBarColor(0, 1, 0)
return
end
else
if (self.Settings.UseEnemyClassColor) then
local _, className = UnitClass(unit)
if (className) then
local classColor = RAID_CLASS_COLORS [className]
local classColor = RAID_CLASS_COLORS[className]
if (classColor) then
self:SetHealthBarColor (classColor.r, classColor.g, classColor.b)
self:SetHealthBarColor(classColor.r, classColor.g, classColor.b)
return
end
end
else
self:SetHealthBarColor (1, 0, 0)
self:SetHealthBarColor(1, 0, 0)
return
end
end
end
--is tapped?
if (isUnitTapDenied (unit)) then
self:SetHealthBarColor (.6, .6, .6)
if (isUnitTapDenied(unit)) then
self:SetHealthBarColor(.6, .6, .6)
return
end
--is this is a npc attacking the player?
if (self.Settings.ColorByAggro) then
local _, threatStatus = UnitDetailedThreatSituation ("player", unit)
local _, threatStatus = UnitDetailedThreatSituation("player", unit)
if (threatStatus) then
self:SetHealthBarColor (1, 0, 0)
self:SetHealthBarColor(1, 0, 0)
return
end
end
-- get the regular color by selection
r, g, b = UnitSelectionColor (unit)
r, g, b = UnitSelectionColor(unit)
self:SetHealthBarColor (r, g, b)
end,
@@ -2112,7 +2250,7 @@ end
end
--unit name without realm names by default
local name = UnitName (self.unit)
local name = UnitName(self.unit)
self.unitName:SetText(name)
self.unitName:Show()
end,
@@ -2213,6 +2351,22 @@ end
end,
}
---@class df_unitframe : button, df_unitframemixin
---@field unit string
---@field displayedUnit string
---@field guid guid
---@field class class
---@field name actorname
---@field unitInVehicle boolean
---@field border frame
---@field overlayFrame frame
---@field unitName fontstring
---@field healthBar df_healthbar
---@field castBar df_castbar
---@field powerBar df_powerbar
---@field targetOverlay texture
---@field Settings table
-- ~unitframe
local globalBaseFrameLevel = 1 -- to be increased + used across each new plate
function detailsFramework:CreateUnitFrame(parent, name, unitFrameSettingsOverride, healthBarSettingsOverride, castBarSettingsOverride, powerBarSettingsOverride)