Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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()
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
 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()
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
 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()
Exemplo n.º 12
0
 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()
Exemplo n.º 13
0
 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()
Exemplo n.º 15
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)
     window.setColor(color)
     window.setScale(NodePath(), scale)
     window.setHpr(hpr)
     window.setPos(x, 0, z)
     window.setEffect(DecalEffect.make())
     window.setAttrib(DepthWriteAttrib.makeDefault(), 0)
Exemplo n.º 16
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()
Exemplo n.º 17
0
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
Exemplo n.º 18
0
 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()
Exemplo n.º 20
0
 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())
Exemplo n.º 21
0
 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)
Exemplo n.º 23
0
 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()
Exemplo n.º 24
0
 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)
Exemplo n.º 25
0
 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)
Exemplo n.º 26
0
    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()
Exemplo n.º 27
0
 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()
Exemplo n.º 28
0
 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)
Exemplo n.º 29
0
        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)
Exemplo n.º 30
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)
Exemplo n.º 32
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').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)
Exemplo n.º 33
0
    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()
Exemplo n.º 35
0
def replaceDecalEffectsWithDepthOffsetAttrib(node):
    for np in node.findAllMatches("**"):
        if np.hasEffect(DecalEffect.getClassType()):
            np.clearEffect(DecalEffect.getClassType())
            np.setDepthOffset(1)
Exemplo n.º 36
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=(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()