You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.5 KiB

local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local UF = E:GetModule('UnitFrames')
local RangeCheck = E.Libs.RangeCheck
local UnitCanAttack = UnitCanAttack
local UnitInRange = UnitInRange
local UnitIsConnected = UnitIsConnected
local UnitIsPlayer = UnitIsPlayer
local UnitIsUnit = UnitIsUnit
local UnitPhaseReason = UnitPhaseReason
local function friendlyIsInRange(realUnit)
local unit = E:GetGroupUnit(realUnit) or realUnit
if UnitIsPlayer(unit) and UnitPhaseReason(unit) then
return false -- is not in same phase
end
local inRange, checkedRange = UnitInRange(unit)
if checkedRange and not inRange then
return false -- blizz checked and said the unit is out of range
end
local _, maxRange = RangeCheck:GetRange(unit, true, true)
return maxRange
end
function UF:UpdateRange(unit)
if not self.Fader then return end
local alpha
unit = unit or self.unit
if self.forceInRange or unit == 'player' then
alpha = self.Fader.MaxAlpha
elseif self.forceNotInRange then
alpha = self.Fader.MinAlpha
elseif unit then
if UnitCanAttack('player', unit) or UnitIsUnit(unit, 'pet') then
local _, maxRange = RangeCheck:GetRange(unit, true, true)
alpha = (maxRange and self.Fader.MaxAlpha) or self.Fader.MinAlpha
else
alpha = (UnitIsConnected(unit) and friendlyIsInRange(unit) and self.Fader.MaxAlpha) or self.Fader.MinAlpha
end
else
alpha = self.Fader.MaxAlpha
end
self.Fader.RangeAlpha = alpha
end