Blitz3D+ Command Reference

PhysicsGravityX# ( world )

Parameters

world - live explicit physics world

Description

Returns the X component of this world's gravity vector in world axes, in m/s², as a Float.

The default vector is (0,-10,0), so this component defaults to 0.

This is the world acceleration setting, not a body's resulting acceleration; body gravity scale, mode, locks, contacts and other forces can change body motion. PhysicsGravity sets the complete vector. Reading it does not change simulation state.

Ordinary world/body arguments must be live handles of the correct kind; invalid or stale handles raise a runtime error. Mutations are rejected while the owning world is stepping.

Requires Extended mode.

See also: PhysicsGravity, PhysicsBodyGravityScale.

Example

; PhysicsGravityX Example
; -----------------------
; Requires Extended mode.

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

Const PHYSICS_STATIC=0
Const PHYSICS_DYNAMIC=2
Const CRATE_COUNT=12

SeedRnd MilliSecs()

camera=CreateCamera()
PositionEntity camera,0,6,-12
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 pile of crates, dropped from random heights
Dim crates(CRATE_COUNT)
Dim crate_bodies(CRATE_COUNT)
For i=1 To CRATE_COUNT
    crates(i)=CreateCube()
    ScaleEntity crates(i),0.5,0.5,0.5
    crate_bodies(i)=CreatePhysicsBody(world,crates(i),PHYSICS_DYNAMIC)
    crate_shape=PhysicsBodyBox(crate_bodies(i),1,1,1)
Next
DropPile()

tilt#=0

While Not KeyDown(1)

    ; R drops the pile again
    If KeyHit(19) Then DropPile()

    ; [ and ] tilt gravity sideways, waking the crates so they respond
    If KeyDown(26) Then tilt=tilt-0.1
    If KeyDown(27) Then tilt=tilt+0.1
    If KeyDown(26) Or KeyDown(27)
        PhysicsGravity world,tilt,-10,0
        For i=1 To CRATE_COUNT
            PhysicsBodyAwake crate_bodies(i),True
        Next
    EndIf

    StepPhysics world,1.0/60.0,4

    ; Orange crates are awake, grey crates are asleep
    For i=1 To CRATE_COUNT
        If PhysicsBodyIsAwake(crate_bodies(i))
            EntityColor crates(i),255,120,70
        Else
            EntityColor crates(i),150,150,150
        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,"Arrow keys: move camera   R: drop again   [ / ]: tilt gravity   Esc: exit"
    Text 0,20,"PhysicsGravityX(world) = "+PhysicsGravityX(world)+" m/s/s"
    Text 0,40,"(gravity is X "+PhysicsGravityX(world)+", Y "+PhysicsGravityY(world)+", Z "+PhysicsGravityZ(world)+" m/s/s)"

    Flip

Wend

FreePhysicsWorld world
End

Function DropPile()
    For i=1 To CRATE_COUNT
        ResetPhysicsBody crate_bodies(i),Rnd(-1.5,1.5),2+i*0.8,Rnd(-1.5,1.5),0,Rnd(Pi),0
    Next
End Function

Index