class Leg(): def __init__(self,x,y,name,world,worldNP,body,front): self.hip1 = 0; self.hip2 = 0; self.uLeg1 = Vec3(0, 0, 0) self.lLeg1 = Vec3(0, 0, 0) self.uLeg2 = Vec3(0, 0, 0) self.lLeg2 = Vec3(0, 0, 0) self.kneeJoint1 = 0 self.kneeJoint2 = 0 self.footJoint = 0 # upper leg1 shape = BulletBoxShape(Vec3(0.1, 0.1, 5)) self.hLeg1 = BulletRigidBodyNode(name+'Up') bodyNP = worldNP.attachNewNode(self.hLeg1) bodyNP.node().addShape(shape) bodyNP.node().setMass(1.0) bodyNP.node().setDeactivationEnabled(False) bodyNP.setCollideMask(BitMask32.allOn()) bodyNP.setPos(x, y-1, 5.1) visNP = loader.loadModel('models/box.egg') visNP.clearModelNodes() visNP.setScale(Vec3(0.2, 0.2, 10)) visNP.reparentTo(bodyNP) world.attachRigidBody(self.hLeg1) # upper leg2 shape = BulletBoxShape(Vec3(0.1, 0.1, 5)) self.hLeg2 = BulletRigidBodyNode(name+'Up') bodyNP = worldNP.attachNewNode(self.hLeg2) bodyNP.node().addShape(shape) bodyNP.node().setMass(1.0) bodyNP.node().setDeactivationEnabled(False) bodyNP.setCollideMask(BitMask32.allOn()) bodyNP.setPos(x, y+1, 5.1) visNP = loader.loadModel('models/box.egg') visNP.clearModelNodes() visNP.setScale(Vec3(0.2, 0.2, 10)) visNP.reparentTo(bodyNP) world.attachRigidBody(self.hLeg2) # lower leg1 shape = BulletBoxShape(Vec3(0.1, 0.1, 5)) self.lLeg1 = BulletRigidBodyNode(name+'Down') bodyNP = worldNP.attachNewNode(self.lLeg1) bodyNP.node().addShape(shape) bodyNP.node().setMass(1.0) bodyNP.node().setDeactivationEnabled(False) bodyNP.setCollideMask(BitMask32.allOn()) bodyNP.setPos(x, y-1, -5.1) visNP = loader.loadModel('models/box.egg') visNP.clearModelNodes() visNP.setScale(Vec3(0.2, 0.2, 10)) visNP.reparentTo(bodyNP) world.attachRigidBody(self.lLeg1) # lower leg2 shape = BulletBoxShape(Vec3(0.1, 0.1, 5)) self.lLeg2 = BulletRigidBodyNode(name+'Down') bodyNP = worldNP.attachNewNode(self.lLeg2) bodyNP.node().addShape(shape) bodyNP.node().setMass(1.0) bodyNP.node().setDeactivationEnabled(False) bodyNP.setCollideMask(BitMask32.allOn()) bodyNP.setPos(x, y+1, -5.1) visNP = loader.loadModel('models/box.egg') visNP.clearModelNodes() visNP.setScale(Vec3(0.2, 0.2, 10)) visNP.reparentTo(bodyNP) world.attachRigidBody(self.lLeg2) # attachment to hip # Hinge01 pivotA = Point3(x, y-0.5, -2.0) pivotB = Point3(0, 0, 5.1) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.hipJoint1 = BulletHingeConstraint(body, self.hLeg1, pivotA, pivotB, axisA, axisB, False) self.hipJoint1.setDebugDrawSize(2.0) self.hipJoint1.setLimit(-91, 91, softness=0.1, bias=0.3, relaxation=0.1) self.hipJoint1.enableAngularMotor(True,0,0) world.attachConstraint(self.hipJoint1) # attachment to hip # Hinge02 pivotA = Point3(x+1, y+0.5, -2.0) pivotB = Point3(0, 0, 5.1) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.hipJoint2 = BulletHingeConstraint(body, self.hLeg2, pivotA, pivotB, axisA, axisB, False) self.hipJoint2.setDebugDrawSize(2.0) self.hipJoint2.setLimit(-91, 91, softness=0.1, bias=0.3, relaxation=0.1) self.hipJoint2.enableAngularMotor(True,0,0) world.attachConstraint(self.hipJoint2) # Hinge1 pivotA = Point3(0, 0, -5.3) pivotB = Point3(0, 0, 5.3) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.kneeJoint1 = BulletHingeConstraint(self.hLeg1, self.lLeg1, pivotA, pivotB, axisA, axisB, True) self.kneeJoint1.enableAngularMotor(True,0,0) self.kneeJoint1.setDebugDrawSize(2.0) self.kneeJoint1.setLimit(-90, 90, softness=0.0, bias=0.0, relaxation=0.0) world.attachConstraint(self.kneeJoint1) # Hinge2 pivotA = Point3(0, 0, -5.3) pivotB = Point3(0, 0, 5.3) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.kneeJoint2 = BulletHingeConstraint(self.hLeg2, self.lLeg2, pivotA, pivotB, axisA, axisB, True) self.kneeJoint2.enableAngularMotor(True,0,0) #self.kneeJoin2.setMaxMotorImpulse(5000) self.kneeJoint2.setDebugDrawSize(2.0) self.kneeJoint2.setLimit(-90, 90, softness=0.0, bias=0.0, relaxation=0.0) world.attachConstraint(self.kneeJoint2) # Hinge3 pivotA = Point3(1, 0, -5.3) pivotB = Point3(0, 0, -5.3) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.footJoint = BulletHingeConstraint(self.lLeg1, self.lLeg2, pivotA, pivotB, axisA, axisB, True) self.footJoint.enableAngularMotor(True,0,0) #self.kneeJoin2.setMaxMotorImpulse(5000) self.footJoint.setDebugDrawSize(2.0) self.footJoint.setLimit(-90, 90, softness=0.0, bias=0.0, relaxation=0.0) world.attachConstraint(self.footJoint) def setHipMax(self): self.hipJoint1.enableAngularMotor(True,-1,3) def setHipMin(self): self.hipJoint1.enableAngularMotor(True,1,3) def setKneeMax(self): self.kneeJoint1.enableAngularMotor(True,-1,3) def setKneeMin(self): self.kneeJoint1.enableAngularMotor(True,1,3)
class Leg(): def __init__(self,x,y,name,world,worldNP,body,front): self.hipX = 0; self.hipY = 0; self.hipZ = 0; self.upperLeg = Vec3(0, 0, 0) self.lowerLeg = Vec3(0, 0, 0) self.kneeJointX = 0 # upper leg shape = BulletBoxShape(Vec3(0.1, 0.1, 5)) self.hLeg = BulletRigidBodyNode(name+'Up') bodyNP = worldNP.attachNewNode(self.hLeg) bodyNP.node().addShape(shape) bodyNP.node().setMass(1.0) bodyNP.node().setDeactivationEnabled(False) bodyNP.setCollideMask(BitMask32.allOn()) bodyNP.setPos(x, y, 5.1) visNP = loader.loadModel('models/box.egg') visNP.clearModelNodes() visNP.setScale(Vec3(0.2, 0.2, 10)) visNP.reparentTo(bodyNP) world.attachRigidBody(self.hLeg) # lower leg shape = BulletBoxShape(Vec3(0.1, 0.1, 5)) self.lLeg = BulletRigidBodyNode(name+'Down') bodyNP = worldNP.attachNewNode(self.lLeg) bodyNP.node().addShape(shape) bodyNP.node().setMass(1.0) bodyNP.node().setDeactivationEnabled(False) bodyNP.setCollideMask(BitMask32.allOn()) bodyNP.setPos(x, y, -5.1) visNP = loader.loadModel('models/box.egg') visNP.clearModelNodes() visNP.setScale(Vec3(0.2, 0.2, 10)) visNP.reparentTo(bodyNP) world.attachRigidBody(self.lLeg) # attachment to hip # Hinge01 pivotA = Point3(x, y, -1.0) pivotB = Point3(0, 0, 5.1) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.hipJointY = BulletHingeConstraint(body, self.hLeg, pivotA, pivotB, axisA, axisB, False) self.hipJointY.setDebugDrawSize(2.0) self.hipJointY.setLimit(-91, 91, softness=0.1, bias=0.3, relaxation=0.1) self.hipJointY.enableAngularMotor(True,0,0) #self.hipJointY.setMaxMotorImpulse(5000) world.attachConstraint(self.hipJointY) # Hinge1 pivotA = Point3(0, 0, -5.3) pivotB = Point3(0, 0, 5.3) axisA = Vec3(1, 0, 0) axisB = Vec3(1, 0, 0) self.kneeJoint = BulletHingeConstraint(self.hLeg, self.lLeg, pivotA, pivotB, axisA, axisB, True) self.kneeJoint.enableAngularMotor(True,0,0) #self.kneeJoint.setMaxMotorImpulse(5000) self.kneeJoint.setDebugDrawSize(2.0) self.front = front; if(front): self.maxAngle = 91; self.minAngle = -1; else: self.maxAngle = 1; self.minAngle = -91; self.kneeJoint.setLimit(self.minAngle, self.maxAngle, softness=0.1, bias=0.3, relaxation=0.1) world.attachConstraint(self.kneeJoint) self.force = 10 def setHipMax(self): if(self.front): direction = 1 else: direction = -1 self.hipJointY.enableAngularMotor(True,direction,self.force) self.hipJointY.setMotorTarget(90*direction,1); def setHipMin(self): if(self.front): direction = -1 else: direction = 1 self.hipJointY.enableAngularMotor(True,direction,self.force) self.hipJointY.setMotorTarget(90*direction,1); def setKneeMax(self): if(self.front): direction = -1 else: direction = 1 self.kneeJoint.enableAngularMotor(True,direction,4) def setKneeMin(self): if(self.front): direction = 1 else: direction = -1 self.kneeJoint.enableAngularMotor(True,direction,4)