driver.bb 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. Global info1$="Driver"
  2. Include "../start.bb"
  3. Const GRAVITY#=-.01
  4. Const BODY=1,WHEEL=2,SCENE=3
  5. Collisions BODY,SCENE,2,3
  6. Collisions WHEEL,SCENE,2,3
  7. terr=LoadTerrain( "heightmap_256.bmp" )
  8. ScaleEntity terr,1000/TerrainSize(terr),70,1000/TerrainSize(terr)
  9. TerrainDetail terr,1000,True
  10. TerrainShading terr,True
  11. PositionEntity terr,-500,0,-500
  12. tex=LoadTexture( "terrain-1.jpg" )
  13. ScaleTexture tex,50,50
  14. EntityTexture terr,tex
  15. EntityType terr,SCENE
  16. car=LoadMesh( "car.x" )
  17. ScaleMesh car,1,1,-1
  18. FlipMesh car
  19. FitMesh car,-1.5,-1,-3,3,2,6
  20. PositionEntity car,0,70,0
  21. EntityShininess car,1
  22. EntityType car,BODY
  23. Global wheels[4]
  24. cnt=1
  25. For z#=1.5 To -1.5 Step -3
  26. For x#=-1 To 1 Step 2
  27. wheels[cnt]=CreateSphere( 8,car )
  28. EntityAlpha wheels[cnt],.5
  29. ScaleEntity wheels[cnt],.5,.5,.5
  30. EntityRadius wheels[cnt],.5
  31. PositionEntity wheels[cnt],x,0,z
  32. EntityType wheels[cnt],WHEEL
  33. cnt=cnt+1
  34. Next
  35. Next
  36. light=CreateLight()
  37. TurnEntity light,45,45,0
  38. target=CreatePivot( car )
  39. PositionEntity target,0,5,-12
  40. camera=CreateCamera()
  41. CameraClsColor camera,0,128,255
  42. speed#=0
  43. x_vel#=0:prev_x#=EntityX( car )
  44. y_vel#=0:prev_y#=EntityY( car )
  45. z_vel#=0:prev_z#=EntityZ( car )
  46. While Not KeyHit(1)
  47. ;align car to wheels
  48. zx#=(EntityX( wheels[2],True )+EntityX( wheels[4],True ))/2
  49. zx=zx-(EntityX( wheels[1],True )+EntityX( wheels[3],True ))/2
  50. zy#=(EntityY( wheels[2],True )+EntityY( wheels[4],True ))/2
  51. zy=zy-(EntityY( wheels[1],True )+EntityY( wheels[3],True ))/2
  52. zz#=(EntityZ( wheels[2],True )+EntityZ( wheels[4],True ))/2
  53. zz=zz-(EntityZ( wheels[1],True )+EntityZ( wheels[3],True ))/2
  54. AlignToVector car,zx,zy,zz,1
  55. zx#=(EntityX( wheels[1],True )+EntityX( wheels[2],True ))/2
  56. zx=zx-(EntityX( wheels[3],True )+EntityX( wheels[4],True ))/2
  57. zy#=(EntityY( wheels[1],True )+EntityY( wheels[2],True ))/2
  58. zy=zy-(EntityY( wheels[3],True )+EntityY( wheels[4],True ))/2
  59. zz#=(EntityZ( wheels[1],True )+EntityZ( wheels[2],True ))/2
  60. zz=zz-(EntityZ( wheels[3],True )+EntityZ( wheels[4],True ))/2
  61. AlignToVector car,zx,zy,zz,3
  62. ;calculate car velocities
  63. cx#=EntityX( car ):x_vel=cx-prev_x:prev_x=cx
  64. cy#=EntityY( car ):y_vel=cy-prev_y:prev_y=cy
  65. cz#=EntityZ( car ):z_vel=cz-prev_z:prev_z=cz
  66. ;resposition wheels
  67. cnt=1
  68. For z=1.5 To -1.5 Step -3
  69. For x=-1 To 1 Step 2
  70. ; PositionEntity wheels[cnt],0,0,0
  71. ; ResetEntity wheels[cnt]
  72. PositionEntity wheels[cnt],x,-1,z
  73. cnt=cnt+1
  74. Next
  75. Next
  76. ;move car
  77. If KeyDown(203) TurnEntity car,0,3,0
  78. If KeyDown(205) TurnEntity car,0,-3,0
  79. If EntityCollided( car,SCENE )
  80. If KeyDown(200)
  81. speed=speed+.02
  82. If speed>.7 speed=.7
  83. Else If KeyDown(208)
  84. speed=speed-.02
  85. If speed<-.5 speed=-.5
  86. Else
  87. speed=speed*.9
  88. EndIf
  89. MoveEntity car,0,0,speed
  90. TranslateEntity car,0,GRAVITY,0
  91. Else
  92. TranslateEntity car,x_vel,y_vel+GRAVITY,z_vel
  93. EndIf
  94. ;update camera
  95. If speed>=0
  96. dx#=EntityX( target,True )-EntityX( camera )
  97. dy#=EntityY( target,True )-EntityY( camera )
  98. dz#=EntityZ( target,True )-EntityZ( camera )
  99. TranslateEntity camera,dx*.1,dy*.1,dz*.1
  100. EndIf
  101. PointEntity camera,car
  102. UpdateWorld
  103. RenderWorld
  104. Flip
  105. Wend
  106. End