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")