|
body - live physics body handle body_type - 0=static, 1=kinematic, 2=dynamic |
|
Changes body type: 0=static, 1=kinematic, 2=dynamic. Keeps native pose, shapes, joints and tags, and synchronises the entity and interpolation history. Kinematic bodies follow entity target transforms on StepPhysics; dynamic bodies drive their entities. Triangle meshes and terrain require static mode and are rejected before mutation. Entering static mode clears velocity; leaving dynamic mode clears the bullet flag. Dynamic mode recomputes mass from shapes. Repeating the current mode has no effect. Stale/wrong-kind handles and invalid numeric inputs cause runtime errors. Object ownership is unchanged by these controls. See also: ResetPhysicsBody, PhysicsBodyActive, StepPhysics. |
; PhysicsBodyMode Example
; -----------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Const PHYSICS_STATIC=0
Const PHYSICS_DYNAMIC=2
camera=CreateCamera()
PositionEntity camera,0,3,-7
RotateEntity camera,20,0,0
light=CreateLight()
RotateEntity light,45,-30,0
AmbientLight 60,60,60
; An independent Box3D world with standard gravity
world=CreatePhysicsWorld()
; Blue static floor
ground=CreateCube()
ScaleEntity ground,6,0.5,6
PositionEntity ground,0,-0.5,0
EntityColor ground,80,160,255
ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC)
ground_shape=PhysicsBodyBox(ground_body,12,1,12)
; A green static ramp
ramp=CreateCube()
ScaleEntity ramp,3,0.2,1.5
RotateEntity ramp,0,0,-20
PositionEntity ramp,0,1,0
EntityColor ramp,120,200,140
ramp_body=CreatePhysicsBody(world,ramp,PHYSICS_STATIC)
ramp_shape=PhysicsBodyBox(ramp_body,6,0.4,3)
; A crate dropped onto the top of the ramp
crate=CreateCube()
ScaleEntity crate,0.4,0.4,0.4
crate_body=CreatePhysicsBody(world,crate,PHYSICS_DYNAMIC)
crate_shape=PhysicsBodyBox(crate_body,0.8,0.8,0.8)
ResetPhysicsBody crate_body,-2,4,0,0,0,0.3
mode=PHYSICS_DYNAMIC
While Not KeyDown(1)
; R drops the crate again
If KeyHit(19) Then ResetPhysicsBody crate_body,-2,4,0,0,0,0.3
; Space cycles static (0), kinematic (1) and dynamic (2)
If KeyHit(57)
mode=(mode+1) Mod 3
PhysicsBodyMode crate_body,mode
EndIf
; A kinematic body follows its entity, so turn the entity
If mode=1 Then TurnEntity crate,0,3,0
StepPhysics world,1.0/60.0,4
; Orange while awake, grey once asleep
If PhysicsBodyIsAwake(crate_body)
EntityColor crate,255,120,70
Else
EntityColor crate,150,150,150
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: move camera R: drop again Space: change mode Esc: exit"
Text 0,20,"PhysicsBodyMode crate_body,"+mode
Text 0,40,"Static stays put, kinematic follows the entity, dynamic falls"
Flip
Wend
FreePhysicsWorld world
End