- Joined
- Nov 30, 2007
- Messages
- 1,202
JASS:
scope UnitIndexer initializer Init
globals
constant real RESET = 0.
constant real UNIT_WAS_INDEXED = 1.
constant real UNIT_WAS_DEINDEXED = 2.
private integer indexMax = 0
private integer recycleMax = 0
private integer array recycleIndex
boolean uDexEnabled
real uDexEvent
unit array uDexUnit
endglobals
private function CleanUp takes nothing returns boolean
local integer cur = indexMax
loop
exitwhen cur == 0
if uDexUnit[cur] != null and GetUnitUserData(uDexUnit[cur]) == 0 then
set uDexUnit[cur] = null
set recycleMax = recycleMax + 1
set recycleIndex[recycleMax] = cur
set uDexEvent = RESET
set uDexEvent = UNIT_WAS_DEINDEXED
endif
set cur = cur - 1
endloop
return false
endfunction
private function Main takes nothing returns boolean
local integer cur
if uDexEnabled == true then
if recycleMax == 0 then
set indexMax = indexMax + 1
set cur = indexMax
else
set cur = recycleIndex[recycleMax]
set recycleMax = recycleMax - 1
endif
set uDexUnit[cur] = GetFilterUnit()
call SetUnitUserData(uDexUnit[cur] , cur)
set uDexEvent = RESET
set uDexEvent = UNIT_WAS_INDEXED
endif
return false
endfunction
private function Init takes nothing returns nothing
local trigger t1 = CreateTrigger()
local trigger t2 = CreateTrigger()
local integer i = 0
local region world = CreateRegion()
local rect r = GetWorldBounds()
set uDexEnabled = true
call RegionAddRect(world, r)
call TriggerRegisterEnterRegion(t1, world, Filter(function Main))
call TriggerRegisterTimerEvent(t2, 30., true)
call TriggerAddCondition(t2, Condition(function CleanUp))
call RemoveRect(r)
set world = null
set r = null
loop
exitwhen i == 16
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup, Player(i), Filter(function Main))
set i = i + 1
endloop
endfunction
endscope
I took Bribes unit indexer and worked from it, what i could piece together that is. He uses linked lists and mine don't, among other things. Is there really any point in using linked list over for example a boolean? Anyway I would try it but didn't fully understand how it worked.
Maybe I should've posted this in the trigger section since I have no intention of making this a resource, my bad.
Last edited: