-------------------------------------------------------------------------------- -- Function......... : setupDynamics -- Author........... : -- Description...... : -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- function RopeDynamics_Rope.setupDynamics ( ) -------------------------------------------------------------------------------- -- Get the object linked to the AI -- local o = this.getObject ( ) -- Force it to be horizontal for the demo purpose... -- object.setRotation ( o, 0, 0, 90, object.kGlobalSpace ) -- Create a dynamic body for the object (which will be the root of the rope) -- if ( dynamics.createBoxBody ( o, 0.1, 1, 0.1 ) ) then dynamics.enableDynamics ( o, true ) -- Enable dynamics (disabled by default) dynamics.enableCollisions ( o, true ) -- Enable collisions (disabled by default) dynamics.enableGravity ( o, true ) -- Enable gravity (disabled by default) dynamics.setLinearDamping ( o, 0.5 ) -- Create a ball joint, and fix it to a static point of the world -- if ( dynamics.createBallJoint ( o, nil, "World" ) ) -- nil means "static linking" then dynamics.setBallJointAnchor ( o, "World", 0, 0.5, 0, object.kLocalSpace ) end end -- Create the other linked segments -- local s = application.getCurrentUserScene ( ) if ( s ~= nil ) then local prevSegment = o local prevSegmentTX, prevSegmentTY, prevSegmentTZ = object.getTranslation ( prevSegment, object.kGlobalSpace ) local prevSegmentRX, prevSegmentRY, prevSegmentRZ = object.getRotation ( prevSegment, object.kGlobalSpace ) for i = 0, 3 do local newSegment = scene.createRuntimeObject ( s, "RopeDynamics_Segment" ) object.setTranslation ( newSegment, prevSegmentTX, prevSegmentTY, prevSegmentTZ, object.kGlobalSpace ) object.setRotation ( newSegment, prevSegmentRX, prevSegmentRY, prevSegmentRZ, object.kGlobalSpace ) object.translate ( newSegment, 0, -1, 0, object.kLocalSpace ) if ( newSegment ~= nil and dynamics.createBoxBody ( newSegment, 0.1, 1, 0.1 ) ) then dynamics.enableDynamics ( newSegment, true ) dynamics.enableCollisions ( newSegment, true ) dynamics.enableGravity ( newSegment, true ) dynamics.setLinearDamping ( newSegment, 0.5 ) if ( dynamics.createBallJoint ( newSegment, prevSegment, "Joint" ) ) -- link to the previous segment then dynamics.setBallJointAnchor ( newSegment, "Joint", 0, 0.5, 0, object.kLocalSpace ) end prevSegment = newSegment prevSegmentTX, prevSegmentTY, prevSegmentTZ = object.getTranslation ( prevSegment, object.kGlobalSpace ) prevSegmentRX, prevSegmentRY, prevSegmentRZ = object.getRotation ( prevSegment, object.kGlobalSpace ) end end end -------------------------------------------------------------------------------- end --------------------------------------------------------------------------------