heres an example for you.
Graphics3D 1024,768,0,2
SetBuffer BackBuffer()
scalex# = 3
scaley# = 7
player1 = CreateSphere()
ScaleEntity player1,scalex,scaley,scalex
EntityColor player1,255,0,0
player2 = CreateSphere()
ScaleEntity player2,scalex,scaley,scalex
EntityColor player2,0,0,255
PositionEntity player2,0,0,200
wall = CreateCube()
ScaleEntity wall ,10,10,5
MoveEntity wall ,0,0,30
EntityPickMode wall,2
wall = CreateCube()
ScaleEntity wall ,10,10,5
MoveEntity wall ,-130,0,130
EntityPickMode wall,2
plane = CreatePlane()
ScaleEntity plane,100,100,100
EntityColor plane,0,255,0
cam = CreateCamera()
MoveEntity cam,0,150,-150
PointEntity cam,player1
range# = 400;how far into distance entity can see
FOV# = 2;how much is visible to the entity further away to each side
If use = 0
fov_mesh = CreateMesh()
fov_surf = CreateSurface(fov_mesh)
v0 = AddVertex(FOV_surf,FOV,0,0)
v1 = AddVertex(FOV_surf,-(range+1)*FOV,0,range)
v2 = AddVertex(FOV_surf,(range+1)*FOV,0,range)
v3 = AddVertex(FOV_surf,-FOV,0,0)
AddTriangle(FOV_surf,v0,v1,v2)
AddTriangle(FOV_surf,v2,v3,v0)
;EntityOrder FOV_mesh,-1
EntityColor FOV_mesh,255,0,0
PositionEntity FOV_mesh,EntityX(player1,1),EntityY(player1,1),EntityZ(player1,1)
RotateEntity FOV_mesh,0,EntityYaw(player1),0
EntityParent FOV_mesh,player1
EntityAlpha FOV_mesh,.2
EntityOrder FOV_mesh,-1
EndIf
While Not KeyHit(1)
Cls
If KeyDown(30) MoveEntity player2,-2,0,0
If KeyDown(32) MoveEntity player2,2,0,0
If KeyDown(17) MoveEntity player2,0,2,0
If KeyDown(31) MoveEntity player2,2,-2,0
If KeyDown(203) TurnEntity player1,0,2,0
If KeyDown(205) TurnEntity player1,0,-2,0
RenderWorld
If IsInRadarView(player1,player2,scalex#,scaley#,range#,FOV#)
Text 0,0,"player1 can see player2"
CameraProject cam,EntityX(player1),EntityY(player1),EntityZ(player1)
px1# = ProjectedX()
px2# = ProjectedY()
CameraProject cam,EntityX(player2),EntityY(player2),EntityZ(player2)
Line px1,px2,ProjectedX(),ProjectedY()
EndIf
Flip
Wend
End
; -------------------------------------------------------------------------------------------------------------------
; -------------------------------------------------------------------------------------------------------------------
Function IsInRadarView(ent1,ent2,radiusx#,radiusy#,range#,FOV#)
TFormPoint EntityX(ent2,1),EntityY(ent2,1),EntityZ(ent2,1),0,ent1
If (TFormedZ()-radiusx)<=range
If (Abs(TFormedY())-radiusy) <=((TFormedZ()+1)*FOV)
If (Abs(TFormedX())-radiusx)<=((TFormedZ()+1)*FOV)
;do visibility check ie entity visible
If EntityVisible(ent1,ent2) ;True
Return True
Else
Return False
EndIf
Else
Return False
EndIf
Else
Return False
EndIf
Else
Return False
EndIf
End Function
|