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