initial commit
This commit is contained in:
104
Modules/Nameplates/Elements/Threat.lua
Normal file
104
Modules/Nameplates/Elements/Threat.lua
Normal file
@@ -0,0 +1,104 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local NP = E:GetModule('NamePlates')
|
||||
|
||||
local UnitName = UnitName
|
||||
local UnitExists = UnitExists
|
||||
local UnitIsUnit = UnitIsUnit
|
||||
local UnitIsTapDenied = UnitIsTapDenied
|
||||
|
||||
function NP:ThreatIndicator_PreUpdate(unit, pass)
|
||||
local ROLE = NP.IsInGroup and (UnitExists(unit..'target') and not UnitIsUnit(unit..'target', 'player')) and NP.GroupRoles[UnitName(unit..'target')] or 'NONE'
|
||||
|
||||
local unitTank, imTank = ROLE == 'TANK', E.myrole == 'TANK'
|
||||
local isTank, offTank, feedbackUnit = unitTank or imTank, (unitTank and imTank) or false, (unitTank and unit..'target') or 'player'
|
||||
|
||||
self.__owner.ThreatScale = nil
|
||||
|
||||
if pass then
|
||||
return isTank, offTank, feedbackUnit, ROLE
|
||||
else
|
||||
self.feedbackUnit = feedbackUnit
|
||||
self.offTank = offTank
|
||||
self.isTank = isTank
|
||||
end
|
||||
end
|
||||
|
||||
function NP:ThreatIndicator_PostUpdate(unit, status)
|
||||
local sf = NP:StyleFilterChanges(self.__owner)
|
||||
if not status and not sf.Scale then
|
||||
self.__owner.ThreatScale = 1
|
||||
NP:ScalePlate(self.__owner, 1)
|
||||
elseif status and NP.db.threat and NP.db.threat.enable and NP.db.threat.useThreatColor and not UnitIsTapDenied(unit) then
|
||||
self.__owner.Health.colorTapping = false
|
||||
self.__owner.Health.colorDisconnected = false
|
||||
self.__owner.Health.colorClass = false
|
||||
self.__owner.Health.colorClassNPC = false
|
||||
self.__owner.Health.colorClassPet = false
|
||||
self.__owner.Health.colorSelection = false
|
||||
self.__owner.Health.colorThreat = false
|
||||
self.__owner.Health.colorReaction = false
|
||||
self.__owner.Health.colorSmooth = false
|
||||
self.__owner.Health.colorHealth = false
|
||||
|
||||
self.__owner.ThreatStatus = status
|
||||
|
||||
local Color, Scale
|
||||
if status == 3 then -- securely tanking
|
||||
Color = self.offTank and NP.db.colors.threat.offTankColor or self.isTank and NP.db.colors.threat.goodColor or NP.db.colors.threat.badColor
|
||||
Scale = self.isTank and NP.db.threat.goodScale or NP.db.threat.badScale
|
||||
elseif status == 2 then -- insecurely tanking
|
||||
Color = self.offTank and NP.db.colors.threat.offTankColorBadTransition or self.isTank and NP.db.colors.threat.badTransition or NP.db.colors.threat.goodTransition
|
||||
Scale = 1
|
||||
elseif status == 1 then -- not tanking but threat higher than tank
|
||||
Color = self.offTank and NP.db.colors.threat.offTankColorGoodTransition or self.isTank and NP.db.colors.threat.goodTransition or NP.db.colors.threat.badTransition
|
||||
Scale = 1
|
||||
else -- not tanking at all
|
||||
Color = self.isTank and NP.db.colors.threat.badColor or NP.db.colors.threat.goodColor
|
||||
Scale = self.isTank and NP.db.threat.badScale or NP.db.threat.goodScale
|
||||
end
|
||||
|
||||
if sf.HealthColor then
|
||||
self.r, self.g, self.b = Color.r, Color.g, Color.b
|
||||
else
|
||||
self.__owner.Health:SetStatusBarColor(Color.r, Color.g, Color.b)
|
||||
end
|
||||
|
||||
if Scale then
|
||||
self.__owner.ThreatScale = Scale
|
||||
|
||||
if not sf.Scale then
|
||||
NP:ScalePlate(self.__owner, Scale)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function NP:Construct_ThreatIndicator(nameplate)
|
||||
local ThreatIndicator = nameplate:CreateTexture(nil, 'OVERLAY')
|
||||
ThreatIndicator:Size(16, 16)
|
||||
ThreatIndicator:Hide()
|
||||
ThreatIndicator:Point('CENTER', nameplate, 'TOPRIGHT')
|
||||
|
||||
ThreatIndicator.PreUpdate = NP.ThreatIndicator_PreUpdate
|
||||
ThreatIndicator.PostUpdate = NP.ThreatIndicator_PostUpdate
|
||||
|
||||
return ThreatIndicator
|
||||
end
|
||||
|
||||
function NP:Update_ThreatIndicator(nameplate)
|
||||
local db = NP.db.threat
|
||||
|
||||
if nameplate.frameType == 'ENEMY_NPC' and db.enable then
|
||||
if not nameplate:IsElementEnabled('ThreatIndicator') then
|
||||
nameplate:EnableElement('ThreatIndicator')
|
||||
end
|
||||
|
||||
if db.indicator then
|
||||
nameplate.ThreatIndicator:SetAlpha(1)
|
||||
else
|
||||
nameplate.ThreatIndicator:SetAlpha(0)
|
||||
end
|
||||
elseif nameplate:IsElementEnabled('ThreatIndicator') then
|
||||
nameplate:DisableElement('ThreatIndicator')
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user