; PhysicsBodyBox Example ; ---------------------- ; Requires Extended mode. Graphics3D 640,480,0,2 SetBuffer BackBuffer() Const PHYSICS_STATIC=0 Const PHYSICS_DYNAMIC=2 SeedRnd MilliSecs() camera=CreateCamera() PositionEntity camera,0,3,-9 light=CreateLight() RotateEntity light,45,-30,0 AmbientLight 50,50,50 ; Independent Box3D world with Earth-like gravity world=CreatePhysicsWorld() PhysicsGravity world,0,-9.81,0 ; Blue static ground slab - dimensions are full metres ground=CreateCube() ScaleEntity ground,4,0.5,4 PositionEntity ground,0,-0.5,0,True EntityColor ground,80,160,255 ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC) ground_shape=PhysicsBodyBox(ground_body,8,1,8,0) ; Orange tumbling crate with a matching box shape size#=1 crate=CreateCube() ScaleEntity crate,size/2,size/2,size/2 PositionEntity crate,0,3,0,True EntityColor crate,255,120,70 crate_body=CreatePhysicsBody(world,crate,PHYSICS_DYNAMIC) crate_shape=PhysicsBodyBox(crate_body,size,size,size,1) While Not KeyDown(1) ; Keys 1/2/3 rebuild the box shape with new full dimensions new_size#=0 If KeyHit(2) Then new_size=0.6 If KeyHit(3) Then new_size=1.0 If KeyHit(4) Then new_size=1.6 If new_size>0 size=new_size FreePhysicsShape crate_shape crate_shape=PhysicsBodyBox(crate_body,size,size,size,1) ; Match the visual cube to the collision size ScaleEntity crate,size/2,size/2,size/2 EndIf ; Space tosses the crate up with a random tumble If KeyHit(57) PhysicsBodyVelocity crate_body,0,6,0 PhysicsBodyAngularVelocity crate_body,Rnd(-3,3),Rnd(-3,3),Rnd(-3,3) EndIf ; Advance the Box3D simulation by one 60 Hz step StepPhysics world,1.0/60.0,4 ; Respawn the crate if it tumbles off the slab If EntityY(crate)<-8 FreePhysicsBody crate_body PositionEntity crate,0,3,0,True RotateEntity crate,0,0,0 crate_body=CreatePhysicsBody(world,crate,PHYSICS_DYNAMIC) crate_shape=PhysicsBodyBox(crate_body,size,size,size,1) EndIf ; Arrow keys move the camera If KeyDown(200) Then MoveEntity camera,0,0,0.1 If KeyDown(208) Then MoveEntity camera,0,0,-0.1 If KeyDown(203) Then TurnEntity camera,0,1,0 If KeyDown(205) Then TurnEntity camera,0,-1,0 RenderWorld Text 0,0,"Arrow keys: camera 1/2/3: box size Space: toss Esc: exit" Text 0,20,"Box shape: "+size+" x "+size+" x "+size+" m handle: "+crate_shape Flip Wend FreePhysicsWorld world FreeEntity crate FreeEntity ground End