PhysicsWorkerCount ( world )

Parameters

world - physics-world handle returned by CreatePhysicsWorld

Description

Returns the number of worker threads a physics world simulates with.

A new world reports 1 until PhysicsWorkers changes it. Useful for showing the setting in a debug overlay or an options screen, or for verifying what a machine ended up with after your startup tuning.


See also: PhysicsWorkers, StepPhysics, CreatePhysicsWorld.

Example

; PhysicsWorkerCount Example
; --------------------------

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

Const PHYSICS_STATIC=0
Const PHYSICS_DYNAMIC=2
Const CRATE_COUNT=24

SeedRnd MilliSecs()

camera=CreateCamera()
PositionEntity camera,0,6,-6
RotateEntity camera,20,0,0

light=CreateLight()
RotateEntity light,45,-30,0
AmbientLight 50,50,50

world=CreatePhysicsWorld()
PhysicsGravity world,0,-9.81,0

; Request two solver workers; the engine clamps to its supported range
PhysicsWorkers world,2
workers=2

; Static ground slab
ground=CreateCube()
ScaleEntity ground,5,0.5,5
PositionEntity ground,0,-0.5,5,True
EntityColor ground,80,160,255
ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC)
ground_shape=PhysicsBodyBox(ground_body,10,1,10,0)

; A busy pile of dynamic crates keeps the workers occupied
Dim crate_ent(CRATE_COUNT)
Dim crate_body(CRATE_COUNT)
For i=1 To CRATE_COUNT
    crate_ent(i)=CreateCube()
    ScaleEntity crate_ent(i),0.4,0.4,0.4
    PositionEntity crate_ent(i),Rnd(-3,3),Rnd(2,8),Rnd(2,8),True
    EntityColor crate_ent(i),Rand(80,255),Rand(80,255),Rand(80,255)
    crate_body(i)=CreatePhysicsBody(world,crate_ent(i),PHYSICS_DYNAMIC)
    crate_shape=PhysicsBodyBox(crate_body(i),0.8,0.8,0.8,1)
Next

While Not KeyDown(1)

    ; [ and ] request fewer or more solver workers
    If KeyHit(26) And workers>1 Then workers=workers-1
    If KeyHit(27) And workers<8 Then workers=workers+1
    PhysicsWorkers world,workers

    ; Space tosses every crate back into the air
    If KeyHit(57)
        For i=1 To CRATE_COUNT
            PhysicsBodyImpulse crate_body(i),Rnd(-0.5,0.5),Rnd(2,4),Rnd(-0.5,0.5)
        Next
    EndIf

    StepPhysics world,1.0/60.0,4

    ; Respawn any crate that tumbled off the slab
    For i=1 To CRATE_COUNT
        If EntityY(crate_ent(i),True)<-6
            FreePhysicsBody crate_body(i)
            PositionEntity crate_ent(i),Rnd(-3,3),8,Rnd(2,8),True
            crate_body(i)=CreatePhysicsBody(world,crate_ent(i),PHYSICS_DYNAMIC)
            crate_shape=PhysicsBodyBox(crate_body(i),0.8,0.8,0.8,1)
        EndIf
    Next

    ; 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,"[ / ]: request workers   Space: toss the crates   Arrow keys: camera   Esc: exit"
    Text 0,20,"PhysicsWorkerCount(world) = "+PhysicsWorkerCount(world)+"   (requested "+workers+")"
    Text 0,40,"More workers can speed up busy worlds; the count changes between steps."

    Flip

Wend

FreePhysicsWorld world
End

Index