| joint - a current physics joint handle |
|
Returns the distance spring's configured upper signed force bound in newtons. Negative means tension; positive means compression. Native defaults are -FLT_MAX and FLT_MAX (effectively uncapped). This is a spring-only bound, not a measured force or a total constraint cap. Other joint families are rejected. Invalid, stale or wrong-kind handles raise a runtime error. See also: PhysicsJointSpring, PhysicsJointFrame, PhysicsJointThresholds, PhysicsJointEventJoint, StepPhysics. |
; PhysicsJointSpringUpperForce Example
; ------------------------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Const PHYSICS_STATIC=0
Const PHYSICS_DYNAMIC=2
camera=CreateCamera()
PositionEntity camera,0,3,-10
RotateEntity camera,0,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 beam, and a heavy ball hanging from its left end on a springy rope
beam=CreateCube()
ScaleEntity beam,1.5,0.15,0.3
PositionEntity beam,0,5,0
EntityColor beam,150,150,160
beam_body=CreatePhysicsBody(world,beam,PHYSICS_STATIC)
beam_shape=PhysicsBodyBox(beam_body,3,0.3,0.6)
ball=CreateSphere(16)
ScaleEntity ball,0.3,0.3,0.3
PositionEntity ball,-1.5,3,0
EntityColor ball,255,120,70
ball_body=CreatePhysicsBody(world,ball,PHYSICS_DYNAMIC)
ball_shape=PhysicsBodySphere(ball_body,0.6,20)
rope=CreatePhysicsDistanceJoint(beam_body,ball_body,-1.5,5,0,-1.5,3,0)
PhysicsJointSpring rope,True,1.5,0.1
tension#=400
While Not KeyDown(1)
; Space throws the ball sideways, so it swings up past the beam
If KeyHit(57) Then PhysicsBodyImpulse ball_body,25,0,0
; [ and ] change how hard the spring may pull, in newtons of tension
If KeyHit(26) And tension>10 Then tension=tension-10
If KeyHit(27) Then tension=tension+10
PhysicsJointSpringForceRange rope,-tension,1000
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
; Draw the rope
CameraProject camera,-1.5,5,0
beam_x=ProjectedX()
beam_y=ProjectedY()
CameraProject camera,EntityX(ball),EntityY(ball),EntityZ(ball)
Line beam_x,beam_y,ProjectedX(),ProjectedY()
Text 0,0,"Arrow keys: move camera Space: throw [ / ]: max tension Esc: exit"
Text 0,20,"PhysicsJointSpringUpperForce(rope) = "+PhysicsJointSpringUpperForce(rope)+" N"
Text 0,40,"(positive is compression; lower bound "+PhysicsJointSpringLowerForce(rope)+" N)"
Flip
Wend
FreePhysicsWorld world
End