; PhysicsBodyMass Example ; ----------------------- ; Requires Extended mode. Graphics3D 640,480,0,2 SetBuffer BackBuffer() Const PHYSICS_STATIC=0 Const PHYSICS_DYNAMIC=2 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 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 crate whose density - and so mass - you can change density#=1 crate=CreateCube() ScaleEntity crate,0.5,0.5,0.5 PositionEntity crate,0,0.5,0,True EntityColor crate,255,120,70 crate_body=CreatePhysicsBody(world,crate,PHYSICS_DYNAMIC) crate_shape=PhysicsBodyBox(crate_body,1,1,1,density) While Not KeyDown(1) ; Keys 1/2/3 rebuild the shape with a new density new_density#=0 If KeyHit(2) Then new_density=0.5 If KeyHit(3) Then new_density=1.0 If KeyHit(4) Then new_density=4.0 If new_density>0 density=new_density FreePhysicsShape crate_shape crate_shape=PhysicsBodyBox(crate_body,1,1,1,density) EndIf ; Space kicks with a FIXED impulse - heavier crates jump less If KeyHit(57) Then PhysicsBodyImpulse crate_body,0,4,0 ; Advance the Box3D simulation by one 60 Hz step StepPhysics world,1.0/60.0,4 ; Read the mass Box3D calculated from shape volume times density mass#=PhysicsBodyMass(crate_body) ; 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,"1/2/3: density Space: fixed kick Arrow keys: camera Esc: exit" Text 0,20,"Density: "+density+" PhysicsBodyMass = "+mass+" kg" Flip Wend FreePhysicsWorld world FreeEntity crate FreeEntity ground End