from direct.distributed.DistributedObject import DistributedObject import random from toontown.building import ToonInteriorColors from toontown.dna.DNAParser import DNADoor from toontown.hood import ZoneUtil from toontown.toon.DistributedNPCToonBase import DistributedNPCToonBase class DistributedLibraryInterior(DistributedObject): def announceGenerate(self): DistributedObject.announceGenerate(self) self.interior = loader.loadModel('phase_4/models/modules/ttc_library_interior.bam') self.interior.reparentTo(render) generator = random.Random() generator.seed(self.zoneId) self.replaceRandom(self.interior, generator=generator) doorOrigin = self.interior.find('**/door_origin;+s') doorOrigin.setScale(0.8) doorOrigin.setY(doorOrigin, -0.025) door = self.cr.playGame.dnaStore.findNode('door_double_round_ur') doorNodePath = door.copyTo(doorOrigin) hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) doorColor = ToonInteriorColors.colors[hoodId]['TI_door'][0] DNADoor.setupDoor( doorNodePath, self.interior, doorOrigin, self.cr.playGame.dnaStore, str(self.block), doorColor) doorFrame = doorNodePath.find('door_double_round_ur_flat') doorFrame.wrtReparentTo(self.interior) doorFrame.setColor(doorColor) for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState() def disable(self): self.interior.removeNode() del self.interior DistributedObject.disable(self) def setZoneIdAndBlock(self, zoneId, block): self.zoneId = zoneId self.block = block def replaceRandom(self, root, generator=random): for nodePath in root.findAllMatches('**/random_???_*'): name = nodePath.getName() category = name[11:] if name[7] in ('m', 't'): codeCount = self.cr.playGame.dnaStore.getNumCatalogCodes(category) index = generator.randint(0, codeCount - 1) code = self.cr.playGame.dnaStore.getCatalogCode(category, index) if name[7] == 'm': _nodePath = self.cr.playGame.dnaStore.findNode(code).copyTo(nodePath) if name[8] == 'r': self.replaceRandom(_nodePath, generator=generator) else: texture = self.cr.playGame.dnaStore.findTexture(code) nodePath.setTexture(texture, 100) _nodePath = nodePath if name[8] == 'c': hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId) colors = ToonInteriorColors.colors[hoodId] _nodePath.setColorScale(generator.choice(colors[category]))