def setupDoor(doorNodePath, parentNode, doorOrigin, dnaStore, block, color): doorNodePath.setPosHprScale(doorOrigin, LVecBase3f(0), LVecBase3f(0), LVecBase3f(1)) doorNodePath.setColor(color) leftHole = doorNodePath.find("door_*_hole_left") leftHole.setName("doorFrameHoleLeft") leftHoleGeom = leftHole.find("**/+GeomNode") leftHoleGeom.setName("doorFrameHoleLeftGeom") rightHole = doorNodePath.find("door_*_hole_right") rightHole.setName("doorFrameHoleRight") rightHoleGeom = rightHole.find("**/+GeomNode") rightHoleGeom.setName("doorFrameHoleRightGeom") leftDoor = doorNodePath.find("door_*_left") leftDoor.setName("leftDoor") rightDoor = doorNodePath.find("door_*_right") rightDoor.setName("rightDoor") doorFlat = doorNodePath.find("door_*_flat") doorFlat.setEffect(DecalEffect.make()) leftHole.wrtReparentTo(doorFlat, 0) rightHole.wrtReparentTo(doorFlat, 0) if not leftHoleGeom.getNode(0).isGeomNode(): leftHoleGeom = leftHoleGeom.find("**/+GeomNode") if not rightHoleGeom.getNode(0).isGeomNode(): rightHoleGeom = rightHoleGeom.find("**/+GeomNode") leftHoleGeom.setEffect(DecalEffect.make()) rightHoleGeom.setEffect(DecalEffect.make()) rightDoor.wrtReparentTo(parentNode, 0) leftDoor.wrtReparentTo(parentNode, 0) rightDoor.setColor(color, 0) leftDoor.setColor(color, 0) rightDoor.hide() leftDoor.hide() rightHole.hide() leftHole.hide() leftHole.setColor(LVecBase4f(0, 0, 0, 1), 0) rightHole.setColor(LVecBase4f(0, 0, 0, 1), 0) doorTrigger = doorNodePath.find("door_*_trigger") doorTrigger.setScale(2, 2, 2) doorTrigger.wrtReparentTo(parentNode, 0) doorTrigger.setName("door_trigger_" + str(block)) storeNp = NodePath("door_trigger_" + str(block)) storeNp.setPosHprScale(doorTrigger, LVecBase3f(0), LVecBase3f(0), LVecBase3f(1)) dnaStore.storeBlockDoor(block, storeNp)
def traverse(self, nodePath, dnaStorage): node = dnaStorage.findNode(self.code) if node is None: raise DNAError.DNAError('DNASignGraphic code ' + self.code + ' not found in storage') node = node.copyTo(nodePath) node.setScale(self.scale) node.setScale(node, self.getParent().scale) node.setPosHpr(self.pos, self.hpr) node.setDepthWrite(True) node.setDepthTest(True) node.setEffect(DecalEffect.make()) node.getNode(0).setEffect(DecalEffect.make()) node.setY(node, -0.025) self.traverseChildren(node, dnaStorage)
def setupDoor(doorNodePath, parentNode, doorOrigin, dnaStore, block, color): doorNodePath.setPosHprScale(doorOrigin, (0, 0, 0), (0, 0, 0), (1, 1, 1)) doorNodePath.setColor(color, 0) leftHole = doorNodePath.find('door_*_hole_left') leftHole.flattenStrong() leftHole.setName('doorFrameHoleLeft') rightHole = doorNodePath.find('door_*_hole_right') rightHole.flattenStrong() rightHole.setName('doorFrameHoleRight') leftDoor = doorNodePath.find('door_*_left') leftDoor.flattenStrong() leftDoor.setName('leftDoor') rightDoor = doorNodePath.find('door_*_right') rightDoor.flattenStrong() rightDoor.setName('rightDoor') doorFlat = doorNodePath.find('door_*_flat') doorFlat.flattenStrong() leftHole.wrtReparentTo(doorFlat, 0) rightHole.wrtReparentTo(doorFlat, 0) doorFlat.setEffect(DecalEffect.make()) rightDoor.wrtReparentTo(parentNode, 0) leftDoor.wrtReparentTo(parentNode, 0) rightDoor.setColor(color, 0) leftDoor.setColor(color, 0) leftHole.setColor((0, 0, 0, 1), 0) rightHole.setColor((0, 0, 0, 1), 0) doorTrigger = doorNodePath.find('door_*_trigger') doorTrigger.setScale(2, 2, 2) doorTrigger.wrtReparentTo(parentNode, 0) doorTrigger.setName('door_trigger_' + block) if not dnaStore.getDoorPosHprFromBlockNumber(block): dnaStore.storeBlockDoor(block, doorOrigin) doorNodePath.flattenMedium()
def setupFlat(self, np, store, chr, wallCode): if self.name[:2] != 'tb': return ss = chr + 'b' + self.name[2:] node = np.attachNewNode(ss) scale = LPoint3f(self.scale) scale.setX(self.width) scale.setZ(DNAFlatBuilding.currentWallHeight) node.setZ(DNAFlatBuilding.currentWallHeight) node.setPosHprScale(self.pos, self.hpr, scale) numCodes = store.getNumCatalogCodes(wallCode) if not numCodes: return wallNode = store.findNode( store.getCatalogCode(wallCode, random.randint(0, numCodes - 1))) if wallNode.isEmpty(): return wallNode.copyTo(node) if self.hasDoor: wallNp = node.find('wall_*') doorNp = store.findNode('suit_door').copyTo(wallNp) doorNp.setColor(0.2, 0.2, 0.2, 1) doorNp.setPosHprScale(0.5, 0, 0, 0, 0, 0, 1.0 / self.width, 0, 1.0 / DNAFlatBuilding.currentWallHeight) wallNp.setEffect(DecalEffect.make()) node.flattenMedium() node.stash()
def setupCogdoFlatBuilding(self, nodePath, dnaStorage): name = self.getName() if name[:2] != 'tb': return name = 'cb' + name[2:] node = nodePath.attachNewNode(name) node.setPosHpr(self.getPos(), self.getHpr()) numCodes = dnaStorage.getNumCatalogCodes('cogdo_wall') if numCodes < 1: return code = dnaStorage.getCatalogCode('cogdo_wall', random.randint(0, numCodes - 1)) wallNode = dnaStorage.findNode(code) if not wallNode: return wallNode = wallNode.copyTo(node, 0) wallScale = wallNode.getScale() wallScale.setX(self.width) wallScale.setZ(DNAFlatBuilding.currentWallHeight) wallNode.setScale(wallScale) if self.getHasDoor(): wallNodePath = node.find('wall_*') doorNode = dnaStorage.findNode('suit_door') doorNode = doorNode.copyTo(wallNodePath, 0) doorNode.setScale(NodePath(), (1, 1, 1)) doorNode.setPosHpr(0.5, 0, 0, 0, 0, 0) wallNodePath.setEffect(DecalEffect.make()) node.flattenMedium() node.stash()
def loadPlaceGeom(self, zoneId): self.notify.info('loadPlaceGeom: %s' % zoneId) zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.CashbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) ddLinkTunnel = self.geom.find('**/LinkTunnel1') ddLinkTunnel.setName('linktunnel_dl_9252_DNARoot') locator = self.geom.find('**/sign_origin') backgroundGeom = self.geom.find('**/EntranceFrameFront') backgroundGeom.node().setEffect(DecalEffect.make()) signText = DirectGui.OnscreenText( text=TTLocalizer.DonaldsDreamland[-1], font=ToontownGlobals.getSuitFont(), scale=3, fg=(0.87, 0.87, 0.87, 1), mayChange=False, parent=backgroundGeom) signText.setPosHpr(locator, 0, 0, 0, 0, 0, 0) signText.setDepthWrite(0) self.geom.flattenMedium() elif zoneId == ToontownGlobals.CashbotLobby: if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: COGHQ: Visit CashbotLobby') self.geom = loader.loadModel(self.cogHQLobbyModelPath) self.geom.flattenMedium() else: self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
def traverse(self, nodePath, dnaStorage): pParentXScale = nodePath.getParent().getScale().getX() parentZScale = nodePath.getScale().getZ() node = dnaStorage.findNode(self.code) if node is None: raise DNAError.DNAError( 'DNACornice code %d not found in DNAStorage' % self.code) nodePathA = nodePath.attachNewNode('cornice-internal', 0) node = node.find('**/*_d') np = node.copyTo(nodePathA, 0) np.setPosHprScale( LVector3f(0, 0, 0), LVector3f(0, 0, 0), LVector3f(1, pParentXScale / parentZScale, pParentXScale / parentZScale)) np.setEffect(DecalEffect.make()) np.flattenStrong() node = node.getParent().find('**/*_nd') np = node.copyTo(nodePathA, 1) np.setPosHprScale( LVector3f(0, 0, 0), LVector3f(0, 0, 0), LVector3f(1, pParentXScale / parentZScale, pParentXScale / parentZScale)) np.flattenStrong() nodePathA.setPosHprScale(LVector3f(0, 0, node.getScale().getZ()), LVector3f(0, 0, 0), LVector3f(1, 1, 1)) nodePathA.setColor(self.color) nodePathA.flattenStrong() return
def setupSuitBuilding(self, nodePath): if nodePath.isEmpty(): return dnaStore = self.cr.playGame.dnaStore level = int(self.difficulty / 2) + 1 suitNP = dnaStore.findNode( 'suit_landmark_' + self.getDeptClassFromAbbr(self.suitDept).getClothingPrefix() + str(level)) zoneId = dnaStore.getZoneFromBlockNumber(self.block) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.interiorZoneId) newParentNP = base.cr.playGame.hood.loader.zoneDict[zoneId] suitBuildingNP = suitNP.copyTo(newParentNP) base.createPhysicsNodes(suitBuildingNP) buildingTitle = dnaStore.getTitleFromBlockNumber(self.block) if not buildingTitle: buildingTitle = "Cogs, Inc." else: buildingTitle += ", Inc." buildingTitle += "\n%s" % self.getDeptClassFromAbbr( self.suitDept).getName() textNode = TextNode('sign') textNode.setTextColor(1.0, 1.0, 1.0, 1.0) textNode.setFont(CIGlobals.getSuitFont()) textNode.setAlign(TextNode.ACenter) textNode.setWordwrap(17.0) textNode.setText(buildingTitle) textHeight = textNode.getHeight() zScale = (textHeight + 2) / 3.0 signOrigin = suitBuildingNP.find('**/sign_origin;+s') backgroundNP = loader.loadModel(self.SIGN_MDL) backgroundNP.reparentTo(signOrigin) backgroundNP.setPosHprScale(0.0, 0.0, textHeight * 0.8 / zScale, 0.0, 0.0, 0.0, 8.0, 8.0, 8.0 * zScale) #backgroundNP.node().setEffect(DecalEffect.make()) signTextNodePath = backgroundNP.attachNewNode(textNode.generate()) signTextNodePath.setPosHprScale(0.0, -0.02, -0.21 + textHeight * 0.1 / zScale, 0.0, 0.0, 0.0, 0.1, 0.1, 0.1 / zScale) signTextNodePath.setColor(1.0, 1.0, 1.0, 1.0) frontNP = suitBuildingNP.find('**/*_front/+GeomNode;+s') backgroundNP.wrtReparentTo(frontNP) frontNP.node().setEffect(DecalEffect.make()) suitBuildingNP.setName('sb' + str(self.block) + ':_landmark__DNARoot') suitBuildingNP.setPosHprScale(nodePath, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0) suitBuildingNP.flattenStrong() self.loadElevator(suitBuildingNP) #CIGlobals.replaceDecalEffectsWithDepthOffsetAttrib(suitBuildingNP) #CIGlobals.flattenModelNodes(suitBuildingNP) base.enablePhysicsNodes(suitBuildingNP) #suitBuildingNP.ls() return suitBuildingNP
def setupCogdoFlatBuilding(self, nodePath, dnaStorage): name = self.getName() if name[:2] != 'tb': return name = 'cb' + name[2:] node = nodePath.attachNewNode(name) node.setPosHpr(self.getPos(), self.getHpr()) numCodes = dnaStorage.getNumCatalogCodes('cogdo_wall') if numCodes < 1: return code = dnaStorage.getCatalogCode( 'cogdo_wall', random.randint(0, numCodes - 1)) wallNode = dnaStorage.findNode(code) if not wallNode: return wallNode = wallNode.copyTo(node, 0) wallScale = wallNode.getScale() wallScale.setX(self.width) wallScale.setZ(DNAFlatBuilding.currentWallHeight) wallNode.setScale(wallScale) if self.getHasDoor(): wallNodePath = node.find('wall_*') doorNode = dnaStorage.findNode('suit_door') doorNode = doorNode.copyTo(wallNodePath, 0) doorNode.setScale(NodePath(), (1, 1, 1)) doorNode.setPosHpr(0.5, 0, 0, 0, 0, 0) wallNodePath.setEffect(DecalEffect.make()) node.flattenMedium() node.stash()
def load(self): SafeZoneLoader.SafeZoneLoader.load(self) self.birdSound = map(base.loader.loadSfx, [ 'phase_4/audio/sfx/SZ_TC_bird1.ogg', 'phase_4/audio/sfx/SZ_TC_bird2.ogg', 'phase_4/audio/sfx/SZ_TC_bird3.ogg' ]) library = self.geom.find('**/*toon_landmark_TT_library_DNARoot') if not library.isEmpty(): libraryDoor = library.find('**/door_double_round_ur') if not libraryDoor.isEmpty(): libraryDoorGeom = libraryDoor.find('**/+GeomNode') libraryDoorGeom.setEffect(DecalEffect.make()) libraryDoor.setY(0.0930333) bank = self.geom.find('**/*toon_landmark_TT_bank_DNARoot') if not bank.isEmpty(): bankDoorOrigin = bank.find('**/*door_origin') doorTrigger = bank.find('**/door_trigger*') bankDoor = bank.find('**/door_double_round_ur') doorTrigger.setY(doorTrigger.getY() - 1.5) offsetFix = 0.51 doorTrigger.setZ(doorTrigger.getZ() + offsetFix) bankDoorOrigin.setZ(bankDoorOrigin.getZ() + offsetFix) bankDoor.setZ(bankDoor.getZ() + offsetFix)
def traverse(self, nodePath, dnaStorage): pParentXScale = nodePath.getParent().getScale().getX() parentZScale = nodePath.getScale().getZ() node = dnaStorage.findNode(self.code) if node is None: raise DNAError.DNAError('DNACornice code %d not found in DNAStorage' % self.code) nodePathA = nodePath.attachNewNode('cornice-internal', 0) node = node.find('**/*_d') np = node.copyTo(nodePathA, 0) np.setPosHprScale( LVector3f(0, 0, 0), LVector3f(0, 0, 0), LVector3f(1, pParentXScale/parentZScale, pParentXScale/parentZScale)) np.setEffect(DecalEffect.make()) np.flattenStrong() node = node.getParent().find('**/*_nd') np = node.copyTo(nodePathA, 1) np.setPosHprScale( LVector3f(0, 0, 0), LVector3f(0, 0, 0), LVector3f(1, pParentXScale/parentZScale, pParentXScale/parentZScale)) np.flattenStrong() nodePathA.setPosHprScale( LVector3f(0, 0, node.getScale().getZ()), LVector3f(0, 0, 0), LVector3f(1, 1, 1)) nodePathA.setColor(self.color) nodePathA.flattenStrong()
def traverse(self, nodePath, dnaStorage): node = dnaStorage.findNode(self.getCode()) node = node.copyTo(nodePath, 0) node.setScale(NodePath(), (1, 1, 1)) node.setPosHpr((0.5, 0, 0), (0, 0, 0)) node.setColor(self.getColor()) node.getNode(0).setEffect(DecalEffect.make()) node.flattenStrong()
def traverse(self, np, store): DNAFlatBuilding.currentWallHeight = 0 node = np.attachNewNode(self.name) internalNode = node.attachNewNode(self.getName() + '-internal') scale = LPoint3f(self.scale) scale.setX(self.width) internalNode.setScale(scale) node.setPosHpr(self.pos, self.hpr) for child in self.children: if isinstance(child, DNAWall.DNAWall): child.traverse(internalNode, store) else: child.traverse(node, store) if DNAFlatBuilding.currentWallHeight != 0: result = store.findNode("wall_camera_barrier") if result.isEmpty(): raise DNAError.DNAError( 'DNAFlatBuilding requires that there is a wall_camera_barrier in storage' ) cameraBarrier = result.copyTo(internalNode) cameraBarrier.setScale(1, 1, DNAFlatBuilding.currentWallHeight) self.setupSuitFlatBuilding(np, store) self.setupCogdoFlatBuilding(np, store) internalNode.flattenStrong() collNp = node.find("**/door_*/+CollisionNode") if not collNp.isEmpty(): collNp.setName("KnockKnockDoorSphere_" + store.getBlock(self.name)) cameraBarrier.wrtReparentTo(np) wallCollection = internalNode.findAllMatches("wall*") doorCollection = internalNode.findAllMatches("**/door*") corniceCollection = internalNode.findAllMatches("**/cornice*_d") windowCollection = internalNode.findAllMatches("**/window*") wallHolder = node.attachNewNode("wall_holder") wallDecal = node.attachNewNode("wall_decal") wallCollection.reparentTo(wallHolder) doorCollection.reparentTo(wallDecal) corniceCollection.reparentTo(wallDecal) windowCollection.reparentTo(wallDecal) for i in range(wallHolder.getNumChildren()): child = wallHolder.getChild(i) child.clearTag("DNARoot") child.clearTag("DNACode") wallHolder.flattenStrong() wallDecal.flattenStrong() holderChild0 = wallHolder.getChild(0) wallDecal.getChildren().reparentTo(holderChild0) holderChild0.reparentTo(internalNode) holderChild0.setEffect(DecalEffect.make()) wallHolder.removeNode() wallDecal.removeNode()
def makeWindow(x, y, z, parentNode, color, scale, hpr, flip=False): node = node_r if not flip else node_l window = node.copyTo(parentNode) window.setColor(color) window.setScale(NodePath(), scale) window.setHpr(hpr) window.setPos(x, 0, z) window.setEffect(DecalEffect.make()) window.setAttrib(DepthWriteAttrib.makeDefault(), 0)
def makeWindow(x, y, z, parentNode, color, scale, hpr, flip=False): node = node_r if not flip else node_l window = node.copyTo(parentNode, 0) window.setColor(color) window.setScale(NodePath(), scale) window.setHpr(hpr) window.setPos(x, 0, z) window.setEffect(DecalEffect.make()) window.flattenStrong()
def create(parent: NodePath, radius: float, count: int) -> NodePath: """Create and add the ground plane to the scene.""" geom = _generate_mesh(radius, count) node = GeomNode('world') node.add_geom(geom) node_path = parent.attach_new_node(node) node_path.set_texture(textures.get('ground')) node_path.set_effect(DecalEffect.make()) return node_path
def traverse(self, nodePath, dnaStorage): node = dnaStorage.findNode(self.code) node = node.copyTo(nodePath) node.setScale(NodePath(), (1, 1, 1)) node.setPosHpr((0.5, 0, 0), (0, 0, 0)) node.setColor(self.color) if base.config.GetBool('want-dna-depth-offsets', False): node.setDepthOffset(0) else: node.getNode(0).setEffect(DecalEffect.make())
def traverse(self, nodePath, dnaStorage): DNAFlatBuilding.currentWallHeight = 0 node = nodePath.attachNewNode(self.getName()) internalNode = node.attachNewNode(self.getName() + '-internal') scale = self.getScale() scale.setX(self.width) internalNode.setScale(scale) node.setPosHpr(self.getPos(), self.getHpr()) for child in self.children_: if isinstance(child, DNAWall.DNAWall): child.traverse(internalNode, dnaStorage) else: child.traverse(node, dnaStorage) if DNAFlatBuilding.currentWallHeight == 0: print('empty flat building with no walls') else: cameraBarrier = dnaStorage.findNode('wall_camera_barrier') if cameraBarrier is None: raise DNAError.DNAError( 'DNAFlatBuilding requires that there is a wall_camera_barrier in storage' ) cameraBarrier = cameraBarrier.copyTo(internalNode, 0) cameraBarrier.setScale((1, 1, DNAFlatBuilding.currentWallHeight)) internalNode.flattenStrong() collisionNode = node.find('**/door_*/+CollisionNode') if not collisionNode.isEmpty(): collisionNode.setName('KnockKnockDoorSphere_' + dnaStorage.getBlock(self.getName())) cameraBarrier.wrtReparentTo(nodePath, 0) wallCollection = internalNode.findAllMatches('wall*') wallHolder = node.attachNewNode('wall_holder') wallDecal = node.attachNewNode('wall_decal') windowCollection = internalNode.findAllMatches('**/window*') doorCollection = internalNode.findAllMatches('**/door*') corniceCollection = internalNode.findAllMatches('**/cornice*_d') wallCollection.reparentTo(wallHolder) windowCollection.reparentTo(wallDecal) doorCollection.reparentTo(wallDecal) corniceCollection.reparentTo(wallDecal) for i in range(wallHolder.getNumChildren()): iNode = wallHolder.getChild(i) iNode.clearTag('DNACode') iNode.clearTag('DNARoot') wallHolder.flattenStrong() wallDecal.flattenStrong() holderChild0 = wallHolder.getChild(0) wallDecal.getChildren().reparentTo(holderChild0) holderChild0.reparentTo(internalNode) holderChild0.setEffect(DecalEffect.make()) wallHolder.removeNode() wallDecal.removeNode() self.setupSuitFlatBuilding(nodePath, dnaStorage) self.setupCogdoFlatBuilding(nodePath, dnaStorage) node.flattenStrong()
def traverse(self, nodePath, dnaStorage): frontNode = nodePath.find('**/*_front') if not frontNode.getNode(0).isGeomNode(): frontNode = frontNode.find('**/+GeomNode') frontNode.setEffect(DecalEffect.make()) node = dnaStorage.findNode(self.code) if node is None: raise DNAError.DNAError('DNADoor code ' + self.code + ' not found in DNAStorage') doorNode = node.copyTo(frontNode, 0) doorNode.flattenMedium() block = dnaStorage.getBlock(nodePath.getName()) DNADoor.setupDoor(doorNode, nodePath, nodePath.find('**/*door_origin'), dnaStorage, block, self.getColor())
def traverse(self, nodePath, dnaStorage): frontNode = nodePath.find('**/*_front') if not frontNode.getNode(0).isGeomNode(): frontNode = frontNode.find('**/+GeomNode') frontNode.setEffect(DecalEffect.make()) node = dnaStorage.findNode(self.code) if node is None: raise DNAError.DNAError('DNADoor code ' + self.code + ' not found in DNAStorage') doorNode = node.copyTo(frontNode) block = dnaStorage.getBlock(nodePath.getName()) DNADoor.setupDoor(doorNode, nodePath, nodePath.find('**/*door_origin'), dnaStorage, block, self.color) node.removeNode()
def fixEffects(self): nodes = self.getNodePaths() for curNode in nodes: mf = curNode.find('**/*mesh_front*') sign_joint = curNode.find('**/sign_origin_joint') if not sign_joint.isEmpty(): self.notify.debug('I found sign_origin_joint 1') if not mf.isEmpty(): sign = mf.find('**/sign') mf.clearEffect(DecalEffect.getClassType()) if not sign.isEmpty(): sign.setDepthWrite(1, 1) sign.setEffect(DecalEffect.make()) sign_joint = curNode.find('**/sign_origin_joint') allSignJoints = curNode.findAllMatches( '**/sign_origin_joint') num = allSignJoints.getNumPaths() if num: sign_joint = allSignJoints.getPath(num - 1) if not sign_joint.isEmpty(): self.notify.debug('I found sign_origin_joint 2') sign.wrtReparentTo(sign_joint)
def traverse(self, nodePath, dnaStorage): DNAFlatBuilding.currentWallHeight = 0 node = nodePath.attachNewNode(self.getName()) internalNode = node.attachNewNode(self.getName() + '-internal') scale = self.getScale() scale.setX(self.width) internalNode.setScale(scale) node.setPosHpr(self.getPos(), self.getHpr()) for child in self.children_: if isinstance(child, DNAWall.DNAWall): child.traverse(internalNode, dnaStorage) else: child.traverse(node, dnaStorage) if DNAFlatBuilding.currentWallHeight == 0: print 'empty flat building with no walls' else: cameraBarrier = dnaStorage.findNode('wall_camera_barrier') if cameraBarrier is None: raise DNAError.DNAError('DNAFlatBuilding requires that there is a wall_camera_barrier in storage') cameraBarrier = cameraBarrier.copyTo(internalNode, 0) cameraBarrier.setScale((1, 1, DNAFlatBuilding.currentWallHeight)) internalNode.flattenStrong() collisionNode = node.find('**/door_*/+CollisionNode') if not collisionNode.isEmpty(): collisionNode.setName('KnockKnockDoorSphere_' + dnaStorage.getBlock(self.getName())) cameraBarrier.wrtReparentTo(nodePath, 0) wallCollection = internalNode.findAllMatches('wall*') wallHolder = node.attachNewNode('wall_holder') wallDecal = node.attachNewNode('wall_decal') windowCollection = internalNode.findAllMatches('**/window*') doorCollection = internalNode.findAllMatches('**/door*') corniceCollection = internalNode.findAllMatches('**/cornice*_d') wallCollection.reparentTo(wallHolder) windowCollection.reparentTo(wallDecal) doorCollection.reparentTo(wallDecal) corniceCollection.reparentTo(wallDecal) for i in xrange(wallHolder.getNumChildren()): iNode = wallHolder.getChild(i) iNode.clearTag('DNACode') iNode.clearTag('DNARoot') wallHolder.flattenStrong() wallDecal.flattenStrong() holderChild0 = wallHolder.getChild(0) wallDecal.getChildren().reparentTo(holderChild0) holderChild0.reparentTo(internalNode) holderChild0.setEffect(DecalEffect.make()) wallHolder.removeNode() wallDecal.removeNode() self.setupSuitFlatBuilding(nodePath, dnaStorage) self.setupCogdoFlatBuilding(nodePath, dnaStorage) node.flattenStrong()
def loadIcon(self, iconsFile, name): retVal = iconsFile.find(name) retVal.setBillboardAxis() retVal.reparentTo(self) dark = retVal.copyTo(NodePath()) dark.reparentTo(retVal) dark.setColor(0.5, 0.5, 0.5, 1) retVal.setEffect(DecalEffect.make()) retVal.setTransparency(TransparencyAttrib.MAlpha, 1) ll, ur = dark.getTightBounds() center = retVal.attachNewNode('center') center.setPos(0, 0, ll[2]) dark.wrtReparentTo(center) dark.setTexProjector(TextureStage.getDefault(), center, retVal) retVal.hide() return (retVal, center)
def setupDoor(doorNodePath, parentNode, doorOrigin, dnaStore, block, color): doorNodePath.setPosHprScale(doorOrigin, (0, 0, 0), (0, 0, 0), (1, 1, 1)) doorNodePath.setColor(color, 0) doorFlat = doorNodePath.find('door_*_flat') doorFlat.flattenStrong() #doorFlat.setDepthOffset(1) # Can cause building shadows to not properly show up on the doors... doorFlat.setEffect(DecalEffect.make()) leftHole = doorNodePath.find('door_*_hole_left') leftHole.flattenStrong() leftHole.setName('doorFrameHoleLeft') leftHole.wrtReparentTo(doorFlat, 0) leftHole.hide() leftHole.setColor((0, 0, 0, 1), 0) rightHole = doorNodePath.find('door_*_hole_right') rightHole.flattenStrong() rightHole.setName('doorFrameHoleRight') rightHole.wrtReparentTo(doorFlat, 0) rightHole.hide() rightHole.setColor((0, 0, 0, 1), 0) leftDoor = doorNodePath.find('door_*_left') leftDoor.flattenStrong() leftDoor.setName('leftDoor') leftDoor.hide() leftDoor.wrtReparentTo(parentNode, 0) leftDoor.setColor(color, 0) rightDoor = doorNodePath.find('door_*_right') rightDoor.flattenStrong() rightDoor.setName('rightDoor') rightDoor.hide() rightDoor.wrtReparentTo(parentNode, 0) rightDoor.setColor(color, 0) doorTrigger = doorNodePath.find('door_*_trigger') doorTrigger.setScale(2, 2, 2) doorTrigger.wrtReparentTo(parentNode, 0) doorTrigger.setName('door_trigger_' + block) if not dnaStore.getDoorPosHprFromBlockNumber(block): dnaStore.storeBlockDoor(block, doorOrigin) doorNodePath.flattenMedium()
def traverse(self, np, store): parentXScale = np.getParent().getScale().getX() parentZScale = np.getScale().getZ() scaleRatio = parentXScale / parentZScale node = store.findNode(self.code) if node.isEmpty(): raise DNAError.DNAError('DNACornice code %d not found in DNAStorage' % self.code) internalNode = np.attachNewNode('cornice-internal') node = node.find('**/*_d') _np = node.copyTo(internalNode, 0) _np.setScale(1, scaleRatio, scaleRatio) _np.setEffect(DecalEffect.make()) node = node.getParent().find('**/*_nd') np_d = node.copyTo(internalNode, 1) np_d.setScale(1, scaleRatio, scaleRatio) internalNode.setZ(node.getScale().getZ()) internalNode.setColor(self.color) internalNode.flattenStrong()
def loadPlaceGeom(self, zoneId): self.notify.info('loadPlaceGeom: %s' % zoneId) zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.CashbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) ddLinkTunnel = self.geom.find('**/LinkTunnel1') ddLinkTunnel.setName('linktunnel_dl_9252_DNARoot') locator = self.geom.find('**/sign_origin') backgroundGeom = self.geom.find('**/EntranceFrameFront') backgroundGeom.node().setEffect(DecalEffect.make()) signText = DirectGui.OnscreenText(text=TTLocalizer.DonaldsDreamland[-1], font=ToontownGlobals.getSuitFont(), scale=3, fg=(0.87, 0.87, 0.87, 1), mayChange=False, parent=backgroundGeom) signText.setPosHpr(locator, 0, 0, 0, 0, 0, 0) signText.setDepthWrite(0) self.geom.flattenMedium() elif zoneId == ToontownGlobals.CashbotLobby: if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: COGHQ: Visit CashbotLobby') self.geom = loader.loadModel(self.cogHQLobbyModelPath) self.geom.flattenMedium() else: self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
def __init__(self, scale=1, value=0, r=0, g=10, b=0): NodePath.__init__(self, 'healthbar') self.value = value self.scale = scale self.range = 1.0 self.buff = 0 self.x = 0 self.y = 0 self.z = 5 cmbg = CardMaker('bg') cmbg.setFrame(- scale, scale, -0.1 * scale, 0.1 * scale) self.bg = self.attachNewNode(cmbg.generate()) self.bg.setColor(0.8, 0.2, 0.4, 1) self.bg.setPos(self.x, self.y, self.z) cmfg = CardMaker('fg') cmfg.setFrame(- scale, scale, -0.1 * scale, 0.1 * scale) self.fg = self.bg.attachNewNode(cmfg.generate()) self.fg.setColor(r, g, b, 1) self.fg.setPos(0,0,0) self.fg.setBillboardPointWorld() self.bg.setBillboardPointWorld() self.fg.clearShader() self.bg.clearShader() self.fg.setScale(self.scale, 0, self.scale) self.bg.setScale(self.scale, 0, self.scale) self.bg.setEffect(DecalEffect.make()) self.setValue(0)
def loadPlaceGeom(self, zoneId): self.notify.info('loadPlaceGeom: %s' % zoneId) zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.SellbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) dgLinkTunnel = self.geom.find('**/Tunnel1') dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot') factoryLinkTunnel = self.geom.find('**/Tunnel2') factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot') cogSignModel = loader.loadModel( 'phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 dgSign = cogSign.copyTo(dgLinkTunnel) dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) dgSign.node().setEffect(DecalEffect.make()) dgText = DirectGui.OnscreenText( text=TTLocalizer.DaisyGardens[(-1)], font=ToontownGlobals.getSuitFont(), pos=(0, -0.3), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=dgSign) dgText.setDepthWrite(0) factorySign = cogSign.copyTo(factoryLinkTunnel) factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) factorySign.node().setEffect(DecalEffect.make()) factoryTypeText = DirectGui.OnscreenText( text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=TTLocalizer.SellbotFactoryPosPart1, scale=TTLocalizer.SellbotFactoryScalePart1, mayChange=False, parent=factorySign) factoryTypeText.setDepthWrite(0) factoryText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=TTLocalizer.SellbotFactoryPosPart2, scale=TTLocalizer.SellbotFactoryScalePart2, mayChange=False, parent=factorySign) factoryText.setDepthWrite(0) doors = self.geom.find('**/doors') door0 = doors.find('**/door_0') door1 = doors.find('**/door_1') door2 = doors.find('**/door_2') door3 = doors.find('**/door_3') index = 0 for door in [door0, door1, door2, door3]: doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) index += 1 if self.factGeom: self.factGeom.removeNode() self.factGeom = loader.loadModel(self.factoryExteriorModelPath) self.factGeom.setPos(504.997, -200, -24) self.factGeom.setHpr(-90, 0, 0) self.factGeom.setScale(0.859913) self.factGeom.find('**/tunnel_group2').removeNode() for x in xrange(5): x += 1 spotlight = self.geom.find('**/Spot' + str(x)) startTime = 6.9 midTime = 6.9 endTime = 6.9 if x == 1: startTime == 7.9 midTime = 5.9 else: if x == 5: startTime == 5.9 midTime == 7.9 spotlightSeq = Sequence( spotlight.hprInterval(startTime, (0, 0, -6.9), blendType='easeInOut'), spotlight.hprInterval(midTime, (0, 0, 6.9), blendType='easeInOut'), spotlight.hprInterval(endTime, (0, 0, 0), blendType='easeInOut')) spotlightSeq.loop() self.spotlightSeqs.append(spotlightSeq) else: if zoneId == ToontownGlobals.SellbotFactoryExt: self.geom = loader.loadModel(self.factoryExteriorModelPath) factoryLinkTunnel = self.geom.find('**/tunnel_group2') factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot') factoryLinkTunnel.find('**/tunnel_sphere').setName( 'tunnel_trigger') cogSignModel = loader.loadModel( 'phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 elevatorSignSF = 15 hqSign = cogSign.copyTo(factoryLinkTunnel) hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) hqSign.node().setEffect(DecalEffect.make()) hqTypeText = DirectGui.OnscreenText( text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=hqSign) hqTypeText.setDepthWrite(0) hqText = DirectGui.OnscreenText( text=TTLocalizer.Headquarters, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=hqSign) hqText.setDepthWrite(0) frontDoor = self.geom.find('**/doorway1') fdSign = cogSign.copyTo(frontDoor) fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) fdSign.node().setEffect(DecalEffect.make()) fdTypeText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=TTLocalizer.SCHQLfdTypeText, mayChange=False, parent=fdSign) fdTypeText.setDepthWrite(0) fdText = DirectGui.OnscreenText( text=TTLocalizer.SellbotFrontEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=fdSign) fdText.setDepthWrite(0) sideDoor = self.geom.find('**/doorway2') sdSign = cogSign.copyTo(sideDoor) sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) sdSign.node().setEffect(DecalEffect.make()) sdTypeText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=sdSign) sdTypeText.setDepthWrite(0) sdText = DirectGui.OnscreenText( text=TTLocalizer.SellbotSideEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=sdSign) sdText.setDepthWrite(0) self.factGeom = loader.loadModel(self.cogHQExteriorModelPath) self.factGeom.setPos(-175, -615, 0) self.factGeom.setHpr(90, 0, 0) self.factGeom.find('**/Terrain').removeNode() self.factGeom.find('**/Props').removeNode() self.factGeom.find('**/Tunnels').removeNode() else: if zoneId == ToontownGlobals.SellbotLobby: if config.GetBool('want-qa-regression', 0): self.notify.info( 'QA-REGRESSION: COGHQ: Visit SellbotLobby') self.geom = loader.loadModel(self.cogHQLobbyModelPath) front = self.geom.find('**/frontWall') front.node().setEffect(DecalEffect.make()) door = self.geom.find('**/door_0') parent = door.getParent() door.wrtReparentTo(front) doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) door.find('**/leftDoor').wrtReparentTo(parent) door.find('**/rightDoor').wrtReparentTo(parent) else: if zoneId == ToontownGlobals.SellbotWestWing: self.geom = loader.loadModel(self.westWingModelPath) self.geom.find('**/groundCollision').setZ(0.96) else: self.notify.warning( 'loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
def loadPlaceGeom(self, zoneId): self.notify.info('loadPlaceGeom: %s' % zoneId) zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.SellbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) dgLinkTunnel = self.geom.find('**/Tunnel1') dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot') factoryLinkTunnel = self.geom.find('**/Tunnel2') factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot') cogSignModel = loader.loadModel( 'phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 dgSign = cogSign.copyTo(dgLinkTunnel) dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) dgSign.node().setEffect(DecalEffect.make()) dgText = DirectGui.OnscreenText(text=TTLocalizer.DaisyGardens[-1], font=ToontownGlobals.getSuitFont(), pos=(0, -0.3), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=dgSign) dgText.setDepthWrite(0) factorySign = cogSign.copyTo(factoryLinkTunnel) factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) factorySign.node().setEffect(DecalEffect.make()) factoryTypeText = DirectGui.OnscreenText( text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=factorySign) factoryTypeText.setDepthWrite(0) factoryText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.12, mayChange=False, parent=factorySign) factoryText.setDepthWrite(0) doors = self.geom.find('**/doors') door0 = doors.find('**/door_0') door1 = doors.find('**/door_1') door2 = doors.find('**/door_2') door3 = doors.find('**/door_3') index = 0 for door in [door0, door1, door2, door3]: doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) index += 1 self.vpBodyModel = loader.loadModel( 'phase_9/models/char/sellbotBoss-torso-zero') self.vpBodyModel.reparentTo(self.geom) self.vpBodyModel.setPos(30.8499, -160.209, -17.5944) self.vpBodyModel.setHpr(30, 20, 325) self.vpHeadModel = loader.loadModel( 'phase_9/models/char/sellbotBoss-head-zero') self.vpHeadModel.reparentTo(self.vpBodyModel) self.vpHeadModel.setPos(0, 0, 8) self.vpHeadModel.setHpr(90, 0, 270) self.vpTreadsModel = loader.loadModel( 'phase_9/models/char/bossCog-treads') self.vpTreadsModel.reparentTo(self.geom) self.vpTreadsModel.setPos(-20, -165.209, -13.8944) self.vpTreadsModel.setHpr(70, 20, 130) self.vpLegsModel = loader.loadModel( 'phase_9/models/char/bossCog-legs-zero') self.vpLegsModel.reparentTo(self.vpTreadsModel) self.gearModel1 = loader.loadModel( 'phase_9/models/cogHQ/FactoryGearB') self.gearModel1.reparentTo(self.geom) self.gearModel1.setScale(10) self.gearModel1.setPos(45, -183, -13) self.gearModel1.setHpr(290, 35, 0) self.gearModel2 = loader.loadModel( 'phase_9/models/cogHQ/FactoryGearB') self.gearModel2.reparentTo(self.geom) self.gearModel2.setScale(5) self.gearModel2.setPos(45, -195, -15.5) self.gearModel2.setHpr(316, 35, 0) self.trainModel = loader.loadModel( 'phase_10/models/cogHQ/CashBotLocomotive') self.trainModel.reparentTo(self.geom) self.trainModel.setPos(-35, -205, -20) self.trainModel.setScale(0.4) self.trainModel.setHpr(80, 330, 0) self.trainLight = self.trainModel.find('**/LMBigLtBeam') self.trainLightPiece = self.trainModel.find('**/LMBigLight') self.applyNewTrainLightTask() self.trainCarModel = loader.loadModel( 'phase_10/models/cogHQ/CashBotBoxCar') self.trainCarModel.reparentTo(self.geom) self.trainCarModel.setPos(-10, -229, -13) self.trainCarModel.setScale(0.4) self.trainCarModel.setHpr(0, 20, 0) self.trainTankModel = loader.loadModel( 'phase_10/models/cogHQ/CashBotTankCar') self.trainTankModel.reparentTo(self.geom) self.trainTankModel.setPos(80.874, -130.546, 4) self.trainTankModel.setScale(0.4) self.trainTankModel.setHpr(70, 70, 20) self.cashMoneyModel = loader.loadModel( 'phase_10/models/cogHQ/DoubleMoneyStack') self.cashMoneyModel.reparentTo(self.geom) self.cashMoneyModel.setPos(21, -206, -19.594) self.cashMoneyModel.setHpr(67, 0, 0) self.cashMoneyLegalFeesModel = loader.loadModel( 'phase_11/models/lawbotHQ/LB_paper_big_stacks2') self.cashMoneyLegalFeesModel.reparentTo(self.geom) self.cashMoneyLegalFeesModel.setPos(-10, -207, -19.594) self.cashMoneyLegalFeesModel.setHpr(243, 0, 0) self.golfKartModel = loader.loadModel( 'phase_12/models/bossbotHQ/Coggolf_cart3') self.golfKartModel.reparentTo(self.geom) self.golfKartModel.setPos(7, -196, -19.594) self.golfKartModel.setHpr(149, 0, 0) self.banquetTableModel = loader.loadModel( 'phase_12/models/bossbotHQ/BanquetTableChairs') self.banquetTableModel.reparentTo(self.geom) self.banquetTableModel.setPos(0, -176, -19.594) self.banquetTableModel.setHpr(97, 0, 0) elif zoneId == ToontownGlobals.SellbotFactoryExt: self.geom = loader.loadModel(self.factoryExteriorModelPath) factoryLinkTunnel = self.geom.find('**/tunnel_group2') factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot') factoryLinkTunnel.find('**/tunnel_sphere').setName( 'tunnel_trigger') cogSignModel = loader.loadModel( 'phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 elevatorSignSF = 15 hqSign = cogSign.copyTo(factoryLinkTunnel) hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) hqSign.node().setEffect(DecalEffect.make()) hqTypeText = DirectGui.OnscreenText( text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=hqSign) hqTypeText.setDepthWrite(0) hqText = DirectGui.OnscreenText(text=TTLocalizer.Headquarters, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=hqSign) hqText.setDepthWrite(0) frontDoor = self.geom.find('**/doorway1') fdSign = cogSign.copyTo(frontDoor) fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) fdSign.node().setEffect(DecalEffect.make()) fdTypeText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=TTLocalizer.SCHQLfdTypeText, mayChange=False, parent=fdSign) fdTypeText.setDepthWrite(0) fdText = DirectGui.OnscreenText( text=TTLocalizer.SellbotFrontEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=fdSign) fdText.setDepthWrite(0) sideDoor = self.geom.find('**/doorway2') sdSign = cogSign.copyTo(sideDoor) sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) sdSign.node().setEffect(DecalEffect.make()) sdTypeText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=sdSign) sdTypeText.setDepthWrite(0) sdText = DirectGui.OnscreenText( text=TTLocalizer.SellbotSideEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=sdSign) sdText.setDepthWrite(0) elif zoneId == ToontownGlobals.SellbotLobby: if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: COGHQ: Visit SellbotLobby') self.geom = loader.loadModel(self.cogHQLobbyModelPath) front = self.geom.find('**/frontWall') front.node().setEffect(DecalEffect.make()) door = self.geom.find('**/door_0') parent = door.getParent() door.wrtReparentTo(front) doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) door.find('**/leftDoor').wrtReparentTo(parent) door.find('**/rightDoor').wrtReparentTo(parent) else: self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
def loadPlaceGeom(self, zoneId): self.notify.info('loadPlaceGeom: %s' % zoneId) zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.SellbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) dgLinkTunnel = self.geom.find('**/Tunnel1') dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot') factoryLinkTunnel = self.geom.find('**/Tunnel2') factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot') cogSignModel = loader.loadModel('phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ').copyTo(NodePath()) cogSign.flattenStrong() cogSignModel.removeNode() cogSignSF = 23 dgSign = cogSign.copyTo(dgLinkTunnel) dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) dgSign.node().setEffect(DecalEffect.make()) dgText = DirectGui.OnscreenText(text=TTLocalizer.DaisyGardens[-1], font=ToontownGlobals.getSuitFont(), pos=(0, -0.3), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=dgSign) dgText.setDepthWrite(0) dgText.flattenStrong() factorySign = cogSign.copyTo(factoryLinkTunnel) factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) factorySign.node().setEffect(DecalEffect.make()) factoryTypeText = DirectGui.OnscreenText(text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=TTLocalizer.SellbotFactoryPosPart1, scale=TTLocalizer.SellbotFactoryScalePart1, mayChange=False, parent=factorySign) factoryTypeText.setDepthWrite(0) factoryTypeText.flattenStrong() factoryText = DirectGui.OnscreenText(text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=TTLocalizer.SellbotFactoryPosPart2, scale=TTLocalizer.SellbotFactoryScalePart2, mayChange=False, parent=factorySign) factoryText.setDepthWrite(0) factoryText.flattenStrong() doors = self.geom.find('**/doors') door0 = doors.find('**/door_0') door1 = doors.find('**/door_1') door2 = doors.find('**/door_2') door3 = doors.find('**/door_3') for door in [door0, door1, door2, door3]: doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorTrigger = door.find('**/door_trigger*') doorTrigger.setY(doorTrigger.getY() - 1.5) doorFrame.node().setEffect(DecalEffect.make()) doorFrame.flattenStrong() door.flattenMedium() cogSign.removeNode() self.geom.flattenMedium() elif zoneId == ToontownGlobals.SellbotFactoryExt: self.geom = loader.loadModel(self.factoryExteriorModelPath) factoryLinkTunnel = self.geom.find('**/tunnel_group2') factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot') factoryLinkTunnel.find('**/tunnel_sphere').setName('tunnel_trigger') cogSignModel = loader.loadModel('phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ').copyTo(NodePath()) cogSign.flattenStrong() cogSignModel.removeNode() cogSignSF = 23 elevatorSignSF = 15 hqSign = cogSign.copyTo(factoryLinkTunnel) hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) hqSign.node().setEffect(DecalEffect.make()) hqTypeText = DirectGui.OnscreenText(text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=hqSign) hqTypeText.setDepthWrite(0) hqTypeText.flattenStrong() hqText = DirectGui.OnscreenText(text=TTLocalizer.Headquarters, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=hqSign) hqText.setDepthWrite(0) hqText.flattenStrong() frontDoor = self.geom.find('**/doorway1') fdSign = cogSign.copyTo(frontDoor) fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) fdSign.node().setEffect(DecalEffect.make()) fdTypeText = DirectGui.OnscreenText(text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=TTLocalizer.SCHQLfdTypeText, mayChange=False, parent=fdSign) fdTypeText.setDepthWrite(0) fdTypeText.flattenStrong() fdText = DirectGui.OnscreenText(text=TTLocalizer.SellbotFrontEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=fdSign) fdText.setDepthWrite(0) fdText.flattenStrong() sideDoor = self.geom.find('**/doorway2') sdSign = cogSign.copyTo(sideDoor) sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) sdSign.node().setEffect(DecalEffect.make()) sdTypeText = DirectGui.OnscreenText(text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=sdSign) sdTypeText.setDepthWrite(0) sdTypeText.flattenStrong() sdText = DirectGui.OnscreenText(text=TTLocalizer.SellbotSideEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=sdSign) sdText.setDepthWrite(0) sdText.flattenStrong() cogSign.removeNode() self.geom.flattenMedium() elif zoneId == ToontownGlobals.SellbotLobby: if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: COGHQ: Visit SellbotLobby') self.geom = loader.loadModel(self.cogHQLobbyModelPath) front = self.geom.find('**/frontWall') front.node().setEffect(DecalEffect.make()) door = self.geom.find('**/door_0') parent = door.getParent() door.wrtReparentTo(front) doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) door.find('**/leftDoor').wrtReparentTo(parent) door.find('**/rightDoor').wrtReparentTo(parent) self.geom.flattenStrong() else: self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
def apply(self, nodePath): if self.is_unset(): return effect = DecalEffect.make() nodePath.setEffect(effect)
def makeDictionaries(self, dnaStore): self.nodeDict = {} self.zoneDict = {} self.zoneVisDict = {} self.nodeList = [] self.fadeInDict = {} self.fadeOutDict = {} a1 = Vec4(1, 1, 1, 1) a0 = Vec4(1, 1, 1, 0) numVisGroups = dnaStore.getNumDNAVisGroupsAI() for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) groupName = base.cr.hoodMgr.extractGroupName(groupFullName) zoneId = int(groupName) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) groupNode = self.geom.find('**/' + groupFullName) if groupNode.isEmpty(): continue else: if ':' in groupName: groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):]) else: groupName = '%s' % zoneId groupNode.setName(groupName) CIGlobals.replaceDecalEffectsWithDepthOffsetAttrib(groupNode) #group all the flat walls block2flatwall = {} flatwalls = groupNode.findAllMatches("**/tb*:*_DNARoot;+s") for flatwall in flatwalls: if "toon_landmark" in flatwall.getName(): print "Skipping", flatwall.getName() continue if flatwall.hasTag("DNACode") and flatwall.hasMat(): continue block = int(flatwall.getName().split(":")[0][2:]) if not block2flatwall.has_key(block): block2flatwall[block] = groupNode.attachNewNode( ModelNode('toonBuildingsBlock' + str(block))) flatwall.wrtReparentTo(block2flatwall[block]) for node in block2flatwall.values(): for child in node.findAllMatches("**"): child.clearEffect(DecalEffect.getClassType()) child.clearTag("DNACode") child.clearTag("cam") CIGlobals.clearModelNodesBelow(node) node.flattenStrong() flattenGroup = groupNode.attachNewNode('optim') flattens = ['street*_DNARoot'] removes = ['interactive_prop*_DNARoot'] for remove in removes: for np in groupNode.findAllMatches("**/" + remove): np.removeNode() for flatten in flattens: for np in groupNode.findAllMatches("**/" + flatten): if np.hasTag("DNACode") and np.hasMat(): continue for child in np.findAllMatches("**"): child.clearEffect(DecalEffect.getClassType()) child.clearTag("DNACode") child.clearTag("cam") np.wrtReparentTo(flattenGroup) flattenGroup.clearModelNodes() flattenGroup.flattenStrong() CIGlobals.flattenModelNodes(groupNode) groupNode.flattenStrong() #groupNode.ls() self.nodeDict[zoneId] = [] self.nodeList.append(groupNode) self.zoneDict[zoneId] = groupNode visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.get_visible(i))) visibles.append(ZoneUtil.getBranchZone(zoneId)) self.zoneVisDict[zoneId] = visibles fadeDuration = 0.5 self.fadeOutDict[groupNode] = Sequence( Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), Func(base.disablePhysicsNodes, groupNode), name='fadeZone-' + str(zoneId), autoPause=1) self.fadeInDict[groupNode] = Sequence( Func(base.enablePhysicsNodes, groupNode), Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1) for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)): visName = dnaStore.getVisibleName(i, j) groupName = base.cr.hoodMgr.extractGroupName(visName) nextZoneId = int(groupName) nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId) visNode = self.zoneDict[nextZoneId] self.nodeDict[zoneId].append(visNode) self.hood.dnaStore.resetPlaceNodes() self.hood.dnaStore.resetDNAGroups() self.hood.dnaStore.resetDNAVisGroups() self.hood.dnaStore.resetDNAVisGroupsAI()
def replaceDecalEffectsWithDepthOffsetAttrib(node): for np in node.findAllMatches("**"): if np.hasEffect(DecalEffect.getClassType()): np.clearEffect(DecalEffect.getClassType()) np.setDepthOffset(1)
def loadPlaceGeom(self, zoneId): self.notify.info('loadPlaceGeom: %s' % zoneId) zoneId = zoneId - zoneId % 100 if zoneId == ToontownGlobals.SellbotHQ: self.geom = loader.loadModel(self.cogHQExteriorModelPath) dgLinkTunnel = self.geom.find('**/Tunnel1') dgLinkTunnel.setName('linktunnel_dg_5316_DNARoot') factoryLinkTunnel = self.geom.find('**/Tunnel2') factoryLinkTunnel.setName('linktunnel_sellhq_11200_DNARoot') cogSignModel = loader.loadModel( 'phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 dgSign = cogSign.copyTo(dgLinkTunnel) dgSign.setPosHprScale(0.0, -291.5, 29, 180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) dgSign.node().setEffect(DecalEffect.make()) dgText = DirectGui.OnscreenText(text=TTLocalizer.DaisyGardens[-1], font=ToontownGlobals.getSuitFont(), pos=(0, -0.3), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=dgSign) dgText.setDepthWrite(0) factorySign = cogSign.copyTo(factoryLinkTunnel) factorySign.setPosHprScale(148.625, -155, 27, -90.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) factorySign.node().setEffect(DecalEffect.make()) factoryTypeText = DirectGui.OnscreenText( text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=factorySign) factoryTypeText.setDepthWrite(0) factoryText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.12, mayChange=False, parent=factorySign) factoryText.setDepthWrite(0) doors = self.geom.find('**/doors') door0 = doors.find('**/door_0') door1 = doors.find('**/door_1') door2 = doors.find('**/door_2') door3 = doors.find('**/door_3') index = 0 for door in [door0, door1, door2, door3]: doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) index += 1 elif zoneId == ToontownGlobals.SellbotFactoryExt: self.geom = loader.loadModel(self.factoryExteriorModelPath) factoryLinkTunnel = self.geom.find('**/tunnel_group2') factoryLinkTunnel.setName('linktunnel_sellhq_11000_DNARoot') factoryLinkTunnel.find('**/tunnel_sphere').setName( 'tunnel_trigger') cogSignModel = loader.loadModel( 'phase_4/models/props/sign_sellBotHeadHQ') cogSign = cogSignModel.find('**/sign_sellBotHeadHQ') cogSignSF = 23 elevatorSignSF = 15 hqSign = cogSign.copyTo(factoryLinkTunnel) hqSign.setPosHprScale(0.0, -353, 27.5, -180.0, 0.0, 0.0, cogSignSF, cogSignSF, cogSignSF * aspectSF) hqSign.node().setEffect(DecalEffect.make()) hqTypeText = DirectGui.OnscreenText( text=TTLocalizer.Sellbot, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=hqSign) hqTypeText.setDepthWrite(0) hqText = DirectGui.OnscreenText(text=TTLocalizer.Headquarters, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=hqSign) hqText.setDepthWrite(0) frontDoor = self.geom.find('**/doorway1') fdSign = cogSign.copyTo(frontDoor) fdSign.setPosHprScale(62.74, -87.99, 17.26, 2.72, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) fdSign.node().setEffect(DecalEffect.make()) fdTypeText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=TTLocalizer.SCHQLfdTypeText, mayChange=False, parent=fdSign) fdTypeText.setDepthWrite(0) fdText = DirectGui.OnscreenText( text=TTLocalizer.SellbotFrontEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=TTLocalizer.SCHQLdgText, mayChange=False, parent=fdSign) fdText.setDepthWrite(0) sideDoor = self.geom.find('**/doorway2') sdSign = cogSign.copyTo(sideDoor) sdSign.setPosHprScale(-164.78, 26.28, 17.25, -89.89, 0.0, 0.0, elevatorSignSF, elevatorSignSF, elevatorSignSF * aspectSF) sdSign.node().setEffect(DecalEffect.make()) sdTypeText = DirectGui.OnscreenText( text=TTLocalizer.Factory, font=ToontownGlobals.getSuitFont(), pos=(0, -0.25), scale=0.075, mayChange=False, parent=sdSign) sdTypeText.setDepthWrite(0) sdText = DirectGui.OnscreenText( text=TTLocalizer.SellbotSideEntrance, font=ToontownGlobals.getSuitFont(), pos=(0, -0.34), scale=0.1, mayChange=False, parent=sdSign) sdText.setDepthWrite(0) elif zoneId == ToontownGlobals.SellbotLobby: if base.config.GetBool('want-qa-regression', 0): self.notify.info('QA-REGRESSION: COGHQ: Visit SellbotLobby') self.geom = loader.loadModel(self.cogHQLobbyModelPath) front = self.geom.find('**/frontWall') front.node().setEffect(DecalEffect.make()) door = self.geom.find('**/door_0') parent = door.getParent() door.wrtReparentTo(front) doorFrame = door.find('**/doorDoubleFlat/+GeomNode') door.find('**/doorFrameHoleLeft').wrtReparentTo(doorFrame) door.find('**/doorFrameHoleRight').wrtReparentTo(doorFrame) doorFrame.node().setEffect(DecalEffect.make()) door.find('**/leftDoor').wrtReparentTo(parent) door.find('**/rightDoor').wrtReparentTo(parent) else: self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId) CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
def traverse(self, nodePath, dnaStorage): root = NodePath('signroot') head_root = NodePath('root') wantDecalTest = base.config.GetBool('want-sign-decal-test', False) x = 0 for i in range(len(self.text)): tn = TextNode("text") tn.setText(self.text[i]) tn.setTextColor(self.color) font = dnaStorage.findFont(self.code) if font == None: raise DNAError.DNAError('Font code %s not found.' % self.code) tn.setFont(font) if i == 0 and 'b' in self.flags: tn.setTextScale(1.5) np = root.attachNewNode(tn) np.setScale(self.scale) np.setDepthWrite(0) if i % 2: np.setPos(x + self.stumble, 0, self.stomp) np.setR(-self.wiggle) else: np.setPos(x - self.stumble, 0, self.stomp) np.setR(self.wiggle) x += tn.getWidth() * np.getSx() + self.kern for i in range(root.getNumChildren()): c = root.getChild(i) c.setX(c.getX() - x / 2.) if self.width and self.height: for i in range(root.getNumChildren()): node = root.getChild(i) A = (node.getX() / (self.height / 2.)) B = (self.indent * math.pi / 180.) theta = A + B d = node.getY() x = math.sin(theta) * (self.height / 2.) y = (math.cos(theta) - 1) * (self.height / 2.) radius = math.hypot(x, y) if radius != 0: j = (radius + d) / radius x *= j y *= j node.setPos(x, 0, y) node.setR(node, (theta * 180.) / math.pi) collection = root.findAllMatches("**/+TextNode") for i in range(collection.getNumPaths()): xnp = collection.getPath(i) np2 = xnp.getParent().attachNewNode(xnp.node().generate()) np2.setTransform(xnp.getTransform()) xnp.removeNode() _np = nodePath.attachNewNode(root.node()) _np.setPosHpr(self.pos, self.hpr) if wantDecalTest: root.setEffect(DecalEffect.make()) else: _np.setDepthOffset(50) self.traverseChildren(_np, dnaStorage) _np.flattenStrong()