library knb needs TimerUtils
globals
private constant real TIMEOUT = 0.05
endglobals
private struct str
unit target
real angle
integer distance
integer speed
integer i
endstruct
private function Action takes nothing returns nothing
local timer t = GetExpiredTimer()
local str dat = GetTimerData(t)
local real newX = GetUnitX(dat.target) + dat.speed*Cos(dat.angle)
local real newY = GetUnitY(dat.target) + dat.speed*Sin(dat.angle)
if (dat.i < dat.distance) then
set dat.i = dat.i + 1
call SetUnitPosition(dat.target, newX, newY)
else
call SetUnitPathing(dat.target, true)
call ReleaseTimer(t)
call dat.destroy()
endif
endfunction
function recul takes real x, real y, unit target, integer distance, integer speed returns nothing
local timer t = NewTimer()
local str dat = str.create()
call SetUnitPathing( target, false)
set dat.target = target
set dat.angle = Atan2(GetUnitY(target) - y, GetUnitX(target) - x)
set dat.distance = distance/speed
set dat.speed = speed
set dat.i = 0
call SetTimerData(t, dat)
call TimerStart(t, TIMEOUT, true, function Action)
endfunction
endlibrary |