| joint - a current physics joint handle |
|
Returns a joint's spring target. Returns the distance rest length or slider target translation in metres, or the hinge target angle in radians. Use PhysicsJointSpringTarget to change it. Supports distance, slider and hinge joints. Returns the configured value even when that feature is disabled; it does not measure the current motion. Invalid, stale or wrong-kind handles raise a runtime error. See also: PhysicsJointSpring, PhysicsJointFrame, PhysicsJointThresholds, PhysicsJointEventJoint, StepPhysics. |
; PhysicsJointTarget 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 static post, and a door hinged to it on a vertical axis
post=CreateCube()
ScaleEntity post,0.1,1.5,0.1
PositionEntity post,-1.5,1.5,0
EntityColor post,150,150,160
post_body=CreatePhysicsBody(world,post,PHYSICS_STATIC)
post_shape=PhysicsBodyBox(post_body,0.2,3,0.2)
door=CreateCube()
ScaleEntity door,1.2,1.4,0.05
PositionEntity door,-0.2,1.5,0
EntityColor door,255,120,70
door_body=CreatePhysicsBody(world,door,PHYSICS_DYNAMIC)
door_shape=PhysicsBodyBox(door_body,2.4,2.8,0.1)
PhysicsBodyDamping door_body,0,1
hinge=CreatePhysicsHingeJoint(post_body,door_body,-1.4,1.5,0,0,1,0)
; A spring closes the door again, like a self-closing hinge
PhysicsJointSpring hinge,True,0.5,0.3
While Not KeyDown(1)
; Space pushes the far edge of the door
If KeyHit(57)
TFormPoint 1,0,0,door,0
PhysicsBodyImpulseAt door_body,0,0,2,TFormedX(),TFormedY(),TFormedZ()
EndIf
; [ and ] move the spring's target by a quarter radian
If KeyHit(26) Then PhysicsJointSpringTarget hinge,PhysicsJointTarget(hinge)-0.25
If KeyHit(27) Then PhysicsJointSpringTarget hinge,PhysicsJointTarget(hinge)+0.25
StepPhysics world,1.0/60.0,4
; 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 Space: push [ / ]: target Esc: exit"
Text 0,20,"PhysicsJointTarget(hinge) = "+PhysicsJointTarget(hinge)+" radians"
Text 0,40,"Door angle: "+PhysicsJointAngle(hinge)
Flip
Wend
FreePhysicsWorld world
End