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
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
|
|
|