Ragdoll jumper, just for you shifty.
Thanks for sharing. -enjoy
Thanks for sharing. -enjoy
; ################################################################################################### ; # JV-ODE - Ragdoll Jumper Demo # ; # Code by Jim Williams (VIP3R) # ; ################################################################################################### AppTitle "JV-ODE - Ragdoll Jumper Demo" Include "JV-ODE.bb" Graphics3D 800,600,0,2 Global RagDollMax=1 Dim Head(RagDollMax) Dim BodyU(RagDollMax) Dim BodyL(RagDollMax) Dim LArmU(RagDollMax) Dim LArmL(RagDollMax) Dim RArmU(RagDollMax) Dim RArmL(RagDollMax) Dim LLegU(RagDollMax) Dim LLegL(RagDollMax) Dim RLegU(RagDollMax) Dim RLegL(RagDollMax) Dim LFoot(RagDollMax) Dim RFoot(RagDollMax) Dim RDJoint(RagDollMax,12) Type ODEGeom Field body Field geom Field mesh Field mass End Type ; ################################################################################################### ; ### Setup ODE Global World=dWorldCreate() Global Space=dHashSpaceCreate(0) Global ContactGroup=dJointGroupCreate(0) Global BigG#=-0.98 dWorldSetAutoDisableFlag(World,1) dWorldSetGravity(World,0,BigG#,0) dContactSetMode(dContactSlip1+dContactBounce) dContactSetBounce(0.3) dContactSetMu(48) dWorldSetQuickStepNumIterations (World,200) ; default 20 ; ### Create light Global Light=CreateLight() RotateEntity Light,45,-90,0 LightColor Light,255,255,255 AmbientLight 130,130,130 ; ### Create camera Global Camera=CreateCamera() CameraZoom Camera,1.0 CameraClsColor Camera,0,0,0 CameraRange Camera,1,1000 PositionEntity Camera,20,20,-10 RotateEntity Camera,5,45,0 ; ### Create plane dCreatePlane(Space,0,1,0,0) Plane=CreatePlane() EntityAlpha Plane,0.8 PlaneTexture=CreateTexture(128,128,9) ClsColor 0,150,80 Cls Color 200,200,200 Rect 0,0,64,64,1 Rect 64,64,64,64,1 CopyRect 0,0,128,128,0,0,BackBuffer(),TextureBuffer(PlaneTexture) ScaleTexture PlaneTexture,20,20 EntityTexture Plane,PlaneTexture,0,0 Color 255,255,255 Mirror=CreateMirror() ; ################################################################################################### CreateRagDoll(count) block.ODEGeom=New ODEGeom x_pos#=-8 y_pos#=15 z_pos#=12 width#=2 length#=2 depth#=2 x_rot#=0 y_rot#=0 z_rot#=0 weight#=100.0 block\body=dBodyCreate(World) block\mass=dMassCreate() dMassSetBoxTotal(block\mass,weight, width, length, depth) dBodySetMass(block\body,block\mass) dBodySetPosition(block\body, x_pos, y_pos, z_pos) dBodySetRotation(block\body, x_rot, y_rot, z_rot) block\geom=dCreateBox(Space,width, length, depth) dGeomSetBody(block\geom,block\body) dGeomContactSetBounce(block\geom,0.5) set_object_friction(block,0.5,weight) dGeomContactSetMode(block\geom,dContactSlip1+dContactBounce) block\mesh=CreateCube() ScaleEntity block\mesh,width/2,length/2,depth/2 seesaw.ODEGeom=New ODEGeom seesaw\mass=dMassCreate() x_pos#=-8 y_pos#=5 z_pos#=8 width#=3 length#=0.5 depth#=15 x_rot#=-20 y_rot#=0 z_rot#=0 weight#=2.0 seesaw\body=dBodyCreate(World) dMassSetBoxTotal(seesaw\mass,weight, width, length, depth) dBodySetMass(seesaw\body,seesaw\mass) dBodySetPosition(seesaw\body, x_pos, y_pos, z_pos) seesaw\geom=dCreateBox(Space,width, length, depth) dGeomSetBody(seesaw\geom,seesaw\body) dGeomContactSetBounce(seesaw\geom,0.5) set_object_friction(seesaw,0.5,weight) dGeomContactSetMode(seesaw\geom,dContactSlip1+dContactBounce) seesaw\mesh=CreateCube() ; Blitz box lengths 2x longer than ODE box length ScaleEntity seesaw\mesh,width/2,length/2,depth/2 dBodyDisable(seesaw\body) seesaw_joint=dJointCreateHinge(World,0) dJointAttach(seesaw_joint, seesaw\body, 0) dJointSetHingeAxis(seesaw_joint,1,0,0) dJointSetHingeAnchor(seesaw_joint,-8,4,8) dJointSetHingeParam(seesaw_joint,dParamLoStop,-dinfinity) dJointSetHingeParam(seesaw_joint,dParamHiStop,dinfinity) dBodySetRotation(seesaw\body, x_rot, y_rot, z_rot) While Not KeyHit(1) UpdateGeoms() For x=1 To 4 dSpaceCollide(Space,World,ContactGroup) dWorldQuickStep(World,0.05) dJointGroupEmpty(ContactGroup) Next RenderWorld Text 0,0,"Gravity="+Str(BigG#) Text 0,25,"Adjust Gravity - Mouse wheel" Text 0,50,"Space resets" Flip ; Adjust Gravity BigG#=BigG#+(MouseZSpeed()/100.0) dWorldSetGravity(World,0,BigG#,0) ; Space - Resets See Saw, Jumper, block and drops it. If KeyHit(57) ; See Saw x_pos#=-8 y_pos#=5 z_pos#=8 x_rot#=-20 y_rot#=0 z_rot#=0 dBodySetPosition(seesaw\body, x_pos, y_pos, z_pos) dBodySetRotation(seesaw\body, x_rot, y_rot, z_rot) dBodySetLinearVel(seesaw\body,0,0,0) dBodySetAngularVel(seesaw\body,0,0,0) dBodyDisable(seesaw\body) xp=-8 yp=9 zp=2 ; ### Position Head dBodySetRotation(Head(rd),0,0,0) dBodySetPosition(Head(rd),xp,yp,zp) dBodySetAutoDisableFlag(Head(rd),1) dBodySetLinearVel(Head(rd),0,0,0) dBodySetAngularVel(Head(rd),0,0,0) dBodyDisable(Head(rd)) ; ### Position Body (Upper) dBodySetRotation(BodyU(rd),0,0,0) dBodySetPosition(BodyU(rd),xp,yp-1.25,zp) dBodySetAutoDisableFlag(BodyU(rd),1) dBodySetLinearVel(BodyU(rd),0,0,0) dBodySetAngularVel(BodyU(rd),0,0,0) dBodyDisable(BodyU(rd)) ; ### Position Body (Lower) dBodySetRotation(BodyL(rd),0,0,0) dBodySetPosition(BodyL(rd),xp,yp-2.5,zp) dBodySetAutoDisableFlag(BodyL(rd),1) dBodySetLinearVel(BodyL(rd),0,0,0) dBodySetAngularVel(BodyL(rd),0,0,0) dBodyDisable(BodyL(rd)) ; ### Position Left Arm (Upper) dBodySetRotation(LArmU(rd),90,0,0) dBodySetPosition(LArmU(rd),xp+1,yp-1.25,zp) dBodySetAutoDisableFlag(LArmU(rd),1) dBodySetLinearVel(LArmU(rd),0,0,0) dBodySetAngularVel(LArmU(rd),0,0,0) dBodyDisable(LArmU(rd)) ; ### Position Left Arm (Lower) dBodySetRotation(LArmL(rd),90,0,0) dBodySetPosition(LArmL(rd),xp+1,yp-2.5,zp) dBodySetAutoDisableFlag(LArmL(rd),1) dBodySetLinearVel(LArmL(rd),0,0,0) dBodySetAngularVel(LArmL(rd),0,0,0) dBodyDisable(LArmL(rd)) ; ### Position Right Arm (Upper) dBodySetRotation(RArmU(rd),90,0,0) dBodySetPosition(RArmU(rd),xp-1,yp-1.25,zp) dBodySetAutoDisableFlag(RArmU(rd),1) dBodySetLinearVel(RArmU(rd),0,0,0) dBodySetAngularVel(RArmU(rd),0,0,0) dBodyDisable(RArmU(rd)) ; ### Position Right Arm (Lower) dBodySetRotation(RArmL(rd),90,0,0) dBodySetPosition(RArmL(rd),xp-1,yp-2.5,zp) dBodySetAutoDisableFlag(RArmL(rd),1) dBodySetLinearVel(RArmL(rd),0,0,0) dBodySetAngularVel(RArmL(rd),0,0,0) dBodyDisable(RArmL(rd)) ; ### Position Left Leg (Upper) dBodySetRotation(LLegU(rd),90,0,0) dBodySetPosition(LLegU(rd),xp+0.5,yp-3.6,zp) dBodySetAutoDisableFlag(LLegU(rd),1) dBodySetLinearVel(LLegU(rd),0,0,0) dBodySetAngularVel(LLegU(rd),0,0,0) dBodyDisable(LLegU(rd)) ; ### Position Left Leg (Lower) dBodySetRotation(LLegL(rd),90,0,0) dBodySetPosition(LLegL(rd),xp+0.5,yp-4.9,zp) dBodySetAutoDisableFlag(LLegL(rd),1) dBodySetLinearVel(LLegL(rd),0,0,0) dBodySetAngularVel(LLegL(rd),0,0,0) dBodyDisable(LLegL(rd)) ; ### Position Right Leg (Upper) dBodySetRotation(RLegU(rd),90,0,0) dBodySetPosition(RLegU(rd),xp-0.5,yp-3.6,zp) dBodySetAutoDisableFlag(RLegU(rd),1) dBodySetLinearVel(RLegU(rd),0,0,0) dBodySetAngularVel(RLegU(rd),0,0,0) dBodyDisable(RLegU(rd)) ; ### Position Right Leg (Lower) dBodySetRotation(RLegL(rd),90,0,0) dBodySetPosition(RLegL(rd),xp-0.5,yp-4.9,zp) dBodySetAutoDisableFlag(RLegL(rd),1) dBodySetLinearVel(RLegL(rd),0,0,0) dBodySetAngularVel(RLegL(rd),0,0,0) dBodyDisable(RLegL(rd)) ; ### Position Left Foot dBodySetRotation(LFoot(rd),0,0,0) dBodySetPosition(LFoot(rd),xp+0.5,yp-5.7,zp-0.25) dBodySetAutoDisableFlag(LFoot(rd),1) dBodySetLinearVel(LFoot(rd),0,0,0) dBodySetAngularVel(LFoot(rd),0,0,0) dBodyDisable(LFoot(rd)) ; ### Position Right Foot dBodySetRotation(RFoot(rd),0,0,0) dBodySetPosition(RFoot(rd),xp-0.5,yp-5.7,zp-0.25) dBodySetAutoDisableFlag(RFoot(rd),1) dBodySetLinearVel(RFoot(rd),0,0,0) dBodySetAngularVel(RFoot(rd),0,0,0) dBodyDisable(RFoot(rd)) x_pos#=-8 y_pos#=15 z_pos#=12 x_rot#=0 y_rot#=0 z_rot#=0 dBodySetPosition(block\body, x_pos, y_pos, z_pos) dBodySetRotation(block\body, x_rot, y_rot, z_rot) dBodySetLinearVel(block\body,0,0,0) dBodySetAngularVel(block\body,0,0,0) dBodyEnable(block\body) End If Wend dJointGroupDestroy(ContactGroup) dSpaceDestroy(Space) dWorldDestroy(World) dCloseODE() End ; ################################################################################################### Function CreateRagDoll(rd) xp=-8 yp=9 zp=2 ; ### RagDoll Dimensions headrad#=0.4 bodytx#=1.5 bodyty#=1.5 bodytz#=0.5 bodybx#=1.5 bodyby#=0.75 bodybz#=0.5 larmrad#=0.15 larmlen#=0.9 rarmrad#=0.15 rarmlen#=0.9 llegrad#=0.25 lleglen#=0.8 rlegrad#=0.25 rleglen#=0.8 feetx#=0.5 feety#=0.25 feetz#=1.0 weight#=1.0 ; ### Create Head ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) Head(rd)=ode\body dBodySetRotation(ode\body,0,0,0) dBodySetPosition(ode\body,xp,yp,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateSphere(Space,headrad) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateSphere() EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,headrad,headrad,headrad EntityColor ode\mesh,255,255,255 dBodyDisable(ode\body) ; ### Create Body (Upper) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) BodyU(rd)=ode\body dBodySetRotation(ode\body,0,0,0) dBodySetPosition(ode\body,xp,yp-1.25,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateBox(Space,bodytx,bodyty,bodytz) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCube() EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,bodytx*0.5,bodyty*0.5,bodytz*0.5 EntityColor ode\mesh,0,200,200 dBodyDisable(ode\body) ; ### Create Body (Lower) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) BodyL(rd)=ode\body dBodySetRotation(ode\body,0,0,0) dBodySetPosition(ode\body,xp,yp-2.5,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateBox(Space,bodybx,bodyby,bodybz) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCube() EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,bodybx*0.5,bodyby*0.5,bodybz*0.5 EntityColor ode\mesh,0,100,100 dBodyDisable(ode\body) ; ### Create Left Arm (Upper) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) LArmU(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp+1,yp-1.25,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,larmrad,larmlen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,larmrad,(larmlen*0.5)+larmrad,larmrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,255,0,0 dBodyDisable(ode\body) ; ### Create Left Arm (Lower) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) LArmL(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp+1,yp-2.5,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,larmrad,larmlen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,larmrad,(larmlen*0.5)+larmrad,larmrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,125,0,0 dBodyDisable(ode\body) ; ### Create Right Arm (Upper) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) RArmU(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp-1,yp-1.25,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,rarmrad,rarmlen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,rarmrad,(rarmlen*0.5)+rarmrad,rarmrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,0,255,0 dBodyDisable(ode\body) ; ### Create Right Arm (Lower) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) RArmL(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp-1,yp-2.5,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,rarmrad,rarmlen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,rarmrad,(rarmlen*0.5)+rarmrad,rarmrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,0,125,0 dBodyDisable(ode\body) ; ### Create Left Leg (Upper) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) LLegU(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp+0.5,yp-3.6,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,llegrad,lleglen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,llegrad,(lleglen*0.5)+llegrad,llegrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,255,0,0 dBodyDisable(ode\body) ; ### Create Left Leg (Lower) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) LLegL(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp+0.5,yp-4.9,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,llegrad,lleglen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,llegrad,(lleglen*0.5)+llegrad,llegrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,125,0,0 dBodyDisable(ode\body) ; ### Create Right Leg (Upper) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) RLegU(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp-0.5,yp-3.6,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,rlegrad,rleglen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,rlegrad,(rleglen*0.5)+rlegrad,rlegrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,0,255,0 dBodyDisable(ode\body) ; ### Create Right Leg (Lower) ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) RLegL(rd)=ode\body dBodySetRotation(ode\body,90,0,0) dBodySetPosition(ode\body,xp-0.5,yp-4.9,zp) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateCCylinder(Space,rlegrad,rleglen) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCylinder(8) EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,rlegrad,(rleglen*0.5)+rlegrad,rlegrad RotateMesh ode\mesh,90,0,0 EntityColor ode\mesh,0,125,0 dBodyDisable(ode\body) ; ### Create Left Foot ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) LFoot(rd)=ode\body dBodySetRotation(ode\body,0,0,0) dBodySetPosition(ode\body,xp+0.5,yp-5.7,zp-0.25) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateBox(Space,feetx,feety,feetz) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCube() EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,feetx*0.5,feety*0.5,feetz*0.5 EntityColor ode\mesh,200,0,100 dBodyDisable(ode\body) ; ### Create Right Foot ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) RFoot(rd)=ode\body dBodySetRotation(ode\body,0,0,0) dBodySetPosition(ode\body,xp-0.5,yp-5.7,zp-0.25) dBodySetAutoDisableFlag(ode\body,1) ode\mass=dMassCreate() dMassSetBoxTotal(ode\mass,weight, width, length, depth) dBodySetMass(ode\body,ode\mass) ode\geom=dCreateBox(Space,feetx,feety,feetz) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCube() EntityPickMode ode\mesh,2 ScaleMesh ode\mesh,feetx*0.5,feety*0.5,feetz*0.5 EntityColor ode\mesh,100,200,0 dBodyDisable(ode\body) ; ### Static Joint To Head ;RDJoint(rd,0)=dJointCreateBall(World,0) ;dJointAttach(RDJoint(rd,0),0,Head(rd)) ;dJointSetBallAnchor(RDJoint(rd,0),xp,yp,zp) ; ### Head To Body (Upper) RDJoint(rd,1)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,1),Head(rd),BodyU(rd)) dJointSetHingeAxis(RDJoint(rd,1),1,0,0) dJointSetHingeAnchor(RDJoint(rd,1),xp,yp-0.25,zp) dJointSetHingeParam(RDJoint(rd,1),dParamLoStop,-0.5) dJointSetHingeParam(RDJoint(rd,1),dParamHiStop,0.5) ; ### Body (Upper) To Body (Lower) RDJoint(rd,2)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,2),BodyU(rd),BodyL(rd)) dJointSetHingeAxis(RDJoint(rd,2),1,0,0) dJointSetHingeAnchor(RDJoint(rd,2),xp,yp-2,zp) dJointSetHingeParam(RDJoint(rd,2),dParamLoStop,-0.25) dJointSetHingeParam(RDJoint(rd,2),dParamHiStop,0.25) ; ### Left Arm (Upper) To Body (Upper) RDJoint(rd,3)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,3),LArmU(rd),BodyU(rd)) dJointSetHingeAxis(RDJoint(rd,3),1,-1,0) dJointSetHingeAnchor(RDJoint(rd,3),xp+1,yp-0.75,zp) dJointSetHingeParam(RDJoint(rd,3),dParamLoStop,-2.0) dJointSetHingeParam(RDJoint(rd,3),dParamHiStop,2.0) ; ### Left Arm (Lower) To Left Arm (Upper) RDJoint(rd,4)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,4),LArmL(rd),LArmU(rd)) dJointSetHingeAxis(RDJoint(rd,4),1,0,0) dJointSetHingeAnchor(RDJoint(rd,4),xp+1,yp-2,zp) dJointSetHingeParam(RDJoint(rd,4),dParamLoStop,0.0) dJointSetHingeParam(RDJoint(rd,4),dParamHiStop,2.0) ; ### Right Arm (Upper) To Body (Upper) RDJoint(rd,5)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,5),RArmU(rd),BodyU(rd)) dJointSetHingeAxis(RDJoint(rd,5),1,1,0) dJointSetHingeAnchor(RDJoint(rd,5),xp-1,yp-0.75,zp) dJointSetHingeParam(RDJoint(rd,5),dParamLoStop,-2.0) dJointSetHingeParam(RDJoint(rd,5),dParamHiStop,2.0) ; ### Right Arm (Lower) To Right Arm (Upper) RDJoint(rd,6)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,6),RArmL(rd),RArmU(rd)) dJointSetHingeAxis(RDJoint(rd,6),1,0,0) dJointSetHingeAnchor(RDJoint(rd,6),xp-1,yp-2,zp) dJointSetHingeParam(RDJoint(rd,6),dParamLoStop,0.0) dJointSetHingeParam(RDJoint(rd,6),dParamHiStop,2.0) ; ### Left Leg (Upper) To Body (Lower) RDJoint(rd,7)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,7),LLegU(rd),BodyL(rd)) dJointSetHingeAxis(RDJoint(rd,7),1,0,0) dJointSetHingeAnchor(RDJoint(rd,7),xp+1,yp-2.75,zp) dJointSetHingeParam(RDJoint(rd,7),dParamLoStop,-1.0) dJointSetHingeParam(RDJoint(rd,7),dParamHiStop,1.0) ; ### Left Leg (Lower) To Left Leg (Upper) RDJoint(rd,8)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,8),LLegL(rd),LLegU(rd)) dJointSetHingeAxis(RDJoint(rd,8),1,0,0) dJointSetHingeAnchor(RDJoint(rd,8),xp+1,yp-4.25,zp) dJointSetHingeParam(RDJoint(rd,8),dParamLoStop,-2.0) dJointSetHingeParam(RDJoint(rd,8),dParamHiStop,0.0) ; ### Right Leg (Upper) To Body (Lower) RDJoint(rd,9)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,9),RLegU(rd),BodyL(rd)) dJointSetHingeAxis(RDJoint(rd,9),1,0,0) dJointSetHingeAnchor(RDJoint(rd,9),xp-1,yp-2.75,zp) dJointSetHingeParam(RDJoint(rd,9),dParamLoStop,-1.0) dJointSetHingeParam(RDJoint(rd,9),dParamHiStop,1.0) ; ### Right Leg (Lower) To Right Leg (Upper) RDJoint(rd,10)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,10),RLegL(rd),RLegU(rd)) dJointSetHingeAxis(RDJoint(rd,10),1,0,0) dJointSetHingeAnchor(RDJoint(rd,10),xp-1,yp-4.25,zp) dJointSetHingeParam(RDJoint(rd,10),dParamLoStop,-2.0) dJointSetHingeParam(RDJoint(rd,10),dParamHiStop,0.0) ; ### Left Foot To Left Leg (Lower) RDJoint(rd,11)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,11),LFoot(rd),LLegL(rd)) dJointSetHingeAxis(RDJoint(rd,11),1,0,0) dJointSetHingeAnchor(RDJoint(rd,11),xp+1,yp-5.5,zp) dJointSetHingeParam(RDJoint(rd,11),dParamLoStop,-0.25) dJointSetHingeParam(RDJoint(rd,11),dParamHiStop,0.25) ; ### Right Foot To Right Leg (Lower) RDJoint(rd,12)=dJointCreateHinge(World,0) dJointAttach(RDJoint(rd,12),RFoot(rd),RLegL(rd)) dJointSetHingeAxis(RDJoint(rd,12),1,0,0) dJointSetHingeAnchor(RDJoint(rd,12),xp-1,yp-5.5,zp) dJointSetHingeParam(RDJoint(rd,12),dParamLoStop,-0.25) dJointSetHingeParam(RDJoint(rd,12),dParamHiStop,0.25) End Function Function UpdateGeoms() For ode.ODEGeom=Each ODEGeom ; If dBodyIsEnabled(ode\body) RotateEntity ode\mesh,dGeomGetPitch#(ode\geom),dGeomGetYaw#(ode\geom),dGeomGetRoll#(ode\geom) PositionEntity ode\mesh,dGeomGetPositionX#(ode\geom),dGeomGetPositionY#(ode\geom),dGeomGetPositionZ#(ode\geom) ; End If Next End Function ; ################################################################################################### Function set_object_friction(obj.ODEGeom,friction#,weight) friction=friction/100 friction=friction friction=friction*4 friction=4-friction e#=Log10(weight*10) e=e-friction e=1*(10^e) dGeomContactSetMu(obj\geom,e) End Function