Immolation
Member
- Reaction score
- 20
In the most efficient way possible
function IsUnitUnitType takes nothing returns boolean
return GetUnitTypeId(GetFilterUnit()) == yourunittype
endfunction
function check takes nothing returns boolean
return FirstOfGroup(GetUnitsInRangeOfLocMatching(yourrealradius, GetUnitLoc(your unit), Condition(function IsUnitUnitType))) != null
endfunction
function nullFilter takes nothing returns boolean
return true
endfunction
function IsUnitTypeInRangeOfUnit takes unit u, unittype ut, real radius returns boolean
local group g = CreateGroup()
// you can also used some global group or recycled group
local unit tmpUnit
call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), radius, Filter(function nullFilter))
loop
set tmpUnit = FirstOfGroup(g)
exitwhen (tmpUnit == null) or IsUnitType(tmpUnit, ut)
call GroupRemoveUnit(g, tmpUnit)
endloop
call DestroyGroup(g)
set g = null
return tmpUnit != null
endfunction
globals
// Have some global group you will never destroy and never assign any unit to it
group g = CreateGroup()
boolean tempBool
endglobals
function IsHeroInRangeOfUnit_callback takes nothing returns boolean
if IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) then
set tempBool = true
endif
// You never save any unit to your global group
return false
endfunction
function IsHeroInRangeOfUnit takes unit u, real radius returns boolean
set tempBool = false
call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), radius, Filter(function IsHeroInRangeOfUnit_callback))
return tempBool
endfunction