library Slide
private struct data
unit u
real a
timer t
integer ticks
endstruct
globals
private data array DATS
endglobals
private function H2I takes handle h returns integer
return h
return 0
endfunction
private function Handle takes nothing returns nothing
local timer t = GetExpiredTimer()
local data d = DATS[H2I(t) - 0x100000]
call SetUnitX(d.u, GetUnitX(u) + 25 * Cos(angle))
call SetUnitY(d.u, GetUnitY(u) + 25 * Sin(angle))
if d.ticks = 0 then
call PauseTimer(t)
call DestroyTimer(t)
call d.destroy()
endif
set d.ticks = d.ticks - 1
set t = null
endfunction
public function Start takes unit u, real angle returns nothing
local data d = data.create()
local timer t = CreateTimer()
set d.u = u
set d.a = angle
set d.ticks = 50
call TimerStart(t, 0.025, true, function Handle)
set DATS[H2I(t) - 0x100000] = d
endfunction
endlibrary
library Slide
private struct data
unit u
real a
timer t
integer ticks
endstruct
globals
private data array DATS
private integer COUNT = 0
private timer T = CreateTimer()
endglobals
private function Handle takes nothing returns nothing
local data d
local integer i = COUNT - 1
loop
set d = DATS<i>
call SetUnitX(d.u, GetUnitX(u) + 25 * Cos(angle))
call SetUnitY(d.u, GetUnitY(u) + 25 * Sin(angle))
if d.ticks = 0 then
call d.destroy()
set COUNT = COUNT - 1
set DATS<i> = DATS[COUNT]
endif
set d.ticks = d.ticks - 1
set i = i - 1
exitwhen i < 0
endloop
if COUNT == 0 then
call PauseTimer(T)
endif
endfunction
public function Start takes unit u, real angle returns nothing
local data d = data.create()
set d.u = u
set d.a = angle
set d.ticks = 50
if COUNT == 0 then
call TimerStart(T, 0.025, true, function Handle)
endif
set DATS[COUNT] = d
set COUNT = COUNT + 1
endfunction
endlibrary</i></i>