Not ultra realistic, but still.. :)
Const gravity#=-0.01 ;gravity constant
Graphics3D 640,480,16,2
Const car_col=1
Const world_col=2
Collisions car_col,world_col,2,2
light=CreateLight(1)
RotateEntity light,30,20,0
tex=CreateTexture(64,64,1+8)
SetBuffer TextureBuffer(tex)
Color 255,0,0
Rect 0,0,64,64,1
Color 255,255,255
Rect 0,0,32,32,1
Rect 32,32,32,32,1
SetBuffer BackBuffer()
plane=CreatePlane()
EntityTexture plane,tex
ScaleTexture tex,10,10
EntityAlpha plane,0.5
CreateMirror()
EntityType plane,world_col
For n=1 To 10
If Rnd(10)<5
sphere=CreateSphere(16)
Else
sphere=CreateCube()
EndIf
EntityType sphere,world_col
PositionEntity sphere,Rnd(-40,40),Rnd(2),Rnd(-40,40)
EntityColor sphere,Rnd(255),Rnd(255),Rnd(255)
Next
camera=CreateCamera()
CameraClsColor camera,0,0,255
car.car=carnew(0,5,0)
Repeat
TFormPoint 0,5,-8,car\e,0
dx#=(TFormedX()-EntityX(camera))*.01
dy#=(TFormedY()-EntityY(camera))*.01
dz#=(TFormedZ()-EntityZ(camera))*.01
TranslateEntity camera,dx,dy,dz
PointEntity camera,car\e
carcontrol()
carupdate()
RenderWorld()
Flip
Until KeyDown(1)
End
Type car
Field e ;entity
Field x#,y#,z# ; position in 3d-space
Field vx#,vy#,vz# ; velocity
Field ax#,ay#,az# ; acceleration
Field wheel[3]
Field wheelangle#
End Type
Function carnew.car(x#,y#,z#)
c.car=New car
c\x#=x#
c\y#=y#
c\z#=z#
c\e=CreateCube()
ScaleMesh c\e,2,0.5,3
For n=0 To 3
c\wheel[n]=CreateSphere(8,c\e)
ScaleMesh c\wheel[n],0.2,1,1
Next
PositionEntity c\wheel[0],-2.2,-0.5,2.8
PositionEntity c\wheel[1],2.2,-0.5,2.8
PositionEntity c\wheel[2],-2.2,-0.5,-2.8
PositionEntity c\wheel[3],2.2,-0.5,-2.8
EntityType c\e,car_col
EntityRadius c\e,1.5
PositionEntity c\e,c\x,c\y,c\z
Return c
End Function
Function carupdate()
For c.car=Each car
c\vy#=c\vy#+gravity#
c\vx#=c\vx#+c\ax#
c\vy#=c\vy#+c\ay#
c\vz#=c\vz#+c\az#
c\x#=EntityX(c\e)
c\y#=EntityY(c\e)
c\z#=EntityZ(c\e)
TranslateEntity c\e,c\vx,c\vy,c\vz
Next
UpdateWorld()
For c.car=Each car
;correct velocity if collided
c\vx=(EntityX(c\e)-c\x)
c\vy=(EntityY(c\e)-c\y)
c\vz=(EntityZ(c\e)-c\z)
;slow down due to friction
If EntityCollided(c\e,world_col)
c\vx#=c\vx*0.98
c\vy#=c\vy*0.98
c\vz#=c\vz*0.98
EndIf
c\ax#=0
c\ay#=0
c\az#=0
Next
End Function
Function carcontrol()
For c.car=Each car
If KeyDown(200)
TFormVector 0,0,0.02,c\wheel[0],0
c\ax#=TFormedX()
c\ay#=TFormedY()
c\az#=TFormedZ()
TurnEntity c\e,0,c\wheelangle#/10,0
EndIf
If KeyDown(208)
c\vx=c\vx*0.99
c\vy=c\vy*0.99
c\vz=c\vz*0.99
EndIf
If KeyDown(57)
TFormVector 0,0.05,0,c\e,0
c\ax#=c\ax+TFormedX()
c\ay#=c\ay+TFormedY()
c\az#=c\az+TFormedZ()
EndIf
If KeyDown(203)
c\wheelangle#=c\wheelangle#+2
If c\wheelangle#>50
c\wheelangle#=50
EndIf
RotateEntity c\wheel[0],0,c\wheelangle#,0
RotateEntity c\wheel[1],0,c\wheelangle#,0
EndIf
If KeyDown(205)
c\wheelangle#=c\wheelangle#-2
If c\wheelangle#<-50
c\wheelangle#=-50
EndIf
RotateEntity c\wheel[0],0,c\wheelangle#,0
RotateEntity c\wheel[1],0,c\wheelangle#,0
EndIf
Next
End Function
|