Beispiel #1
0
    def generateSuitGeometry(self, storage, np, height, barrier):
        node = np.getParent().attachNewNode('sb' + self.id[2:])
        node.setTransform(np.getTransform())

        barrier.copyTo(node)

        block = DNAUtil.getBlockFromName(self.id)
        x = int(np.getX())
        y = int(np.getY())
        seed = block * 1231 + x * 83 + y

        codes = storage.getNumCatalogCodes('suit_wall')
        if codes != 0:
            wallCode = storage.getCatalogCode('suit_wall', seed % codes)
            wall = storage.findNode(wallCode)
        else:
            wall = None

        if wall:
            wallNode = wall.copyTo(node)
            wallNode.setScale(self.width, 1, height)

            for door in DNAUtil.getChildrenOfType(self, DNAFlatDoor):
                door.generateSuitGeometry(storage, wallNode)

        node.flattenStrong()
        node.stash()
    def generateCogdoGeometry(self, storage, np, height, barrier):
        node = np.getParent().attachNewNode('cb' + self.id[2:])
        node.setTransform(np.getTransform())

        barrier.copyTo(node)

        block = DNAUtil.getBlockFromName(self.id)
        x = int(np.getX())
        y = int(np.getY())
        seed = block*1231 + x*83 + y

        codes = storage.getNumCatalogCodes('cogdo_wall')
        if codes != 0:
            wallCode = storage.getCatalogCode('cogdo_wall', seed%codes)
            wall = storage.findNode(wallCode)
        else:
            wall = None

        if wall:
            wallNode = wall.copyTo(node)
            wallNode.setScale(self.width, 1, height)

            for door in DNAUtil.getChildrenOfType(self, DNAFlatDoor):
                door.generateSuitGeometry(storage, wallNode)

        node.flattenStrong()
        node.stash()
    def _postGenerate(self, storage, np):
        height = np.getPythonTag('wall_height') or 0.0
        np.clearPythonTag('wall_height')

        # First, set up collisions. We need a (self.width, height)-sized square.
        barrierNode = storage.findNode('wall_camera_barrier')
        if not barrierNode:
            raise DNAError('No wall_camera_barrier in storage.')

        barrier = barrierNode.copyTo(np)
        barrier.setScale(self.width, 1, height)

        type = DNAUtil.getBuildingClassFromName(self.id)
        if type == 'tb':
            self.generateSuitGeometry(storage, np, height, barrier)
            self.generateCogdoGeometry(storage, np, height, barrier)

        # We need to set collisions on all of our knock knock doors:
        block = DNAUtil.getBlockFromName(self.name)
        if block is not None:
            for collisionNP in np.findAllMatches('**/door_*/+CollisionNode'):
                collisionNP.setName('KnockKnockDoorSphere_%d' % block)

        # Finally, flatten down:
        np.flattenStrong()
 def _makeNode(self, storage, parent):
     frontNode = parent.find('**/*building*_front')
     if frontNode.isEmpty():
         frontNode = parent.find('**/*_front')
     if not frontNode.getNode(0).isGeomNode():
         frontNode = frontNode.find('**/+GeomNode')
     frontNode.setEffect(DecalEffect.make())
     node = storage.findNode(self.code)
     if node is None:
         pass
     doorNode = node.copyTo(frontNode, 0)
     origin = parent.find('**/*door_origin')
     origin.node().setPreserveTransform(ModelNode.PTNet)
     self.setupDoor(doorNode, parent, origin, storage, DNAUtil.getBlockFromName(parent.getName()), self.getColor())
     return doorNode
Beispiel #5
0
 def _makeNode(self, storage, parent):
     frontNode = parent.find("**/*building*_front")
     if frontNode.isEmpty():
         frontNode = parent.find("**/*_front")
     if not frontNode.getNode(0).isGeomNode():
         frontNode = frontNode.find("**/+GeomNode")
     frontNode.setEffect(DecalEffect.make())
     node = storage.findNode(self.code)
     if node is None:
         # raise DNAError('DNADoor code ' + self.code + ' not found in DNAStorage')
         # TODO: error message here
         pass
     doorNode = node.copyTo(frontNode, 0)
     origin = parent.find("**/*door_origin")
     origin.node().setPreserveTransform(ModelNode.PTNet)
     self.setupDoor(doorNode, parent, origin, storage, DNAUtil.getBlockFromName(parent.getName()), self.getColor())
     return doorNode
Beispiel #6
0
    def _postGenerate(self, storage, np):
        height = np.getPythonTag('wall_height') or 0.0
        np.clearPythonTag('wall_height')
        barrierNode = storage.findNode('wall_camera_barrier')
        if not barrierNode:
            raise DNAError('No wall_camera_barrier in storage.')
        barrier = barrierNode.copyTo(np)
        barrier.setScale(self.width, 1, height)
        type = DNAUtil.getBuildingClassFromName(self.id)
        if type == 'tb':
            self.generateSuitGeometry(storage, np, height, barrier)
            self.generateCogdoGeometry(storage, np, height, barrier)
        block = DNAUtil.getBlockFromName(self.name)
        if block is not None:
            for collisionNP in np.findAllMatches('**/door_*/+CollisionNode'):
                collisionNP.setName('KnockKnockDoorSphere_%d' % block)

        np.flattenStrong()
        return
Beispiel #7
0
    def _postGenerate(self, storage, np):
        height = np.getPythonTag('wall_height') or 0.0
        np.clearPythonTag('wall_height')

        # First, set up collisions. We need a (self.width, height)-sized square.
        barrierNode = storage.findNode('wall_camera_barrier')
        if not barrierNode:
            raise DNAError('No wall_camera_barrier in storage.')

        barrier = barrierNode.copyTo(np)
        barrier.setScale(self.width, 1, height)

        type = DNAUtil.getBuildingClassFromName(self.id)
        if type == 'tb':
            self.generateSuitGeometry(storage, np, height, barrier)

        # We need to set collisions on all of our knock knock doors:
        block = DNAUtil.getBlockFromName(self.name)
        if block is not None:
            for collisionNP in np.findAllMatches('**/door_*/+CollisionNode'):
                collisionNP.setName('KnockKnockDoorSphere_%d' % block)

        # Finally, flatten down:
        np.flattenStrong()
 def _storeData(self, data):
     block = data.getBlock(DNAUtil.getBlockFromName(self.id))
     block.title = self.getTitle()
     block.buildingType = self.type
     block.zone = self.getVisGroup().getZone()
     block.node = self
 def _storeData(self, data):
     block = data.getBlock(DNAUtil.getBlockFromName(self.id))
     block.title = self.getTitle()
     block.buildingType = self.type
     block.zone = self.getVisGroup().getZone()
     block.node = self