Code archives/3D Graphics - Misc/Radar with True Bearing
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Radar example with sweep display of targets | |||||
; RADAR EXAMPLE * ; (The "Cube n' Missile" crisis) * ; Doggie at BlitzBasic Forums * ; * ; Controls * ; , . turn the ship * ; lft ctrl fire missile * ; t Cycle Targets * ;******************************************** ; Set The Graphic Mode Graphics3D 800,600,32,1 SetBuffer BackBuffer() Type missile Field entity, tobedeleted End Type Global crs# AmbientLight 193,224,255 plane=CreatePlane(16) EntityColor plane,5,5,200 ;### Make Our Ship ## Global ship=CreateCube() ScaleEntity ship,6,6,60 EntityColor ship,150,150,150 PositionEntity ship,900,10,600 ; Create a camera Global camera=CreateCamera() CameraClsColor camera,0,0,0 CameraRange camera,1,1500 CameraViewport camera,0,0,GraphicsWidth(),400 PositionEntity camera,EntityX(ship),35,EntityZ(ship)+250 PointEntity camera,ship CameraFogMode camera,1 CameraFogRange camera,750,1600 CameraFogColor camera,60,60,65 ;### Create Target Cam ### Global targcam=CreateCamera() CameraRange targcam,1,1500 PositionEntity targcam,EntityX(ship),35,EntityZ(ship)-50 PointEntity targcam,ship CameraViewport targcam,36,425,210,150 CameraFogMode targcam,1 CameraFogRange targcam,750,1600 CameraFogColor targcam,60,60,65 ;##### Make Some Targets ### Global destroyer1=CreateCube() ScaleEntity destroyer1,15,15,15 PositionEntity destroyer1,855,3,800 EntityColor destroyer1,255,50,50 Global destroyer2=CopyEntity(destroyer1) PositionEntity destroyer2,875,3,842 EntityColor destroyer2,255,255,255 Global f151=CreateCube() ScaleEntity f151,12,12,12 PositionEntity f151,840,30,800 EntityColor f151,150,150,255 Global f152=CopyEntity(f151) PositionEntity f152,855,30,842 EntityColor f152,70,255,50 Global Missile1=CreateCube() ScaleEntity Missile1,4,4,12 PositionEntity Missile1,455,30,2242 RotateEntity Missile1,0,180,0 EntityColor Missile1,150,150,150 trg=1 ;################ Loop ############## While Not KeyHit(1) Cls GameInput() ;#### Track All Targets ### If KeyHit(20) trg=trg+1 If trg>4 Then trg=1 EndIf If trg=1 rb=EntityDistance(ship,destroyer1) If rb<=1500 Then Color 255,50,50 radar(destroyer1,ship) CameraViewport targcam,36,425,210,150 PositionEntity targcam,EntityX(destroyer1),35,EntityZ(destroyer1)-50 EndIf EndIf If trg=2 rb2=EntityDistance(ship,destroyer2) If rb2<=1500 Then Color 255,255,255 radar(destroyer2,ship) CameraViewport targcam,36,425,210,150 PositionEntity targcam,EntityX(destroyer2),35,EntityZ(destroyer2)-50 EndIf EndIf If trg=3 rb3=EntityDistance(ship,f151) If rb3<=1500 Then Color 70,255,50 radar(f151,ship) CameraViewport targcam,36,425,210,150 PositionEntity targcam,EntityX(f151),35,EntityZ(f151)-50 EndIf EndIf If trg=4 rb4=EntityDistance(ship,f151) If rb4<=1500 Then Color 70,255,50 radar(f152,ship) CameraViewport targcam,36,425,210,150 PositionEntity targcam,EntityX(f152),35,EntityZ(f152)-50 EndIf EndIf ;### Missile Control #### If trg=1 Then rtarget=destroyer1 If trg=2 Then rtarget=destroyer2 If trg=3 Then rtarget=f151 If trg=4 Then rtarget=f152 If KeyHit(29) d.Missile = New Missile d\entity=CopyEntity(Missile1) PositionEntity d\entity,EntityX(ship,True),25,EntityZ(ship,True) PointEntity d\entity,rtarget EndIf ;### Move Targets ### spd=2 MoveEntity destroyer1,0,0,-spd TurnEntity destroyer1,0,.5,0 MoveEntity destroyer2,0,0,-spd TurnEntity destroyer2,0,.5,0 MoveEntity f151,0,0,-3 TurnEntity f151,0,.5,0 MoveEntity f152,0,0,-3 TurnEntity f152,0,.5,0 For d.Missile = Each Missile MoveEntity d\entity,0,0,20 Next UpdateWorld RenderWorld If crs#<10 Then Text 670,440,"00"+Int(crs#) If crs#<100 And crs#>9 Then Text 670,440,"0"+Int(crs#) If crs#>99 Then Text 670,440,Int(crs#) ;#### Create Radar Display - 408 and 502 are x and y coords of display center #### time=time-1 Color 150,255,150 Oval 324,418,170,170,0 Oval 354,448,110,110,0 Oval 384,478,50,50,0 Line 408,502,408+Sin(time)*86,502+Cos(time)*86 Color 255,55,55 Line 400,502,322,502 Line 416,502,494,502 Line 408,494,408,416 Line 408,510,408,588 Color 255,255,255 Text 470,420,"Target "+trg Flip Wend End ;*********************************************************************** Function GameInput() If KeyDown(51) Then camyaw#=.5 TurnEntity ship ,0,camyaw#,0 ;left crs#=crs#-.5:If crs#<0 Then crs#=360 EndIf If KeyDown(52) Then camyaw#=-.5 TurnEntity ship ,0,camyaw#,0 ;right crs#=crs#+.5:If crs#>360 Then crs#=0 EndIf End Function ;#### halo's wrapangle function #### Function wrapangle#(value#) a#=Floor(value/360) Return value-a*360 End Function ;#### Doggies Spiffed Up Radar function #### Function radar(target,centerobject) diffx=EntityX(centerobject,True)-EntityX(target) diffz=EntityZ(centerobject,True)-EntityZ(target) bng=ATan2(diffx,diffz)-90 bng2=wrapangle(bng) d=EntityDistance(target,centerobject)/10 screenpointx=Cos(bng2)*d screenpointy=Sin(bng2)*d screenpointx=screenpointx+408 screenpointy=screenpointy+502 Color 255,250,150 Plot screenpointx,screenpointy angle=ATan2(diffx,diffz) angle2=wrapangle(angle) dtis=EntityDistance(centerobject,target) Text 280,580,"BRNG "+angle2 Text 460,580,"RNG "+dtis Color 255,255,255 End Function |
Comments
None.
Code Archives Forum