Добавлен , не публикуется
function IsUnitBack takes unit uF, unit uWhichBack returns boolean
        real r1 = bj_RADTODEG * Atan2(GetUnitY(uWhichBack) - GetUnitY(uF), GetUnitX(uWhichBack) - GetUnitX(uF)) + 360.
        real r2 = GetUnitFacing(uWhichBack) + 360.
           if GetUnitY(uWhichBack) < GetUnitY(uF) then
               set r1 = r1 + 360.
           endif
        return (r1<=(r2+45.) and r1>=(r2-45.))
    endfunction

Ещё одна версия от Берги
function IsPointInSector takes real x, real y, real x1, real y1, real orientation, real width, real radius returns boolean
        local real lenght = SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)) 
        local real angle = Acos(Cos(orientation*bj_DEGTORAD)*(x-x1)/lenght+Sin(orientation*bj_DEGTORAD)*(y-y1)/lenght )*bj_RADTODEG
        return angle<=width and lenght<=radius
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
11
2 года назад
2
Полезненько
0
27
2 года назад
Отредактирован rsfghd
0
	function WhichSide(a, x, y)
		local facing = GetUnitFacing(a)
		local angle  = AngleBetweenUnitXY(a, x, y)
		local float_angle

		if angle < 0 then
			angle = angle + 360
		end

		float_angle = facing - angle

		if float_angle < 0 then
			float_angle = float_angle + 360
		end

		return float_angle < 180
	end
	function GetDirection(u, targ)
		local alpha = GetUnitFacing(u)
		local gamma = bj_RADTODEG * Atan2(GetUnitY(targ) - GetUnitY(u), GetUnitX(targ) - GetUnitX(u))

		if gamma < 0 then
			gamma = 360. + gamma
		end

		if (alpha < 180. and not (gamma > alpha and gamma < alpha + 180.)) or (alpha > 180. and gamma > alpha - 180. and gamma < alpha) then
			return 2
		end

		return 1
	end
Чтобы оставить комментарий, пожалуйста, войдите на сайт.