def setup(self): self.worldNP = render.attachNewNode('World') # World self.debugNP = self.worldNP.attachNewNode(BulletDebugNode('Debug')) self.debugNP.show() ####### MV self.environ = loader.loadModel("world/world") self.environ.reparentTo(render) self.world = BulletWorld() self.world.setGravity(Vec3(0, 0, -9.81)) self.world.setDebugNode(self.debugNP.node()) # Ground shape = BulletPlaneShape(Vec3(0, 0, 1), 0) #actor = Actor('world/world') mesh = BulletTriangleMesh() ###### create terrein colligion shape geomNodeCollection = self.environ.findAllMatches('**/+GeomNode') for nodePath in geomNodeCollection: #.asList(): geomNode = nodePath.node() print("here1") for i in range(geomNode.getNumGeoms()): geom = geomNode.getGeom(i) print("here2") print(geom) mesh.addGeom(geom) shape = BulletTriangleMeshShape(mesh, dynamic=False) shape.set_margin(0.0) #print(geomNodeCollection) # for geom in actor.getGeomNode().get_geoms(): # mesh.addGeom(geom) # shape = BulletTriangleMeshShape(mesh, dynamic=False) #img = PNMImage(Filename('models/elevation2.png')) #shape = BulletHeightfieldShape(img, 1.0, ZUp) np = self.worldNP.attachNewNode(BulletRigidBodyNode('Ground')) np.node().addShape(shape) np.setPos(0, 0, 0) #-1) np.setCollideMask(BitMask32.allOn()) self.world.attachRigidBody(np.node()) # Box shape = BulletBoxShape(Vec3(1.0, 3.0, 0.3)) np = self.worldNP.attachNewNode(BulletRigidBodyNode('Box')) np.node().setMass(50.0) np.node().addShape(shape) np.setPos(3, 0, 7) np.setH(0) np.setCollideMask(BitMask32.allOn()) self.world.attachRigidBody(np.node()) # Character h = 1.75 w = 0.4 shape = BulletCapsuleShape(w, h - 2 * w, ZUp) self.player = BulletCharacterControllerNode( shape, 0.4, 'Player') #MV was: BulletCharacterNode(shape, 0.4, 'Player') #self.player.setMass(20.0) self.player.setMaxSlope(70.0) self.player.setGravity(9.81) #self.player.setFrictionSlip(100.0) self.playerNP = self.worldNP.attachNewNode(self.player) #self.playerNP.setMass(20.0) self.playerNP.setPos(-2, 0, 10) self.playerNP.setH(-90) self.playerNP.setCollideMask(BitMask32.allOn()) #self.playerNP.flattenLight() self.world.attachCharacter(self.player) self.ralph = Actor("ralph/ralph", { "run": "ralph/ralph-run", "walk": "ralph/ralph-walk" }) self.ralph.reparentTo(render) self.ralph.setScale(0.3048) self.ralph.setPos(0, 0, -1) self.ralph.setH(180) self.ralph.reparentTo(self.playerNP) ## Camera self.camera = base.cam base.disableMouse() self.camera.setPos(self.playerNP.getX(), self.playerNP.getY() + 10, 2) self.camera.lookAt(self.playerNP)