Краткое описание
В наработке содержится набор функций, необходимый для сглаженного поворота (+ нахождение кратчайшего угла), и для сглаженного движения при перемещении от точки до точки.
Чтобы наглядно понять о чем я, смотрим FHD видео
Чтобы наглядно понять о чем я, смотрим FHD видео
Видео
Код
function math.clamp (inb, low, high)
return math.min( math.max(inb, low ), high )
end
function math.lerp(a, b, t)
return a + (b - a) * t
end
function repeatN(t, m)
return math.clamp(t - math.floor(t / m) * m, 0, m)
end
function lerpTheta(a, b, t)
local dt = repeatN(b - a, 360)
if dt>180 then dt=dt-360 end
return math.lerp(a, a + dt, t)
end
Примеры использования:
Для угла:
TIMER_PERIOD=1/32
local angleCast = AngleBetweenXY(GetUnitX(hero), GetUnitY(hero), GetPlayerMouseX[data.pid], GetPlayerMouseY[data.pid]) / bj_DEGTORAD
local curAngle=angleCast
TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
angleCast = AngleBetweenXY(GetUnitX(hero), GetUnitY(hero), GetPlayerMouseX[data.pid], GetPlayerMouseY[data.pid]) / bj_DEGTORAD
curAngle = lerpTheta(curAngle, angleCast, TIMER_PERIOD * 8)
print(curAngle)
end)
Для дистанции:
TIMER_PERIOD=1/32
local distance=DistanceBetweenXY(GetUnitX(hero), GetUnitY(hero), GetPlayerMouseX[data.pid], GetPlayerMouseY[data.pid])
local cutDistance=distance
TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
distance=DistanceBetweenXY(GetUnitX(hero), GetUnitY(hero), GetPlayerMouseX[data.pid], GetPlayerMouseY[data.pid])
cutDistance=math.lerp(cutDistance,distance,TIMER_PERIOD * 8)
print(cutDistance)
end)
Ред. Берги
Можно в сингле на мемхаке
Ред. ScorpioT1000
Кому интересно - чекайте
Ред. ScorpioT1000
Но я еще даже на инг не запостил( а надо еще вики мутить и много всего
Ред. MpW
так получается это модели двигаются за курсором мыши
Ред. MpW
вот в меню стройки не делать 2 вида ворот и 2 вида стен (как обычно горизонтальные и вертикальные), а достаточно 1, не нужно копиями забивать меню. берешь просто вращаешь. И даже диагонально поставить ворота.