scope Fire initializer Init
globals
private hashtable hash = InitHashtable()
private group groupFound = CreateGroup()
private constant integer X2 = 0
private constant integer X4 = 4
private constant integer X6 = 6
private constant integer X8 = 8
private constant integer SYSTEM_ID = 1
PathingRange array pg
private PathingRange temppg
private real TempReal1
private real TempReal2
endglobals
private function SaveSpreadRange takes integer uType, integer dimension_2D returns nothing
call SaveInteger(hash, uType, SYSTEM_ID, dimension_2D)
endfunction
private function LoadSpreadRange takes integer uType, returns integer
return LoadInteger(hash, uType, SYSTEM_ID)
endfunction
struct PathingRange
integer array x[8]
static method create takes integer d2, integer d4, integer d6, integer d8 returns PathingRange
local thistype t = .allocate()
set t.x[2] = d2 // max range to ???
set t.x[4] = d4 // max range to 4x4
set t.x[6] = d6 // max range to 6x6
set t.x[8] = d8 // max range to 8x8
return t
endmethod
endstruct
private function BuildingFilter takes nothing returns boolean
return IsUnitInRangeXY(GetFilterUnit(), TempReal1, TempReal2, temppg.x[LoadSpreadRange(GetUnitTypeId(GetFilterUnit()))]) // and alive structure
endfunction
private function FindNearbyBuildings takes integer uType, real x, real y, returns nothing
local group g = CreateGroup()
local unit u
set temppg = pg[LoadSpreadRange(uType)]
set TempReal1 = x
set TempReal2 = y
call GroupEnumUnitsInRange(g, x , y, radius, function BuildingFilter)
// now group g must be consists of buildings in range
endfunction
private function Init takes nothing returns nothing
set pg[X4] = PathingRange.create(0, 192, 226, 272)
call SaveSpreadRange(FARM, X4)
endfunction
endscope