Create can_see.lua
This commit is contained in:
parent
553e09e977
commit
3573330dc1
|
@ -0,0 +1,32 @@
|
||||||
|
--This is a basic raycast function.
|
||||||
|
--It checks whether two points on a map can "see" each other based on the map data. It assumes flag 0 to be the collision layer.
|
||||||
|
--It returns TRUE if they can see each other or FALSE if they can't.
|
||||||
|
function can_see(x1,y1,x2,y2,length)
|
||||||
|
--x1 and y1 are the point of view,length is the max distance of the two points
|
||||||
|
local max_length=length or 1000
|
||||||
|
local xvec=0
|
||||||
|
local yvec=0
|
||||||
|
local len=0
|
||||||
|
local ret=true
|
||||||
|
local tx=x1
|
||||||
|
local ty=y1
|
||||||
|
xvec=x2-x1
|
||||||
|
yvec=y2-y1
|
||||||
|
len=sqrt(xvec^2+yvec^2)
|
||||||
|
if len==0 or len>max_length then
|
||||||
|
ret=false
|
||||||
|
end
|
||||||
|
xvec=(xvec/len)
|
||||||
|
yvec=(yvec/len)
|
||||||
|
if ret then
|
||||||
|
for i=1,len do
|
||||||
|
tx+=xvec
|
||||||
|
ty+=yvec
|
||||||
|
if fget(mget(flr(tx/8),flr(ty/8)),0) then
|
||||||
|
ret=false
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
Loading…
Reference in New Issue