Collisions.bb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. ; Collisions Example
  2. ; ------------------
  3. Graphics3D 640,480
  4. SetBuffer BackBuffer()
  5. ; Set collision type values
  6. type_ground=1
  7. type_character=2
  8. type_scenery=3
  9. camera=CreateCamera()
  10. RotateEntity camera,45,0,0
  11. PositionEntity camera,0,15,-10
  12. light=CreateLight()
  13. RotateEntity light,45,0,0
  14. ; Create cube 'ground'
  15. cube=CreateCube()
  16. ScaleEntity cube,10,10,10
  17. EntityColor cube,0,127,0
  18. EntityType cube,type_ground
  19. PositionEntity cube,0,-5,0
  20. ; Create sphere 'character'
  21. sphere=CreateSphere( 32 )
  22. EntityColor sphere,127,0,0
  23. EntityRadius sphere,1
  24. EntityType sphere,type_character
  25. PositionEntity sphere,0,7,0
  26. ; Enable collisions between type_character and type_ground
  27. Collisions type_character,type_ground,2,2
  28. ; Create cylinder 'scenery'
  29. cylinder=CreateCylinder( 32 )
  30. ScaleEntity cylinder,2,2,2
  31. EntityColor cylinder,0,0,255
  32. EntityRadius cylinder,2
  33. EntityBox cylinder,-2,-2,-2,4,4,4
  34. EntityType cylinder,type_scenery
  35. PositionEntity cylinder,-4,7,-4
  36. ; Create cone 'scenery'
  37. cone=CreateCone( 32 )
  38. ScaleEntity cone,2,2,2
  39. EntityColor cone,0,0,255
  40. EntityRadius cone,2
  41. EntityBox cone,-2,-2,-2,4,4,4
  42. EntityType cone,type_scenery
  43. PositionEntity cone,4,7,-4
  44. ; Create prism 'scenery'
  45. prism=CreateCylinder( 3 )
  46. ScaleEntity prism,2,2,2
  47. EntityColor prism,0,0,255
  48. EntityRadius prism,2
  49. EntityBox prism,-2,-2,-2,4,4,4
  50. EntityType prism,type_scenery
  51. PositionEntity prism,-4,7,4
  52. RotateEntity prism,0,180,0
  53. ; Create pyramid 'scenery'
  54. pyramid=CreateCone( 4 )
  55. ScaleEntity pyramid,2,2,2
  56. EntityColor pyramid,0,0,255
  57. EntityRadius pyramid,2
  58. EntityBox pyramid,-2,-2,-2,4,4,4
  59. EntityType pyramid,type_scenery
  60. RotateEntity pyramid,0,45,0
  61. PositionEntity pyramid,4,7,4
  62. ; Set collision method and response values
  63. method=2
  64. response=2
  65. method_info$="ellipsoid-to-polygon"
  66. response_info$="slide1"
  67. While Not KeyDown( 1 )
  68. x#=0
  69. y#=0
  70. z#=0
  71. If KeyDown( 203 )=True Then x#=-0.1
  72. If KeyDown( 205 )=True Then x#=0.1
  73. If KeyDown( 208 )=True Then z#=-0.1
  74. If KeyDown( 200 )=True Then z#=0.1
  75. MoveEntity sphere,x#,y#,z#
  76. MoveEntity sphere,0,-0.02,0 ; gravity
  77. ; Change collision method
  78. If KeyHit( 50 )=True
  79. method=method+1
  80. If method=4 Then method=1
  81. If method=1 Then method_info$="ellipsoid-to-sphere"
  82. If method=2 Then method_info$="ellipsoid-to-polygon"
  83. If method=3 Then method_info$="ellipsoid-to-box"
  84. EndIf
  85. ; Change collision response
  86. If KeyHit( 19 )=True
  87. response=response+1
  88. If response=4 Then response=1
  89. If response=1 Then response_info$="stop"
  90. If response=2 Then response_info$="slide1"
  91. If response=3 Then response_info$="slide2"
  92. EndIf
  93. ; Enable collisions between type_character and type_scenery
  94. Collisions type_character,type_scenery,method,response
  95. ; Perform collision checking
  96. UpdateWorld
  97. RenderWorld
  98. Text 0,0,"Use cursor keys to move sphere"
  99. Text 0,20,"Press M to change collision Method (currently: "+method_info$+")"
  100. Text 0,40,"Press R to change collision Response (currently: "+response_info$+")"
  101. Text 0,60,"Collisions type_character,type_scenery,"+method+","+response
  102. Flip
  103. Wend
  104. End