substance
New Member
- Reaction score
- 34
This system recycles timers and groups, getting rid of the need to set them to null, and improving performance and memory usage. This also includes an 'always true' boolexp to avoiding using 'null' in GroupEnum's which can leak. This system requires vJass to work
Example of use
Timer:
Group(and the 'ALL' boolexp):
This was not made by me.
JASS:
library Recycle initializer Init
globals
boolexpr ALL
private group array GROUPS
private integer GROUP_N = 0
private timer array TIMERS
private integer TIMERS_N = 0
endglobals
private function True takes nothing returns boolean
return true
endfunction
private function Init takes nothing returns nothing
set ALL = Condition(function True)
endfunction
function NewGroup takes nothing returns group
if (GROUP_N==0) then
return CreateGroup()
endif
set GROUP_N = GROUP_N - 1
return GROUPS[GROUP_N]
endfunction
function ReleaseGroup takes group g returns nothing
call GroupClear(g)
set GROUPS[GROUP_N] = g
set GROUP_N = GROUP_N + 1
endfunction
function NewTimer takes nothing returns timer
if (TIMERS_N==0) then
return CreateTimer()
endif
set TIMERS_N = TIMERS_N - 1
return TIMERS[TIMERS_N]
endfunction
function ReleaseTimer takes timer t returns nothing
call PauseTimer(t)
set TIMERS[TIMERS_N] = t
set TIMERS_N = TIMERS_N + 1
endfunction
endlibrary
Example of use
Timer:
JASS:
function TimerExample tankes nothing returns nothing
local timer t = NewTimer()
call TimerStart(t,1.00,false,function blah)
call ReleaseTimer(t)
endfunction
Group(and the 'ALL' boolexp):
JASS:
function GroupExample tankes nothing returns nothing
local group g = NewGroup()
local real x = GetUnitX(GetTriggerUnit())
local real y = GetUnitY(GetTriggerUnit())
GroupEnumUnitsInRange(g,x,y,500,ALL)
call ReleaseGroup(g)
endfunction
This was not made by me.