platforms...
Code: Select all
;>------------------------------------
;
; by Danilo, 20.11.2003 - german forum
;
;>------------------------------------
;#Width = 1600
;#Height = 1200
#Width = 1280
#Height = 1024
;#Width = 1024
;#Height = 768
;#Width = 800
;#Height = 600
#rotator_speed.f = 3
#max_objects = 10
Structure _OBJ
x.l
y.l
Transparency.l
Degree.f
EndStructure
Dim Objects._OBJ(#max_objects)
Procedure.f DSin(angle_in_degree.f)
; returns Sinus of 'angle in degree'
ProcedureReturn Sin(angle_in_degree*(2*3.14159265/360))
EndProcedure
Procedure.f DCos(angle_in_degree.f)
; returns CoSinus of 'angle in degree'
ProcedureReturn Cos(angle_in_degree*(2*3.14159265/360))
EndProcedure
Procedure ObjectSound(x)
Beep_(800,50)
EndProcedure
Procedure MakeSprites()
h = #Height-100
If CreateSprite(1,512,512,#PB_Sprite_Texture)=0 Or CreateSprite(2,256,256,#PB_Sprite_Texture)=0 Or CreateSprite(3,h,h)=0
CloseScreen()
MessageRequester("ERROR","Cant create Sprites !",#MB_ICONERROR)
End
EndIf
If CreateSprite3D(1,1)=0 Or CreateSprite3D(2,2)=0
CloseScreen()
MessageRequester("ERROR","Cant create 3D Sprites !",#MB_ICONERROR)
End
EndIf
; Radar rotator (green > black)
StartDrawing(SpriteOutput(1))
angle.f=90
Repeat
Line(255,255,DSin(angle)*255.0,DCos(angle)*255,RGB(0,Int(angle*2.8),0))
angle.f - 0.001
Until angle <=0
StopDrawing()
; Radar objects
StartDrawing(SpriteOutput(2))
For a = 127 To 0 Step -1
Circle(127,127,a,RGB(255-2*a,255-2*a,255-2*a))
Next a
StopDrawing()
ZoomSprite3D(2,32,32)
; Radar chassis
StartDrawing(SpriteOutput(3))
Circle(h/2,h/2,h/2,RGB($40,$40,$40))
Circle(h/2,h/2,h/2-10,RGB($00,$00,$00))
DrawingMode(4)
For a = 0 To 5
Circle(h/2,h/2,h/10*a,RGB($40,$40,$40))
Next a
For a = -2 To 2
Line(0,h/2+a,h,0,RGB($40,$40,$40))
Next a
For a = -2 To 2
Line(h/2+a,0,0,h,RGB($40,$40,$40))
Next a
For a = 30 To 330 Step 30
Line(h/2,h/2,DSin(a)*h/2,DCos(a)*h/2,RGB($40,$40,$40))
Next a
StopDrawing()
EndProcedure
;- Start
If InitKeyboard()=0 Or InitSprite()=0 Or InitSprite3D()=0
MessageRequester("ERROR","Cant init DirectX !",#MB_ICONERROR)
EndIf
If OpenScreen(#Width,#Height,32,"Radar")=0
If OpenScreen(#Width,#Height,24,"Radar")=0
If OpenScreen(#Width,#Height,16,"Radar")=0
MessageRequester("ERROR","Cant open screen !",#MB_ICONERROR)
EndIf:EndIf:EndIf
MakeSprites()
;- Init objects
Objects(1)\x = (#Width/2-16) -50
Objects(1)\y = (#Height/2-16) -20
Objects(1)\Degree = 110
Objects(2)\x = (#Width/2-16) +100
Objects(2)\y = (#Height/2-16) -80
Objects(2)\Degree = 230
Objects(3)\x = (#Width/2-16) +50
Objects(3)\y = (#Height/2-16) +#Height/4
Objects(3)\Degree = 350
Objects(4)\x = (#Width/2-16) -#Height/4+50
Objects(4)\y = (#Height/2-16) +#Height/4+50
Objects(4)\Degree = 30
Objects(5)\x = (#Width/2-16) -20
Objects(5)\y = (#Height/2-16) -#Height/2+150
Objects(5)\Degree = 170
;- Main loop
Repeat
time = TimeGetTime_()
ExamineKeyboard()
If IsScreenActive() And ScreenDeactivated = #FALSE
Angle.f - #rotator_speed
If Angle < 0:Angle+360:EndIf
ClearScreen(0,0,0)
Start3D()
Sprite3DQuality(1)
ZoomSprite3D(1,#Height-100,#Height-100)
RotateSprite3D(1,Angle,1)
DisplaySprite3D(1,(#Width-#Height)/2+50,50)
Sprite3DBlendingMode(5,2)
; Objects
For a = 0 To #max_objects
If Objects(a)\x Or Objects(a)\y
DisplaySprite3D(2,Objects(a)\x,Objects(a)\y,Objects(a)\Transparency)
EndIf
Next a
Stop3D()
DisplayTransparentSprite(3,(#Width-#Height)/2+50,50)
For a = 0 To #max_objects
If Objects(a)\x Or Objects(a)\y
If Angle < Objects(a)\Degree And Angle > Objects(a)\Degree-#rotator_speed-2 And Objects(a)\Transparency<200
Objects(a)\Transparency=255
CreateThread(@ObjectSound(),0)
EndIf
EndIf
Next a
For a = 0 To #max_objects
If Objects(a)>0
Objects(a)\Transparency-#rotator_speed
If Objects(a)\Transparency<0
Objects(a)\Transparency=0
EndIf
EndIf
Next a
ElseIf ScreenDeactivated = #FALSE
ScreenDeactivated = #TRUE
ElseIf IsScreenActive() And ScreenDeactivated = #TRUE
ScreenDeactivated = #FALSE
FlipBuffers()
MakeSprites()
EndIf
FlipBuffers()
Repeat:Delay(1):Until TimeGetTime_()-20>=time
Until KeyboardPushed(#PB_Key_Escape)
;- End