Blitz3D+ Command Reference

PhysicsBodyGetSleepThreshold# ( body )

Parameters

body - live physics body handle

Description

Returns the configured sleep threshold in metres per second.

Sets the body's non-negative finite sleep speed threshold in metres per second. Higher values allow a body to settle sooner. Zero permits sleep only when native motion criteria reach zero. Changing the threshold does not itself wake a body; use PhysicsBodyAwake if needed. Sleep policy is controlled separately.

Stale/wrong-kind handles and invalid numeric inputs cause runtime errors. Object ownership is unchanged by these controls.

Requires Extended mode.

See also: ResetPhysicsBody, PhysicsBodyActive, PhysicsBodyMode, StepPhysics.

Example

; PhysicsBodyGetSleepThreshold 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,-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

threshold#=0.05

While Not KeyDown(1)

    ; R drops the crate again
    If KeyHit(19) Then ResetPhysicsBody crate_body,-2,4,0,0,0,0.3

    ; [ and ] change the speed below which the crate may fall asleep
    If KeyHit(26) And threshold>0.1 Then threshold=threshold-0.1
    If KeyHit(27) Then threshold=threshold+0.1
    PhysicsBodySleepThreshold crate_body,threshold

    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   [ / ]: threshold   Esc: exit"
    Text 0,20,"PhysicsBodyGetSleepThreshold(crate_body) = "+PhysicsBodyGetSleepThreshold(crate_body)+" m/s"
    Text 0,40,"Awake: "+PhysicsBodyIsAwake(crate_body)

    Flip

Wend

FreePhysicsWorld world
End

Index