Example #1
0
    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)