コード例 #1
0
    def __init__(self,
                 pos=None,
                 color=(0.6, 0.8, 0.5, 1),
                 scale=12,
                 h=8,
                 size=33,
                 trees=0.7):

        # Initialise primary NodePath which everything else is parented to
        if pos is None: pos = P.Vec3(0, 0, 0)
        self.pos = pos
        self.prime = P.NodePath('Terrain primary NodePath')
        self.prime.setPos(self.pos)

        # Create terrain models (rendering and collision)
        self.tnp, self.collnp = makeTerrain(size=size, h=h)
        self.tnp.reparentTo(self.prime)
        self.tnp.setColor(*color)
        self.tnp.setScale(scale)
        # Shift the collision terrain a bit so rays from trees hit
        self.collnp.setPos(self.collnp, .0001, .0001, 0)
        self.collnp.setCollideMask(C.floorMASK)

        # All trees in the scene are parented to one NodePath for flattening
        self.trees = self.prime.attachNewNode(P.PandaNode('trees'))
        self.treesColl = self.prime.attachNewNode(P.CollisionNode('treesColl'))
        self.treesColl.node().setIntoCollideMask(offMASK)
        self.treesColl.node().setFromCollideMask(obstacleMASK)
        #self.treesColl.show()
        vehicleCTrav.addCollider(self.treesColl, obstacleHandler)

        # Initialise trees
        img = greenNoise(imgSize=(size, size), scale=0.25)
        for x in range(0, size - 1):
            for y in range(0, size - 1):
                if img.getGreen(x, y) > trees:
                    treepos = P.Vec3(x * scale + 0.5 * scale,
                                     y * scale + 0.5 * scale, 50)
                    tree = Tree(pos=treepos)
                    tree.prime.reparentTo(self.trees)

        taskMgr.add(self.flatten, "Terrain flatten task")